Mon, 22 Apr 2013 14:14:25 +0300
Make grid actions regular actions rather than auto-generated, this way they can have keyboard shortcuts
gui.cpp | file | annotate | diff | comparison | revisions | |
gui.h | file | annotate | diff | comparison | revisions | |
gui_actions.cpp | file | annotate | diff | comparison | revisions | |
zz_setContentsDialog.cpp | file | annotate | diff | comparison | revisions |
--- a/gui.cpp Mon Apr 22 03:53:21 2013 +0300 +++ b/gui.cpp Mon Apr 22 14:14:25 2013 +0300 @@ -77,6 +77,9 @@ EXTERN_ACTION (rotateYPos) EXTERN_ACTION (rotateZPos) EXTERN_ACTION (roundCoords) +EXTERN_ACTION (gridCoarse) +EXTERN_ACTION (gridMedium) +EXTERN_ACTION (gridFine) #ifndef RELEASE EXTERN_ACTION (addTestQuad) @@ -92,9 +95,9 @@ cfg (str, gui_colortoolbar, "16:24:|:0:1:2:3:4:5:6:7"); extern_cfg (str, io_recentfiles); -// ========================================================================= // -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -// ========================================================================= // +// ============================================================================= +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +// ============================================================================= ForgeWindow::ForgeWindow () { g_ForgeWindow = this; R = new GLRenderer; @@ -136,9 +139,9 @@ resize (800, 600); } -// ========================================================================= // -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -// ========================================================================= // +// ============================================================================= +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +// ============================================================================= void ForgeWindow::createMenuActions () { // Create the actions based on stored meta. for (actionmeta meta : g_ActionMeta) { @@ -150,6 +153,11 @@ connect (qAct, SIGNAL (triggered ()), this, SLOT (slot_action ())); } + // Grid actions are checkable + ACTION_NAME (gridCoarse)->setCheckable (true); + ACTION_NAME (gridMedium)->setCheckable (true); + ACTION_NAME (gridFine)->setCheckable (true); + // things not implemented yet QAction* const qaDisabledActions[] = { ACTION_NAME (newSubfile), @@ -162,9 +170,9 @@ History::updateActions (); } -// ========================================================================= // -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -// ========================================================================= // +// ============================================================================= +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +// ============================================================================= void ForgeWindow::createMenus () { qRecentFilesMenu = new QMenu (tr ("Open &Recent")); qRecentFilesMenu->setIcon (getIcon ("open-recent")); @@ -221,6 +229,10 @@ qMoveMenu->addAction (ACTION_NAME (moveUp)); // Move Up qMoveMenu->addAction (ACTION_NAME (moveDown)); // Move Down qMoveMenu->addSeparator (); // ----- + qMoveMenu->addAction (ACTION_NAME (gridCoarse)); // Coarse Grid + qMoveMenu->addAction (ACTION_NAME (gridMedium)); // Medium Grid + qMoveMenu->addAction (ACTION_NAME (gridFine)); // Fine Grid + qMoveMenu->addSeparator (); // ----- qMoveMenu->addAction (ACTION_NAME (moveXPos)); // Move +X qMoveMenu->addAction (ACTION_NAME (moveXNeg)); // Move -X qMoveMenu->addAction (ACTION_NAME (moveYPos)); // Move +Y @@ -254,9 +266,9 @@ qHelpMenu->addAction (ACTION_NAME (aboutQt)); // About Qt } -// ========================================================================= // -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -// ========================================================================= // +// ============================================================================= +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +// ============================================================================= void ForgeWindow::updateRecentFilesMenu () { // First, clear any items in the recent files menu for (QAction* qRecent : qaRecentFiles) @@ -275,9 +287,9 @@ } } -// ========================================================================= // -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -// ========================================================================= // +// ============================================================================= +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +// ============================================================================= #define ADD_TOOLBAR_ITEM(ACT) g_CurrentToolBar->addAction (ACTION_NAME (ACT)); static QToolBar* g_CurrentToolBar; static Qt::ToolBarArea g_ToolBarArea = Qt::TopToolBarArea; @@ -346,18 +358,10 @@ // ========================================== // Grid toolbar - qGridToolBar = new QToolBar ("Grids"); - addToolBar (Qt::TopToolBarArea, qGridToolBar); - - for (int i = 0; i < g_NumGrids; ++i) { - QIcon icon = getIcon (format ("grid-%s", str (g_GridInfo[i].name).tolower ().chars ())); - gridActions[i] = new QAction (icon, "", this); - gridActions[i]->setCheckable (true); - - qGridToolBar->addAction (gridActions[i]); - - connect (gridActions[i], SIGNAL (triggered ()), this, SLOT (slot_setGrid ())); - } + initSingleToolBar ("Grids"); + ADD_TOOLBAR_ITEM (gridCoarse) + ADD_TOOLBAR_ITEM (gridMedium) + ADD_TOOLBAR_ITEM (gridFine) // ========================================== // Color toolbar @@ -381,9 +385,9 @@ updateToolBars (); } -// ========================================================================= // -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -// ========================================================================= // +// ============================================================================= +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +// ============================================================================= std::vector<quickColorMetaEntry> parseQuickColorMeta () { std::vector<quickColorMetaEntry> meta; @@ -399,9 +403,9 @@ return meta; } -// ========================================================================= // -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -// ========================================================================= // +// ============================================================================= +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +// ============================================================================= void ForgeWindow::updateToolBars () { for (QToolBar* qBar : qaToolBars) qBar->setIconSize (QSize (gui_toolbar_iconsize, gui_toolbar_iconsize)); @@ -432,13 +436,22 @@ } } - for (short i = 0; i < g_NumGrids; ++i) - gridActions[i]->setChecked (i == grid); + updateGridToolBar (); } -// ========================================================================= // -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -// ========================================================================= // +// ============================================================================= +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +// ============================================================================= +void ForgeWindow::updateGridToolBar () { + // Ensure that the current grid - and only the current grid - is selected. + ACTION_NAME (gridCoarse)->setChecked (grid == Grid::Coarse); + ACTION_NAME (gridMedium)->setChecked (grid == Grid::Medium); + ACTION_NAME (gridFine)->setChecked (grid == Grid::Fine); +} + +// ============================================================================= +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +// ============================================================================= void ForgeWindow::setTitle () { str zTitle = APPNAME_DISPLAY " v" VERSION_STRING; @@ -458,9 +471,9 @@ setWindowTitle (zTitle.chars()); } -// ========================================================================= // -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -// ========================================================================= // +// ============================================================================= +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +// ============================================================================= void ForgeWindow::slot_action () { // Get the action that triggered this slot. QAction* qAct = static_cast<QAction*> (sender ()); @@ -484,9 +497,9 @@ (*pMeta->handler) (); } -// ========================================================================= // -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -// ========================================================================= // +// ============================================================================= +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +// ============================================================================= void ForgeWindow::deleteSelection (vector<ulong>* ulapIndices, std::vector<LDObject*>* papObjects) { if (selection ().size () == 0) return; @@ -507,9 +520,9 @@ refresh (); } -// ========================================================================= // -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -// ========================================================================= // +// ============================================================================= +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +// ============================================================================= void ForgeWindow::buildObjList () { if (!g_CurrentFile) return; @@ -736,24 +749,6 @@ // ============================================================================= // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // ============================================================================= -void ForgeWindow::slot_setGrid () { - short idx; - for (idx = 0; idx < g_NumGrids; ++idx) - if (sender () == gridActions[idx]) - break; - - assert (idx < g_NumGrids); - - grid = idx; - - for (short i = 0; i < g_NumGrids; ++i) - if (i != idx) - gridActions[i]->setChecked (false); -} - -// ============================================================================= -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -// ============================================================================= ulong ForgeWindow::getInsertionPoint () { ulong ulIndex;
--- a/gui.h Mon Apr 22 03:53:21 2013 +0300 +++ b/gui.h Mon Apr 22 14:14:25 2013 +0300 @@ -123,10 +123,6 @@ QToolBar* qColorToolBar; std::vector<quickColorMetaEntry> quickColorMeta; - // Grid buttons - QAction* gridActions[3]; - QToolBar* qGridToolBar; - // Selected objects std::vector<LDObject*> paSelection; @@ -143,6 +139,7 @@ void updateToolBars (); void updateRecentFilesMenu (); void updateSelection (); + void updateGridToolBar (); bool isSelected (LDObject* obj); short getSelectedColor(); LDObjectType_e getSelectedType (); @@ -158,7 +155,6 @@ void slot_action (); void slot_recentFile (); void slot_quickColor (); - void slot_setGrid (); }; // -----------------------------------------------------------------------------
--- a/gui_actions.cpp Mon Apr 22 03:53:21 2013 +0300 +++ b/gui_actions.cpp Mon Apr 22 14:14:25 2013 +0300 @@ -25,6 +25,7 @@ #include "zz_configDialog.h" #include "zz_addObjectDialog.h" #include "zz_aboutDialog.h" +#include "misc.h" // ============================================================================= // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * @@ -202,6 +203,25 @@ g_ForgeWindow->updateSelection (); } + +// ============================================================================= +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +// ============================================================================= +ACTION (gridCoarse, "Coarse Grid", "grid-coarse", "Set the grid to Coarse", CTRL (1)) { + grid = Grid::Coarse; + g_ForgeWindow->updateGridToolBar (); +} + +ACTION (gridMedium, "Medium Grid", "grid-medium", "Set the grid to Medium", CTRL (2)) { + grid = Grid::Medium; + g_ForgeWindow->updateGridToolBar (); +} + +ACTION (gridFine, "Fine Grid", "grid-fine", "Set the grid to Fine", CTRL (3)) { + grid = Grid::Fine; + g_ForgeWindow->updateGridToolBar (); +} + // ============================================================================= // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // =============================================================================
--- a/zz_setContentsDialog.cpp Mon Apr 22 03:53:21 2013 +0300 +++ b/zz_setContentsDialog.cpp Mon Apr 22 14:14:25 2013 +0300 @@ -97,7 +97,7 @@ // Mark down the history now before we perform the replacement (which // destroys the old object) - History::addEntry (new EditHistory ({oldobj->getIndex (g_CurrentFile)}, + History::addEntry (new EditHistory ({(ulong) oldobj->getIndex (g_CurrentFile)}, {oldobj->clone ()}, {obj->clone ()})); oldobj->replace (obj);