itom 1.3.0
D:/git-itom/sources/itom/Qitom/widgets/scriptDockWidget.h
00001 /* ********************************************************************
00002     itom software
00003     URL: http://www.uni-stuttgart.de/ito
00004     Copyright (C) 2013, Institut für Technische Optik (ITO),
00005     Universität Stuttgart, Germany
00006 
00007     This file is part of itom.
00008   
00009     itom is free software; you can redistribute it and/or modify it
00010     under the terms of the GNU Library General Public Licence as published by
00011     the Free Software Foundation; either version 2 of the Licence, or (at
00012     your option) any later version.
00013 
00014     itom is distributed in the hope that it will be useful, but
00015     WITHOUT ANY WARRANTY; without even the implied warranty of
00016     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library
00017     General Public Licence for more details.
00018 
00019     You should have received a copy of the GNU Library General Public License
00020     along with itom. If not, see <http://www.gnu.org/licenses/>.
00021 *********************************************************************** */
00022 
00023 #ifndef SCRIPTDOCKWIDGET_H
00024 #define SCRIPTDOCKWIDGET_H
00025 
00026 #include "abstractDockWidget.h"
00027 #include "itomQWidgets.h"
00028 #include "scriptEditorWidget.h"
00029 
00030 #include <qaction.h>
00031 #include <qstring.h>
00032 #include <qtoolbar.h>
00033 
00034 #include <qevent.h>
00035 
00036 #include "../ui/widgetFindWord.h"
00037 
00038 class QSignalMapper; //forward declaration
00039 
00040 namespace ito {
00041 
00042 class DialogReplace; //forward declaration
00043 
00044 class ScriptDockWidget : public AbstractDockWidget
00045 {
00046     Q_OBJECT
00047 public:
00048     ScriptDockWidget(const QString &title, const QString &objName, bool docked, bool isDockAvailable, QWidget *parent = 0, Qt::WindowFlags flags = 0);
00049     ~ScriptDockWidget();
00050 
00051     QStringList getModifiedFileNames(bool ignoreNewScripts = false, int excludeIndex = -1) const;
00052 
00053     RetVal newScript();
00054     RetVal openScript();
00055     RetVal openScript(QString filename, bool silent = false);
00056     RetVal saveAllScripts(bool askFirst = true, bool ignoreNewScripts = false, int excludeIndex = -1);
00057     RetVal closeAllScripts(bool saveFirst = true, bool askFirst = true, bool ignoreNewScripts = false, int excludeIndex = -1);
00058 
00059     inline bool isTabIndexValid(int tabIndex) const { return (tabIndex >= 0 && tabIndex < m_tab->count()); };   
00060     inline int getTabCount() const { return m_tab->count(); };      
00061     bool containsNewScripts() const;
00062 
00063     RetVal appendEditor(ScriptEditorWidget* editorWidget);         
00064     ScriptEditorWidget* removeEditor(int index);                    
00065     bool activateTabByFilename(const QString &filename, int line = -1);
00066     bool activeTabEnsureLineVisible(int lineNr);
00067 
00068     QList<ito::ScriptEditorStorage> saveScriptState() const;
00069     RetVal restoreScriptState(const QList<ito::ScriptEditorStorage> &states);
00070 
00071 protected:
00072     ScriptEditorWidget* getEditorByIndex(int index) const;
00073     ScriptEditorWidget* getCurrentEditor() const;
00074 
00075     int getIndexByEditor(const ScriptEditorWidget* sew) const;
00076 
00077 
00078     void createActions();
00079     //void deleteActions();
00080     void createMenus();
00081     void createToolBars();
00082     void createStatusBar();
00083 
00084     //void windowStateChanged( bool windowNotToolbox );
00085 
00086     void closeEvent(QCloseEvent *event);
00087 
00088     RetVal closeTab(int index, bool saveFirst = true);
00089     RetVal saveTab(int index, bool forceSaveAs = false, bool askFirst = true);
00090 
00091 private:
00092     QWidget *m_pCenterWidget;
00093     QVBoxLayout *m_pVBox;
00094     QTabWidgetItom* m_tab;              
00095     WidgetFindWord *m_pWidgetFindWord;
00096     DialogReplace *m_pDialogReplace;
00097     
00098 
00099     int m_actTabIndex;                  
00101     // ACTIONS
00102     ShortcutAction *m_tabMoveLeftAction;
00103     ShortcutAction *m_tabMoveRightAction;
00104     ShortcutAction *m_tabMoveFirstAction;
00105     ShortcutAction *m_tabMoveLastAction;
00106     ShortcutAction *m_tabCloseAction;
00107     ShortcutAction *m_tabCloseOthersAction;
00108     ShortcutAction *m_tabCloseAllAction;
00109     ShortcutAction *m_tabDockAction;
00110     ShortcutAction *m_tabUndockAction;
00111     ShortcutAction *m_newScriptAction;
00112     ShortcutAction *m_openScriptAction;
00113     ShortcutAction *m_saveScriptAction;
00114     ShortcutAction *m_saveScriptAsAction;
00115     ShortcutAction *m_saveAllScriptsAction;
00116     ShortcutAction *m_printAction;
00117     ShortcutAction *m_cutAction;
00118     ShortcutAction *m_copyAction;
00119     ShortcutAction *m_pasteAction;
00120     ShortcutAction *m_undoAction;
00121     ShortcutAction *m_redoAction;
00122     ShortcutAction *m_commentAction;
00123     ShortcutAction *m_uncommentAction;
00124     ShortcutAction *m_indentAction;
00125     ShortcutAction *m_unindentAction;
00126     ShortcutAction *m_scriptRunAction;
00127     ShortcutAction *m_scriptRunSelectionAction;
00128     ShortcutAction *m_scriptDebugAction;
00129     ShortcutAction *m_scriptStopAction;
00130     ShortcutAction *m_scriptContinueAction;
00131     ShortcutAction *m_scriptStepAction;
00132     ShortcutAction *m_scriptStepOverAction;
00133     ShortcutAction *m_scriptStepOutAction;
00134     ShortcutAction *m_findTextExprAction;
00135     ShortcutAction *m_replaceTextExprAction;
00136     ShortcutAction *m_gotoAction;
00137     ShortcutAction *m_openIconBrowser;
00138     ShortcutAction *m_bookmarkToggle;
00139     ShortcutAction *m_bookmarkNext;
00140     ShortcutAction *m_bookmarkPrevious;
00141     ShortcutAction *m_bookmarkClearAll;
00142     ShortcutAction *m_lastFileAct;
00143 
00144     QMenu *m_tabContextMenu;
00145     QMenu *m_fileMenu;
00146     QMenu *m_lastFilesMenu;
00147     QMenu *m_viewMenu;
00148     QMenu *m_editMenu;
00149     QMenu *m_scriptMenu;
00150     QMenu *m_winMenu;
00151     QMenu *m_bookmark;
00152 
00153     QSignalMapper *m_lastFilesMapper;
00154 
00155     QToolBar* m_fileToolBar;
00156     QToolBar* m_editToolBar;
00157     QToolBar* m_scriptToolBar;
00158     QToolBar* m_bookmarkToolBar;
00159 
00160 signals:
00161     void removeAndDeleteScriptDockWidget(ScriptDockWidget* widget);                             
00163     void openScriptRequest(const QString &filename, ScriptDockWidget* scriptDockWidget);               
00165     void dockScriptTab(ScriptDockWidget* widget, int index, bool closeDockIfEmpty = false);     
00166     void undockScriptTab(ScriptDockWidget* widget, int index, bool undockToNewScriptWindow = false, bool closeDockIfEmpty = false);   
00168     void pythonRunFileRequest(QString filename);                                                
00169     void pythonDebugFileRequest(QString filename);                                              
00170     void pythonInterruptExecution();                                                            
00171     void pythonDebugCommand(tPythonDbgCmd cmd);                                                 
00172     void pythonRunSelection(QString selectionText);                                             
00174     //void lastFileClicked(const QString &path);
00175 
00176 private slots:
00177     void tabContextMenuEvent (QContextMenuEvent * event);
00178 
00179     void findTextExpr(QString expr, bool regExpr, bool caseSensitive, bool wholeWord, bool wrap, bool forward, bool isQuickSeach);
00180     void replaceTextExpr(QString expr, QString replace);
00181     void replaceAllExpr(QString expr, QString replace, bool regExpr, bool caseSensitive, bool wholeWord, int findIn);
00182     void insertIconBrowserText(QString iconLink);
00183 
00184     void currentTabChanged(int index);
00185     void tabCloseRequested(int index);
00186     void tabCloseRequested(ScriptEditorWidget* sew, bool ignoreModifications);
00187     void scriptModificationChanged(bool changed);
00188 
00189     void updateEditorActions();
00190     void updatePythonActions();
00191     void updateTabContextActions();
00192 
00193     void mnuOpenIconBrowser();
00194 
00195     void mnuTabMoveLeft();
00196     void mnuTabMoveRight();
00197     void mnuTabMoveFirst();
00198     void mnuTabMoveLast();
00199     void mnuTabClose();
00200     void mnuTabCloseOthers();
00201     void mnuTabCloseAll();
00202     void mnuTabDock();
00203     void mnuTabUndock();
00204     void mnuNewScript();
00205     void mnuOpenScript();
00206     void mnuSaveScript();
00207     void mnuSaveScriptAs();
00208     void mnuSaveAllScripts();
00209     void mnuPrint();
00210     void mnuCut();
00211     void mnuCopy();
00212     void mnuPaste();
00213     void mnuUndo();
00214     void mnuRedo();
00215     void mnuComment();
00216     void mnuUncomment();
00217     void mnuIndent();
00218     void mnuUnindent();
00219     void mnuScriptRun();
00220     void mnuScriptRunSelection();
00221     void mnuScriptDebug();
00222     void mnuScriptStop();
00223     void mnuScriptContinue();
00224     void mnuScriptStep();
00225     void mnuScriptStepOver();
00226     void mnuScriptStepOut();
00227     void mnuFindTextExpr();
00228     void mnuReplaceTextExpr();
00229     void mnuGoto();
00230     void mnuToggleBookmark();
00231     void mnuClearAllBookmarks();
00232     void mnuGotoNextBookmark();
00233     void mnuGotoPreviousBookmark();
00234 
00235     void menuLastFilesAboutToShow();
00236     void lastFileOpen(const QString &path);
00237 
00238 public slots:
00239     void editorMarginChanged();
00240 };
00241 
00242 } //end namespace ito
00243 
00244 #endif
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends