00001
00002 #include <qdir.h>
00003 #include <qregexp.h>
00004 #include <qpe/qpeapplication.h>
00005 #include <qpe/qcopenvelope_qws.h>
00006 #include <unistd.h>
00007 #include "cfgdlg.h"
00008
00009 CfgDlg::CfgDlg(QWidget* parent, CfgFile* cf, QApplication* app, bool mod):
00010 QDialog(parent, "CfgDlg", mod), cfile(cf), application(app) {
00011
00012 setCaption(tr("keyz configurator"));
00013
00014 static QRegExp r("^common.*\\.xml$");
00015 static QRegExp r2("^zkb\\.xml$");
00016 QGridLayout* gl = new QGridLayout(this, 7, 5, 5, 5);
00017
00018 QLabel* flabel = new QLabel("Available Keymaps", this);
00019 files = new QListBox(this);
00020 QPushButton* addButton = new QPushButton(">>", this);
00021 connect(addButton, SIGNAL(clicked()), this, SLOT(add()));
00022 QLabel* klabel = new QLabel("Selected Keymaps", this);
00023 keymaps = new QListBox(this);
00024 connect(keymaps, SIGNAL(highlighted(const QString&)), this, SLOT(keymapHighlighted(const QString&)));
00025 QPushButton* delButton = new QPushButton("<<", this);
00026 connect(delButton, SIGNAL(clicked()), this, SLOT(del()));
00027 QPushButton* slabelButton = new QPushButton("Set Label", this);
00028 connect(slabelButton, SIGNAL(clicked()), this, SLOT(setLabel()));
00029 QLabel* l = new QLabel("Label", this);
00030 label = new QLineEdit(this);
00031 QLabel* adlabel = new QLabel("Auto Repeat Delay (ms)", this);
00032 QLabel* aplabel = new QLabel("Auto Repeat Period (ms)", this);
00033 ad = new QSpinBox(50, 5000, 5, this);
00034 ap = new QSpinBox(0, 5000, 5, this);
00035
00036
00037
00038
00039
00040
00041 gl->setColStretch(0, 1);
00042 gl->setColStretch(1, 1);
00043 gl->setColStretch(3, 1);
00044 gl->setColStretch(4, 1);
00045 gl->setRowStretch(3, 1);
00046 gl->addMultiCellWidget(flabel, 0, 0, 0, 1);
00047 gl->addMultiCellWidget(klabel, 0, 0, 3, 4);
00048 gl->addMultiCellWidget(files, 1, 3, 0, 1);
00049 gl->addMultiCellWidget(keymaps, 1, 3, 3, 4);
00050 gl->addWidget(addButton, 1, 2);
00051 gl->addWidget(delButton, 2, 2);
00052
00053 gl->addWidget(l, 4, 0);
00054 gl->addWidget(label, 4, 1);
00055 gl->addMultiCellWidget(slabelButton, 4, 4, 3, 4);
00056
00057 gl->addMultiCellWidget(adlabel, 5, 5, 0, 2);
00058 gl->addMultiCellWidget(ad, 5, 5, 3, 4);
00059
00060
00061 gl->addMultiCellWidget(aplabel, 6, 6, 0, 2);
00062 gl->addMultiCellWidget(ap, 6, 6, 3, 4);
00063
00064
00065
00066 QList<CfgEntry>& e = cfile->getEntries();
00067
00068 for(uint i = 0; i < e.count(); i++) {
00069 CfgEntry* entry = e.at(i);
00070 keymaps->insertItem(entry->getFile());
00071 m.insert(entry->getFile(), entry->getLabel());
00072 }
00073
00074 QDir dir(QPEApplication::qpeDir()+"share/zkb", "*.xml");
00075 QStringList flist = dir.entryList();
00076 QStringList::Iterator sit;
00077 for(sit = flist.begin(); sit != flist.end(); ++sit) {
00078 if (r.match(*sit)==-1 && r2.match(*sit)==-1&& m.find(*sit) == m.end()) {
00079 files->insertItem(*sit);
00080 }
00081 }
00082
00083 ad->setValue(cfile->getAutorepeatDelay());
00084 ap->setValue(cfile->getAutorepeatPeriod());
00085
00086
00087 }
00088
00089 CfgDlg::~CfgDlg() {
00090 }
00091
00092 void CfgDlg::add() {
00093 if (!files->currentText().isEmpty()) {
00094 QString t = files->currentText();
00095 files->removeItem(files->currentItem());
00096 keymaps->insertItem(t);
00097 cfile->replaceEntry(t, "");
00098 m.replace(t, "");
00099 }
00100 }
00101
00102 void CfgDlg::del() {
00103 if (!keymaps->currentText().isEmpty()) {
00104 QString t = keymaps->currentText();
00105 keymaps->removeItem(keymaps->currentItem());
00106 cfile->deleteEntry(t);
00107 files->insertItem(t);
00108 m.remove(files->currentText());
00109 }
00110 }
00111
00112 void CfgDlg::setLabel() {
00113 if (!keymaps->currentText().isEmpty()) {
00114 cfile->replaceEntry(keymaps->currentText(),
00115 label->text());
00116 m.replace(keymaps->currentText(), label->text());
00117 }
00118 }
00119
00120 void CfgDlg::keymapHighlighted(const QString&text) {
00121 label->setText(*m.find(text));
00122 }
00123
00124
00125 void CfgDlg::accept() {
00126 cfile->setAutorepeatDelay(ad->value());
00127 cfile->setAutorepeatPeriod(ap->value());
00128
00129 CfgParser p;
00130 p.save(Global::applicationFileName("zkb", "zkb.xml" ), *cfile);
00131 QCopEnvelope("QPE/zkb", "reload()");
00132
00133 QDialog::accept();
00134 }
00135