Added visibility toggling

Tue, 07 May 2013 01:15:31 +0300

author
Santeri Piippo <crimsondusk64@gmail.com>
date
Tue, 07 May 2013 01:15:31 +0300
changeset 170
2247a32e63a8
parent 169
f562323760a2
child 171
36165e58e457

Added visibility toggling

gldraw.cpp file | annotate | diff | comparison | revisions
gui.cpp file | annotate | diff | comparison | revisions
gui_actions.cpp file | annotate | diff | comparison | revisions
gui_editactions.cpp file | annotate | diff | comparison | revisions
ldforge.qrc file | annotate | diff | comparison | revisions
ldtypes.cpp file | annotate | diff | comparison | revisions
--- a/gldraw.cpp	Tue May 07 00:22:01 2013 +0300
+++ b/gldraw.cpp	Tue May 07 01:15:31 2013 +0300
@@ -387,8 +387,12 @@
 		glRotatef (m_rotZ, 0.0f, 0.0f, 1.0f);
 	}
 	
-	for (LDObject* obj : g_curfile->m_objs)
+	for (LDObject* obj : g_curfile->m_objs) {
+		if (obj->hidden ())
+			continue; // Don't draw hidden objects
+		
 		glCallList (m_picking == false ? obj->uGLList : obj->uGLPickList);
+	}
 	
 	if (gl_axes && !m_picking)
 		glCallList (m_axeslist);
--- a/gui.cpp	Tue May 07 00:22:01 2013 +0300
+++ b/gui.cpp	Tue May 07 01:15:31 2013 +0300
@@ -202,14 +202,18 @@
 	addMenuAction ("paste");				// Paste
 	addMenuAction ("del");					// Delete
 	menu->addSeparator ();					// -----
+	
+	for (uchar i = 0; i < LDObject::NumGroups; ++i)
+		addMenuAction (fmt ("group%c", 'A' + i)); // Group *
+	
+	addMenuAction ("ungroup");			// Ungroup
+	menu->addSeparator ();					// -----
 	addMenuAction ("selectAll");			// Select All
 	addMenuAction ("selectByColor");		// Select by Color
 	addMenuAction ("selectByType");		// Select by Type
-	menu->addSeparator ();					// -----
 	
 	for (uchar i = 0; i < LDObject::NumGroups; ++i)
-		addMenuAction (fmt ("group%c", 'A' + i)); // Group *
-	addMenuAction ("groupNone");			// No Group
+		addMenuAction (fmt ("selGroup%c", 'A' + i)); // Select Group *
 	
 	initMenu ("&Tools");
 	addMenuAction ("setColor");			// Set Color
@@ -222,6 +226,7 @@
 	addMenuAction ("makeCornerVerts");	// Make Corner Vertices
 	addMenuAction ("roundCoords");		// Round Coordinates
 	addMenuAction ("uncolorize");			// Uncolorize
+	addMenuAction ("visibility");			// Toggle Visibility
 	
 	// Move menu
 	initMenu ("&Move");
@@ -394,6 +399,7 @@
 	addToolBarAction ("roundCoords");
 	addToolBarAction ("screencap");
 	addToolBarAction ("uncolorize");
+	addToolBarAction ("visibility");
 	
 	initSingleToolBar ("External Programs");
 	addToolBarAction ("ytruder");
@@ -412,7 +418,7 @@
 		g_CurrentToolBar->addWidget (btn);
 	}
 	
-	addToolBarAction ("groupNone");
+	addToolBarAction ("ungroup");
 	updateToolBars ();
 }
 
