diff -r 3d8ab0f89102 -r 450827da2376 src/MainWindow.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/MainWindow.h Tue Jan 21 02:09:14 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 .
+ */
+
+#ifndef LDFORGE_GUI_H
+#define LDFORGE_GUI_H
+
+#include
+#include
+#include
+#include
+#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& 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 m_quickColors;
+ QList m_colorButtons;
+ QList 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 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
+T radioSwitch (const T& defval, QList> haystack)
+{
+ for (pair 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
+void radioDefault (const T& expr, QList> haystack)
+{
+ for (pair i : haystack)
+ {
+ if (i.second == expr)
+ {
+ i.first->setChecked (true);
+ return;
+ }
+ }
+}
+
+#endif // LDFORGE_GUI_H