src/MainWindow.h

changeset 629
b75c6cce02e2
child 636
387b5e11c825
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/MainWindow.h	Tue Jan 21 02:03:27 2014 +0200
@@ -0,0 +1,302 @@
+/*
+ *  LDForge: LDraw parts authoring CAD
+ *  Copyright (C) 2013, 2014 Santeri Piippo
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef LDFORGE_GUI_H
+#define LDFORGE_GUI_H
+
+#include <QMainWindow>
+#include <QAction>
+#include <QListWidget>
+#include <QRadioButton>
+#include "Configuration.h"
+#include "LDObject.h"
+#include "ui_ldforge.h"
+
+class MessageManager;
+class MainWindow;
+class LDColor;
+class QToolButton;
+class QDialogButtonBox;
+class GLRenderer;
+class QComboBox;
+class QProgressBar;
+class Ui_LDForgeUI;
+
+// Stuff for dialogs
+#define IMPLEMENT_DIALOG_BUTTONS \
+	bbx_buttons = new QDialogButtonBox (QDialogButtonBox::Ok | QDialogButtonBox::Cancel); \
+	connect (bbx_buttons, SIGNAL (accepted()), this, SLOT (accept())); \
+	connect (bbx_buttons, SIGNAL (rejected()), this, SLOT (reject())); \
+
+// =============================================================================
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+// =============================================================================
+#define DEFINE_ACTION(NAME, DEFSHORTCUT) \
+	cfg (KeySequence, key_action##NAME, DEFSHORTCUT); \
+	void MainWindow::slot_action##NAME()
+
+// Convenience macros for key sequences.
+#define KEY(N) (Qt::Key_##N)
+#define CTRL(N) (Qt::CTRL | Qt::Key_##N)
+#define SHIFT(N) (Qt::SHIFT | Qt::Key_##N)
+#define CTRL_SHIFT(N) (Qt::CTRL | Qt::SHIFT | Qt::Key_##N)
+
+// =============================================================================
+class LDQuickColor
+{
+	PROPERTY (public,	LDColor*,		Color,		NO_OPS,	STOCK_WRITE)
+	PROPERTY (public,	QToolButton*,	ToolButton,	NO_OPS,	STOCK_WRITE)
+
+	public:
+		LDQuickColor (LDColor* color, QToolButton* toolButton);
+		bool isSeparator() const;
+
+		static LDQuickColor getSeparator();
+};
+
+// =============================================================================
+// ObjectList
+//
+// Object list class for MainWindow
+// =============================================================================
+class ObjectList : public QListWidget
+{
+	Q_OBJECT
+
+	protected:
+		void contextMenuEvent (QContextMenuEvent* ev);
+};
+
+// =============================================================================
+// MainWindow
+//
+// The one main GUI class. Hosts the renderer, object list, message log. Contains
+// slot_action, which is what all actions connect to. Manages menus and toolbars.
+// Large and in charge.
+// =============================================================================
+class MainWindow : public QMainWindow
+{
+	Q_OBJECT
+
+	public:
+		MainWindow();
+		void buildObjList();
+		void updateTitle();
+		void doFullRefresh();
+		void refresh();
+		int getInsertionPoint();
+		void updateToolBars();
+		void updateRecentFilesMenu();
+		void updateSelection();
+		void updateGridToolBar();
+		void updateEditModeActions();
+		void updateDocumentList();
+		void updateDocumentListItem (LDDocument* f);
+		int getSelectedColor();
+		LDObject::Type getUniformSelectedType();
+		void scrollToSelection();
+		void spawnContextMenu (const QPoint pos);
+		void deleteObjects (LDObjectList objs);
+		int deleteSelection();
+		void deleteByColor (const int colnum);
+		bool save (LDDocument* f, bool saveAs);
+		void updateActions();
+
+		inline GLRenderer* R()
+		{
+			return m_renderer;
+		}
+
+		inline void setQuickColors (QList<LDQuickColor>& colors)
+		{
+			m_quickColors = colors;
+		}
+
+		void addMessage (QString msg);
+		void refreshObjectList();
+		void updateActionShortcuts();
+		KeySequenceConfig* shortcutForAction (QAction* act);
+		void endAction();
+
+	public slots:
+		void changeCurrentFile();
+		void slot_action();
+		void slot_actionNew();
+		void slot_actionNewFile();
+		void slot_actionOpen();
+		void slot_actionDownloadFrom();
+		void slot_actionSave();
+		void slot_actionSaveAs();
+		void slot_actionSaveAll();
+		void slot_actionClose();
+		void slot_actionCloseAll();
+		void slot_actionInsertFrom();
+		void slot_actionExportTo();
+		void slot_actionSettings();
+		void slot_actionSetLDrawPath();
+		void slot_actionScanPrimitives();
+		void slot_actionExit();
+		void slot_actionResetView();
+		void slot_actionAxes();
+		void slot_actionWireframe();
+		void slot_actionBFCView();
+		void slot_actionSetOverlay();
+		void slot_actionClearOverlay();
+		void slot_actionScreenshot();
+		void slot_actionInsertRaw();
+		void slot_actionNewSubfile();
+		void slot_actionNewLine();
+		void slot_actionNewTriangle();
+		void slot_actionNewQuad();
+		void slot_actionNewCLine();
+		void slot_actionNewComment();
+		void slot_actionNewBFC();
+		void slot_actionNewVertex();
+		void slot_actionUndo();
+		void slot_actionRedo();
+		void slot_actionCut();
+		void slot_actionCopy();
+		void slot_actionPaste();
+		void slot_actionDelete();
+		void slot_actionSelectAll();
+		void slot_actionSelectByColor();
+		void slot_actionSelectByType();
+		void slot_actionModeDraw();
+		void slot_actionModeSelect();
+		void slot_actionModeCircle();
+		void slot_actionSetDrawDepth();
+		void slot_actionSetColor();
+		void slot_actionAutocolor();
+		void slot_actionUncolorize();
+		void slot_actionInline();
+		void slot_actionInlineDeep();
+		void slot_actionInvert();
+		void slot_actionMakePrimitive();
+		void slot_actionSplitQuads();
+		void slot_actionEditRaw();
+		void slot_actionBorders();
+		void slot_actionCornerVerts();
+		void slot_actionRoundCoordinates();
+		void slot_actionVisibilityHide();
+		void slot_actionVisibilityReveal();
+		void slot_actionVisibilityToggle();
+		void slot_actionReplaceCoords();
+		void slot_actionFlip();
+		void slot_actionDemote();
+		void slot_actionYtruder();
+		void slot_actionRectifier();
+		void slot_actionIntersector();
+		void slot_actionIsecalc();
+		void slot_actionCoverer();
+		void slot_actionEdger2();
+		void slot_actionHelp();
+		void slot_actionAbout();
+		void slot_actionAboutQt();
+		void slot_actionGridCoarse();
+		void slot_actionGridMedium();
+		void slot_actionGridFine();
+		void slot_actionEdit();
+		void slot_actionMoveUp();
+		void slot_actionMoveDown();
+		void slot_actionMoveXNeg();
+		void slot_actionMoveXPos();
+		void slot_actionMoveYNeg();
+		void slot_actionMoveYPos();
+		void slot_actionMoveZNeg();
+		void slot_actionMoveZPos();
+		void slot_actionRotateXNeg();
+		void slot_actionRotateXPos();
+		void slot_actionRotateYNeg();
+		void slot_actionRotateYPos();
+		void slot_actionRotateZNeg();
+		void slot_actionRotateZPos();
+		void slot_actionRotationPoint();
+		void slot_actionAddHistoryLine();
+		void slot_actionJumpTo();
+		void slot_actionSubfileSelection();
+		void slot_actionDrawAngles();
+
+	protected:
+		void closeEvent (QCloseEvent* ev);
+
+	private:
+		GLRenderer* m_renderer;
+		LDObjectList m_sel;
+		QList<LDQuickColor> m_quickColors;
+		QList<QToolButton*> m_colorButtons;
+		QList<QAction*> m_recentFiles;
+		MessageManager* m_msglog;
+		Ui_LDForgeUI* ui;
+
+	private slots:
+		void slot_selectionChanged();
+		void slot_recentFile();
+		void slot_quickColor();
+		void slot_lastSecondCleanup();
+		void slot_editObject (QListWidgetItem* listitem);
+};
+
+// -----------------------------------------------------------------------------
+// Pointer to the instance of MainWindow.
+extern MainWindow* g_win;
+
+// -----------------------------------------------------------------------------
+// Other GUI-related stuff not directly part of MainWindow:
+QPixmap getIcon (QString iconName); // Get an icon from the resource dir
+QList<LDQuickColor> quickColorsFromConfig(); // Make a list of quick colors based on config
+bool confirm (QString title, QString msg); // Generic confirm prompt
+bool confirm (QString msg); // Generic confirm prompt
+void critical (QString msg); // Generic error prompt
+QIcon makeColorIcon (LDColor* colinfo, const int size); // Makes an icon for the given color
+void makeColorComboBox (QComboBox* box); // Fills the given combo-box with color information
+QImage imageFromScreencap (uchar* data, int w, int h);
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+// Takes in pairs of radio buttons and respective values and returns the value of
+// the first found radio button that was checked.
+// =============================================================================
+template<class T>
+T radioSwitch (const T& defval, QList<pair<QRadioButton*, T>> haystack)
+{
+	for (pair<QRadioButton*, const T&> i : haystack)
+		if (i.first->isChecked())
+			return i.second;
+
+	return defval;
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+// Takes in pairs of radio buttons and respective values and checks the first
+// found radio button to have the given value.
+// =============================================================================
+template<class T>
+void radioDefault (const T& expr, QList<pair<QRadioButton*, T>> haystack)
+{
+	for (pair<QRadioButton*, const T&> i : haystack)
+	{
+		if (i.second == expr)
+		{
+			i.first->setChecked (true);
+			return;
+		}
+	}
+}
+
+#endif // LDFORGE_GUI_H

mercurial