diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | debian/changelog | 6 | ||||
-rw-r--r-- | doc/channeldialog.html | 43 | ||||
-rw-r--r-- | doc/index.html | 4 | ||||
-rw-r--r-- | doc/mainwindow.html | 2 | ||||
-rw-r--r-- | doc/version.html | 2 | ||||
-rw-r--r-- | img/chanw.png | bin | 0 -> 58092 bytes | |||
-rw-r--r-- | img/chparaw.png | bin | 0 -> 34388 bytes | |||
-rw-r--r-- | img/mainw.png | bin | 32886 -> 35328 bytes | |||
-rw-r--r-- | qmpmainwindow.cpp | 17 | ||||
-rw-r--r-- | qmpmidiplay.cpp | 41 | ||||
-rw-r--r-- | qmpmidiplay.hpp | 10 | ||||
-rw-r--r-- | qmpsettingswindow.cpp | 5 | ||||
-rw-r--r-- | qmpsettingswindow.ui | 209 | ||||
-rw-r--r-- | resources.qrc | 4 |
15 files changed, 247 insertions, 101 deletions
@@ -1,4 +1,9 @@ 2016-02-28 0.7.0 beta +RPN pitch bend range handling. +Added an option to disable waiting for remaining voices before stopping. +Documentation... + +2016-02-28 0.7.0 beta Significant sleep precision improvments for Windows. Also save master volume in configuration file. diff --git a/debian/changelog b/debian/changelog index 5b25b81..6437ab1 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +qmidiplayer (0.7.0-2) UNRELEASED; urgency=low + + * New upstream release. + + -- chrisoft <chirs241097@gmail.com> Sun, 28 Feb 2016 20:50:36 +0800 + qmidiplayer (0.7.0-1) UNRELEASED; urgency=low * New upstream release. diff --git a/doc/channeldialog.html b/doc/channeldialog.html new file mode 100644 index 0000000..8ddf246 --- /dev/null +++ b/doc/channeldialog.html @@ -0,0 +1,43 @@ +<!DOCTYPE html> +<html> +<head> +<title>QMidiPlayer Help</title> +</head> +<body> + <table> + <tr> + <td style="vertical-align:top;"> + <ul> + <li><a href="index.html">Overview</a></li> + <li><a href="mainwindow.html">Main Window</a></li> + <li>Channels Dialog</li> + <li>Channel Editor</li> + <li>Playlist</li> + <li>Effects</li> + <li>Settings</li> + <li><a href="version.html">Version Info.</a></li> + <li><a href="license.html">License</a></li> + </ul> + </td> + <td> + <h1>Channel Dialog</h1> + <img src="../img/chanw.png"><br> + <h2>Columns in the channel table</h2> + <ul> + <li>M(Mute): Tick this to mute the corresponding channel.</li> + <li>S(Solo): Tick this to solo the corresponding channel.</li> + <li>Device: The player sends midi messages from this channel to the selected device.</li> + <li>Preset: Displays the current preset of the corresponding channel.<br> + Preset can be changed by double clicking the cells from this column.</li> + <li>...: Brings up the channel parameter editor dialog.</li> + </ul> + <h2>Buttons</h2> + <ul> + <li>Save/Load: not yet implemented.</li> + <li>Unmute All: Remove tick mark from all mute checkboxes.</li> + <li>Unsolo All: Remove tick mark from all solo checkboxes.</li> + </ul> + <br><a href="index.html">Return</a> + </td> +</body> +</html> diff --git a/doc/index.html b/doc/index.html index a36d7cf..a9135bd 100644 --- a/doc/index.html +++ b/doc/index.html @@ -10,7 +10,7 @@ <ul> <li>Overview</li> <li><a href="mainwindow.html">Main Window</a></li> - <li>Channels Dialog</li> + <li><a href="channeldialog.html">Channels Dialog</a></li> <li>Channel Editor</li> <li>Playlist</li> <li>Effects</li> @@ -34,7 +34,7 @@ <h1>Using QMidiPlayer</h1> <ul> <li><a href="mainwindow.html">The main window</a></li> - <li>The channels dialog</li> + <li><a href="channeldialog.html">The channels dialog</a></li> <li>The channels parameters editor</li> <li>The playlist dialog</li> <li>The effects dialog</li> diff --git a/doc/mainwindow.html b/doc/mainwindow.html index c82fa67..c3e2ac8 100644 --- a/doc/mainwindow.html +++ b/doc/mainwindow.html @@ -10,7 +10,7 @@ <ul> <li><a href="index.html">Overview</a></li> <li>Main Window</li> - <li>Channels Dialog</li> + <li><a href="channeldialog.html">Channels Dialog</a></li> <li>Channel Editor</li> <li>Playlist</li> <li>Effects</li> diff --git a/doc/version.html b/doc/version.html index 5428ef7..a830a0e 100644 --- a/doc/version.html +++ b/doc/version.html @@ -10,7 +10,7 @@ <ul> <li><a href="index.html">Overview</a></li> <li><a href="mainwindow.html">Main Window</a></li> - <li>Channels Dialog</li> + <li><a href="channeldialog.html">Channels Dialog</a></li> <li>Channel Editor</li> <li>Playlist</li> <li>Effects</li> diff --git a/img/chanw.png b/img/chanw.png Binary files differnew file mode 100644 index 0000000..670244f --- /dev/null +++ b/img/chanw.png diff --git a/img/chparaw.png b/img/chparaw.png Binary files differnew file mode 100644 index 0000000..f36a8ca --- /dev/null +++ b/img/chparaw.png diff --git a/img/mainw.png b/img/mainw.png Binary files differindex c15f17d..f197d5d 100644 --- a/img/mainw.png +++ b/img/mainw.png diff --git a/qmpmainwindow.cpp b/qmpmainwindow.cpp index 73b9b73..35dd3ee 100644 --- a/qmpmainwindow.cpp +++ b/qmpmainwindow.cpp @@ -155,7 +155,7 @@ void qmpMainWindow::updateWidgets() fnA2->setEnabled(stopped); player->playerDeinit();playerTh->join(); delete playerTh;playerTh=NULL; - if(singleFS)player->playerPanic(); + if(singleFS)player->playerPanic(true); chnlw->on_pbUnmute_clicked();chnlw->on_pbUnsolo_clicked(); ui->pbPlayPause->setIcon(QIcon(":/img/play.png")); ui->hsTimer->setValue(0); @@ -167,7 +167,7 @@ void qmpMainWindow::updateWidgets() timer->stop();player->playerDeinit();playerTh->join(); delete playerTh;playerTh=NULL; ui->hsTimer->setValue(0); - if(singleFS)player->playerPanic(); + if(singleFS)player->playerPanic(true); chnlw->on_pbUnmute_clicked();chnlw->on_pbUnsolo_clicked(); QString fns=plistw->getNextItem(); ui->lbFileName->setText(QUrl(fns).fileName()); @@ -179,6 +179,7 @@ void qmpMainWindow::updateWidgets() for(int i=settingsw->getSFWidget()->count()-1;i>=0;--i) player->pushSoundFont(settingsw->getSFWidget()->item(i)->text().toStdString().c_str());} player->setGain(ui->vsMasterVol->value()/250.);efxw->sendEfxChange(); + player->setWaitVoice(qmpSettingsWindow::getSettingsIntf()->value("Midi/WaitVoice",1).toInt()); playerTh=new std::thread(&CMidiPlayer::playerThread,player); st=std::chrono::steady_clock::now();offset=0; timer->start(100); @@ -268,6 +269,7 @@ void qmpMainWindow::on_pbPlayPause_clicked() for(int i=settingsw->getSFWidget()->count()-1;i>=0;--i) player->pushSoundFont(settingsw->getSFWidget()->item(i)->text().toStdString().c_str());} player->setGain(ui->vsMasterVol->value()/250.);efxw->sendEfxChange(); + player->setWaitVoice(qmpSettingsWindow::getSettingsIntf()->value("Midi/WaitVoice",1).toInt()); playerTh=new std::thread(&CMidiPlayer::playerThread,player); st=std::chrono::steady_clock::now();offset=0; timer->start(100); @@ -328,7 +330,7 @@ void qmpMainWindow::on_pbStop_clicked() { timer->stop();stopped=true;playing=false; player->playerDeinit();fnA2->setEnabled(stopped); - if(singleFS)player->playerPanic(); + if(singleFS)player->playerPanic(true); if(playerTh){playerTh->join();delete playerTh;playerTh=NULL;} chnlw->on_pbUnmute_clicked();chnlw->on_pbUnsolo_clicked(); ui->pbPlayPause->setIcon(QIcon(":/img/play.png")); @@ -376,7 +378,7 @@ void qmpMainWindow::on_pbPrev_clicked() { timer->stop();player->playerDeinit(); if(playerTh){playerTh->join();delete playerTh;playerTh=NULL;} - if(singleFS)player->playerPanic(); + if(singleFS)player->playerPanic(true); ui->hsTimer->setValue(0);chnlw->on_pbUnmute_clicked();chnlw->on_pbUnsolo_clicked(); QString fns=plistw->getPrevItem();if(fns.length()==0)return on_pbStop_clicked(); ui->lbFileName->setText(QUrl(fns).fileName()); @@ -388,6 +390,7 @@ void qmpMainWindow::on_pbPrev_clicked() for(int i=settingsw->getSFWidget()->count()-1;i>=0;--i) player->pushSoundFont(settingsw->getSFWidget()->item(i)->text().toStdString().c_str());} player->setGain(ui->vsMasterVol->value()/250.);efxw->sendEfxChange(); + player->setWaitVoice(qmpSettingsWindow::getSettingsIntf()->value("Midi/WaitVoice",1).toInt()); playerTh=new std::thread(&CMidiPlayer::playerThread,player); st=std::chrono::steady_clock::now();offset=0; timer->start(100); @@ -397,7 +400,7 @@ void qmpMainWindow::on_pbNext_clicked() { timer->stop();player->playerDeinit(); if(playerTh){playerTh->join();delete playerTh;playerTh=NULL;} - if(singleFS)player->playerPanic(); + if(singleFS)player->playerPanic(true); ui->hsTimer->setValue(0);chnlw->on_pbUnmute_clicked();chnlw->on_pbUnsolo_clicked(); QString fns=plistw->getNextItem();if(fns.length()==0)return on_pbStop_clicked(); ui->lbFileName->setText(QUrl(fns).fileName()); @@ -409,6 +412,7 @@ void qmpMainWindow::on_pbNext_clicked() for(int i=settingsw->getSFWidget()->count()-1;i>=0;--i) player->pushSoundFont(settingsw->getSFWidget()->item(i)->text().toStdString().c_str());} player->setGain(ui->vsMasterVol->value()/250.);efxw->sendEfxChange(); + player->setWaitVoice(qmpSettingsWindow::getSettingsIntf()->value("Midi/WaitVoice",1).toInt()); playerTh=new std::thread(&CMidiPlayer::playerThread,player); st=std::chrono::steady_clock::now();offset=0; timer->start(100); @@ -420,7 +424,7 @@ void qmpMainWindow::selectionChanged() ui->pbPlayPause->setIcon(QIcon(":/img/pause.png")); timer->stop();player->playerDeinit(); if(playerTh){playerTh->join();delete playerTh;playerTh=NULL;} - if(singleFS)player->playerPanic(); + if(singleFS)player->playerPanic(true); ui->hsTimer->setValue(0); chnlw->on_pbUnmute_clicked();chnlw->on_pbUnsolo_clicked(); QString fns=plistw->getSelectedItem(); @@ -433,6 +437,7 @@ void qmpMainWindow::selectionChanged() for(int i=settingsw->getSFWidget()->count()-1;i>=0;--i) player->pushSoundFont(settingsw->getSFWidget()->item(i)->text().toStdString().c_str());} player->setGain(ui->vsMasterVol->value()/250.);efxw->sendEfxChange(); + player->setWaitVoice(qmpSettingsWindow::getSettingsIntf()->value("Midi/WaitVoice",1).toInt()); playerTh=new std::thread(&CMidiPlayer::playerThread,player); st=std::chrono::steady_clock::now();offset=0; timer->start(100); diff --git a/qmpmidiplay.cpp b/qmpmidiplay.cpp index b93b0d1..ebbf36e 100644 --- a/qmpmidiplay.cpp +++ b/qmpmidiplay.cpp @@ -53,6 +53,13 @@ void CMidiPlayer::processEvent(const SEvent *e) fluid_synth_noteon(synth,e->type&0x0F,e->p1,e->p2); break; case 0xB0://CC + if(e->p1==100)rpnid=e->p2; + if(e->p1==6)rpnval=e->p2; + if(~rpnid&&~rpnval) + { + if(rpnid==0)fluid_synth_pitch_wheel_sens(synth,e->type&0x0F,rpnval); + rpnid=rpnval=-1; + } fluid_synth_cc(synth,e->type&0x0F,e->p1,e->p2); break; case 0xC0://PC @@ -96,6 +103,13 @@ void CMidiPlayer::processEventStub(const SEvent *e) switch(e->type&0xF0) { case 0xB0://CC + if(e->p1==100)rpnid=e->p2; + if(e->p1==6)rpnval=e->p2; + if(~rpnid&&~rpnval) + { + if(rpnid==0)ccc[e->type&0x0F][134]=rpnval; + rpnid=rpnval=-1; + } ccc[e->type&0x0F][e->p1]=e->p2; break; case 0xC0://PC @@ -159,7 +173,7 @@ void CMidiPlayer::playEvents() if(tcstop||!midiFile)break; ct=midiFile->getEvent(tceptr)->time; } - while(!tcstop&&synth&&fluid_synth_get_active_voice_count(synth)>0)std::this_thread::sleep_for(std::chrono::microseconds(100)); + while(!tcstop&&synth&&(waitvoice&&fluid_synth_get_active_voice_count(synth)>0))std::this_thread::sleep_for(std::chrono::milliseconds(2)); finished=1; } void CMidiPlayer::fileTimer1Pass() @@ -178,16 +192,16 @@ void CMidiPlayer::fileTimer2Pass() { double ctime=.0;uint32_t c=1;ctempo=0x7A120;dpt=ctempo*1000/divs; memset(stamps,0,sizeof(stamps));memset(ccstamps,0,sizeof(ccstamps)); - memset(ccc,0,sizeof(ccc));for(int i=0;i<16;++i) + memset(ccc,0,sizeof(ccc));rpnid=rpnval=-1;for(int i=0;i<16;++i) { ccc[i][7]=100;ccc[i][10]=64;ccc[i][11]=127; ccc[i][11]=127;ccc[i][71]=64;ccc[i][72]=64; ccc[i][73]=64;ccc[i][74]=64;ccc[i][75]=64; ccc[i][76]=64;ccc[i][77]=64;ccc[i][78]=64; ccc[0][131]=dpt;ccc[0][132]=0x04021808; - ccc[0][133]=0; + ccc[0][133]=0;ccc[0][134]=2; }if(midiFile->getStandard()!=4)ccc[9][0]=128; - for(int i=0;i<16;++i)for(int j=0;j<134;++j) + for(int i=0;i<16;++i)for(int j=0;j<135;++j) ccstamps[0][i][j]=ccc[i][j]; for(uint32_t eptr=0,ct=midiFile->getEvent(0)->time;eptr<midiFile->getEventCount();) { @@ -197,7 +211,7 @@ void CMidiPlayer::fileTimer2Pass() ctime+=(midiFile->getEvent(eptr)->time-ct)*dpt/1e9; while(ctime>ftime*c/100.) { - for(int i=0;i<16;++i)for(int j=0;j<134;++j) + for(int i=0;i<16;++i)for(int j=0;j<135;++j) ccstamps[c][i][j]=ccc[i][j]; stamps[c++]=eptr; if(c>100)break; @@ -206,7 +220,7 @@ void CMidiPlayer::fileTimer2Pass() } while(c<101) { - for(int i=0;i<16;++i)for(int j=0;j<132;++j) + for(int i=0;i<16;++i)for(int j=0;j<135;++j) ccstamps[c][i][j]=ccc[i][j]; stamps[c++]=midiFile->getEventCount(); } @@ -214,13 +228,19 @@ void CMidiPlayer::fileTimer2Pass() CMidiPlayer::CMidiPlayer(bool singleInst) { midiFile=NULL;resumed=false;singleInstance=singleInst; - settings=NULL;synth=NULL;adriver=NULL; + settings=NULL;synth=NULL;adriver=NULL;waitvoice=true; } CMidiPlayer::~CMidiPlayer(){if(singleInstance)fluidDeinitialize();} -void CMidiPlayer::playerPanic() +void CMidiPlayer::playerPanic(bool reset) { + if(reset)for(int i=0;i<16;++i) + { + fluid_synth_pitch_bend(synth,i,8192); + fluid_synth_cc(synth,i,7,100); + fluid_synth_cc(synth,i,10,64); + fluid_synth_cc(synth,i,11,127); + } for(int i=0;i<16;++i)fluid_synth_all_notes_off(synth,i); - //for(int i=0;i<16;++i)for(int j=0;j<128;++j)fluid_synth_noteoff(synth,i,j); } bool CMidiPlayer::playerLoadFile(const char* fn) { @@ -235,7 +255,7 @@ void CMidiPlayer::playerInit() { ctempo=0x7A120;ctsn=4;ctsd=4;cks=0;dpt=ctempo*1000/divs; tceptr=0;tcstop=0;tcpaused=0;finished=0;mute=solo=0; - sendSysEx=true; + sendSysEx=true;rpnid=rpnval=-1; if(!singleInstance)fluidPreInitialize(); } void CMidiPlayer::playerDeinit() @@ -307,6 +327,7 @@ uint32_t CMidiPlayer::getTCpaused(){return tcpaused;} void CMidiPlayer::setTCpaused(uint32_t ps){tcpaused=ps;} uint32_t CMidiPlayer::isFinished(){return finished;} void CMidiPlayer::setResumed(){resumed=true;} +void CMidiPlayer::setWaitVoice(bool wv){waitvoice=wv;} void CMidiPlayer::setGain(double gain){if(settings)fluid_settings_setnum(settings,"synth.gain",gain);} int CMidiPlayer::getPolyphone(){return synth?fluid_synth_get_active_voice_count(synth):0;} int CMidiPlayer::getMaxPolyphone(){return synth?fluid_synth_get_polyphony(synth):0;} diff --git a/qmpmidiplay.hpp b/qmpmidiplay.hpp index 6525c87..fafd677 100644 --- a/qmpmidiplay.hpp +++ b/qmpmidiplay.hpp @@ -54,11 +54,12 @@ class CMidiPlayer private: CMidiFile *midiFile; uint32_t stamps[101]; - uint32_t ccstamps[101][16][134],ccc[16][134]; - //0..127:cc 128:pc 129:cp 130:pb 131:tempo 132:ts 133:ks + uint32_t ccstamps[101][16][135],ccc[16][135]; + //0..127:cc 128:pc 129:cp 130:pb 131:tempo 132:ts 133:ks 134:pbr + int32_t rpnid,rpnval; uint16_t mute,solo; double ftime; - bool sendSysEx,singleInstance; + bool sendSysEx,singleInstance,waitvoice; fluid_settings_t* settings; fluid_synth_t* synth; fluid_audio_driver_t* adriver; @@ -85,7 +86,7 @@ class CMidiPlayer void fluidDeinitialize(); void playerDeinit(); void playerThread(); - void playerPanic(); + void playerPanic(bool reset=false); void rendererLoadFile(const char* ofn); void rendererInit(const char *fn); @@ -100,6 +101,7 @@ class CMidiPlayer void setTCpaused(uint32_t ps); uint32_t isFinished(); void setResumed(); + void setWaitVoice(bool wv); double getFtime(); void getCurrentTimeSignature(int *n,int *d); diff --git a/qmpsettingswindow.cpp b/qmpsettingswindow.cpp index b1f620c..c2e31a2 100644 --- a/qmpsettingswindow.cpp +++ b/qmpsettingswindow.cpp @@ -63,6 +63,9 @@ void qmpSettingsWindow::settingsInit() settings->setValue("Midi/SendSysEx",settings->value("Midi/SendSysEx",1)); ui->cbSendSysx->setChecked(settings->value("Midi/SendSysEx",1).toInt()); + settings->setValue("Midi/WaitVoice",settings->value("Midi/WaitVoice",1)); + ui->cbWaitVoice->setChecked(settings->value("Midi/WaitVoice",1).toInt()); + int selected=-1; for(int i=0;i<ui->cbEncoding->count();++i) if(ui->cbEncoding->itemText(i)==settings->value("Midi/TextEncoding","Unicode").toString()) @@ -171,6 +174,8 @@ void qmpSettingsWindow::settingsUpdate() settings->setValue("Midi/SendSysEx",ui->cbSendSysx->isChecked()?1:0); + settings->setValue("Midi/WaitVoice",ui->cbWaitVoice->isChecked()?1:0); + settings->setValue("Midi/TextEncoding",ui->cbEncoding->currentText()); settings->setValue("Audio/Driver",ui->cbAudioDrv->currentText()); diff --git a/qmpsettingswindow.ui b/qmpsettingswindow.ui index 4fdb6f1..330afa2 100644 --- a/qmpsettingswindow.ui +++ b/qmpsettingswindow.ui @@ -29,102 +29,159 @@ <attribute name="title"> <string>Midi</string> </attribute> - <layout class="QGridLayout" name="gridLayout"> - <item row="1" column="0"> + <layout class="QVBoxLayout" name="verticalLayout_4"> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_6"> + <item> + <widget class="QLabel" name="lbOutputDevice"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Default Output Device</string> + </property> + </widget> + </item> + <item> + <widget class="QComboBox" name="cbOutputDevice"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <item> + <property name="text"> + <string>Internal FluidSynth</string> + </property> + </item> + </widget> + </item> + </layout> + </item> + <item> <widget class="QCheckBox" name="cbDisableMapping"> - <property name="text"> - <string>Disable Midi Mapping</string> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> </property> - </widget> - </item> - <item row="0" column="0"> - <widget class="QLabel" name="lbOutputDevice"> <property name="text"> - <string>Default Output Device</string> + <string>Disable Midi Mapping</string> </property> </widget> </item> - <item row="0" column="1"> - <widget class="QComboBox" name="cbOutputDevice"> - <item> - <property name="text"> - <string>Internal FluidSynth</string> - </property> - </item> - </widget> - </item> - <item row="2" column="0"> + <item> <widget class="QCheckBox" name="cbSendSysx"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> <property name="text"> <string>Send SysEx</string> </property> </widget> </item> - <item row="3" column="0"> - <widget class="QLabel" name="lbEncoding"> + <item> + <widget class="QCheckBox" name="cbWaitVoice"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> <property name="text"> - <string>Text Encoding</string> + <string>Wait for remaining voices before stopping</string> </property> </widget> </item> - <item row="3" column="1"> - <widget class="QComboBox" name="cbEncoding"> - <item> - <property name="text"> - <string>Unicode</string> - </property> - </item> - <item> - <property name="text"> - <string>Big5</string> - </property> - </item> - <item> - <property name="text"> - <string>Big5-HKSCS</string> - </property> - </item> - <item> - <property name="text"> - <string>CP949</string> - </property> - </item> - <item> - <property name="text"> - <string>EUC-JP</string> - </property> - </item> - <item> - <property name="text"> - <string>EUC-KR</string> - </property> - </item> - <item> - <property name="text"> - <string>GB18030</string> - </property> - </item> - <item> - <property name="text"> - <string>KOI8-R</string> - </property> - </item> - <item> - <property name="text"> - <string>KOI8-U</string> - </property> - </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_7"> <item> - <property name="text"> - <string>Macintosh</string> - </property> + <widget class="QLabel" name="lbEncoding"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Text Encoding</string> + </property> + </widget> </item> <item> - <property name="text"> - <string>Shift-JIS</string> - </property> + <widget class="QComboBox" name="cbEncoding"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <item> + <property name="text"> + <string>Unicode</string> + </property> + </item> + <item> + <property name="text"> + <string>Big5</string> + </property> + </item> + <item> + <property name="text"> + <string>Big5-HKSCS</string> + </property> + </item> + <item> + <property name="text"> + <string>CP949</string> + </property> + </item> + <item> + <property name="text"> + <string>EUC-JP</string> + </property> + </item> + <item> + <property name="text"> + <string>EUC-KR</string> + </property> + </item> + <item> + <property name="text"> + <string>GB18030</string> + </property> + </item> + <item> + <property name="text"> + <string>KOI8-R</string> + </property> + </item> + <item> + <property name="text"> + <string>KOI8-U</string> + </property> + </item> + <item> + <property name="text"> + <string>Macintosh</string> + </property> + </item> + <item> + <property name="text"> + <string>Shift-JIS</string> + </property> + </item> + </widget> </item> - </widget> + </layout> </item> </layout> </widget> diff --git a/resources.qrc b/resources.qrc index 03997c5..2eb232c 100644 --- a/resources.qrc +++ b/resources.qrc @@ -25,10 +25,12 @@ <file>img/stop.png</file> <file>img/up.png</file> <file>img/visualization.png</file> + <file>img/mainw.png</file> + <file>img/chanw.png</file> <file>doc/index.html</file> <file>doc/version.html</file> <file>doc/license.html</file> <file>doc/mainwindow.html</file> - <file>img/mainw.png</file> + <file>doc/channeldialog.html</file> </qresource> </RCC> |