Make grid actions regular actions rather than auto-generated, this way they can have keyboard shortcuts

Mon, 22 Apr 2013 14:14:25 +0300

author
Santeri Piippo <crimsondusk64@gmail.com>
date
Mon, 22 Apr 2013 14:14:25 +0300
changeset 125
7ee7aa5e28be
parent 124
7962744759ad
child 126
d4f794a48b3e

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);

mercurial