![]() |
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 This file defines the TextEditor class. The TextEditor and Canvas are two ways to define a network. 00008 The Canvas is used for graphical reprentation of a network, whereas the TextEditor is used for 00009 text-based representation of a network. 00010 00011 ****************************************************************************/ 00012 00013 #ifndef TINKERCELL_TEXTEDITOR_H 00014 #define TINKERCELL_TEXTEDITOR_H 00015 00016 #include <stdlib.h> 00017 #include <QtGui> 00018 #include <QMdiArea> 00019 #include <QMdiSubWindow> 00020 #include <QString> 00021 #include <QFileDialog> 00022 #include <QtDebug> 00023 #include <QTextEdit> 00024 #include <QAction> 00025 #include <QMenu> 00026 #include <QFile> 00027 #include <QHBoxLayout> 00028 #include <QMainWindow> 00029 #include <QHash> 00030 #include <QPair> 00031 #include <QSet> 00032 #include <QLabel> 00033 #include <QSplitter> 00034 #include <QGridLayout> 00035 #include <QScrollArea> 00036 #include <QListWidget> 00037 #include <QSyntaxHighlighter> 00038 #include <QUndoCommand> 00039 00040 #include "DataTable.h" 00041 #include "CodeEditor.h" 00042 #include "HistoryWindow.h" 00043 #include "SymbolsTable.h" 00044 #include "Tool.h" 00045 00046 namespace Tinkercell 00047 { 00048 class ItemHandle; 00049 class ItemData; 00050 class TextEditor; 00051 class TextUndoCommand; 00052 class MainWindow; 00053 class ConsoleWindow; 00054 00061 class TINKERCELLCOREEXPORT TextEditor : public CodeEditor 00062 { 00063 Q_OBJECT 00064 00065 friend class TextUndoCommand; 00066 friend class NetworkWindow; 00067 friend class NetworkHandle; 00068 friend class SymbolsTable; 00069 friend class MainWindow; 00070 00071 public: 00072 00073 static bool SideBarEnabled; 00074 00076 TextEditor( NetworkHandle * , QWidget * parent = 0); 00078 ~TextEditor(); 00081 void insert( ItemHandle* ); 00084 void insert( const QList<ItemHandle*>& ); 00087 void remove( ItemHandle* ); 00090 void remove( const QList<ItemHandle*>& ); 00093 void setItems( const QList<ItemHandle*>& ); 00095 QList<ItemHandle*>& items(); 00098 void push(QUndoCommand*); 00100 QString selectedText() const; 00105 QMenu * contextSelectionMenu; 00110 QMenu * contextEditorMenu; 00112 NetworkHandle * network; 00114 NetworkWindow * networkWindow; 00116 MainWindow * mainWindow() const; 00118 ConsoleWindow * console() const; 00120 ItemHandle * localHandle() const; 00122 ItemHandle * globalHandle() const; 00123 00124 signals: 00129 void textChanged(TextEditor *, const QString&, const QString&, const QString&); 00134 void lineChanged(TextEditor *, int, const QString&); 00140 void itemsInserted(NetworkHandle *, const QList<ItemHandle*>&); 00146 void itemsRemoved(NetworkHandle *, const QList<ItemHandle*>& ); 00150 void parse(TextEditor *); 00151 00152 public slots: 00153 00156 virtual void popOut(); 00159 virtual void popIn(); 00161 virtual void undo(); 00163 virtual void redo(); 00165 virtual void selectAll(); 00167 virtual void copy(); 00169 virtual void cut(); 00171 virtual void paste(); 00174 virtual void print(QPrinter * printer); 00175 00176 protected: 00178 int prevBlockNumber; 00180 int changedBlockNumber; 00182 QString prevBlockText; 00184 QString changedBlockText; 00186 QString prevText; 00188 virtual void keyPressEvent ( QKeyEvent * event ); 00190 virtual void mousePressEvent ( QMouseEvent * event ); 00191 00193 QList<ItemHandle*> allItems; 00195 virtual void contextMenuEvent ( QContextMenuEvent * event ); 00197 virtual void mouseReleaseEvent ( QMouseEvent * event ); 00198 00199 private slots: 00201 void textChangedSlot(); 00202 }; 00203 00206 class TINKERCELLCOREEXPORT TextUndoCommand : public QUndoCommand 00207 { 00208 00209 public: 00214 TextUndoCommand(TextEditor *, const QString&, const QString&); 00216 void redo(); 00218 void undo(); 00219 00220 private: 00222 QString oldText; 00224 QString newText; 00226 TextEditor * textEdit; 00227 }; 00228 } 00229 #endif