@@ -570,14 +576,14 @@
 	m_objList->clear ();
 	
 	for (LDObject* obj : g_curfile->m_objs) {
-		str zText;
+		str descr;
 		switch (obj->getType ()) {
 		case LDObject::Comment:
-			zText = static_cast<LDComment*> (obj)->text.chars();
+			descr = static_cast<LDComment*> (obj)->text.chars();
 			
 			// Remove leading whitespace
-			while (~zText && zText[0] == ' ')
-				zText -= -1;
+			while (~descr && descr[0] == ' ')
+				descr -= -1;
 			break;
 		
 		case LDObject::Empty:
@@ -586,7 +592,7 @@
 		case LDObject::Line:
 			{
 				LDLine* line = static_cast<LDLine*> (obj);
-				zText.format ("%s, %s",
+				descr.format ("%s, %s",
 					line->vaCoords[0].stringRep (true).chars(),
 					line->vaCoords[1].stringRep (true).chars());
 			}
@@ -595,7 +601,7 @@
 		case LDObject::Triangle:
 			{
 				LDTriangle* triangle = static_cast<LDTriangle*> (obj);
-				zText.format ("%s, %s, %s",
+				descr.format ("%s, %s, %s",
 					triangle->vaCoords[0].stringRep (true).chars(),
 					triangle->vaCoords[1].stringRep (true).chars(),
 					triangle->vaCoords[2].stringRep (true).chars());
@@ -605,7 +611,7 @@
 		case LDObject::Quad:
 			{
 				LDQuad* quad = static_cast<LDQuad*> (obj);
-				zText.format ("%s, %s, %s, %s",
+				descr.format ("%s, %s, %s, %s",
 					quad->vaCoords[0].stringRep (true).chars(),
 					quad->vaCoords[1].stringRep (true).chars(),
 					quad->vaCoords[2].stringRep (true).chars(),
@@ -616,7 +622,7 @@
 		case LDObject::CondLine:
 			{
 				LDCondLine* line = static_cast<LDCondLine*> (obj);
-				zText.format ("%s, %s, %s, %s",
+				descr.format ("%s, %s, %s, %s",
 					line->vaCoords[0].stringRep (true).chars(),
 					line->vaCoords[1].stringRep (true).chars(),
 					line->vaCoords[2].stringRep (true).chars(),
@@ -625,55 +631,61 @@
 			break;
 		
 		case LDObject::Gibberish:
-			zText.format ("ERROR: %s",
+			descr.format ("ERROR: %s",
 				static_cast<LDGibberish*> (obj)->zContents.chars());
 			break;
 		
 		case LDObject::Vertex:
-			zText.format ("%s", static_cast<LDVertex*> (obj)->vPosition.stringRep (true).chars());
+			descr.format ("%s", static_cast<LDVertex*> (obj)->vPosition.stringRep (true).chars());
 			break;
 		
 		case LDObject::Subfile:
 			{
 				LDSubfile* ref = static_cast<LDSubfile*> (obj);
 				
-				zText.format ("%s %s, (",
+				descr.format ("%s %s, (",
 					ref->zFileName.chars(), ref->vPosition.stringRep (true).chars());
 				
 				for (short i = 0; i < 9; ++i)
-					zText.appendformat ("%s%s",
+					descr.appendformat ("%s%s",
 						ftoa (ref->mMatrix[i]).chars(),
 						(i != 8) ? " " : "");
 				
-				zText += ')';
+				descr += ')';
 			}
 			break;
 		
 		case LDObject::BFC:
 			{
 				LDBFC* bfc = static_cast<LDBFC*> (obj);
-				zText = LDBFC::statements[bfc->type];
+				descr = LDBFC::statements[bfc->type];
 			}
 			break;
 		
 		case LDObject::Radial:
 			{
 				LDRadial* pRad = static_cast<LDRadial*> (obj);
-				zText.format ("%d / %d %s", pRad->dSegments, pRad->dDivisions, pRad->radialTypeName());
+				descr.format ("%d / %d %s", pRad->dSegments, pRad->dDivisions, pRad->radialTypeName());
 				
 				if (pRad->eRadialType == LDRadial::Ring || pRad->eRadialType == LDRadial::Cone)
-					zText.appendformat (" %d", pRad->dRingNum);
+					descr.appendformat (" %d", pRad->dRingNum);
 				
-				zText.appendformat (" %s", pRad->vPosition.stringRep (true).chars ());
+				descr.appendformat (" %s", pRad->vPosition.stringRep (true).chars ());
 			}
 			break;
 		
 		default:
-			zText = g_saObjTypeNames[obj->getType ()];
+			descr = g_saObjTypeNames[obj->getType ()];
 			break;
 		}
 		
-		QListWidgetItem* item = new QListWidgetItem (zText.chars());
+		// Put it into brackets if it's hidden
+		if (obj->hidden ()) {
+			str copy = descr.chars ();
+			descr.format ("[[ %s ]]", copy.chars ());
+		}
+		
+		QListWidgetItem* item = new QListWidgetItem (descr.chars());
 		item->setIcon (getIcon (g_saObjTypeIcons[obj->getType ()]));
 		
 		// Color gibberish orange on red so it stands out.
--- a/gui_actions.cpp	Tue May 07 00:22:01 2013 +0300
+++ b/gui_actions.cpp	Tue May 07 01:15:31 2013 +0300
@@ -170,13 +170,13 @@
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 // =============================================================================
 MAKE_ACTION (about, "About " APPNAME, "ldforge",
-	"Shows information about " APPNAME ".", CTRL (F1))
+	"Shows information about " APPNAME ".", (0))
 {
 	AboutDialog dlg;
 	dlg.exec ();
 }
 
-MAKE_ACTION (aboutQt, "About Qt", "qt", "Shows information about Qt.", CTRL_SHIFT (F1)) {
+MAKE_ACTION (aboutQt, "About Qt", "qt", "Shows information about Qt.", (0)) {
 	QMessageBox::aboutQt (g_win);
 }
 
@@ -405,6 +405,67 @@
 // =============================================================================
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 // =============================================================================
+void setGroup (const LDObject::Group group) {
+	for (LDObject* obj : g_win->sel ())
+		obj->setGroup (group);
+	
+	g_win->refresh ();
+}
+
+// =============================================================================
+void selGroup (const LDObject::Group group) {
+	for (LDObject* obj : g_curfile->m_objs) {
+		if (obj->group () != group)
+			continue; // wrong group
+		
+		bool selected = false;
+		for (LDObject* selobj : g_win->sel ()) {
+			if (selobj == obj) {
+				selected = true;
+				break;
+			}
+		}
+		
+		if (selected)
+			continue; // already selected
+		
+		g_win->sel ().push_back (obj);
+	}
+	
+	g_win->refresh ();
+}
+
+#define GROUP_ACTION(N, KEY) \
+	MAKE_ACTION (group##N, "Group " #N, "group", "Set group of selected objects to " #N, CTRL_SHIFT (KEY)) { \
+		setGroup (LDObject::N); \
+	} \
+	\
+	MAKE_ACTION (selGroup##N, "Select Group " #N, "group", "Select the contents of group " #N, SHIFT (F##KEY)) { \
+		selGroup (LDObject::N); \
+	}
+
+GROUP_ACTION (A, 1)
+GROUP_ACTION (B, 2)
+GROUP_ACTION (C, 3)
+GROUP_ACTION (D, 4)
+
+MAKE_ACTION (ungroup, "Ungroup", "ungroup", "Unset the group of selected objects", CTRL_SHIFT (0)) {
+	setGroup (LDObject::NoGroup);
+}
+
+// =============================================================================
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+// =============================================================================
+MAKE_ACTION (visibility, "Toggle Visibility", "visibility", "Toggles visibility/hiding on objects.", (0)) {
+	for (LDObject* obj : g_win->sel ())
+		obj->setHidden (!obj->hidden ());
+	
+	g_win->refresh ();
+}
+
+// =============================================================================
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+// =============================================================================
 // Debug things
 #ifndef RELEASE
 MAKE_ACTION (addTestQuad, "Add Test Quad", "add-quad", "Adds a test quad.", (0)) {
--- a/gui_editactions.cpp	Tue May 07 00:22:01 2013 +0300
+++ b/gui_editactions.cpp	Tue May 07 01:15:31 2013 +0300
@@ -684,28 +684,4 @@
 		History::addEntry (new EditHistory (indices, oldCopies, newCopies));
 		g_win->refresh ();
 	}
-}
-
-// =============================================================================
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-// =============================================================================
-void setGroup (const LDObject::Group group) {
-	for (LDObject* obj : g_win->sel ())
-		obj->setGroup (group);
-	
-	g_win->refresh ();
-}
-
-#define GROUP_ACTION(N, KEY) \
-	MAKE_ACTION (group##N, "Group " #N, "group", "Set group of selected objects to " #N, CTRL_SHIFT (KEY)) { \
-		setGroup (LDObject::N); \
-	}
-
-GROUP_ACTION (A, 1)
-GROUP_ACTION (B, 2)
-GROUP_ACTION (C, 3)
-GROUP_ACTION (D, 4)
-
-MAKE_ACTION (groupNone, "No Group", "group-no", "Unset objects' group", CTRL_SHIFT (0)) {
-	setGroup (LDObject::NoGroup);
 }
\ No newline at end of file
--- a/ldforge.qrc	Tue May 07 00:22:01 2013 +0300
+++ b/ldforge.qrc	Tue May 07 01:15:31 2013 +0300
@@ -84,6 +84,7 @@
 	<file>./icons/undo.png</file>
 	<file>./icons/ungroup.png</file>
 	<file>./icons/vertex.png</file>
+	<file>./icons/visibility.png</file>
 	<file>./icons/ytruder.png</file>
 	<file>./docs/test2.html</file>
 	<file>./docs/test.html</file>
--- a/ldtypes.cpp	Tue May 07 00:22:01 2013 +0300
+++ b/ldtypes.cpp	Tue May 07 01:15:31 2013 +0300
@@ -61,6 +61,7 @@
 	qObjListEntry = null;
 	parent = null;
 	m_group = NoGroup;
+	m_hidden = false;
 }
 
 LDGibberish::LDGibberish (str _zContent, str _zReason) {

mercurial