summaryrefslogtreecommitdiff
path: root/inputmethods/multikey/configdlg.cpp
Unidiff
Diffstat (limited to 'inputmethods/multikey/configdlg.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--inputmethods/multikey/configdlg.cpp238
1 files changed, 162 insertions, 76 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
@@ -7,12 +7,13 @@
7 * 7 *
8 * 8 *
9 */ 9 */
10 10
11#include <qpe/qpeapplication.h> 11#include <qpe/qpeapplication.h>
12#include <qpe/config.h> 12#include <qpe/config.h>
13#include <qpe/resource.h>
13 14
14#include <qwidget.h> 15#include <qwidget.h>
15#include <qdialog.h> 16#include <qdialog.h>
16#include <qtabwidget.h> 17#include <qtabwidget.h>
17#include <qvbox.h> 18#include <qvbox.h>
18#include <qgrid.h> 19#include <qgrid.h>
@@ -20,12 +21,13 @@
20#include <qlabel.h> 21#include <qlabel.h>
21#include <qcheckbox.h> 22#include <qcheckbox.h>
22#include <qsizepolicy.h> 23#include <qsizepolicy.h>
23#include <qpushbutton.h> 24#include <qpushbutton.h>
24#include <qlistbox.h> 25#include <qlistbox.h>
25#include <qstringlist.h> 26#include <qstringlist.h>
27#include <qtoolbutton.h>
26#include <opie/ofiledialog.h> 28#include <opie/ofiledialog.h>
27#include <opie/colordialog.h> 29#include <opie/colordialog.h>
28#include <qdir.h> 30#include <qdir.h>
29#include <qfileinfo.h> 31#include <qfileinfo.h>
30#include "configdlg.h" 32#include "configdlg.h"
31#include "keyboard.h" 33#include "keyboard.h"
@@ -45,136 +47,131 @@ ConfigDlg::ConfigDlg () : QTabWidget ()
45 QVBox *gen_box = new QVBox (this); 47 QVBox *gen_box = new QVBox (this);
46 gen_box->setMargin(3); 48 gen_box->setMargin(3);
47 addTab(gen_box, tr("General Settings")); 49 addTab(gen_box, tr("General Settings"));
48 50
49 QGroupBox *map_group = new QGroupBox (2, Qt::Vertical, tr("Keymap File"), gen_box); 51 QGroupBox *map_group = new QGroupBox (2, Qt::Vertical, tr("Keymap File"), gen_box);
50 52
51 keymaps = new QListBox (map_group); 53 QHBox *hbox1 = new QHBox(map_group);
54 keymaps = new QListBox(hbox1);
52 keymaps->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); 55 keymaps->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding));
56 QVBox *vbox1 = new QVBox(hbox1);
57
58 QToolButton *tb1 = new QToolButton(vbox1, tr("Move Up"));
59 tb1->setPixmap(Resource::loadPixmap("up"));
60 tb1->setAutoRaise(TRUE);
61 tb1->setFocusPolicy(QWidget::NoFocus);
62 tb1->setToggleButton(FALSE);
63 connect(tb1, SIGNAL(clicked()), this, SLOT(moveSelectedUp()));
64
65 QToolButton *tb2 = new QToolButton(vbox1, tr("Move Down"));
66 tb2->setPixmap(Resource::loadPixmap("down"));
67 tb2->setAutoRaise(TRUE);
68 tb2->setFocusPolicy(QWidget::NoFocus);
69 tb2->setToggleButton(FALSE);
70 connect(tb2, SIGNAL(clicked()), this, SLOT(moveSelectedDown()));
53 71
54 QString cur(tr("Current Language")); 72 QString cur(tr("Current Language"));
55 keymaps->insertItem(cur); 73 keymaps->insertItem(cur);
56 keymaps->setSelected(0, true); 74 keymaps->setSelected(0, true);
57 75
58 QDir map_dir(QPEApplication::qpeDir() + "/share/multikey", "*.keymap"); 76 QDir map_dir(QPEApplication::qpeDir() + "/share/multikey", "*.keymap");
59 default_maps = map_dir.entryList(); // so i can access it in other places 77 default_maps = map_dir.entryList(); // so i can access it in other places
60
61 for (uint i = 0; i < map_dir.count(); i++) {
62
63 QFile map (map_dir.absPath() + "/" + map_dir[i]);
64 if (map.open(IO_ReadOnly)) {
65
66 QString line; bool found = 0;
67
68 map.readLine(line, 1024);
69 while (!map.atEnd()) {
70
71 if (line.find(QRegExp("^title\\s*=\\s*")) != -1) {
72
73 keymaps->insertItem(line.right(line.length() - line.find(QChar('=')) - 1).stripWhiteSpace());
74 found = 1;
75 break;
76 }
77 map.readLine(line, 1024);
78 }
79 if (!found) keymaps->insertItem(map_dir.absPath() + "/" + map_dir[i]);
80
81 map.close();
82 }
83 if (map_dir.absPath() + "/" + map_dir[i] == current_map) {
84
85 keymaps->setSelected(i + 1, true);
86 }
87
88 }
89
90 custom_maps = config.readListEntry("maps", QChar('|')); 78 custom_maps = config.readListEntry("maps", QChar('|'));
79 sw_maps = ConfigDlg::loadSw();
91 80
92 for (uint i = 0; i < custom_maps.count(); i++) { 81 QStringList sw_copy(sw_maps);
82 for (uint i = 0; i < sw_copy.count(); i++) {
93 83
94 if (map_dir.exists(QFileInfo(custom_maps[i]).fileName(), false) 84 QString keymap_map;
95 || !QFile::exists(custom_maps[i])) { 85 if (sw_copy[i][0] != '/') { /* share/multikey */
96 86
97 custom_maps.remove(custom_maps.at(i)); 87 keymap_map = map_dir.absPath() + "/" + sw_copy[i];
88 } else {
98 89
99 // remove it from the list too 90 if (map_dir.exists(QFileInfo(sw_copy[i]).fileName(), false)
100 config.writeEntry("maps", custom_maps.join("|")); 91 || !QFile::exists(sw_copy[i])) {
101 92
93 custom_maps.remove(sw_copy[i]);
94 sw_maps.remove(sw_copy[i]);
102 95
103 } else { 96 // remove it from the list too
97 config.writeEntry("maps", custom_maps.join("|"));
104 98
105 QFile map (custom_maps[i]); 99 continue;
106 if (map.open(IO_ReadOnly)) { 100 }
101 keymap_map = sw_copy[i];
102 }
107 103
108 QString line; bool found = 0; 104 QFile map(keymap_map);
105 if (map.open(IO_ReadOnly)) {
109 106
110 map.readLine(line, 1024); 107 QString line; bool found = 0;
111 while (!map.atEnd()) {
112 108
113 if (line.find(QRegExp("^title\\s*=\\s*")) != -1) { 109 map.readLine(line, 1024);
114 110 while (!map.atEnd()) {
115 keymaps->insertItem(line.right(line.length() - line.find(QChar('=')) - 1).stripWhiteSpace());
116 found = 1;
117 break;
118 }
119 map.readLine(line, 1024);
120 }
121 if (!found) keymaps->insertItem(custom_maps[i]);
122
123 map.close();
124 }
125 if (custom_maps[i] == current_map) {
126 111
127 keymaps->setSelected(map_dir.count() + i + 1, true); 112 if (line.find(QRegExp("^title\\s*=\\s*")) != -1) {
128 } 113
129 } 114 keymaps->insertItem(line.right(line.length() - line.find(QChar('=')) - 1).stripWhiteSpace());
115 found = 1;
116 break;
117 }
118 map.readLine(line, 1024);
119 }
120 if (!found)
121 keymaps->insertItem(keymap_map);
122
123 map.close();
124 }
125
126 if (keymap_map == current_map) {
127 keymaps->setSelected(i + 1, true);
128 }
130 } 129 }
131 130
132 // have to "+1" because the "current language" listItem... remember? 131 // have to "+1" because the "current language" listItem... remember?
133 132
134 connect(keymaps, SIGNAL(highlighted(int)), SLOT(setMap(int))); 133 connect(keymaps, SIGNAL(highlighted(int)), SLOT(setMap(int)));
135 134
136
137 QGrid *add_remove_grid = new QGrid(2, map_group); 135 QGrid *add_remove_grid = new QGrid(2, map_group);
138 add_remove_grid->setMargin(3); 136 add_remove_grid->setMargin(3);
139 add_remove_grid->setSpacing(3); 137 add_remove_grid->setSpacing(3);
140 138
141 add_button = new QPushButton(tr("Add"), add_remove_grid); 139 add_button = new QPushButton(tr("Add"), add_remove_grid);
142 add_button->setFlat((bool)1); 140 add_button->setFlat(TRUE);
143 connect(add_button, SIGNAL(clicked()), SLOT(addMap())); 141 connect(add_button, SIGNAL(clicked()), SLOT(addMap()));
144 142
145 remove_button = new QPushButton(tr("Remove"), add_remove_grid); 143 remove_button = new QPushButton(tr("Remove"), add_remove_grid);
146 remove_button->setFlat((bool)1); 144 remove_button->setFlat(TRUE);
147 if ((int)map_dir.count() >= keymaps->currentItem()) 145 if (default_maps.find(QFileInfo(current_map).fileName()) != default_maps.end())
148 remove_button->setDisabled(true); 146 remove_button->setDisabled(true);
149 connect(remove_button, SIGNAL(clicked()), SLOT(removeMap())); 147 connect(remove_button, SIGNAL(clicked()), SLOT(removeMap()));
150 148
151 // make a box that will contain the buttons on the bottom 149 // make a box that will contain the buttons on the bottom
152 QGrid *other_grid = new QGrid(2, gen_box); 150 QGrid *other_grid = new QGrid(2, gen_box);
153 pick_button = new QCheckBox(tr("Pickboard"), other_grid); 151 pick_button = new QCheckBox(tr("Pickboard"), other_grid);
154 152
155 config.setGroup ("general"); 153 config.setGroup ("general");
156 bool pick_open = config.readBoolEntry ("usePickboard", (bool)0); // default closed 154 bool pick_open = config.readBoolEntry ("usePickboard", FALSE); // default closed
157 if (pick_open) { 155 if (pick_open) {
158 156
159 pick_button->setChecked(true); 157 pick_button->setChecked(true);
160 } 158 }
161 159
162 // by connecting it after checking it, the signal isn't emmited 160 // by connecting it after checking it, the signal isn't emmited
163 connect (pick_button, SIGNAL(clicked()), this, SLOT(pickTog())); 161 connect (pick_button, SIGNAL(clicked()), this, SLOT(pickTog()));
164 162
165 repeat_button = new QCheckBox(tr("Key Repeat"), other_grid); 163 repeat_button = new QCheckBox(tr("Key Repeat"), other_grid);
166 bool repeat_on = config.readBoolEntry ("useRepeat", (bool)1); 164 bool repeat_on = config.readBoolEntry ("useRepeat", TRUE);
167 165
168 if (repeat_on) { 166 if (repeat_on) {
169 167
170 repeat_button->setChecked(true); 168 repeat_button->setChecked(true);
171 } 169 }
172 connect (repeat_button, SIGNAL(clicked()), this, SLOT(repeatTog())); 170 connect (repeat_button, SIGNAL(clicked()), this, SLOT(repeatTog()));
173 171
174
175 /* 172 /*
176 * 'color' tab 173 * 'color' tab
177 */ 174 */
178 175
179 QGrid *color_box = new QGrid(2, this); 176 QGrid *color_box = new QGrid(2, this);
180 color_box->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed)); 177 color_box->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed));
@@ -186,13 +183,13 @@ ConfigDlg::ConfigDlg () : QTabWidget ()
186 QStringList color; 183 QStringList color;
187 config.setGroup("colors"); 184 config.setGroup("colors");
188 185
189 label = new QLabel(tr("Key Color"), color_box); 186 label = new QLabel(tr("Key Color"), color_box);
190 keycolor_button = new QPushButton(color_box); 187 keycolor_button = new QPushButton(color_box);
191 connect(keycolor_button, SIGNAL(clicked()), SLOT(keyColorClicked())); 188 connect(keycolor_button, SIGNAL(clicked()), SLOT(keyColorClicked()));
192 keycolor_button->setFlat((bool)1); 189 keycolor_button->setFlat(TRUE);
193 color = config.readListEntry("keycolor", QChar(',')); 190 color = config.readListEntry("keycolor", QChar(','));
194 /* 191 /*
195 * hopefully not required 192 * hopefully not required
196 193
197 if (color.isEmpty()) { 194 if (color.isEmpty()) {
198 color = QStringList::split(",", "240,240,240"); 195 color = QStringList::split(",", "240,240,240");
@@ -203,35 +200,119 @@ ConfigDlg::ConfigDlg () : QTabWidget ()
203 keycolor_button->setPalette(QPalette(QColor(color[0].toInt(), color[1].toInt(), color[2].toInt()))); 200 keycolor_button->setPalette(QPalette(QColor(color[0].toInt(), color[1].toInt(), color[2].toInt())));
204 201
205 202
206 label = new QLabel(tr("Key Pressed Color"), color_box); 203 label = new QLabel(tr("Key Pressed Color"), color_box);
207 keycolor_pressed_button = new QPushButton(color_box); 204 keycolor_pressed_button = new QPushButton(color_box);
208 connect(keycolor_pressed_button, SIGNAL(clicked()), SLOT(keyColorPressedClicked())); 205 connect(keycolor_pressed_button, SIGNAL(clicked()), SLOT(keyColorPressedClicked()));
209 keycolor_pressed_button->setFlat((bool)1); 206 keycolor_pressed_button->setFlat(TRUE);
210 color = config.readListEntry("keycolor_pressed", QChar(',')); 207 color = config.readListEntry("keycolor_pressed", QChar(','));
211 keycolor_pressed_button->setPalette(QPalette((QColor(color[0].toInt(), color[1].toInt(), color[2].toInt())))); 208 keycolor_pressed_button->setPalette(QPalette((QColor(color[0].toInt(), color[1].toInt(), color[2].toInt()))));
212 209
213 label = new QLabel(tr("Line Color"), color_box); 210 label = new QLabel(tr("Line Color"), color_box);
214 keycolor_lines_button = new QPushButton(color_box); 211 keycolor_lines_button = new QPushButton(color_box);
215 connect(keycolor_lines_button, SIGNAL(clicked()), SLOT(keyColorLinesClicked())); 212 connect(keycolor_lines_button, SIGNAL(clicked()), SLOT(keyColorLinesClicked()));
216 keycolor_lines_button->setFlat((bool)1); 213 keycolor_lines_button->setFlat(TRUE);
217 color = config.readListEntry("keycolor_lines", QChar(',')); 214 color = config.readListEntry("keycolor_lines", QChar(','));
218 keycolor_lines_button->setPalette(QPalette((QColor(color[0].toInt(), color[1].toInt(), color[2].toInt())))); 215 keycolor_lines_button->setPalette(QPalette((QColor(color[0].toInt(), color[1].toInt(), color[2].toInt()))));
219 216
220 217
221 label = new QLabel(tr("Text Color"), color_box); 218 label = new QLabel(tr("Text Color"), color_box);
222 textcolor_button = new QPushButton(color_box); 219 textcolor_button = new QPushButton(color_box);
223 connect(textcolor_button, SIGNAL(clicked()), SLOT(textColorClicked())); 220 connect(textcolor_button, SIGNAL(clicked()), SLOT(textColorClicked()));
224 textcolor_button->setFlat((bool)1); 221 textcolor_button->setFlat(TRUE);
225 color = config.readListEntry("textcolor", QChar(',')); 222 color = config.readListEntry("textcolor", QChar(','));
226 textcolor_button->setPalette(QPalette((QColor(color[0].toInt(), color[1].toInt(), color[2].toInt())))); 223 textcolor_button->setPalette(QPalette((QColor(color[0].toInt(), color[1].toInt(), color[2].toInt()))));
227 224
228
229 label = new QLabel("", color_box); // a spacer so the above buttons dont expand 225 label = new QLabel("", color_box); // a spacer so the above buttons dont expand
230 label->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); 226 label->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding));
227}
228
229ConfigDlg::~ConfigDlg()
230{
231 emit reloadSw();
232}
233
234QStringList ConfigDlg::loadSw()
235{
236 Config *config = new Config("multikey");
237 config->setGroup("keymaps");
238 QDir map_dir(QPEApplication::qpeDir() + "/share/multikey", "*.keymap");
239 QStringList d_maps = map_dir.entryList(); // so i can access it in other places
240 QStringList c_maps = config->readListEntry("maps", QChar('|'));
241 QStringList s_maps = config->readListEntry("sw", QChar('|'));
242 delete config;
243
244 if (!s_maps.count())
245 {
246 s_maps = d_maps+c_maps;
247 }
248 else
249 {
250 /* Clear non existents entries */
251 QStringList s_copy = s_maps;
252 for (uint i = 0; i < s_copy.count(); ++i) {
253 if (d_maps.find(s_copy[i]) == d_maps.end()
254 && c_maps.find(s_copy[i]) == c_maps.end()) {
255 s_maps.remove(s_copy[i]);
256 }
257 }
258 /* Update sw_maps from default_maps */
259 for (uint i = 0; i < d_maps.count(); ++i) {
260 if (s_maps.find(d_maps[i]) == s_maps.end()) {
261 s_maps.append(d_maps[i]);
262 }
263 }
264 /* Update sw_maps from custom_maps */
265 for (uint i = 0; i < c_maps.count(); ++i) {
266 if (s_maps.find(c_maps[i]) == s_maps.end()) {
267 s_maps.append(c_maps[i]);
268 }
269 }
270 }
271
272 return s_maps;
273}
274
275void ConfigDlg::moveSelectedUp()
276{
277 int i = keymaps->currentItem();
278 /* Ignore Current Language */
279 if (i > 1) {
280 QString t = sw_maps[i-1];
281 sw_maps[i-1] = sw_maps[i-2];
282 sw_maps[i-2] = t;
283
284 QString item = keymaps->currentText();
285 keymaps->removeItem(i);
286 keymaps->insertItem(item, i-1);
287 keymaps->setCurrentItem(i-1);
288
289 Config config("multikey");
290 config.setGroup("keymaps");
291 config.writeEntry("sw", sw_maps, QChar('|'));
292 }
293}
231 294
295void ConfigDlg::moveSelectedDown()
296{
297 int i = keymaps->currentItem();
298 /* Ignore Current Language */
299 if (i > 0 && i < (int)keymaps->count() - 1) {
300 QString t = sw_maps[i-1];
301 sw_maps[i-1] = sw_maps[i];
302 sw_maps[i] = t;
303
304 QString item = keymaps->currentText();
305 keymaps->removeItem(i);
306 keymaps->insertItem(item, i+1);
307 keymaps->setCurrentItem(i+1);
308
309 Config config("multikey");
310 config.setGroup("keymaps");
311 config.writeEntry("sw", sw_maps, QChar('|'));
312 }
232} 313}
233 314
234void ConfigDlg::pickTog() { 315void ConfigDlg::pickTog() {
235 316
236 Config config ("multikey"); 317 Config config ("multikey");
237 config.setGroup ("general"); 318 config.setGroup ("general");
@@ -268,21 +349,21 @@ void ConfigDlg::setMap(int index) {
268 349
269 if (index == 0) { 350 if (index == 0) {
270 351
271 remove_button->setDisabled(true); 352 remove_button->setDisabled(true);
272 emit setMapToDefault(); 353 emit setMapToDefault();
273 } 354 }
274 else if ((uint)index <= default_maps.count()) { 355 else if (default_maps.find(sw_maps[index-1]) != default_maps.end()) {
275 356
276 remove_button->setDisabled(true); 357 remove_button->setDisabled(true);
277 emit setMapToFile(QPEApplication::qpeDir() + "share/multikey/" + default_maps[index - 1]); 358 emit setMapToFile(QPEApplication::qpeDir() + "share/multikey/" + sw_maps[index - 1]);
278 359
279 } else { 360 } else {
280 361
281 remove_button->setEnabled(true); 362 remove_button->setEnabled(true);
282 emit setMapToFile(custom_maps[index - default_maps.count() - 1]); 363 emit setMapToFile(sw_maps[index - 1]);
283 } 364 }
284} 365}
285 366
286// ConfigDlg::addMap() {{{1 367// ConfigDlg::addMap() {{{1
287void ConfigDlg::addMap() { 368void ConfigDlg::addMap() {
288 369
@@ -292,12 +373,14 @@ void ConfigDlg::addMap() {
292 373
293 Config config ("multikey"); 374 Config config ("multikey");
294 config.setGroup("keymaps"); 375 config.setGroup("keymaps");
295 QStringList maps = config.readListEntry("maps", QChar('|')); 376 QStringList maps = config.readListEntry("maps", QChar('|'));
296 maps.append(map); 377 maps.append(map);
297 custom_maps.append(map); 378 custom_maps.append(map);
379 if (sw_maps.find(map) == sw_maps.end())
380 sw_maps.append(map);
298 381
299 QFile map_file (map); 382 QFile map_file (map);
300 if (map_file.open(IO_ReadOnly)) { 383 if (map_file.open(IO_ReadOnly)) {
301 384
302 QString line; bool found = 0; 385 QString line; bool found = 0;
303 386
@@ -318,30 +401,33 @@ void ConfigDlg::addMap() {
318 } 401 }
319 402
320 keymaps->setSelected(keymaps->count() - 1, true); 403 keymaps->setSelected(keymaps->count() - 1, true);
321 404
322 405
323 config.writeEntry("maps", maps, QChar('|')); 406 config.writeEntry("maps", maps, QChar('|'));
407 config.writeEntry("sw", sw_maps, QChar('|'));
324 config.writeEntry("current", map); 408 config.writeEntry("current", map);
325 409
326} 410}
327 411
328// ConfigDlg::removeMap() {{{1 412// ConfigDlg::removeMap() {{{1
329void ConfigDlg::removeMap() { 413void ConfigDlg::removeMap() {
330 414
331 // move selection up one 415 // move selection up one
332 keymaps->setSelected(keymaps->currentItem() - 1, true); 416 keymaps->setSelected(keymaps->currentItem() - 1, true);
333 // delete the next selected item cus you just moved it up 417 // delete the next selected item cus you just moved it up
334 keymaps->removeItem(keymaps->currentItem() + 1); 418 keymaps->removeItem(keymaps->currentItem() + 1);
335 419
336 custom_maps.remove(custom_maps.at(keymaps->currentItem() - default_maps.count())); 420 custom_maps.remove(sw_maps[keymaps->currentItem()]);
421 sw_maps.remove(sw_maps.at(keymaps->currentItem()));
337 422
338 // write the changes 423 // write the changes
339 Config config ("multikey"); 424 Config config ("multikey");
340 config.setGroup("keymaps"); 425 config.setGroup("keymaps");
341 config.writeEntry("maps", custom_maps, QChar('|')); 426 config.writeEntry("maps", custom_maps, QChar('|'));
427 config.writeEntry("sw", sw_maps, QChar('|'));
342} 428}
343 429
344/* ConfigDlg::slots for the color buttons {{{1 430/* ConfigDlg::slots for the color buttons {{{1
345 * 431 *
346 * these four slots are almost the same, except for the names. i was thinking 432 * these four slots are almost the same, except for the names. i was thinking
347 * of making a map with pointers to the buttons and names of the configEntry 433 * of making a map with pointers to the buttons and names of the configEntry