itom  3.0.0
scriptDockWidget.h
1 /* ********************************************************************
2  itom software
3  URL: http://www.uni-stuttgart.de/ito
4  Copyright (C) 2016, Institut fuer Technische Optik (ITO),
5  Universitaet Stuttgart, Germany
6 
7  This file is part of itom.
8 
9  itom is free software; you can redistribute it and/or modify it
10  under the terms of the GNU Library General Public Licence as published by
11  the Free Software Foundation; either version 2 of the Licence, or (at
12  your option) any later version.
13 
14  itom is distributed in the hope that it will be useful, but
15  WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library
17  General Public Licence for more details.
18 
19  You should have received a copy of the GNU Library General Public License
20  along with itom. If not, see <http://www.gnu.org/licenses/>.
21 *********************************************************************** */
22 
23 #ifndef SCRIPTDOCKWIDGET_H
24 #define SCRIPTDOCKWIDGET_H
25 
26 #include "abstractDockWidget.h"
27 #include "itomQWidgets.h"
28 #include "scriptEditorWidget.h"
29 
30 #include <qaction.h>
31 #include <qstring.h>
32 #include <qtoolbar.h>
33 #include <qcombobox.h>
34 
35 #include "../models/classNavigatorItem.h"
36 
37 #include <qevent.h>
38 
39 #include "../ui/widgetFindWord.h"
40 
41 class QSignalMapper; //forward declaration
42 
43 namespace ito {
44 
45 class DialogReplace; //forward declaration
46 
48 {
49  Q_OBJECT
50 public:
51  ScriptDockWidget(const QString &title, const QString &objName, bool docked, bool isDockAvailable, QWidget *parent = 0, Qt::WindowFlags flags = 0);
53 
54  QStringList getModifiedFileNames(bool ignoreNewScripts = false, int excludeIndex = -1) const;
55  QStringList getAllFilenames() const;
56 
57  RetVal newScript();
59  RetVal openScript(QString filename, bool silent = false);
60  RetVal saveAllScripts(bool askFirst = true, bool ignoreNewScripts = false, int excludeIndex = -1);
61  RetVal closeAllScripts(bool saveFirst = true, bool askFirst = true, bool ignoreNewScripts = false, int excludeIndex = -1);
62 
63  inline bool isTabIndexValid(int tabIndex) const { return (tabIndex >= 0 && tabIndex < m_tab->count()); }
64  inline int getTabCount() const { return m_tab->count(); }
65  inline int getCurrentIndex() const { return m_tab->currentIndex(); }
66  void setCurrentIndex(int index);
67 
68  bool containsNewScripts() const;
69 
70  RetVal appendEditor(ScriptEditorWidget* editorWidget);
71  ScriptEditorWidget* removeEditor(int index);
72  bool activateTabByFilename(const QString &filename, int line = -1);
73  bool activeTabEnsureLineVisible(const int lineNr, bool errorMessageClick = false);
74 
75  QList<ito::ScriptEditorStorage> saveScriptState() const;
76  RetVal restoreScriptState(const QList<ito::ScriptEditorStorage> &states);
77 
78 protected:
79  ScriptEditorWidget* getEditorByIndex(int index) const;
80  ScriptEditorWidget* getCurrentEditor() const;
81 
82  int getIndexByEditor(const ScriptEditorWidget* sew) const;
83 
84 
85  void createActions();
86  //void deleteActions();
87  void createMenus();
88  void createToolBars();
89  void createStatusBar();
90 
91  //void windowStateChanged( bool windowNotToolbox );
92 
93  void closeEvent(QCloseEvent *event);
94 
95  RetVal closeTab(int index, bool saveFirst = true);
96  RetVal saveTab(int index, bool forceSaveAs = false, bool askFirst = true);
97 
98 private:
99  QWidget *m_pCenterWidget;
100  QVBoxLayout *m_pVBox;
102  WidgetFindWord *m_pWidgetFindWord;
103  DialogReplace *m_pDialogReplace;
104 
107  // ACTIONS
108  ShortcutAction *m_tabMoveLeftAction;
109  ShortcutAction *m_tabMoveRightAction;
110  ShortcutAction *m_tabMoveFirstAction;
111  ShortcutAction *m_tabMoveLastAction;
112  ShortcutAction *m_tabCloseAction;
113  ShortcutAction *m_tabCloseOthersAction;
114  ShortcutAction *m_tabCloseAllAction;
115  ShortcutAction *m_tabDockAction;
116  ShortcutAction *m_tabUndockAction;
117  ShortcutAction *m_newScriptAction;
118  ShortcutAction *m_openScriptAction;
119  ShortcutAction *m_saveScriptAction;
120  ShortcutAction *m_saveScriptAsAction;
121  ShortcutAction *m_saveAllScriptsAction;
122  ShortcutAction *m_printAction;
123  ShortcutAction *m_cutAction;
124  ShortcutAction *m_copyAction;
125  ShortcutAction *m_pasteAction;
126  ShortcutAction *m_undoAction;
127  ShortcutAction *m_redoAction;
128  ShortcutAction *m_commentAction;
129  ShortcutAction *m_uncommentAction;
130  ShortcutAction *m_indentAction;
131  ShortcutAction *m_unindentAction;
132  ShortcutAction *m_scriptRunAction;
133  ShortcutAction *m_scriptRunSelectionAction;
134  ShortcutAction *m_scriptDebugAction;
135  ShortcutAction *m_scriptStopAction;
136  ShortcutAction *m_scriptContinueAction;
137  ShortcutAction *m_scriptStepAction;
138  ShortcutAction *m_scriptStepOverAction;
139  ShortcutAction *m_scriptStepOutAction;
140  ShortcutAction *m_findTextExprAction;
141  ShortcutAction *m_findTextExprActionSC;
142  ShortcutAction *m_replaceTextExprAction;
143  ShortcutAction *m_gotoAction;
144  ShortcutAction *m_openIconBrowser;
145  ShortcutAction *m_bookmarkToggle;
146  ShortcutAction *m_bookmarkNext;
147  ShortcutAction *m_bookmarkPrevious;
148  ShortcutAction *m_bookmarkClearAll;
149  ShortcutAction *m_insertCodecAct;
150 
151  QMenu *m_tabContextMenu;
152  QMenu *m_fileMenu;
153  QMenu *m_lastFilesMenu;
154  QMenu *m_viewMenu;
155  QMenu *m_editMenu;
156  QMenu *m_scriptMenu;
157  QMenu *m_winMenu;
158  QMenu *m_bookmark;
159 
160  QSignalMapper *m_lastFilesMapper;
161 
162  QToolBar* m_fileToolBar;
163  QToolBar* m_editToolBar;
164  QToolBar* m_scriptToolBar;
165  QToolBar* m_bookmarkToolBar;
166 
167  // ClassNavigator
168  QWidget *m_classMenuBar;
169  QComboBox *m_classBox;
170  QComboBox *m_methodBox;
171  bool m_ClassNavigatorEnabled;
172  void fillClassBox(const ClassNavigatorItem *parent, QString prefix);
173  void fillMethodBox(const ClassNavigatorItem *parent);
174  void showClassNavigator(bool show);
175  QMap<int, ClassNavigatorItem*> m_rootElements;
176 
177 signals:
180  void openScriptRequest(const QString &filename, ScriptDockWidget* scriptDockWidget);
182  void dockScriptTab(ScriptDockWidget* widget, int index, bool closeDockIfEmpty = false);
183  void undockScriptTab(ScriptDockWidget* widget, int index, bool undockToNewScriptWindow = false, bool closeDockIfEmpty = false);
185  void pythonRunFileRequest(QString filename);
186  void pythonDebugFileRequest(QString filename);
187  void pythonInterruptExecution();
188  void pythonDebugCommand(tPythonDbgCmd cmd);
189  void pythonRunSelection(QString selectionText);
191  //void lastFileClicked(const QString &path);
192 
193 private slots:
194  void tabContextMenuEvent (QContextMenuEvent * event);
195 
196  void findTextExpr(QString expr, bool regExpr, bool caseSensitive, bool wholeWord, bool wrap, bool forward, bool isQuickSeach);
197  void replaceTextExpr(QString expr, QString replace);
198  void replaceAllExpr(QString expr, QString replace, bool regExpr, bool caseSensitive, bool wholeWord, int findIn);
199  void insertIconBrowserText(QString iconLink);
200 
201  void currentTabChanged(int index);
202  void tabCloseRequested(int index);
203  void tabCloseRequested(ScriptEditorWidget* sew, bool ignoreModifications);
204  void scriptModificationChanged(bool changed);
205 
206  void updateEditorActions();
207  void updatePythonActions();
209 
210  void mnuOpenIconBrowser();
211 
212  void mnuTabMoveLeft();
213  void mnuTabMoveRight();
214  void mnuTabMoveFirst();
215  void mnuTabMoveLast();
216  void mnuTabClose();
217  void mnuTabCloseOthers();
218  void mnuTabCloseAll();
219  void mnuTabDock();
220  void mnuTabUndock();
221  void mnuNewScript();
222  void mnuOpenScript();
223  void mnuSaveScript();
224  void mnuSaveScriptAs();
225  void mnuSaveAllScripts();
226  void mnuPrint();
227  void mnuCut();
228  void mnuCopy();
229  void mnuPaste();
230  void mnuUndo();
231  void mnuRedo();
232  void mnuComment();
233  void mnuUncomment();
234  void mnuIndent();
235  void mnuUnindent();
236  void mnuScriptRun();
237  void mnuScriptRunSelection();
238  void mnuScriptDebug();
239  void mnuScriptStop();
240  void mnuScriptContinue();
241  void mnuScriptStep();
242  void mnuScriptStepOver();
243  void mnuScriptStepOut();
244  void mnuFindTextExpr();
245  void mnuReplaceTextExpr();
246  void mnuGoto();
247  void mnuToggleBookmark();
248  void mnuClearAllBookmarks();
249  void mnuGotoNextBookmark();
250  void mnuGotoPreviousBookmark();
251  void mnuInsertCodec();
252 
253  void menuLastFilesAboutToShow();
254  void lastFileOpen(const QString &path);
255 
256  // Class Navigator
257  void classChosen(const QString &text);
258  void methodChosen(const QString &text);
259 
260  void loadSettings();
261  void findWordWidgetFinished();
262 
263 public slots:
264  void editorMarginChanged();
265  void updateClassesBox(ScriptEditorWidget *editor);
266 };
267 
268 } //end namespace ito
269 
270 #endif
bool isTabIndexValid(int tabIndex) const
Definition: scriptDockWidget.h:63
void mnuSaveScript()
slot invoked by action to save active script
Definition: scriptDockWidget.cpp:1767
void updateEditorActions()
updates actions which deal with editor commands
Definition: scriptDockWidget.cpp:1107
void mnuTabDock()
dock the active tab and closes this ScriptDockWidget, if it is not docked and empty after docking ...
Definition: scriptDockWidget.cpp:1738
void updatePythonActions()
updates actions which deal with python commands
Definition: scriptDockWidget.cpp:1160
void mnuUncomment()
slot invoked to execute an uncomment command in active script editor
Definition: scriptDockWidget.cpp:1875
~ScriptDockWidget()
destructor
Definition: scriptDockWidget.cpp:181
void mnuTabUndock()
undock the active tab and closes this ScriptDockWidget, if it is not docked and empty after docking ...
Definition: scriptDockWidget.cpp:1745
widget containing one or multiple script editors (tabbed). This widget can either be a docking widget...
Definition: scriptDockWidget.h:47
void tabContextMenuEvent(QContextMenuEvent *event)
method is invoked, if a context menu is requested
Definition: scriptDockWidget.cpp:1083
void createMenus()
create menus
Definition: scriptDockWidget.cpp:1439
void mnuScriptStepOver()
slot invoked to execute a python debugging step over
Definition: scriptDockWidget.cpp:1996
RetVal closeAllScripts(bool saveFirst=true, bool askFirst=true, bool ignoreNewScripts=false, int excludeIndex=-1)
closes all opened scripts in this ScriptDockWidget
Definition: scriptDockWidget.cpp:702
void tabCloseRequested(int index)
slot invoked if close button of any tab of m_tab (QTabWidgetItom) has been pressed ...
Definition: scriptDockWidget.cpp:931
void mnuTabClose()
closes active tab
Definition: scriptDockWidget.cpp:1714
Class for managing status values (like errors or warning)
Definition: retVal.h:54
void mnuSaveAllScripts()
slot invoked by action to save all opened scripts
Definition: scriptDockWidget.cpp:1789
Definition: dialogReplace.h:35
RetVal appendEditor(ScriptEditorWidget *editorWidget)
append given ScriptEditorWidget as new tab
Definition: scriptDockWidget.cpp:738
QTabWidgetItom * m_tab
Definition: scriptDockWidget.h:101
void mnuTabMoveLast()
moves active tab to the last position
Definition: scriptDockWidget.cpp:1704
void pythonDebugFileRequest(QString filename)
QStringList getAllFilenames() const
returns a list of all filenames of all opened scripts (besides new scripts)
Definition: scriptDockWidget.cpp:523
void dockScriptTab(ScriptDockWidget *widget, int index, bool closeDockIfEmpty=false)
RetVal newScript()
creates new instance of ScriptEditorWidget and appends it to the tab-widget
Definition: scriptDockWidget.cpp:553
bool activateTabByFilename(const QString &filename, int line=-1)
activates tab with script whose filename corresponds to the filename parameter.
Definition: scriptDockWidget.cpp:1592
void currentTabChanged(int index)
slot invoked by tab-widget if current tab changed
Definition: scriptDockWidget.cpp:844
ScriptEditorWidget * getEditorByIndex(int index) const
returns ScriptEditorWidget by given tab-index
Definition: scriptDockWidget.cpp:1032
void removeAndDeleteScriptDockWidget(ScriptDockWidget *widget)
RetVal openScript()
method to open an existing script which can be indicated by the user by a getOpenFileName-dialog.
Definition: scriptDockWidget.cpp:570
Definition: widgetFindWord.h:35
void pythonRunFileRequest(QString filename)
void scriptModificationChanged(bool changed)
slot connected to each ScriptEditorWidget instance. Invoked if any content in any script changed...
Definition: scriptDockWidget.cpp:901
void mnuScriptStepOut()
slot invoked to execute a python debugging step out
Definition: scriptDockWidget.cpp:2003
void openScriptRequest(const QString &filename, ScriptDockWidget *scriptDockWidget)
void mnuCut()
slot invoked to execute a cut command in active script editor
Definition: scriptDockWidget.cpp:1815
void createToolBars()
create toolbars
Definition: scriptDockWidget.cpp:1534
void mnuScriptDebug()
slot invoked to debug the active script in python engine
Definition: scriptDockWidget.cpp:1938
Definition: apiFunctionsGraph.cpp:39
void mnuOpenIconBrowser()
Open the icon browser.
Definition: scriptDockWidget.cpp:1681
ScriptEditorWidget * getCurrentEditor() const
returns reference to current ScriptEditorWidget
Definition: scriptDockWidget.cpp:1073
int m_actTabIndex
Definition: scriptDockWidget.h:105
void updateTabContextActions()
updates actions before context menu of tabs is shown
Definition: scriptDockWidget.cpp:1189
void mnuTabCloseAll()
closes every tab, asks for saving first
Definition: scriptDockWidget.cpp:1731
void mnuUndo()
slot invoked to execute an undo command in active script editor
Definition: scriptDockWidget.cpp:1848
RetVal saveAllScripts(bool askFirst=true, bool ignoreNewScripts=false, int excludeIndex=-1)
tries to save all opened scripts in this ScriptDockWidget
Definition: scriptDockWidget.cpp:649
void mnuScriptStep()
slot invoked to execute a python debugging step
Definition: scriptDockWidget.cpp:1989
bool containsNewScripts() const
checks whether any editor in this ScriptDockWidget has no filename
Definition: scriptDockWidget.cpp:820
int getIndexByEditor(const ScriptEditorWidget *sew) const
returns tab-index by given reference to ScriptEditorWidget
Definition: scriptDockWidget.cpp:1051
QStringList getModifiedFileNames(bool ignoreNewScripts=false, int excludeIndex=-1) const
returns a list of filenames, which have been modified in this ScriptDockWidget
Definition: scriptDockWidget.cpp:491
abstract dock widget class which inherits QDockWidget. The content of QDockWidget consists of an inst...
Definition: abstractDockWidget.h:45
void pythonRunSelection(QString selectionText)
void mnuTabMoveFirst()
moves active tab to the first position
Definition: scriptDockWidget.cpp:1694
Definition: abstractDockWidget.h:183
void mnuSaveScriptAs()
slot invoked by action to save active script with new filename (save as)
Definition: scriptDockWidget.cpp:1778
void mnuNewScript()
slot invoked by action to open a new script
Definition: scriptDockWidget.cpp:1753
Definition: classNavigatorItem.h:37
void pythonDebugCommand(tPythonDbgCmd cmd)
Definition: itomQWidgets.h:41
void createStatusBar()
init status bar
Definition: scriptDockWidget.cpp:1581
void mnuScriptStop()
slot invoked to stop python script execution
Definition: scriptDockWidget.cpp:1958
void mnuScriptRun()
slot invoked to run the active script in python engine
Definition: scriptDockWidget.cpp:1908
void mnuRedo()
slot invoked to execute a redo command in active script editor
Definition: scriptDockWidget.cpp:1856
void mnuScriptContinue()
slot invoked to continue debugging process if actually waiting at breakpoint
Definition: scriptDockWidget.cpp:1982
void mnuTabMoveLeft()
moves active tab by one position to the left
Definition: scriptDockWidget.cpp:1661
void createActions()
creates actions
Definition: scriptDockWidget.cpp:1218
void mnuPaste()
slot invoked to execute a paste command in active script editor
Definition: scriptDockWidget.cpp:1837
void closeEvent(QCloseEvent *event)
this method is invoked if this ScriptDockWidget should be closed.
Definition: scriptDockWidget.cpp:2167
void mnuIndent()
slot invoked to execute an indentation command in active script editor
Definition: scriptDockWidget.cpp:1886
void mnuOpenScript()
slot invoked by action to open an existing script
Definition: scriptDockWidget.cpp:1760
void mnuTabMoveRight()
moves active tab by one position to the right
Definition: scriptDockWidget.cpp:1671
RetVal saveTab(int index, bool forceSaveAs=false, bool askFirst=true)
saves tab
Definition: scriptDockWidget.cpp:1001
void mnuComment()
slot invoked to execute a comment command in active script editor
Definition: scriptDockWidget.cpp:1864
ScriptDockWidget(const QString &title, const QString &objName, bool docked, bool isDockAvailable, QWidget *parent=0, Qt::WindowFlags flags=0)
constructor
Definition: scriptDockWidget.cpp:71
bool docked() const
Definition: abstractDockWidget.h:86
int getTabCount() const
Definition: scriptDockWidget.h:64
void mnuUnindent()
slot invoked to execute an unindentation command in active script editor
Definition: scriptDockWidget.cpp:1897
void mnuTabCloseOthers()
closes every tab besides active one (asks for saving tabs, which should be closed) ...
Definition: scriptDockWidget.cpp:1724
RetVal closeTab(int index, bool saveFirst=true)
public method to close any specific tab with or without saving its script first
Definition: scriptDockWidget.cpp:962
void undockScriptTab(ScriptDockWidget *widget, int index, bool undockToNewScriptWindow=false, bool closeDockIfEmpty=false)
void mnuCopy()
slot invoked to execute a copy command in active script editor
Definition: scriptDockWidget.cpp:1826
ScriptEditorWidget * removeEditor(int index)
removes ScriptEditorWidget at given tab position from tab-widget and returns its reference ...
Definition: scriptDockWidget.cpp:786