-rw-r--r-- | inputmethods/multikey/configdlg.cpp | 161 | ||||
-rw-r--r-- | inputmethods/multikey/configdlg.h | 12 |
2 files changed, 83 insertions, 90 deletions
diff --git a/inputmethods/multikey/configdlg.cpp b/inputmethods/multikey/configdlg.cpp index f127d0e..d29109a 100644 --- a/inputmethods/multikey/configdlg.cpp +++ b/inputmethods/multikey/configdlg.cpp @@ -7,16 +7,17 @@ * * */ #include <qpe/qpeapplication.h> #include <qpe/config.h> #include <qpe/resource.h> +#include <qlayout.h> #include <qwidget.h> #include <qdialog.h> #include <qtabwidget.h> #include <qvbox.h> #include <qgrid.h> #include <qgroupbox.h> #include <qlabel.h> #include <qcheckbox.h> @@ -28,31 +29,34 @@ #include <opie/ofiledialog.h> #include <opie/colordialog.h> #include <qdir.h> #include <qfileinfo.h> #include "configdlg.h" #include "keyboard.h" // ConfigDlg::ConfigDlg() {{{1 -ConfigDlg::ConfigDlg () : QTabWidget () +ConfigDlg::ConfigDlg () : QDialog () { setCaption( tr("Multikey Configuration") ); Config config ("multikey"); config.setGroup("keymaps"); QString current_map = config.readEntry("current", 0); /* * 'general config' tab */ - QVBox *gen_box = new QVBox (this); - gen_box->setMargin(3); - addTab(gen_box, tr("General Settings")); + 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")); @@ -124,116 +128,123 @@ ConfigDlg::ConfigDlg () : QTabWidget () } 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->setFlat(TRUE); connect(add_button, SIGNAL(clicked()), SLOT(addMap())); remove_button = new QPushButton(tr("Remove"), add_remove_grid); remove_button->setFlat(TRUE); - if (default_maps.find(QFileInfo(current_map).fileName()) != default_maps.end()) + if (keymaps->currentItem() == 0 || default_maps.find(QFileInfo(current_map).fileName()) != default_maps.end()) remove_button->setDisabled(true); 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); } - // by connecting it after checking it, the signal isn't emmited - connect (pick_button, SIGNAL(clicked()), this, SLOT(pickTog())); - repeat_button = new QCheckBox(tr("Key Repeat"), other_grid); bool repeat_on = config.readBoolEntry ("useRepeat", TRUE); if (repeat_on) { repeat_button->setChecked(true); } - connect (repeat_button, SIGNAL(clicked()), this, SLOT(repeatTog())); + + gen_lay->addWidget(other_grid); + tabs->addTab(gen_box, tr("General Settings")); /* * 'color' tab */ - QGrid *color_box = new QGrid(2, this); - color_box->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed)); - color_box->setMargin(3); - color_box->setSpacing(3); - addTab(color_box, tr("Colors")); + 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_box); - keycolor_button = new QPushButton(color_box); + 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); color = config.readListEntry("keycolor", QChar(',')); /* * hopefully not required if (color.isEmpty()) { color = QStringList::split(",", "240,240,240"); config.writeEntry("keycolor", color.join(",")); } */ keycolor_button->setPalette(QPalette(QColor(color[0].toInt(), color[1].toInt(), color[2].toInt()))); - label = new QLabel(tr("Key Pressed Color"), color_box); - keycolor_pressed_button = new QPushButton(color_box); + label = new QLabel(tr("Key Pressed Color"), color_grid); + keycolor_pressed_button = new QPushButton(color_grid); connect(keycolor_pressed_button, SIGNAL(clicked()), SLOT(keyColorPressedClicked())); keycolor_pressed_button->setFlat(TRUE); color = config.readListEntry("keycolor_pressed", QChar(',')); keycolor_pressed_button->setPalette(QPalette((QColor(color[0].toInt(), color[1].toInt(), color[2].toInt())))); - label = new QLabel(tr("Line Color"), color_box); - keycolor_lines_button = new QPushButton(color_box); + label = new QLabel(tr("Line Color"), color_grid); + keycolor_lines_button = new QPushButton(color_grid); connect(keycolor_lines_button, SIGNAL(clicked()), SLOT(keyColorLinesClicked())); keycolor_lines_button->setFlat(TRUE); color = config.readListEntry("keycolor_lines", QChar(',')); keycolor_lines_button->setPalette(QPalette((QColor(color[0].toInt(), color[1].toInt(), color[2].toInt())))); - label = new QLabel(tr("Text Color"), color_box); - textcolor_button = new QPushButton(color_box); + label = new QLabel(tr("Text Color"), color_grid); + textcolor_button = new QPushButton(color_grid); connect(textcolor_button, SIGNAL(clicked()), SLOT(textColorClicked())); textcolor_button->setFlat(TRUE); color = config.readListEntry("textcolor", QChar(',')); textcolor_button->setPalette(QPalette((QColor(color[0].toInt(), color[1].toInt(), color[2].toInt())))); - label = new QLabel("", color_box); // a spacer so the above buttons dont expand + label = new QLabel("", color_grid); // a spacer so the above buttons dont expand label->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); -} + /* FIXME: hacked spacer height */ + QSpacerItem *spacer = new QSpacerItem(0, 300, QSizePolicy::Expanding, QSizePolicy::Maximum); -ConfigDlg::~ConfigDlg() -{ - emit reloadSw(); + color_lay->addWidget(color_grid, 0, 0); + color_lay->addItem(spacer); + + tabs->addTab(color_box, tr("Colors")); + base_lay->addWidget(tabs); } QStringList ConfigDlg::loadSw() { Config *config = new Config("multikey"); config->setGroup("keymaps"); QDir map_dir(QPEApplication::qpeDir() + "/share/multikey", "*.keymap"); QStringList d_maps = map_dir.entryList(); // so i can access it in other places @@ -243,17 +254,17 @@ QStringList ConfigDlg::loadSw() if (!s_maps.count()) { s_maps = d_maps+c_maps; } else { /* Clear non existents entries */ - QStringList s_copy = s_maps; + 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) { @@ -267,105 +278,101 @@ QStringList ConfigDlg::loadSw() 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); + emit setMapToDefault(); + } + else if (default_maps.find(sw_maps[index-1]) != default_maps.end()) { + + remove_button->setDisabled(true); + emit setMapToFile(QPEApplication::qpeDir() + "share/multikey/" + sw_maps[index - 1]); + + } else { + + 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); - - Config config("multikey"); - config.setGroup("keymaps"); - config.writeEntry("sw", sw_maps, QChar('|')); } } 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); - - Config config("multikey"); - config.setGroup("keymaps"); - config.writeEntry("sw", sw_maps, QChar('|')); } } -void ConfigDlg::pickTog() { - - Config config ("multikey"); - config.setGroup ("general"); - config.writeEntry ("usePickboard", pick_button->isChecked()); // default closed - - emit pickboardToggled(pick_button->isChecked()); -} - -void ConfigDlg::repeatTog() { - - Config config ("multikey"); - config.setGroup ("general"); - config.writeEntry ("useRepeat", repeat_button->isChecked()); // default closed - - emit repeatToggled(repeat_button->isChecked()); -} - void ConfigDlg::closeEvent(QCloseEvent *) { // tell the parent it was closed, so delete me emit configDlgClosed(); } -// ConfigDlg::setMap {{{1 - -/* - * the index is kinda screwy, because in the config file, index 0 is just the - * first element in the QStringList, but here it's the "Current Language" - * listItem. therefor you have to minus one to the index before you access it. - * - */ - void ConfigDlg::setMap(int index) { if (index == 0) { - remove_button->setDisabled(true); - emit setMapToDefault(); } else if (default_maps.find(sw_maps[index-1]) != default_maps.end()) { - remove_button->setDisabled(true); - emit setMapToFile(QPEApplication::qpeDir() + "share/multikey/" + sw_maps[index - 1]); - } else { - remove_button->setEnabled(true); - emit setMapToFile(sw_maps[index - 1]); } } // ConfigDlg::addMap() {{{1 void ConfigDlg::addMap() { QString map = OFileDialog::getOpenFileName(1, QDir::home().absPath()); @@ -396,40 +403,28 @@ void ConfigDlg::addMap() { map_file.readLine(line, 1024); } if (!found) keymaps->insertItem(map); map_file.close(); } keymaps->setSelected(keymaps->count() - 1, true); - - - config.writeEntry("maps", maps, QChar('|')); - config.writeEntry("sw", sw_maps, QChar('|')); - config.writeEntry("current", map); - } // ConfigDlg::removeMap() {{{1 void ConfigDlg::removeMap() { // move selection up one keymaps->setSelected(keymaps->currentItem() - 1, true); // delete the next selected item cus you just moved it up keymaps->removeItem(keymaps->currentItem() + 1); custom_maps.remove(sw_maps[keymaps->currentItem()]); sw_maps.remove(sw_maps.at(keymaps->currentItem())); - - // write the changes - Config config ("multikey"); - config.setGroup("keymaps"); - config.writeEntry("maps", custom_maps, QChar('|')); - config.writeEntry("sw", sw_maps, QChar('|')); } /* ConfigDlg::slots for the color buttons {{{1 * * these four slots are almost the same, except for the names. i was thinking * of making a map with pointers to the buttons and names of the configEntry * so it could be one slot, but then there would be no way of telling which * of the buttons was clicked if they all connect to the same slot. diff --git a/inputmethods/multikey/configdlg.h b/inputmethods/multikey/configdlg.h index ea157c5..91ae429 100644 --- a/inputmethods/multikey/configdlg.h +++ b/inputmethods/multikey/configdlg.h @@ -1,62 +1,60 @@ #include <qpe/qpeapplication.h> -#include <qtabwidget.h> +#include <qdialog.h> #include <qcheckbox.h> #include <qlistbox.h> #include <qpushbutton.h> #ifndef CONFIGDLG_H #define CONFIGDLG_H -class ConfigDlg : public QTabWidget +class ConfigDlg : public QDialog { Q_OBJECT public: ConfigDlg (); - ~ConfigDlg (); static QStringList ConfigDlg::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 pickTog(); - void repeatTog(); 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 /* color buttons */ QPushButton *keycolor_button; QPushButton *keycolor_pressed_button; QPushButton *keycolor_lines_button; |