src/configDialog.cpp

changeset 455
c5d14d112034
parent 452
47cc663e4ff4
child 457
3327a32436f4
equal deleted inserted replaced
454:d6b4ed3bf169 455:c5d14d112034
1 /* 1 /*
2 * LDForge: LDraw parts authoring CAD 2 * LDForge: LDraw parts authoring CAD
3 * Copyright (C) 2013 Santeri Piippo 3 * Copyright (C) 2013 Santeri Piippo
4 * 4 *
5 * This program is free software: you can redistribute it and/or modify 5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by 6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or 7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version. 8 * (at your option) any later version.
9 * 9 *
10 * This program is distributed in the hope that it will be useful, 10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details. 13 * GNU General Public License for more details.
14 * 14 *
15 * You should have received a copy of the GNU General Public License 15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>. 16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */ 17 */
18 18
19 #include <QGridLayout> 19 #include <QGridLayout>
33 #include "misc.h" 33 #include "misc.h"
34 #include "colors.h" 34 #include "colors.h"
35 #include "colorSelectDialog.h" 35 #include "colorSelectDialog.h"
36 #include "gldraw.h" 36 #include "gldraw.h"
37 #include "ui_config.h" 37 #include "ui_config.h"
38 #include "build/moc_configDialog.cpp"
38 39
39 extern_cfg (str, gl_bgcolor); 40 extern_cfg (str, gl_bgcolor);
40 extern_cfg (str, gl_maincolor); 41 extern_cfg (str, gl_maincolor);
41 extern_cfg (bool, lv_colorize); 42 extern_cfg (bool, lv_colorize);
42 extern_cfg (bool, gl_colorbfc); 43 extern_cfg (bool, gl_colorbfc);
72 73
73 #define act(N) extern_cfg (keyseq, key_##N); 74 #define act(N) extern_cfg (keyseq, key_##N);
74 #include "actions.h" 75 #include "actions.h"
75 76
76 // ============================================================================= 77 // =============================================================================
77 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 78 // -----------------------------------------------------------------------------
78 // =============================================================================
79 ConfigDialog::ConfigDialog (ForgeWindow* parent) : QDialog (parent) { 79 ConfigDialog::ConfigDialog (ForgeWindow* parent) : QDialog (parent) {
80 ui = new Ui_ConfigUI; 80 ui = new Ui_ConfigUI;
81 ui->setupUi (this); 81 ui->setupUi (this);
82 82
83 initMainTab(); 83 initMainTab();
91 ui->autoCloseNetPrompt->setChecked (net_autoclose); 91 ui->autoCloseNetPrompt->setChecked (net_autoclose);
92 connect (ui->findDownloadPath, SIGNAL (clicked(bool)), this, SLOT (slot_findDownloadFolder())); 92 connect (ui->findDownloadPath, SIGNAL (clicked(bool)), this, SLOT (slot_findDownloadFolder()));
93 } 93 }
94 94
95 // ============================================================================= 95 // =============================================================================
96 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 96 // -----------------------------------------------------------------------------
97 // =============================================================================
98 ConfigDialog::~ConfigDialog() { 97 ConfigDialog::~ConfigDialog() {
99 delete ui; 98 delete ui;
100 } 99 }
101 100
102 // ============================================================================= 101 // =============================================================================
103 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 102 // -----------------------------------------------------------------------------
104 // =============================================================================
105 void ConfigDialog::initMainTab() { 103 void ConfigDialog::initMainTab() {
106 // Init color stuff 104 // Init color stuff
107 setButtonBackground (ui->backgroundColorButton, gl_bgcolor); 105 setButtonBackground (ui->backgroundColorButton, gl_bgcolor);
108 connect (ui->backgroundColorButton, SIGNAL (clicked()), 106 connect (ui->backgroundColorButton, SIGNAL (clicked()),
109 this, SLOT (slot_setGLBackground())); 107 this, SLOT (slot_setGLBackground()));
123 // ui->scemanticInlining->setChecked (edit_schemanticinline); 121 // ui->scemanticInlining->setChecked (edit_schemanticinline);
124 ui->implicitFiles->setChecked (gui_implicitfiles); 122 ui->implicitFiles->setChecked (gui_implicitfiles);
125 } 123 }
126 124
127 // ============================================================================= 125 // =============================================================================
128 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 126 // -----------------------------------------------------------------------------
129 // =============================================================================
130 void ConfigDialog::initShortcutsTab() { 127 void ConfigDialog::initShortcutsTab() {
131 ulong i = 0; 128 ulong i = 0;
132 129
133 #define act(N) addShortcut (key_##N, ACTION(N), i); 130 #define act(N) addShortcut (key_##N, ACTION(N), i);
134 #include "actions.h" 131 #include "actions.h"
155 152
156 ui->shortcutsList->insertItem (i++, item); 153 ui->shortcutsList->insertItem (i++, item);
157 } 154 }
158 155
159 // ============================================================================= 156 // =============================================================================
160 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 157 // -----------------------------------------------------------------------------
161 // =============================================================================
162 void ConfigDialog::initQuickColorTab() { 158 void ConfigDialog::initQuickColorTab() {
163 quickColors = quickColorsFromConfig(); 159 quickColors = quickColorsFromConfig();
164 updateQuickColorList(); 160 updateQuickColorList();
165 161
166 connect (ui->quickColor_add, SIGNAL (clicked()), this, SLOT (slot_setColor())); 162 connect (ui->quickColor_add, SIGNAL (clicked()), this, SLOT (slot_setColor()));
171 connect (ui->quickColor_moveDown, SIGNAL (clicked()), this, SLOT (slot_moveColor())); 167 connect (ui->quickColor_moveDown, SIGNAL (clicked()), this, SLOT (slot_moveColor()));
172 connect (ui->quickColor_clear, SIGNAL (clicked()), this, SLOT (slot_clearColors())); 168 connect (ui->quickColor_clear, SIGNAL (clicked()), this, SLOT (slot_clearColors()));
173 } 169 }
174 170
175 // ============================================================================= 171 // =============================================================================
176 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 172 // -----------------------------------------------------------------------------
177 // =============================================================================
178 void ConfigDialog::initGridTab() { 173 void ConfigDialog::initGridTab() {
179 QGridLayout* gridlayout = new QGridLayout; 174 QGridLayout* gridlayout = new QGridLayout;
180 QLabel* xlabel = new QLabel ("X"), 175 QLabel* xlabel = new QLabel ("X"),
181 *ylabel = new QLabel ("Y"), 176 *ylabel = new QLabel ("Y"),
182 *zlabel = new QLabel ("Z"), 177 *zlabel = new QLabel ("Z"),
211 206
212 ui->grids->setLayout (gridlayout); 207 ui->grids->setLayout (gridlayout);
213 } 208 }
214 209
215 // ============================================================================= 210 // =============================================================================
216 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 211 // -----------------------------------------------------------------------------
217 // =============================================================================
218 static const struct extProgInfo { 212 static const struct extProgInfo {
219 const str name, iconname; 213 const str name, iconname;
220 strconfig* const path; 214 strconfig* const path;
221 mutable QLineEdit* input; 215 mutable QLineEdit* input;
222 mutable QPushButton* setPathButton; 216 mutable QPushButton* setPathButton;
237 EXTPROG (Coverer, coverer) 231 EXTPROG (Coverer, coverer)
238 EXTPROG (Edger2, edger2) 232 EXTPROG (Edger2, edger2)
239 #undef EXTPROG 233 #undef EXTPROG
240 }; 234 };
241 235
236 // =============================================================================
237 // -----------------------------------------------------------------------------
242 void ConfigDialog::initExtProgTab() { 238 void ConfigDialog::initExtProgTab() {
243 QGridLayout* pathsLayout = new QGridLayout; 239 QGridLayout* pathsLayout = new QGridLayout;
244 ulong row = 0; 240 ulong row = 0;
245 241
246 for (const extProgInfo & info : g_extProgInfo) { 242 for (const extProgInfo & info : g_extProgInfo) {
274 270
275 ui->extProgs->setLayout (pathsLayout); 271 ui->extProgs->setLayout (pathsLayout);
276 } 272 }
277 273
278 // ============================================================================= 274 // =============================================================================
279 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 275 // -----------------------------------------------------------------------------
280 // =============================================================================
281 void ConfigDialog::updateQuickColorList (LDQuickColor* sel) { 276 void ConfigDialog::updateQuickColorList (LDQuickColor* sel) {
282 for (QListWidgetItem* item : quickColorItems) 277 for (QListWidgetItem* item : quickColorItems)
283 delete item; 278 delete item;
284 279
285 quickColorItems.clear(); 280 quickColorItems.clear();
312 } 307 }
313 } 308 }
314 } 309 }
315 310
316 // ============================================================================= 311 // =============================================================================
317 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 312 // -----------------------------------------------------------------------------
318 // =============================================================================
319 void ConfigDialog::slot_setColor() { 313 void ConfigDialog::slot_setColor() {
320 LDQuickColor* entry = null; 314 LDQuickColor* entry = null;
321 QListWidgetItem* item = null; 315 QListWidgetItem* item = null;
322 const bool isNew = static_cast<QPushButton*> (sender()) == ui->quickColor_add; 316 const bool isNew = static_cast<QPushButton*> (sender()) == ui->quickColor_add;
323 317
359 353
360 updateQuickColorList (entry); 354 updateQuickColorList (entry);
361 } 355 }
362 356
363 // ============================================================================= 357 // =============================================================================
364 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 358 // -----------------------------------------------------------------------------
365 // =============================================================================
366 void ConfigDialog::slot_delColor() { 359 void ConfigDialog::slot_delColor() {
367 if (ui->quickColorList->selectedItems().size() == 0) 360 if (ui->quickColorList->selectedItems().size() == 0)
368 return; 361 return;
369 362
370 QListWidgetItem* item = ui->quickColorList->selectedItems() [0]; 363 QListWidgetItem* item = ui->quickColorList->selectedItems() [0];
371 quickColors.erase (getItemRow (item, quickColorItems)); 364 quickColors.erase (getItemRow (item, quickColorItems));
372 updateQuickColorList(); 365 updateQuickColorList();
373 } 366 }
374 367
375 // ============================================================================= 368 // =============================================================================
369 // -----------------------------------------------------------------------------
376 void ConfigDialog::slot_moveColor() { 370 void ConfigDialog::slot_moveColor() {
377 const bool up = (static_cast<QPushButton*> (sender()) == ui->quickColor_moveUp); 371 const bool up = (static_cast<QPushButton*> (sender()) == ui->quickColor_moveUp);
378 372
379 if (ui->quickColorList->selectedItems().size() == 0) 373 if (ui->quickColorList->selectedItems().size() == 0)
380 return; 374 return;
392 386
393 updateQuickColorList (&quickColors[dest]); 387 updateQuickColorList (&quickColors[dest]);
394 } 388 }
395 389
396 // ============================================================================= 390 // =============================================================================
391 // -----------------------------------------------------------------------------
397 void ConfigDialog::slot_addColorSeparator() { 392 void ConfigDialog::slot_addColorSeparator() {
398 quickColors << LDQuickColor ({null, null, true}); 393 quickColors << LDQuickColor ({null, null, true});
399 updateQuickColorList (&quickColors[quickColors.size() - 1]); 394 updateQuickColorList (&quickColors[quickColors.size() - 1]);
400 } 395 }
401 396
402 // ============================================================================= 397 // =============================================================================
398 // -----------------------------------------------------------------------------
403 void ConfigDialog::slot_clearColors() { 399 void ConfigDialog::slot_clearColors() {
404 quickColors.clear(); 400 quickColors.clear();
405 updateQuickColorList(); 401 updateQuickColorList();
406 } 402 }
407 403
408 // ============================================================================= 404 // =============================================================================
409 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 405 // -----------------------------------------------------------------------------
410 // =============================================================================
411 void ConfigDialog::pickColor (strconfig& conf, QPushButton* button) { 406 void ConfigDialog::pickColor (strconfig& conf, QPushButton* button) {
412 QColor col = QColorDialog::getColor (QColor (conf)); 407 QColor col = QColorDialog::getColor (QColor (conf));
413 408
414 if (col.isValid()) { 409 if (col.isValid()) {
415 uchar r = col.red(), 410 uchar r = col.red(),
418 conf.value.sprintf ("#%.2X%.2X%.2X", r, g, b); 413 conf.value.sprintf ("#%.2X%.2X%.2X", r, g, b);
419 setButtonBackground (button, conf.value); 414 setButtonBackground (button, conf.value);
420 } 415 }
421 } 416 }
422 417
418 // =============================================================================
419 // -----------------------------------------------------------------------------
423 void ConfigDialog::slot_setGLBackground() { 420 void ConfigDialog::slot_setGLBackground() {
424 pickColor (gl_bgcolor, ui->backgroundColorButton); 421 pickColor (gl_bgcolor, ui->backgroundColorButton);
425 } 422 }
426 423
424 // =============================================================================
425 // -----------------------------------------------------------------------------
427 void ConfigDialog::slot_setGLForeground() { 426 void ConfigDialog::slot_setGLForeground() {
428 pickColor (gl_maincolor, ui->mainColorButton); 427 pickColor (gl_maincolor, ui->mainColorButton);
429 } 428 }
430 429
431 // ============================================================================= 430 // =============================================================================
432 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 431 // -----------------------------------------------------------------------------
433 // =============================================================================
434 void ConfigDialog::setButtonBackground (QPushButton* button, str value) { 432 void ConfigDialog::setButtonBackground (QPushButton* button, str value) {
435 button->setIcon (getIcon ("colorselect")); 433 button->setIcon (getIcon ("colorselect"));
436 button->setAutoFillBackground (true); 434 button->setAutoFillBackground (true);
437 button->setStyleSheet (fmt ("background-color: %1", value)); 435 button->setStyleSheet (fmt ("background-color: %1", value));
438 } 436 }
439 437
440 // ============================================================================= 438 // =============================================================================
439 // -----------------------------------------------------------------------------
441 int ConfigDialog::getItemRow (QListWidgetItem* item, List<QListWidgetItem*>& haystack) { 440 int ConfigDialog::getItemRow (QListWidgetItem* item, List<QListWidgetItem*>& haystack) {
442 int i = 0; 441 int i = 0;
443 442
444 for (QListWidgetItem* it : haystack) { 443 for (QListWidgetItem* it : haystack) {
445 if (it == item) 444 if (it == item)
449 } 448 }
450 return -1; 449 return -1;
451 } 450 }
452 451
453 // ============================================================================= 452 // =============================================================================
453 // -----------------------------------------------------------------------------
454 QListWidgetItem* ConfigDialog::getSelectedQuickColor() { 454 QListWidgetItem* ConfigDialog::getSelectedQuickColor() {
455 if (ui->quickColorList->selectedItems().size() == 0) 455 if (ui->quickColorList->selectedItems().size() == 0)
456 return null; 456 return null;
457 457
458 return ui->quickColorList->selectedItems() [0]; 458 return ui->quickColorList->selectedItems() [0];
459 } 459 }
460 460
461 // ============================================================================= 461 // =============================================================================
462 QList<ShortcutListItem*> ConfigDialog::getShortcutSelection() 462 // -----------------------------------------------------------------------------
463 { 463 QList<ShortcutListItem*> ConfigDialog::getShortcutSelection() {
464 QList<ShortcutListItem*> out; 464 QList<ShortcutListItem*> out;
465 465
466 for (QListWidgetItem* entry : ui->shortcutsList->selectedItems()) 466 for (QListWidgetItem* entry : ui->shortcutsList->selectedItems())
467 out << static_cast<ShortcutListItem*> (entry); 467 out << static_cast<ShortcutListItem*> (entry);
468 468
469 return out; 469 return out;
470 } 470 }
471 471
472 // ============================================================================= 472 // =============================================================================
473 void ConfigDialog::slot_setShortcut() 473 // -----------------------------------------------------------------------------
474 { 474 void ConfigDialog::slot_setShortcut() {
475 QList<ShortcutListItem*> sel = getShortcutSelection(); 475 QList<ShortcutListItem*> sel = getShortcutSelection();
476 476
477 if (sel.size() < 1) 477 if (sel.size() < 1)
478 return; 478 return;
479 479
483 setShortcutText (item); 483 setShortcutText (item);
484 } 484 }
485 485
486 // ============================================================================= 486 // =============================================================================
487 // ----------------------------------------------------------------------------- 487 // -----------------------------------------------------------------------------
488 void ConfigDialog::slot_resetShortcut() 488 void ConfigDialog::slot_resetShortcut() {
489 {
490 QList<ShortcutListItem*> sel = getShortcutSelection(); 489 QList<ShortcutListItem*> sel = getShortcutSelection();
491 490
492 for (ShortcutListItem* item : sel) { 491 for (ShortcutListItem* item : sel) {
493 item->keyConfig()->reset(); 492 item->keyConfig()->reset();
494 setShortcutText (item); 493 setShortcutText (item);
542 str keybind = item->keyConfig()->value.toString(); 541 str keybind = item->keyConfig()->value.toString();
543 item->setText (fmt ("%1 (%2)", label, keybind)); 542 item->setText (fmt ("%1 (%2)", label, keybind));
544 } 543 }
545 544
546 // ============================================================================= 545 // =============================================================================
547 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 546 // -----------------------------------------------------------------------------
548 // =============================================================================
549 str ConfigDialog::quickColorString() { 547 str ConfigDialog::quickColorString() {
550 str val; 548 str val;
551 549
552 for (LDQuickColor entry : quickColors) { 550 for (LDQuickColor entry : quickColors) {
553 if (val.length() > 0) 551 if (val.length() > 0)
560 } 558 }
561 559
562 return val; 560 return val;
563 } 561 }
564 562
563 // =============================================================================
564 // -----------------------------------------------------------------------------
565 const Ui_ConfigUI* ConfigDialog::getUI() const { 565 const Ui_ConfigUI* ConfigDialog::getUI() const {
566 return ui; 566 return ui;
567 } 567 }
568 568
569 // =============================================================================
570 // -----------------------------------------------------------------------------
569 float ConfigDialog::getGridValue (int i, int j) const { 571 float ConfigDialog::getGridValue (int i, int j) const {
570 return dsb_gridData[i][j]->value(); 572 return dsb_gridData[i][j]->value();
571 } 573 }
572 574
573 // ============================================================================= 575 // =============================================================================
574 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 576 // -----------------------------------------------------------------------------
575 // =============================================================================
576 void ConfigDialog::staticDialog() { 577 void ConfigDialog::staticDialog() {
577 ConfigDialog dlg (g_win); 578 ConfigDialog dlg (g_win);
578 579
579 if (dlg.exec()) { 580 if (dlg.exec()) {
580 // Apply configuration 581 // Apply configuration
646 647
647 updateOutput(); 648 updateOutput();
648 } 649 }
649 650
650 // ============================================================================= 651 // =============================================================================
651 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 652 // -----------------------------------------------------------------------------
652 // =============================================================================
653 bool KeySequenceDialog::staticDialog (keyseqconfig* cfg, QWidget* parent) { 653 bool KeySequenceDialog::staticDialog (keyseqconfig* cfg, QWidget* parent) {
654 KeySequenceDialog dlg (cfg->value, parent); 654 KeySequenceDialog dlg (cfg->value, parent);
655 655
656 if (dlg.exec() == false) 656 if (dlg.exec() == false)
657 return false; 657 return false;
659 cfg->value = dlg.seq; 659 cfg->value = dlg.seq;
660 return true; 660 return true;
661 } 661 }
662 662
663 // ============================================================================= 663 // =============================================================================
664 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 664 // -----------------------------------------------------------------------------
665 // =============================================================================
666 void KeySequenceDialog::updateOutput() { 665 void KeySequenceDialog::updateOutput() {
667 str shortcut = seq.toString(); 666 str shortcut = seq.toString();
668 667
669 if (seq == QKeySequence()) 668 if (seq == QKeySequence())
670 shortcut = "&lt;empty&gt;"; 669 shortcut = "&lt;empty&gt;";
672 str text = fmt ("<center><b>%1</b></center>", shortcut); 671 str text = fmt ("<center><b>%1</b></center>", shortcut);
673 lb_output->setText (text); 672 lb_output->setText (text);
674 } 673 }
675 674
676 // ============================================================================= 675 // =============================================================================
677 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 676 // -----------------------------------------------------------------------------
678 // =============================================================================
679 void KeySequenceDialog::keyPressEvent (QKeyEvent* ev) { 677 void KeySequenceDialog::keyPressEvent (QKeyEvent* ev) {
680 seq = ev->key() + ev->modifiers(); 678 seq = ev->key() + ev->modifiers();
681 updateOutput(); 679 updateOutput();
682 } 680 }
683
684 #include "build/moc_configDialog.cpp"

mercurial