TinkerCell Core 1.0
TinkerCell's Core library providing all basic functionalities
MainWindow.h
Go to the documentation of this file.
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines