itom 1.2.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 namespace ito {
00039 
00040 class DialogReplace; //forward declaration
00041 
00042 class ScriptDockWidget : public AbstractDockWidget
00043 {
00044     Q_OBJECT
00045 public:
00046     ScriptDockWidget(const QString &title, const QString &objName, bool docked, bool isDockAvailable, QWidget *parent = 0, Qt::WindowFlags flags = 0);
00047     ~ScriptDockWidget();
00048 
00049     QStringList getModifiedFileNames(bool ignoreNewScripts = false, int excludeIndex = -1) const;
00050 
00051     RetVal newScript();
00052     RetVal openScript();
00053     RetVal openScript(QString filename, bool silent = false);
00054     RetVal saveAllScripts(bool askFirst = true, bool ignoreNewScripts = false, int excludeIndex = -1);
00055     RetVal closeAllScripts(bool saveFirst = true, bool askFirst = true, bool ignoreNewScripts = false, int excludeIndex = -1);
00056 
00057     inline bool isTabIndexValid(int tabIndex) const { return (tabIndex >= 0 && tabIndex < m_tab->count()); };   
00058     inline int getTabCount() const { return m_tab->count(); };      
00059     bool containsNewScripts() const;
00060 
00061     RetVal appendEditor(ScriptEditorWidget* editorWidget);         
00062     ScriptEditorWidget* removeEditor(int index);                    
00063     bool activateTabByFilename(QString filename, int line = -1);
00064     bool activeTabEnsureLineVisible(int lineNr);
00065 
00066     QList<ito::ScriptEditorStorage> saveScriptState() const;
00067     RetVal restoreScriptState(const QList<ito::ScriptEditorStorage> &states);
00068 
00069 protected:
00070     ScriptEditorWidget* getEditorByIndex(int index) const;
00071     ScriptEditorWidget* getCurrentEditor() const;
00072 
00073     int getIndexByEditor(ScriptEditorWidget* sew) const;
00074 
00075 
00076     void createActions();
00077     //void deleteActions();
00078     void createMenus();
00079     void createToolBars();
00080     void createStatusBar();
00081 
00082     //void windowStateChanged( bool windowNotToolbox );
00083 
00084     void closeEvent(QCloseEvent *event);
00085 
00086     RetVal closeTab(int index, bool saveFirst = true);
00087     RetVal saveTab(int index, bool forceSaveAs = false, bool askFirst = true);
00088 
00089 private:
00090     QWidget *m_pCenterWidget;
00091     QVBoxLayout *m_pVBox;
00092     QTabWidgetItom* m_tab;              
00093     WidgetFindWord *m_pWidgetFindWord;
00094     DialogReplace *m_pDialogReplace;
00095 
00096     int m_actTabIndex;                  
00098     // ACTIONS
00099     ShortcutAction *m_tabMoveLeftAction;
00100     ShortcutAction *m_tabMoveRightAction;
00101     ShortcutAction *m_tabMoveFirstAction;
00102     ShortcutAction *m_tabMoveLastAction;
00103     ShortcutAction *m_tabCloseAction;
00104     ShortcutAction *m_tabCloseOthersAction;
00105     ShortcutAction *m_tabCloseAllAction;
00106     ShortcutAction *m_tabDockAction;
00107     ShortcutAction *m_tabUndockAction;
00108     ShortcutAction *m_newScriptAction;
00109     ShortcutAction *m_openScriptAction;
00110     ShortcutAction *m_saveScriptAction;
00111     ShortcutAction *m_saveScriptAsAction;
00112     ShortcutAction *m_saveAllScriptsAction;
00113     ShortcutAction *m_printAction;
00114     ShortcutAction *m_cutAction;
00115     ShortcutAction *m_copyAction;
00116     ShortcutAction *m_pasteAction;
00117     ShortcutAction *m_undoAction;
00118     ShortcutAction *m_redoAction;
00119     ShortcutAction *m_commentAction;
00120     ShortcutAction *m_uncommentAction;
00121     ShortcutAction *m_indentAction;
00122     ShortcutAction *m_unindentAction;
00123     ShortcutAction *m_scriptRunAction;
00124     ShortcutAction *m_scriptRunSelectionAction;
00125     ShortcutAction *m_scriptDebugAction;
00126     ShortcutAction *m_scriptStopAction;
00127     ShortcutAction *m_scriptContinueAction;
00128     ShortcutAction *m_scriptStepAction;
00129     ShortcutAction *m_scriptStepOverAction;
00130     ShortcutAction *m_scriptStepOutAction;
00131     ShortcutAction *m_findTextExprAction;
00132     ShortcutAction *m_replaceTextExprAction;
00133     ShortcutAction *m_gotoAction;
00134     ShortcutAction *m_openIconBrowser;
00135     ShortcutAction *m_bookmarkToggle;
00136     ShortcutAction *m_bookmarkNext;
00137     ShortcutAction *m_bookmarkPrevious;
00138     ShortcutAction *m_bookmarkClearAll;
00139 
00140     QMenu *m_tabContextMenu;
00141     QMenu *m_fileMenu;
00142     QMenu *m_viewMenu;
00143     QMenu *m_editMenu;
00144     QMenu *m_scriptMenu;
00145     QMenu *m_winMenu;
00146     QMenu *m_bookmark;
00147 
00148     QToolBar* m_fileToolBar;
00149     QToolBar* m_editToolBar;
00150     QToolBar* m_scriptToolBar;
00151     QToolBar* m_bookmarkToolBar;
00152 
00153 signals:
00154     void removeAndDeleteScriptDockWidget(ScriptDockWidget* widget);                             
00156     void openScriptRequest(QString filename, ScriptDockWidget* scriptDockWidget);               
00158     void dockScriptTab(ScriptDockWidget* widget, int index, bool closeDockIfEmpty = false);     
00159     void undockScriptTab(ScriptDockWidget* widget, int index, bool undockToNewScriptWindow = false, bool closeDockIfEmpty = false);   
00161     void pythonRunFileRequest(QString filename);                                                
00162     void pythonDebugFileRequest(QString filename);                                              
00163     void pythonInterruptExecution();                                                            
00164     void pythonDebugCommand(tPythonDbgCmd cmd);                                                 
00165     void pythonRunSelection(QString selectionText);                                             
00167 private slots:
00168     void tabContextMenuEvent (QContextMenuEvent * event);
00169 
00170     void findTextExpr(QString expr, bool regExpr, bool caseSensitive, bool wholeWord, bool wrap, bool forward, bool isQuickSeach);
00171     void replaceTextExpr(QString expr, QString replace);
00172     void replaceAllExpr(QString expr, QString replace, bool regExpr, bool caseSensitive, bool wholeWord);
00173     void insertIconBrowserText(QString iconLink);
00174 
00175     void currentTabChanged(int index);
00176     void tabCloseRequested(int index);
00177     void tabCloseRequested(ScriptEditorWidget* sew, bool ignoreModifications);
00178     void scriptModificationChanged(bool changed);
00179 
00180     void updateEditorActions();
00181     void updatePythonActions();
00182     void updateTabContextActions();
00183 
00184     void mnuOpenIconBrowser();
00185 
00186     void mnuTabMoveLeft();
00187     void mnuTabMoveRight();
00188     void mnuTabMoveFirst();
00189     void mnuTabMoveLast();
00190     void mnuTabClose();
00191     void mnuTabCloseOthers();
00192     void mnuTabCloseAll();
00193     void mnuTabDock();
00194     void mnuTabUndock();
00195     void mnuNewScript();
00196     void mnuOpenScript();
00197     void mnuSaveScript();
00198     void mnuSaveScriptAs();
00199     void mnuSaveAllScripts();
00200     void mnuPrint();
00201     void mnuCut();
00202     void mnuCopy();
00203     void mnuPaste();
00204     void mnuUndo();
00205     void mnuRedo();
00206     void mnuComment();
00207     void mnuUncomment();
00208     void mnuIndent();
00209     void mnuUnindent();
00210     void mnuScriptRun();
00211     void mnuScriptRunSelection();
00212     void mnuScriptDebug();
00213     void mnuScriptStop();
00214     void mnuScriptContinue();
00215     void mnuScriptStep();
00216     void mnuScriptStepOver();
00217     void mnuScriptStepOut();
00218     void mnuFindTextExpr();
00219     void mnuReplaceTextExpr();
00220     void mnuGoto();
00221     void mnuToggleBookmark();
00222     void mnuClearAllBookmarks();
00223     void mnuGotoNextBookmark();
00224     void mnuGotoPreviousBookmark();
00225 
00226 public slots:
00227     void editorMarginChanged();
00228 };
00229 
00230 } //end namespace ito
00231 
00232 #endif
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends