-rw-r--r-- | inputmethods/multikey/configdlg.cpp | 18 | ||||
-rw-r--r-- | inputmethods/multikey/configdlg.h | 2 |
2 files changed, 13 insertions, 7 deletions
diff --git a/inputmethods/multikey/configdlg.cpp b/inputmethods/multikey/configdlg.cpp index 52c498b..24fdb7f 100644 --- a/inputmethods/multikey/configdlg.cpp +++ b/inputmethods/multikey/configdlg.cpp @@ -38,165 +38,167 @@ using namespace Opie; using namespace Opie::Ui; // ConfigDlg::ConfigDlg() {{{1 ConfigDlg::ConfigDlg () : QDialog () { setCaption( tr("Multikey Configuration") ); Config config ("multikey"); config.setGroup("keymaps"); QString current_map = config.readEntry("current", 0); /* * 'general config' tab */ QVBoxLayout *base_lay = new QVBoxLayout(this); QTabWidget *tabs = new QTabWidget(this, "tabs"); QWidget *gen_box = new QWidget(tabs, "gen_tab"); QVBoxLayout *gen_lay = new QVBoxLayout(gen_box); gen_lay->setMargin(3); QGroupBox *map_group = new QGroupBox (2, Qt::Vertical, tr("Keymap File"), gen_box); QHBox *hbox1 = new QHBox(map_group); keymaps = new QListBox(hbox1); keymaps->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); QVBox *vbox1 = new QVBox(hbox1); QToolButton *tb1 = new QToolButton(vbox1, tr("Move Up")); tb1->setUsesBigPixmap( qApp->desktop()->size().width() > 330 ); tb1->setPixmap(Opie::Core::OResource::loadPixmap("up", Opie::Core::OResource::SmallIcon)); tb1->setAutoRaise(TRUE); tb1->setFocusPolicy(QWidget::NoFocus); tb1->setToggleButton(FALSE); connect(tb1, SIGNAL(clicked()), this, SLOT(moveSelectedUp())); QToolButton *tb2 = new QToolButton(vbox1, tr("Move Down")); tb2->setUsesBigPixmap( qApp->desktop()->size().width() > 330 ); tb2->setPixmap(Opie::Core::OResource::loadPixmap("down", Opie::Core::OResource::SmallIcon)); tb2->setAutoRaise(TRUE); tb2->setFocusPolicy(QWidget::NoFocus); tb2->setToggleButton(FALSE); connect(tb2, SIGNAL(clicked()), this, SLOT(moveSelectedDown())); QString cur(tr("Current Language")); keymaps->insertItem(cur); keymaps->setSelected(0, true); QDir map_dir(QPEApplication::qpeDir() + "share/multikey", "*.keymap"); - default_maps = map_dir.entryList(); // so i can access it in other places + default_maps = map_dir.entryList(); // so the object can access keymaps in other places custom_maps = config.readListEntry("maps", QChar('|')); sw_maps = ConfigDlg::loadSw(); QStringList sw_copy(sw_maps); for (uint i = 0; i < sw_copy.count(); i++) { QString keymap_map; if (sw_copy[i][0] != '/') { /* share/multikey */ keymap_map = map_dir.absPath() + "/" + sw_copy[i]; } else { if (map_dir.exists(QFileInfo(sw_copy[i]).fileName(), false) || !QFile::exists(sw_copy[i])) { custom_maps.remove(sw_copy[i]); sw_maps.remove(sw_copy[i]); // remove it from the list too config.writeEntry("maps", custom_maps.join("|")); continue; } keymap_map = sw_copy[i]; } QFile map(keymap_map); if (map.open(IO_ReadOnly)) { QString line; bool found = 0; map.readLine(line, 1024); while (!map.atEnd()) { if (line.find(QRegExp("^title\\s*=\\s*")) != -1) { keymaps->insertItem(line.right(line.length() - line.find(QChar('=')) - 1).stripWhiteSpace()); found = 1; break; } map.readLine(line, 1024); } if (!found) keymaps->insertItem(keymap_map); map.close(); } if (keymap_map == current_map) { keymaps->setSelected(i + 1, true); } } // have to "+1" because the "current language" listItem... remember? connect(keymaps, SIGNAL(highlighted(int)), SLOT(setMap(int))); QGrid *add_remove_grid = new QGrid(2, map_group); add_remove_grid->setMargin(3); add_remove_grid->setSpacing(3); - add_button = new QPushButton(tr("Add"), add_remove_grid); + add_button = new QPushButton(tr("Add keymap..."), add_remove_grid); add_button->setFlat(TRUE); connect(add_button, SIGNAL(clicked()), SLOT(addMap())); - remove_button = new QPushButton(tr("Remove"), add_remove_grid); + remove_button = new QPushButton(tr("Remove keymap"), add_remove_grid); remove_button->setFlat(TRUE); - if (keymaps->currentItem() == 0 || default_maps.find(QFileInfo(current_map).fileName()) != default_maps.end()) - remove_button->setDisabled(true); + if (keymaps->currentItem() == 0 || default_maps.find(QFileInfo(current_map).fileName()) != default_maps.end()) { + remove_button->setDisabled(true); + remove_button->hide(); + } connect(remove_button, SIGNAL(clicked()), SLOT(removeMap())); gen_lay->addWidget(map_group); // make a box that will contain the buttons on the bottom QGrid *other_grid = new QGrid(2, gen_box); pick_button = new QCheckBox(tr("Pickboard"), other_grid); config.setGroup ("general"); bool pick_open = config.readBoolEntry ("usePickboard", FALSE); // default closed if (pick_open) { pick_button->setChecked(true); } repeat_button = new QCheckBox(tr("Key Repeat"), other_grid); bool repeat_on = config.readBoolEntry ("useRepeat", TRUE); if (repeat_on) { repeat_button->setChecked(true); } gen_lay->addWidget(other_grid); tabs->addTab(gen_box, tr("General Settings")); /* * 'color' tab */ QWidget *color_box = new QWidget(tabs, "color_tab"); QGridLayout *color_lay = new QGridLayout(color_box); QGrid *color_grid = new QGrid(2, color_box); color_lay->setAlignment(Qt::AlignTop); color_grid->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed)); color_grid->layout()->setAlignment(Qt::AlignTop); color_grid->setMargin(3); color_grid->setSpacing(3); QLabel *label; QStringList color; config.setGroup("colors"); label = new QLabel(tr("Key Color"), color_grid); keycolor_button = new QPushButton(color_grid); connect(keycolor_button, SIGNAL(clicked()), SLOT(keyColorClicked())); keycolor_button->setFlat(TRUE); @@ -260,160 +262,164 @@ QStringList ConfigDlg::loadSw() if (!s_maps.count()) { s_maps = d_maps+c_maps; } else { /* Clear non existents entries */ QStringList s_copy(s_maps); for (uint i = 0; i < s_copy.count(); ++i) { if (d_maps.find(s_copy[i]) == d_maps.end() && c_maps.find(s_copy[i]) == c_maps.end()) { s_maps.remove(s_copy[i]); } } /* Update sw_maps from default_maps */ for (uint i = 0; i < d_maps.count(); ++i) { if (s_maps.find(d_maps[i]) == s_maps.end()) { s_maps.append(d_maps[i]); } } /* Update sw_maps from custom_maps */ for (uint i = 0; i < c_maps.count(); ++i) { if (s_maps.find(c_maps[i]) == s_maps.end()) { s_maps.append(c_maps[i]); } } } return s_maps; } void ConfigDlg::accept() { /* Writing all stuffs to config */ Config *config = new Config("multikey"); config->setGroup("general"); config->writeEntry("usePickboard", pick_button->isChecked()); // default closed config->writeEntry("useRepeat", repeat_button->isChecked()); // default closed config->setGroup("keymaps"); config->writeEntry("sw", sw_maps, QChar('|')); config->writeEntry("maps", custom_maps, QChar('|')); delete config; int index = keymaps->currentItem(); if (index == 0) { remove_button->setDisabled(true); + remove_button->hide(); emit setMapToDefault(); } else if (default_maps.find(sw_maps[index-1]) != default_maps.end()) { remove_button->setDisabled(true); + remove_button->hide(); emit setMapToFile(QPEApplication::qpeDir() + "share/multikey/" + sw_maps[index - 1]); } else { - + remove_button->show(); remove_button->setEnabled(true); emit setMapToFile(sw_maps[index - 1]); } emit pickboardToggled(pick_button->isChecked()); emit repeatToggled(repeat_button->isChecked()); emit reloadSw(); QDialog::accept(); emit configDlgClosed(); } void ConfigDlg::moveSelectedUp() { int i = keymaps->currentItem(); /* Ignore Current Language */ if (i > 1) { QString t = sw_maps[i-1]; sw_maps[i-1] = sw_maps[i-2]; sw_maps[i-2] = t; QString item = keymaps->currentText(); keymaps->removeItem(i); keymaps->insertItem(item, i-1); keymaps->setCurrentItem(i-1); } } void ConfigDlg::moveSelectedDown() { int i = keymaps->currentItem(); /* Ignore Current Language */ if (i > 0 && i < (int)keymaps->count() - 1) { QString t = sw_maps[i-1]; sw_maps[i-1] = sw_maps[i]; sw_maps[i] = t; QString item = keymaps->currentText(); keymaps->removeItem(i); keymaps->insertItem(item, i+1); keymaps->setCurrentItem(i+1); } } void ConfigDlg::closeEvent(QCloseEvent *) { // tell the parent it was closed, so delete me emit configDlgClosed(); } void ConfigDlg::setMap(int index) { if (index == 0 || default_maps.find(sw_maps[index-1]) != default_maps.end()) { remove_button->setDisabled(true); + remove_button->hide(); } else { + remove_button->show(); remove_button->setEnabled(true); } } // ConfigDlg::addMap() {{{1 void ConfigDlg::addMap() { QString map = OFileDialog::getOpenFileName(1, QDir::home().absPath()); if (map.isNull()) return; Config config ("multikey"); config.setGroup("keymaps"); QStringList maps = config.readListEntry("maps", QChar('|')); maps.append(map); custom_maps.append(map); if (sw_maps.find(map) == sw_maps.end()) sw_maps.append(map); QFile map_file (map); if (map_file.open(IO_ReadOnly)) { QString line; bool found = 0; map_file.readLine(line, 1024); while (!map_file.atEnd()) { if (line.find(QRegExp("^title\\s*=\\s*")) != -1) { keymaps->insertItem(line.right(line.length() - line.find(QChar('=')) - 1).stripWhiteSpace()); found = 1; break; } map_file.readLine(line, 1024); } if (!found) keymaps->insertItem(map); map_file.close(); } keymaps->setSelected(keymaps->count() - 1, true); } // ConfigDlg::removeMap() {{{1 void ConfigDlg::removeMap() { // move selection up one keymaps->setSelected(keymaps->currentItem() - 1, true); diff --git a/inputmethods/multikey/configdlg.h b/inputmethods/multikey/configdlg.h index 8e96e9b..f900a14 100644 --- a/inputmethods/multikey/configdlg.h +++ b/inputmethods/multikey/configdlg.h @@ -7,59 +7,59 @@ #ifndef CONFIGDLG_H #define CONFIGDLG_H class ConfigDlg : public QDialog { Q_OBJECT public: ConfigDlg (); static QStringList loadSw(); signals: void pickboardToggled(bool on_off); void repeatToggled(bool on_off); void setMapToDefault(); void setMapToFile(QString map); void reloadKeyboard(); void configDlgClosed(); void reloadSw(); protected: virtual void accept(); protected slots: void moveSelectedUp(); void moveSelectedDown(); private slots: void setMap(int index); void addMap(); void removeMap(); virtual void closeEvent ( QCloseEvent * ); // all those required slots for the color push buttons void keyColorClicked(); void keyColorPressedClicked(); void keyColorLinesClicked(); void textColorClicked(); private: QCheckBox *pick_button; QCheckBox *repeat_button; QListBox *keymaps; QPushButton *add_button; QPushButton *remove_button; QStringList default_maps; // the maps in your share/multikey/ dir QStringList custom_maps; // maps you added with the 'add' button - QStringList sw_maps; // maps, which used in keyboard switch rotation ring + QStringList sw_maps; // maps used in keyboard switch rotation ring /* color buttons */ QPushButton *keycolor_button; QPushButton *keycolor_pressed_button; QPushButton *keycolor_lines_button; QPushButton *textcolor_button; }; #endif |