gui.cpp

changeset 100
e40358266290
parent 99
920d51fec412
child 101
69d1464801d7
equal deleted inserted replaced
99:920d51fec412 100:e40358266290
66 66
67 vector<actionmeta> g_ActionMeta; 67 vector<actionmeta> g_ActionMeta;
68 68
69 cfg (bool, lv_colorize, true); 69 cfg (bool, lv_colorize, true);
70 cfg (int, gui_toolbar_iconsize, 24); 70 cfg (int, gui_toolbar_iconsize, 24);
71 cfg (str, gui_colortoolbar, "16:24:|:0:1:2:3:4:5:6:7");
71 extern_cfg (str, io_recentfiles); 72 extern_cfg (str, io_recentfiles);
72 73
73 // ============================================================================= 74 // =============================================================================
74 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 75 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
75 // ============================================================================= 76 // =============================================================================
94 layout->addWidget (R, 0, 0); 95 layout->addWidget (R, 0, 0);
95 layout->addWidget (qObjList, 0, 1); 96 layout->addWidget (qObjList, 0, 1);
96 layout->addWidget (qMessageLog, 1, 0, 1, 2); 97 layout->addWidget (qMessageLog, 1, 0, 1, 2);
97 w->setLayout (layout); 98 w->setLayout (layout);
98 setCentralWidget (w); 99 setCentralWidget (w);
100
101 quickColorMeta = parseQuickColorMeta ();
99 102
100 createMenuActions (); 103 createMenuActions ();
101 createMenus (); 104 createMenus ();
102 createToolbars (); 105 createToolbars ();
103 106
267 initSingleToolBar ("Move"); 270 initSingleToolBar ("Move");
268 ADD_TOOLBAR_ITEM (moveUp) 271 ADD_TOOLBAR_ITEM (moveUp)
269 ADD_TOOLBAR_ITEM (moveDown) 272 ADD_TOOLBAR_ITEM (moveDown)
270 273
271 // ========================================== 274 // ==========================================
275 // Color toolbar
276 qColorToolBar = new QToolBar;
277 addToolBar (Qt::RightToolBarArea, qColorToolBar);
278
279 // ==========================================
272 // Left area toolbars 280 // Left area toolbars
273 g_ToolBarArea = Qt::LeftToolBarArea; 281 g_ToolBarArea = Qt::LeftToolBarArea;
274 initSingleToolBar ("Objects"); 282 initSingleToolBar ("Objects");
275 ADD_TOOLBAR_ITEM (setColor) 283 ADD_TOOLBAR_ITEM (setColor)
276 ADD_TOOLBAR_ITEM (inlineContents) 284 ADD_TOOLBAR_ITEM (inlineContents)
280 ADD_TOOLBAR_ITEM (makeBorders) 288 ADD_TOOLBAR_ITEM (makeBorders)
281 289
282 updateToolBars (); 290 updateToolBars ();
283 } 291 }
284 292
293 // =============================================================================
294 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
295 // =============================================================================
296 std::vector<quickColorMetaEntry> parseQuickColorMeta () {
297 std::vector<quickColorMetaEntry> meta;
298
299 for (str zColor : gui_colortoolbar.value / ":") {
300 if (zColor == "|") {
301 meta.push_back ({nullptr, nullptr, true});
302 } else {
303 color* col = getColor (atoi (zColor));
304 meta.push_back ({col, nullptr, false});
305 }
306 }
307
308 return meta;
309 }
310
311 // =============================================================================
312 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
313 // =============================================================================
285 void ForgeWindow::updateToolBars () { 314 void ForgeWindow::updateToolBars () {
286 for (QToolBar* qBar : qaToolBars) { 315 for (QToolBar* qBar : qaToolBars)
287 qBar->setIconSize (QSize (gui_toolbar_iconsize, gui_toolbar_iconsize)); 316 qBar->setIconSize (QSize (gui_toolbar_iconsize, gui_toolbar_iconsize));
317
318 // Update the quick color toolbar.
319 for (QPushButton* qButton : qaColorButtons)
320 delete qButton;
321
322 qaColorButtons.clear ();
323
324 // Clear the toolbar to remove separators
325 qColorToolBar->clear ();
326
327 for (quickColorMetaEntry& entry : quickColorMeta) {
328 if (entry.bSeparator)
329 qColorToolBar->addSeparator ();
330 else {
331 QPushButton* qColorButton = new QPushButton;
332 qColorButton->setAutoFillBackground (true);
333 qColorButton->setStyleSheet (str::mkfmt ("background-color: %s", entry.col->zColorString.chars()));
334 qColorButton->setToolTip (entry.col->zName);
335
336 connect (qColorButton, SIGNAL (clicked ()), this, SLOT (slot_quickColor ()));
337 qColorToolBar->addWidget (qColorButton);
338 qaColorButtons.push_back (qColorButton);
339
340 entry.btn = qColorButton;
341 }
288 } 342 }
289 } 343 }
290 344
291 // ============================================================================= 345 // =============================================================================
292 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 346 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
510 } 564 }
511 565
512 // ============================================================================= 566 // =============================================================================
513 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 567 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
514 // ============================================================================= 568 // =============================================================================
569 void ForgeWindow::slot_quickColor () {
570 QPushButton* qBtn = static_cast<QPushButton*> (sender ());
571 color* col = nullptr;
572
573 for (quickColorMetaEntry entry : quickColorMeta) {
574 if (entry.btn == qBtn) {
575 col = entry.col;
576 break;
577 }
578 }
579
580 if (col == nullptr)
581 return;
582
583 std::vector<ulong> ulaIndices;
584 std::vector<short> daColors;
585 short dNewColor = col->index ();
586
587 for (LDObject* obj : getSelectedObjects ()) {
588 if (obj->dColor == -1)
589 continue; // uncolored object
590
591 ulaIndices.push_back (obj->getIndex (g_CurrentFile));
592 daColors.push_back (obj->dColor);
593
594 obj->dColor = dNewColor;
595 }
596
597 History::addEntry (new SetColorHistory (ulaIndices, daColors, dNewColor));
598 refresh ();
599 }
600
601 // =============================================================================
602 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
603 // =============================================================================
515 ulong ForgeWindow::getInsertionPoint () { 604 ulong ForgeWindow::getInsertionPoint () {
516 ulong ulIndex; 605 ulong ulIndex;
517 606
518 if (qObjList->selectedItems().size() == 1) { 607 if (qObjList->selectedItems().size() == 1) {
519 // If we have a selection, put the item after it. 608 // If we have a selection, put the item after it.
559 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 648 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
560 // ============================================================================= 649 // =============================================================================
561 QIcon getIcon (const char* sIconName) { 650 QIcon getIcon (const char* sIconName) {
562 return (QIcon (str::mkfmt ("./icons/%s.png", sIconName))); 651 return (QIcon (str::mkfmt ("./icons/%s.png", sIconName)));
563 } 652 }
653
654 // =============================================================================
655 bool confirm (str zMessage) {
656 return QMessageBox::question (g_ForgeWindow, "Confirm", zMessage,
657 (QMessageBox::Yes | QMessageBox::No), QMessageBox::No) == QMessageBox::Yes;
658 }

mercurial