![]() |
TinkerCell Core 1.0
TinkerCell's Core library providing all basic functionalities
|
00001 /**************************************************************************** 00002 00003 Copyright (c) 2008 Deepak Chandran 00004 Contact: Deepak Chandran (dchandran1@gmail.com) 00005 See COPYRIGHT.TXT 00006 00007 MainWindow is the parent container for all the other widgets in TinkerCell 00008 The central widget in MainWindow is a tab widget. Each tab widget can hold 00009 a GraphicsView or a TextEditor. 00010 One of the main roles of MainWindow is to serve as a signal/slot hub for Tools. 00011 00012 ****************************************************************************/ 00013 00014 #ifndef TINKERCELL_MAINWINDOW_H 00015 #define TINKERCELL_MAINWINDOW_H 00016 00017 #include <QtGui> 00018 #include <QString> 00019 #include <QFileDialog> 00020 #include <QtDebug> 00021 #include <QGraphicsItem> 00022 #include <QGraphicsScene> 00023 #include <QGraphicsView> 00024 #include <QAction> 00025 #include <QMenu> 00026 #include <QTabWidget> 00027 #include <QThread> 00028 #include <QFile> 00029 #include <QHBoxLayout> 00030 #include <QMainWindow> 00031 #include <QHash> 00032 #include <QUndoCommand> 00033 #include <QToolBar> 00034 #include <QToolBox> 00035 #include <QUndoView> 00036 #include <QUndoStack> 00037 #include <QPrintDialog> 00038 #include <QPrinter> 00039 #include <QGridLayout> 00040 #include <QSemaphore> 00041 #include <QLibrary> 00042 00043 #include "HistoryWindow.h" 00044 #include "DataTable.h" 00045 #include "ConvertValue.h" 00046 #include "GraphicsScene.h" 00047 00048 namespace Tinkercell 00049 { 00050 class GlobalSettings; 00051 class ConsoleWindow; 00052 class NodeGraphicsItem; 00053 class ConnectionGraphicsItem; 00054 class ItemHandle; 00055 class ItemFamily; 00056 class MainWindow_FtoS; 00057 class NetworkWindow; 00058 class NetworkHandle; 00059 class TextEditor; 00060 class Tool; 00061 class HistoryStack; 00062 class TextParser; 00063 class TextItem; 00064 class GraphicsView; 00065 class SymbolsTable; 00066 class CThread; 00067 class C_API_Slots; 00068 class MainWindow; 00069 00070 class DroppableTabWidget : public QTabWidget 00071 { 00072 friend class MainWindow; 00073 00074 protected: 00075 void dropEvent(QDropEvent * event); 00076 00077 private: 00078 DroppableTabWidget(MainWindow * main); 00079 MainWindow * mainWindow; 00080 }; 00081 00089 class TINKERCELLCOREEXPORT MainWindow : public QMainWindow 00090 { 00091 Q_OBJECT 00092 00093 public: 00094 00095 friend class NetworkWindow; 00096 friend class NetworkHandle; 00097 friend class GraphicsScene; 00098 friend class TextEditor; 00099 friend class GraphicsView; 00100 friend class DroppableTabWidget; 00101 00106 enum TOOL_WINDOW_OPTION { DockWidget , TabWidget }; 00107 00109 static TOOL_WINDOW_OPTION defaultToolWindowOption; 00110 00112 static TOOL_WINDOW_OPTION defaultHistoryWindowOption; 00113 00115 static TOOL_WINDOW_OPTION defaultConsoleWindowOption; 00116 00123 MainWindow(bool enableScene = true, bool enableText = true, bool views = true); 00128 virtual void allowMultipleViewModes(bool); 00132 virtual ~MainWindow(); 00133 00145 QDockWidget * addToolWindow(QWidget * tool, TOOL_WINDOW_OPTION option = DockWidget, Qt::DockWidgetArea initArea = Qt::RightDockWidgetArea, Qt::DockWidgetAreas allowedAreas = Qt::AllDockWidgetAreas, bool inMenu = true); 00150 void addToViewMenu(QWidget * tool); 00156 void setCursor(QCursor cursor); 00163 void addTool(Tool* tool); 00168 void initializeMenus(bool enableScene = true, bool enableText = true); 00176 void setupNewThread(QSemaphore*,QLibrary*); 00182 void loadDynamicLibrary(const QString&); 00192 QPair< QList<ItemHandle*>, QList<QGraphicsItem*> > getItemsFromFile(const QString& filename, ItemHandle * root = 0); 00197 GraphicsScene * currentScene() const; 00202 TextEditor * currentTextEditor() const; 00207 NetworkWindow * currentWindow() const; 00212 NetworkHandle * currentNetwork() const; 00217 QList<NetworkHandle*> networks() const; 00222 QUndoStack * historyStack() const; 00227 QUndoView * historyWidget(); 00233 virtual Tool * tool(const QString&) const; 00239 virtual QList<Tool*> tools(const QString& category=QString()) const; 00243 QList<QWidget*> toolWindows; 00248 QMenu contextItemsMenu; 00253 QMenu contextScreenMenu; 00258 QMenu contextSelectionMenu; 00263 QMenu contextEditorMenu; 00267 QMenu* fileMenu; 00271 QMenu* editMenu; 00275 QMenu* viewMenu; 00279 QMenu* helpMenu; 00283 QMenu* settingsMenu; 00287 QMenu* parsersMenu; 00291 QToolBar* toolBarBasic; 00295 QToolBar* toolBarEdits; 00300 QToolBar* toolBarForTools; 00301 00307 public slots: 00308 00312 void setUserHome(); 00316 GraphicsScene * newScene(); 00320 TextEditor * newTextEditor(); 00324 void closeWindow(); 00329 void saveWindow(); 00334 void saveWindowAs(); 00339 void open(); 00345 void open(const QString&); 00349 void undo(); 00353 void redo(); 00357 void copy(); 00361 void cut(); 00365 void paste(); 00369 void selectAll(); 00373 void remove(); 00377 void print(); 00381 void printToFile(const QString& filename=QString(), int w=0, int h=0); 00385 void sendEscapeSignal(const QWidget * w = 0); 00390 void addParser(TextParser*); 00391 00393 void gridOn(); 00394 00396 void gridOff(); 00397 00399 void setGridSize(); 00400 00402 void popOut(); 00403 00405 ConsoleWindow * console() const; 00406 00409 void readSettings(); 00410 00412 static MainWindow * instance(); 00413 00414 protected slots: 00415 00417 void popOut(NetworkWindow *); 00418 00420 void popIn(NetworkWindow *); 00424 void setCurrentWindow(NetworkWindow*); 00430 void loadFiles(const QList<QFileInfo>& files); 00435 void changeConsoleBgColor(); 00440 void changeConsoleTextColor(); 00445 void changeConsoleMsgColor(); 00450 void changeConsoleErrorMsgColor(); 00454 virtual void tabIndexChanged(int); 00461 void itemsRemovedSlot(GraphicsScene * scene, const QList<QGraphicsItem*>& item, const QList<ItemHandle*>& handles); 00468 void itemsInsertedSlot(GraphicsScene * scene, const QList<QGraphicsItem*>& item, const QList<ItemHandle*>& handles,GraphicsScene::InsertType); 00475 void setupFunctionPointersSlot(QSemaphore*,QLibrary *); 00476 00482 signals: 00483 00490 void toolAboutToBeLoaded( Tool * tool, bool * shouldLoad ); 00496 void historyChanged(int i=0); 00503 void funtionPointersToMainThread( QSemaphore* , QLibrary * ); 00508 void toolLoaded(Tool * tool); 00514 void setupFunctionPointers( QLibrary * ); 00521 void networkClosing(NetworkHandle *, bool*); 00527 void networkClosed(NetworkHandle *); 00532 void prepareNetworkForSaving(NetworkHandle*,bool*); 00538 void networkSaved(NetworkHandle*); 00544 void saveNetwork(const QString& filename); 00551 void loadNetwork(const QString& filename, bool * alreadyLoaded = 0); 00560 void getItemsFromFile(QList<ItemHandle*>&, QList<QGraphicsItem*>&, const QString& filename, ItemHandle * root); 00566 void networkLoaded(NetworkHandle*); 00572 void networkOpened(NetworkHandle*); 00579 void windowChanged(NetworkWindow*,NetworkWindow*); 00587 void itemsSelected(GraphicsScene * scene, const QList<QGraphicsItem*>& items, QPointF point, Qt::KeyboardModifiers modifiers); 00595 void mousePressed(GraphicsScene * scene, QPointF point, Qt::MouseButton, Qt::KeyboardModifiers modifiers); 00603 void mouseReleased(GraphicsScene * scene, QPointF point, Qt::MouseButton, Qt::KeyboardModifiers modifiers); 00610 void mouseDoubleClicked (GraphicsScene * scene, QPointF point, QGraphicsItem *, Qt::MouseButton, Qt::KeyboardModifiers modifiers); 00619 void mouseDragged(GraphicsScene * scene, QPointF from, QPointF to, Qt::MouseButton, Qt::KeyboardModifiers modifiers); 00628 void itemsAboutToBeMoved(GraphicsScene * scene, QList<QGraphicsItem*>& item, QList<QPointF>& distance, QList<QUndoCommand*>&); 00636 void itemsMoved(GraphicsScene * scene, const QList<QGraphicsItem*>& item, const QList<QPointF>& distance); 00644 void itemsAboutToBeRemoved(GraphicsScene * scene, QList<QGraphicsItem*>& item, QList<ItemHandle*>& handles, QList<QUndoCommand*>&); 00651 void itemsRemoved(GraphicsScene * scene, const QList<QGraphicsItem*>& item, const QList<ItemHandle*>& handles); 00660 void itemsAboutToBeInserted(GraphicsScene * scene, QList<QGraphicsItem*>& , QList<ItemHandle*>&, QList<QUndoCommand*>&, GraphicsScene::InsertType type=GraphicsScene::NEW); 00668 void itemsInserted(GraphicsScene * scene, const QList<QGraphicsItem*>& item, const QList<ItemHandle*>& handles, GraphicsScene::InsertType type=GraphicsScene::NEW); 00675 void itemsInserted(NetworkHandle * win, const QList<ItemHandle*>&); 00682 void itemsRemoved(NetworkHandle * win, const QList<ItemHandle*>& ); 00688 void copyItems(GraphicsScene * scene, QList<QGraphicsItem*>& , QList<ItemHandle*>& ); 00694 void textChanged(TextEditor * , const QString&, const QString&, const QString&); 00700 void lineChanged(TextEditor * , int, const QString&); 00704 void parse(TextEditor *); 00713 void mouseMoved(GraphicsScene * scene, QGraphicsItem* item, QPointF point, Qt::MouseButton, Qt::KeyboardModifiers modifiers, QList<QGraphicsItem*>&); 00721 void mouseOnTopOf(GraphicsScene * scene, QGraphicsItem* item, QPointF point, Qt::KeyboardModifiers modifiers, QList<QGraphicsItem*>&); 00728 void sceneRightClick(GraphicsScene * scene, QGraphicsItem* item, QPointF point, Qt::KeyboardModifiers modifiers); 00733 void keyPressed(GraphicsScene * scene, QKeyEvent *); 00738 void keyReleased(GraphicsScene * scene, QKeyEvent *); 00743 void colorChanged(GraphicsScene * scene, const QList<QGraphicsItem*>& items); 00749 void parentItemChanged(GraphicsScene * scene, const QList<QGraphicsItem*>& items, const QList<QGraphicsItem*>& parents); 00756 void itemsRenamed(NetworkHandle * window, const QList<ItemHandle*>& items, const QList<QString>& oldnames, const QList<QString>& newnames); 00762 void handlesChanged(NetworkHandle * scene, const QList<QGraphicsItem*>& items, const QList<ItemHandle*>& old); 00768 void parentHandleChanged(NetworkHandle * scene, const QList<ItemHandle*>&, const QList<ItemHandle*>&); 00774 void handleFamilyChanged(NetworkHandle * network, const QList<ItemHandle*>&, const QList<ItemFamily*>&); 00778 void dataChanged(const QList<ItemHandle*>& items); 00782 void escapeSignal(const QWidget * sender); 00786 void filesLoaded(const QList<QFileInfo>& files); 00792 void itemsDropped(GraphicsScene*, const QString&, QPointF); 00793 00794 protected: 00796 bool allowViewModeToChange; 00798 QHash<QString,QLibrary*> dynamicallyLoadedLibraries; 00800 ConsoleWindow * consoleWindow; 00803 void saveSettings(); 00806 void loadDefaultPlugins(); 00810 void closeEvent(QCloseEvent *event); 00811 00813 DroppableTabWidget * tabWidget; 00815 QList<NetworkHandle*> allNetworks; 00817 QToolBox * toolsWidget; 00819 HistoryWindow historyWindow; 00821 NetworkWindow * currentNetworkWindow; 00823 QHash<QString,Tool*> toolsHash; 00825 QHash<QString,Tool*> toolsHashByCategory; 00827 virtual void dropEvent(QDropEvent *); 00829 virtual void dragEnterEvent(QDragEnterEvent *event); 00830 private: 00832 static QString homeDirPath; 00836 static MainWindow * globalInstance; 00840 C_API_Slots * c_api_slots; 00841 public: 00845 static QString previousFileName; 00846 00848 static QHash<void*,bool> invalidPointers; 00849 00851 bool isValidHandlePointer(void * p); 00852 00853 friend class GlobalSettings; 00854 00855 }; 00856 00857 } 00858 00859 #endif