📄 oxim-setup.ui.h
字号:
/****************************************************************************** ui.h extension file, included from the uic-generated form implementation.**** If you want to add, delete, or rename functions or slots, use** Qt Designer to update this file, preserving your code.**** You should not define a constructor or destructor in this file.** Instead, write your code in functions called () and destroy().** These will automatically be called by the form's constructor and** destructor.*****************************************************************************//* * 某個輸入法被選擇(clicked) */void OXIM_Setup::IMListView_clicked(QListViewItem *item){ int default_IM = oxim_get_Default_IM(); int idx = getIndexByItem(item); if (idx >= 0) { iminfo_t *imp = oxim_get_IM(idx); GlobolButton->setEnabled(true); DefaultButton->setEnabled(idx==default_IM ? false : true); DeleteIM->setEnabled(imp->inuserdir ? true : false); if (strcasecmp(imp->modname, "gen-inp") == 0 || strcasecmp(imp->modname, "gen-inp-v1") == 0 || strcasecmp(imp->modname, "chewing") == 0) { PropertyButton->setEnabled(true); } else { PropertyButton->setEnabled(false); } QCheckListItem *chk = (QCheckListItem *)item; oxim_set_IMCircular(idx, chk->isOn()); } else { GlobolButton->setEnabled(false); DefaultButton->setEnabled(false); PropertyButton->setEnabled(false); DeleteIM->setEnabled(false); }}int OXIM_Setup::getIndexByItem( QListViewItem *item ){ QListViewItemIterator it(IMListView); int idx = 0; while ( it.current() ) { QCheckListItem *chk = (QCheckListItem *)it.current(); if (chk == item) { return idx; } ++it; idx++; } return -1;}/* * 預設鈕被 clicked */void OXIM_Setup::DefaultButton_clicked(){ QListViewItem *item = IMListView->selectedItem(); if (!item) { return; } int idx = getIndexByItem(item); if (idx < 0) { return; } int default_IM = oxim_get_Default_IM(); if (idx == default_IM) { return; } iminfo_t *newimp = oxim_get_IM(idx); oxim_set_config(DefauleInputMethod, newimp->objname); DefaultButton->setEnabled(false); item->setPixmap(1, QPixmap::fromMimeSource("cd01.png" )); item = getItemByIndex(default_IM); if (item) { item->setPixmap(1, NULL); }}QListViewItem * OXIM_Setup::getItemByIndex( int idx ){ QListViewItemIterator it(IMListView); int ret_idx = 0; while ( it.current() ) { QListViewItem *item = (QCheckListItem *)it.current(); if (idx == ret_idx) { return item; } ++it; ret_idx++; } return 0;}/* * 按下通用設定按鈕 */void OXIM_Setup::GlobolButton_clicked(){ QListViewItem *item = IMListView->selectedItem(); if (!item) { return; } int idx = getIndexByItem(item); if (idx < 0) { return; } iminfo_t *imp = oxim_get_IM(idx); if (!imp) { return; } GlobolSetting gs ; gs.IMNameLabel->setText(trUtf8(imp->inpname)); gs.AliasNameEdit->setText(trUtf8(imp->aliasname)); if (imp->key > 0) { gs.HotKeyBox->setChecked(true); gs.HotKey->setEnabled(true); gs.HotKey->setCurrentItem(imp->key - 1); } else { gs.HotKeyBox->setChecked(false); gs.HotKey->setEnabled(false); } int isOK = gs.exec(); if (!isOK) { return; } // 設定別名 QString alias = gs.AliasNameEdit->text().stripWhiteSpace(); if (alias.length()) { item->setText(1, alias); oxim_set_IMAliasName(idx, alias.utf8().data()); } else { item->setText(1, QString::fromUtf8(imp->inpname)); oxim_set_IMAliasName(idx, NULL); } // 是否設定快速鍵 if (!gs.HotKeyBox->isChecked()) { oxim_set_IMKey(idx, -1); item->setText(2, trUtf8("無")); } else { int key = gs.HotKey->currentItem(); if (key == 9) { key = 10; } else { key ++; } if (oxim_set_IMKey(idx, key)) { item->setText(2, QString("Ctrl+Alt+") + gs.HotKey->currentText()); } else { QMessageBox::information( this, trUtf8("快速鍵重複"), trUtf8("您指定的快速鍵,已經被其他輸入法使用了!\n") + trUtf8("請重新指定另一組快速鍵。") ); } }}#include <X11/Xlib.h>/* * 重新寫入 config 檔案 */void OXIM_Setup::UpdateConfig(){ int size; // 變更字型名稱 oxim_set_config(DefaultFontName, FontName->currentText().utf8().data()); // 讀取組字區字型大小 size = PreeditSize->value(); oxim_set_config(PreeditFontSize, QString::number(size).utf8().data()); // 設定選字區字型大小 size = SelectSize->value(); oxim_set_config(SelectFontSize, QString::number(size).utf8().data()); // 設定狀態區字型大小 size = StatusSize->value(); oxim_set_config(StatusFontSize, QString::number(size).utf8().data()); // 設定選單區字型大小 size = MenuSize->value(); oxim_set_config(MenuFontSize, QString::number(size).utf8().data()); // 設定符號表字型大小 size = SymbolSize->value(); oxim_set_config(SymbolFontSize, QString::number(size).utf8().data()); // 設定 XCIN 風格字型大小 size = XCINSize->value(); oxim_set_config(XcinFontSize, QString::number(size).utf8().data()); // 重新寫入 config 檔案 oxim_make_config(); // 寫入片語表 QString qpharse_name(QString::fromUtf8(oxim_user_dir()).append("/tables/default.phr")); QFile qpharse_file(qpharse_name); if (qpharse_file.open(IO_WriteOnly)) { for (int i=0 ; i < PharseTable->numRows() ; i++) { QString label = PharseTable->verticalHeader()->label(i); QString pharse = PharseTable->text(i, 0).stripWhiteSpace(); QTextStream stream(&qpharse_file); stream << label << " " << "\"" << pharse << "\"\n"; } qpharse_file.close(); } // 取得 OXIM 控制視窗 atom Display *dpy = x11AppDisplay(); Atom oxim_atom = XInternAtom(dpy, OXIM_ATOM, true); // 有 oxim_atom 表示 OXIM 執行中,送 ClientMessage 給 OXIM // 叫他 Reload if (oxim_atom != None) { Window config_win = XGetSelectionOwner(dpy, oxim_atom); if (config_win != None) { XClientMessageEvent event; event.type = ClientMessage; event.window = config_win; event.message_type = oxim_atom; event.format = 32; event.data.l[0] = OXIM_CMD_RELOAD; XSendEvent(dpy, config_win, False, 0, (XEvent *)&event); } } QDialog::accept();}/* * 初始化輸入法列表 */void OXIM_Setup::IMListInit( void ){ QCheckListItem *item = NULL; oxim_init(); VersionLabel->setText(tr("Open X Input Method ") + QString(oxim_version())); DefaultButton->setIconSet(QIconSet::QIconSet(QPixmap::fromMimeSource("cd01.png"))); AddIM->setIconSet(QIconSet::QIconSet(QPixmap::fromMimeSource("edit_add.png"))); DeleteIM->setIconSet(QIconSet::QIconSet(QPixmap::fromMimeSource("edit_remove.png"))); IMListView->clear(); IMListView->setSorting(-1); int n_IM = oxim_get_NumberOfIM(); int default_idx = oxim_get_Default_IM(); for (int i=0 ; i < n_IM ; i++) { char key[2]; key[1] = '\0'; iminfo_t *imp = oxim_get_IM(i); item = new QCheckListItem(IMListView, (i ? item : 0), "", QCheckListItem::CheckBox); // 輸入法名稱 item->setText(1, QString::fromUtf8(imp->aliasname ? imp->aliasname : imp->inpname)); // 快速鍵 if (imp->key > 0 && imp->key <= 10) { if (imp->key == 10) { key[0] = '0'; } else { key[0] = '0' + (char)imp->key; } item->setText(2, QString("Ctrl+Alt+") + QString(key)); } else { item->setText(2, QString::fromUtf8("無")); } if (i == default_idx) { item->setPixmap(1, QPixmap::fromMimeSource("cd01.png" )); } item->setOn(imp->circular); item->setText(3, (imp->inuserdir ? "" : trUtf8("<內建>"))); settings_t *settings = oxim_get_im_settings(imp->objname); if (settings) { oxim_set_IMSettings(i, settings); oxim_settings_destroy(settings); } } // 讀取系統的字型資料 bool ok; QString size; QFontDatabase fdb; FontName->clear(); FontName->insertStringList(fdb.families()); // 讀取 OXIM 預設的字型名稱 FontName->setEditText(QString::fromUtf8(oxim_get_config(DefaultFontName))); // 讀取組字區字型大小 size = QString::fromUtf8(oxim_get_config(PreeditFontSize)); PreeditSize->setValue(size.toInt(&ok, 10)); // 讀取選字區字型大小 size = QString::fromUtf8(oxim_get_config(SelectFontSize)); SelectSize->setValue(size.toInt(&ok, 10)); // 讀取狀態區字型大小 size = QString::fromUtf8(oxim_get_config(StatusFontSize)); StatusSize->setValue(size.toInt(&ok, 10)); // 讀取選單區字型大小 size = QString::fromUtf8(oxim_get_config(MenuFontSize)); MenuSize->setValue(size.toInt(&ok, 10)); // 讀取符號表字型大小 size = QString::fromUtf8(oxim_get_config(SymbolFontSize)); SymbolSize->setValue(size.toInt(&ok, 10)); // 讀取 XCIN 風格字型大小 size = QString::fromUtf8(oxim_get_config(XcinFontSize)); XCINSize->setValue(size.toInt(&ok, 10)); // int numRow = PharseTable->numRows(); for (int i=0 ; i < numRow ; i++) { PharseTable->removeRow(0); } // 設定片語表 numRow = 0; for (int i=0 ; i < 50 ; i++) { int key = oxim_code2key(i); char chrkey[2]; chrkey[1] = '\0'; if (key) { PharseTable->insertRows(numRow); chrkey[0] = (char)key; QString pharse(trUtf8(oxim_qphrase_str(key))); PharseTable->verticalHeader()->setLabel(numRow, chrkey); PharseTable->setText(numRow, 0, pharse.stripWhiteSpace()); numRow ++; } }}/* * 按下屬性按鈕 */void OXIM_Setup::PropertyButton_clicked(){ QListViewItem *item = IMListView->selectedItem(); if (!item) { return; } int idx = getIndexByItem(item); if (idx < 0) { return; } iminfo_t *imp = oxim_get_IM(idx); if (!imp) { return; } QString modname(imp->modname); if (modname == "gen-inp" || modname == "gen-inp-v1") { RunGenCinForm(idx, imp); } else if (modname == "chewing") { RunChewing(idx, imp); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -