Diffstat (limited to 'inputmethods/multikey/configdlg.cpp') (more/less context) (show whitespace changes)
-rw-r--r-- | inputmethods/multikey/configdlg.cpp | 200 |
1 files changed, 143 insertions, 57 deletions
diff --git a/inputmethods/multikey/configdlg.cpp b/inputmethods/multikey/configdlg.cpp index a8206b7..f127d0e 100644 --- a/inputmethods/multikey/configdlg.cpp +++ b/inputmethods/multikey/configdlg.cpp @@ -11,4 +11,5 @@ #include <qpe/qpeapplication.h> #include <qpe/config.h> +#include <qpe/resource.h> #include <qwidget.h> @@ -24,4 +25,5 @@ #include <qlistbox.h> #include <qstringlist.h> +#include <qtoolbutton.h> #include <opie/ofiledialog.h> #include <opie/colordialog.h> @@ -49,6 +51,22 @@ ConfigDlg::ConfigDlg () : QTabWidget () QGroupBox *map_group = new QGroupBox (2, Qt::Vertical, tr("Keymap File"), gen_box); - keymaps = new QListBox (map_group); + 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->setPixmap(Resource::loadPixmap("up")); + 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->setPixmap(Resource::loadPixmap("down")); + tb2->setAutoRaise(TRUE); + tb2->setFocusPolicy(QWidget::NoFocus); + tb2->setToggleButton(FALSE); + connect(tb2, SIGNAL(clicked()), this, SLOT(moveSelectedDown())); QString cur(tr("Current Language")); @@ -58,50 +76,31 @@ ConfigDlg::ConfigDlg () : QTabWidget () QDir map_dir(QPEApplication::qpeDir() + "/share/multikey", "*.keymap"); default_maps = map_dir.entryList(); // so i can access it in other places + custom_maps = config.readListEntry("maps", QChar('|')); + sw_maps = ConfigDlg::loadSw(); - for (uint i = 0; i < map_dir.count(); i++) { - - QFile map (map_dir.absPath() + "/" + map_dir[i]); - 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(map_dir.absPath() + "/" + map_dir[i]); - - map.close(); - } - if (map_dir.absPath() + "/" + map_dir[i] == current_map) { - - keymaps->setSelected(i + 1, true); - } - - } + QStringList sw_copy(sw_maps); + for (uint i = 0; i < sw_copy.count(); i++) { - custom_maps = config.readListEntry("maps", QChar('|')); + QString keymap_map; + if (sw_copy[i][0] != '/') { /* share/multikey */ - for (uint i = 0; i < custom_maps.count(); i++) { + keymap_map = map_dir.absPath() + "/" + sw_copy[i]; + } else { - if (map_dir.exists(QFileInfo(custom_maps[i]).fileName(), false) - || !QFile::exists(custom_maps[i])) { + if (map_dir.exists(QFileInfo(sw_copy[i]).fileName(), false) + || !QFile::exists(sw_copy[i])) { - custom_maps.remove(custom_maps.at(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]; + } - } else { - - QFile map (custom_maps[i]); + QFile map(keymap_map); if (map.open(IO_ReadOnly)) { @@ -119,12 +118,12 @@ ConfigDlg::ConfigDlg () : QTabWidget () map.readLine(line, 1024); } - if (!found) keymaps->insertItem(custom_maps[i]); + if (!found) + keymaps->insertItem(keymap_map); map.close(); } - if (custom_maps[i] == current_map) { - keymaps->setSelected(map_dir.count() + i + 1, true); - } + if (keymap_map == current_map) { + keymaps->setSelected(i + 1, true); } } @@ -134,5 +133,4 @@ ConfigDlg::ConfigDlg () : QTabWidget () connect(keymaps, SIGNAL(highlighted(int)), SLOT(setMap(int))); - QGrid *add_remove_grid = new QGrid(2, map_group); add_remove_grid->setMargin(3); @@ -140,10 +138,10 @@ ConfigDlg::ConfigDlg () : QTabWidget () add_button = new QPushButton(tr("Add"), add_remove_grid); - add_button->setFlat((bool)1); + add_button->setFlat(TRUE); connect(add_button, SIGNAL(clicked()), SLOT(addMap())); remove_button = new QPushButton(tr("Remove"), add_remove_grid); - remove_button->setFlat((bool)1); - if ((int)map_dir.count() >= keymaps->currentItem()) + remove_button->setFlat(TRUE); + if (default_maps.find(QFileInfo(current_map).fileName()) != default_maps.end()) remove_button->setDisabled(true); connect(remove_button, SIGNAL(clicked()), SLOT(removeMap())); @@ -154,5 +152,5 @@ ConfigDlg::ConfigDlg () : QTabWidget () config.setGroup ("general"); - bool pick_open = config.readBoolEntry ("usePickboard", (bool)0); // default closed + bool pick_open = config.readBoolEntry ("usePickboard", FALSE); // default closed if (pick_open) { @@ -164,5 +162,5 @@ ConfigDlg::ConfigDlg () : QTabWidget () repeat_button = new QCheckBox(tr("Key Repeat"), other_grid); - bool repeat_on = config.readBoolEntry ("useRepeat", (bool)1); + bool repeat_on = config.readBoolEntry ("useRepeat", TRUE); if (repeat_on) { @@ -172,5 +170,4 @@ ConfigDlg::ConfigDlg () : QTabWidget () connect (repeat_button, SIGNAL(clicked()), this, SLOT(repeatTog())); - /* * 'color' tab @@ -190,5 +187,5 @@ ConfigDlg::ConfigDlg () : QTabWidget () keycolor_button = new QPushButton(color_box); connect(keycolor_button, SIGNAL(clicked()), SLOT(keyColorClicked())); - keycolor_button->setFlat((bool)1); + keycolor_button->setFlat(TRUE); color = config.readListEntry("keycolor", QChar(',')); /* @@ -207,5 +204,5 @@ ConfigDlg::ConfigDlg () : QTabWidget () keycolor_pressed_button = new QPushButton(color_box); connect(keycolor_pressed_button, SIGNAL(clicked()), SLOT(keyColorPressedClicked())); - keycolor_pressed_button->setFlat((bool)1); + 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())))); @@ -214,5 +211,5 @@ ConfigDlg::ConfigDlg () : QTabWidget () keycolor_lines_button = new QPushButton(color_box); connect(keycolor_lines_button, SIGNAL(clicked()), SLOT(keyColorLinesClicked())); - keycolor_lines_button->setFlat((bool)1); + 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())))); @@ -222,12 +219,96 @@ ConfigDlg::ConfigDlg () : QTabWidget () textcolor_button = new QPushButton(color_box); connect(textcolor_button, SIGNAL(clicked()), SLOT(textColorClicked())); - textcolor_button->setFlat((bool)1); + 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->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); +} + +ConfigDlg::~ConfigDlg() +{ + emit reloadSw(); +} + +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 + QStringList c_maps = config->readListEntry("maps", QChar('|')); + QStringList s_maps = config->readListEntry("sw", QChar('|')); + delete config; + + 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::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('|')); + } } @@ -272,13 +353,13 @@ void ConfigDlg::setMap(int index) { emit setMapToDefault(); } - else if ((uint)index <= default_maps.count()) { + else if (default_maps.find(sw_maps[index-1]) != default_maps.end()) { remove_button->setDisabled(true); - emit setMapToFile(QPEApplication::qpeDir() + "share/multikey/" + default_maps[index - 1]); + emit setMapToFile(QPEApplication::qpeDir() + "share/multikey/" + sw_maps[index - 1]); } else { remove_button->setEnabled(true); - emit setMapToFile(custom_maps[index - default_maps.count() - 1]); + emit setMapToFile(sw_maps[index - 1]); } } @@ -296,4 +377,6 @@ void ConfigDlg::addMap() { maps.append(map); custom_maps.append(map); + if (sw_maps.find(map) == sw_maps.end()) + sw_maps.append(map); QFile map_file (map); @@ -322,4 +405,5 @@ void ConfigDlg::addMap() { config.writeEntry("maps", maps, QChar('|')); + config.writeEntry("sw", sw_maps, QChar('|')); config.writeEntry("current", map); @@ -334,5 +418,6 @@ void ConfigDlg::removeMap() { keymaps->removeItem(keymaps->currentItem() + 1); - custom_maps.remove(custom_maps.at(keymaps->currentItem() - default_maps.count())); + custom_maps.remove(sw_maps[keymaps->currentItem()]); + sw_maps.remove(sw_maps.at(keymaps->currentItem())); // write the changes @@ -340,4 +425,5 @@ void ConfigDlg::removeMap() { config.setGroup("keymaps"); config.writeEntry("maps", custom_maps, QChar('|')); + config.writeEntry("sw", sw_maps, QChar('|')); } |