GNU Octave  4.2.1
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
main-window.h
Go to the documentation of this file.
1 /*
2 
3 Copyright (C) 2013-2017 John W. Eaton
4 Copyright (C) 2011-2016 Jacob Dawid
5 
6 This file is part of Octave.
7 
8 Octave is free software; you can redistribute it and/or modify it
9 under the terms of the GNU General Public License as published by the
10 Free Software Foundation; either version 3 of the License, or (at your
11 option) any later version.
12 
13 Octave is distributed in the hope that it will be useful, but WITHOUT
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
17 
18 You should have received a copy of the GNU General Public License
19 along with Octave; see the file COPYING. If not, see
20 <http://www.gnu.org/licenses/>.
21 
22 */
23 
24 #if ! defined (octave_main_window_h)
25 #define octave_main_window_h 1
26 
27 // Qt includes
28 #include <QMainWindow>
29 #include <QThread>
30 #include <QTabWidget>
31 #include <QMdiArea>
32 #include <QStatusBar>
33 #include <QToolBar>
34 #include <QQueue>
35 #include <QMdiSubWindow>
36 #include <QCloseEvent>
37 #include <QToolButton>
38 #include <QComboBox>
39 #include <QPointer>
40 
41 // Editor includes
42 #include "file-editor-interface.h"
43 
44 // QTerminal includes
45 #include "QTerminal.h"
46 
47 // Own includes
48 #include "dialog.h"
50 #include "files-dock-widget.h"
51 #include "find-files-dialog.h"
52 #include "history-dock-widget.h"
53 #include "octave-cmd.h"
54 #include "octave-dock-widget.h"
55 #include "octave-gui.h"
56 #include "octave-qt-link.h"
57 #include "resource-manager.h"
58 #include "terminal-dock-widget.h"
59 #include "workspace-model.h"
60 #include "workspace-view.h"
61 
63 
64 /**
65  * @class MainWindow
66  *
67  * Represents the main window.
68  */
69 class main_window : public QMainWindow
70 {
71  Q_OBJECT
72 
73 public:
74 
75  typedef std::pair <std::string, std::string> name_pair;
76  typedef std::pair <int, int> int_pair;
77 
78  main_window (QWidget *parent, octave::gui_application *app_context);
79 
80  ~main_window (void);
81 
82  bool command_window_has_focus (void) const;
83 
84  void focus_command_window (void);
85 
86 signals:
87 
89  void editor_focus_changed (bool);
90 
91  void settings_changed (const QSettings *);
92  void init_terminal_size_signal (void);
93  void new_file_signal (const QString&);
94  void open_file_signal (const QString&);
95  void edit_mfile_request (const QString&, const QString&, const QString&, int);
96 
97  void show_doc_signal (const QString&);
98 
99  void insert_debugger_pointer_signal (const QString& file, int line);
100  void delete_debugger_pointer_signal (const QString& file, int line);
101  void update_breakpoint_marker_signal (bool insert, const QString& file,
102  int line, const QString& cond);
103 
104  void copyClipboard_signal (void);
105  void pasteClipboard_signal (void);
106  void selectAll_signal (void);
107  void undo_signal (void);
108 
109  void add_actions_signal (QList <QAction *> action_list);
110 
111 public slots:
112 
113  void focus_changed (QWidget *w_old, QWidget *w_new);
114  void request_reload_settings ();
115 
116  void report_status_message (const QString& statusMessage);
117  void handle_save_workspace_request (void);
118  void handle_load_workspace_request (const QString& file = QString ());
120  void handle_clear_workspace_request (void);
121  void handle_clear_history_request (void);
122  void handle_rename_variable_request (const QString& old_name,
123  const QString& new_name);
124  void handle_undo_request (void);
125  void new_file (const QString& commands = QString ());
126  void open_file (const QString& file_name = QString ());
127  void edit_mfile (const QString&, int);
128  void open_online_documentation_page (void);
129  void display_release_notes (void);
130  void load_and_display_community_news (int serial = -1);
131  void display_community_news (const QString& news);
132  void open_bug_tracker_page (void);
133  void open_octave_packages_page (void);
134  void open_contribute_page (void);
135  void open_donate_page (void);
136  void process_settings_dialog_request (const QString& desired_tab
137  = QString ());
138 
139  void copy_image_to_clipboard (const QString& file, bool remove_file);
140 
141  void show_about_octave (void);
142  void notice_settings (const QSettings *settings);
143  void confirm_shutdown_octave (void);
144  void prepare_to_exit (void);
145  void exit_app (int status);
146  void reset_windows (void);
147 
148  void change_directory (const QString& dir);
149  void browse_for_directory (void);
150  void set_current_working_directory (const QString& dir);
151  void change_directory_up (void);
152  void accept_directory_line_edit (void);
153 
154  void execute_command_in_terminal (const QString& dir);
155  void run_file_in_terminal (const QFileInfo& info);
156 
157  void handle_new_figure_request (void);
158 
159  void handle_enter_debugger (void);
160  void handle_exit_debugger (void);
161  void debug_continue (void);
162  void debug_step_into (void);
163  void debug_step_over (void);
164  void debug_step_out (void);
165  void debug_quit (void);
166 
167  void handle_insert_debugger_pointer_request (const QString& file, int line);
168  void handle_delete_debugger_pointer_request (const QString& file, int line);
169  void handle_update_breakpoint_marker_request (bool insert,
170  const QString& file, int line,
171  const QString& cond);
172 
173  void read_settings (void);
174  void init_terminal_size (void);
175  void set_window_layout (QSettings *settings);
176  void write_settings (void);
177  void connect_visibility_changed (void);
178 
179  void copyClipboard (void);
180  void pasteClipboard (void);
181  void selectAll (void);
182 
183  void connect_uiwidget_links (void);
184 
185  void handle_create_dialog (const QString& message, const QString& title,
186  const QString& icon, const QStringList& button,
187  const QString& defbutton,
188  const QStringList& role);
189 
190  void handle_create_listview (const QStringList& list, const QString& mode,
191  int width, int height,
192  const QIntList& initial,
193  const QString& name,
194  const QStringList& prompt,
195  const QString& ok_string,
196  const QString& cancel_string);
197 
198  void handle_create_inputlayout (const QStringList&, const QString&,
199  const QFloatList&, const QFloatList&,
200  const QStringList&);
201 
202  void handle_create_filedialog (const QStringList &filters,
203  const QString& title, const QString& filename,
204  const QString &dirname,
205  const QString& multimode);
206 
207  void handle_show_doc (const QString &file);
208 
209  void execute_octave_interpreter (void);
210  void handle_octave_ready ();
211 
212  // find files dialog
213  void find_files (const QString &startdir=QDir::currentPath ());
214  void find_files_finished (int);
215 
216  // setting global shortcuts
217  void set_global_shortcuts (bool enable);
218 
219  void set_screen_size (int ht, int wd);
220 
221  // handling the clipboard
222  void clipboard_has_changed (QClipboard::Mode);
223  void clear_clipboard ();
224 
225  // get the dockwidgets
227  { return dock_widget_list (); }
228 
229 private slots:
230  void disable_menu_shortcuts (bool disable);
231 
232 protected:
233  void closeEvent (QCloseEvent * closeEvent);
234 
235 private:
236 
237  void construct (void);
238 
239  void construct_octave_qt_link (void);
240 
241  QAction *add_action (QMenu *menu, const QIcon &icon, const QString &text,
242  const char *member, const QWidget *receiver = 0);
243 
244  QMenu* m_add_menu (QMenuBar *p, QString text);
245  void construct_menu_bar (void);
247  void construct_new_menu (QMenu *p);
249  QAction *construct_debug_menu_item (const char *icon, const QString& item,
250  const char* member);
252  QAction *construct_window_menu_item (QMenu *p, const QString& item,
253  bool checkable, QWidget*);
256  void construct_documentation_menu (QMenu *p);
257 
259 
260  void construct_tool_bar (void);
261 
262  void establish_octave_link (void);
263 
265 
267 
268  void rename_variable_callback (const name_pair& names);
269 
270  void command_window_undo_callback (void);
271 
272  void clear_command_window_callback (void);
273 
274  void resize_command_window_callback (void);
275 
276  void set_screen_size_callback (const int_pair&);
277 
278  void clear_workspace_callback (void);
279 
280  void clear_history_callback (void);
281 
282  void execute_command_callback ();
283  void run_file_callback (const QFileInfo& info);
285 
286  void new_figure_callback (void);
287 
289 
290  void queue_command (octave_cmd *cmd);
291 
292  void configure_shortcuts ();
293 
295 
297 
298  QHash<QMenu*, QStringList> _hash_menu_text;
299 
300  // Toolbars.
301  QStatusBar *status_bar;
302 
303  // Subwindows.
310 
312 
314 
316 
317  QToolBar *_main_tool_bar;
318 
319  QMenu *_debug_menu;
320 
321  QAction *_debug_continue;
324  QAction *_debug_step_out;
325  QAction *_debug_quit;
326 
329  QAction *_open_action;
334  QAction *_exit_action;
335 
336  QAction *_copy_action;
337  QAction *_paste_action;
339  QAction *_undo_action;
345 
353  QAction *_history_action;
356  QAction *_editor_action;
359 
367 
370 
371  // Toolbars.
373  static const int current_directory_max_visible = 16;
374  static const int current_directory_max_count = 16;
376 
377  // settings dialog as guarded pointer (set to 0 when deleted)
378  QPointer<settings_dialog> _settings_dlg;
379 
380  // Find files dialog
382 
383  // release notes window
385 
387 
389 
390  QClipboard *_clipboard;
391 
392  // Flag for closing whole application.
393  bool _closing;
394 
395  // command queue and semaphore to synchronize execution signals
396  // and related callback
397 
398  // the queue for the command structures
400 
401  // some class global flags
405 };
406 
407 class news_reader : public QObject
408 {
409  Q_OBJECT
410 
411 public:
412 
413  news_reader (const QString& xbase_url, const QString& xpage,
414  int xserial = -1, bool xconnect_to_web = false)
415  : QObject (), base_url (xbase_url), page (xpage), serial (xserial),
416  connect_to_web (xconnect_to_web)
417  { }
418 
419 public slots:
420 
421  void process (void);
422 
423 signals:
424 
425  void display_news_signal (const QString& news);
426 
427  void finished (void);
428 
429 private:
430 
431  QString base_url;
432  QString page;
433  int serial;
435 };
436 
437 #endif
QAction * _clear_command_history_action
Definition: main-window.h:341
void show_about_octave(void)
void handle_octave_ready()
void handle_undo_request(void)
Definition: main-window.cc:301
QAction * _octave_packages_action
Definition: main-window.h:363
void reset_windows(void)
Definition: main-window.cc:840
QAction * _open_action
Definition: main-window.h:329
QAction * _online_doc_action
Definition: main-window.h:361
QAction * _paste_action
Definition: main-window.h:337
For example cd octave end example noindent changes the current working directory to file
Definition: dirfns.cc:120
void clear_history_callback(void)
void execute_command_callback()
void request_reload_settings()
Definition: main-window.cc:685
void handle_insert_debugger_pointer_request(const QString &file, int line)
Definition: main-window.cc:990
static const int current_directory_max_visible
Definition: main-window.h:373
void debug_quit(void)
Definition: main-window.cc:982
void delete_debugger_pointer_signal(const QString &file, int line)
The value of lines which begin with a space character are not saved in the history list A value of all commands are saved on the history list
Definition: oct-hist.cc:728
void pasteClipboard(void)
void disable_menu_shortcuts(bool disable)
QAction * _documentation_action
Definition: main-window.h:357
QString base_url
Definition: main-window.h:431
QAction * _workspace_action
Definition: main-window.h:354
void queue_command(octave_cmd *cmd)
Queuing commands from the GUI for the worker thread.
Definition: octave-cmd.h:103
void set_global_shortcuts(bool enable)
void construct_debug_menu(QMenuBar *p)
~main_window(void)
Definition: main-window.cc:132
void rename_variable_callback(const name_pair &names)
void read_settings(void)
terminal_dock_widget * command_window
Definition: main-window.h:304
void handle_create_inputlayout(const QStringList &, const QString &, const QFloatList &, const QFloatList &, const QStringList &)
Return the CPU time used by your Octave session The first output is the total time spent executing your process and is equal to the sum of second and third which are the number of CPU seconds spent executing in user mode and the number of CPU seconds spent executing in system mode
Definition: data.cc:6386
void handle_create_filedialog(const QStringList &filters, const QString &title, const QString &filename, const QString &dirname, const QString &multimode)
void handle_clear_history_request(void)
Definition: main-window.cc:316
main_window(QWidget *parent, octave::gui_application *app_context)
Definition: main-window.cc:80
QAction * _reset_windows_action
Definition: main-window.h:358
void display_release_notes(void)
Definition: main-window.cc:366
void open_file(const QString &file_name=QString())
Definition: main-window.cc:240
void clear_clipboard()
QAction * _debug_step_into
Definition: main-window.h:322
QAction * _about_octave_action
Definition: main-window.h:366
bool command_window_has_focus(void) const
Definition: main-window.cc:222
bool _suppress_dbg_location
Definition: main-window.h:403
QAction * construct_window_menu_item(QMenu *p, const QString &item, bool checkable, QWidget *)
void selectAll(void)
void establish_octave_link(void)
void open_file_signal(const QString &)
void exit_app(int status)
Definition: main-window.cc:834
void copy_image_to_clipboard(const QString &file, bool remove_file)
Definition: main-window.cc:666
QMenu * m_add_menu(QMenuBar *p, QString text)
QAction * _command_window_action
Definition: main-window.h:352
void clear_command_window_callback(void)
void handle_load_workspace_request(const QString &file=QString())
Definition: main-window.cc:270
QAction * _show_documentation_action
Definition: main-window.h:351
QAction * _report_bug_action
Definition: main-window.h:362
octave::gui_application * m_app_context
Definition: main-window.h:294
std::string filename
Definition: urlwrite.cc:340
QAction * add_action(QMenu *menu, const QIcon &icon, const QString &text, const char *member, const QWidget *receiver=0)
void show_doc_signal(const QString &)
void confirm_shutdown_octave(void)
Definition: main-window.cc:783
QToolBar * _main_tool_bar
Definition: main-window.h:317
void display_community_news(const QString &news)
Definition: main-window.cc:576
void copyClipboard(void)
void write_settings(void)
void load_and_display_community_news(int serial=-1)
Definition: main-window.cc:540
octave_dock_widget * _active_dock
Definition: main-window.h:313
file_editor_interface * editor_window
Definition: main-window.h:308
void browse_for_directory(void)
Definition: main-window.cc:865
files_dock_widget * file_browser_window
Definition: main-window.h:306
void update_breakpoint_marker_signal(bool insert, const QString &file, int line, const QString &cond)
bool _prevent_readline_conflicts
Definition: main-window.h:402
workspace_view * workspace_window
Definition: main-window.h:309
void edit_mfile_request(const QString &, const QString &, const QString &, int)
void find_files_finished(int)
QAction * _preferences_action
Definition: main-window.h:333
QStatusBar * status_bar
Definition: main-window.h:301
void handle_clear_workspace_request(void)
Definition: main-window.cc:284
void change_directory_callback(const std::string &directory)
void construct(void)
void edit_mfile(const QString &, int)
Definition: main-window.cc:246
news_reader(const QString &xbase_url, const QString &xpage, int xserial=-1, bool xconnect_to_web=false)
Definition: main-window.h:413
void accept_directory_line_edit(void)
Definition: main-window.cc:905
void message(const char *name, const char *fmt,...)
Definition: error.cc:430
void resize_command_window_callback(void)
workspace_model * _workspace_model
Definition: main-window.h:296
QAction * _clear_clipboard_action
Definition: main-window.h:338
void set_screen_size(int ht, int wd)
void debug_step_into(void)
Definition: main-window.cc:960
void construct_octave_qt_link(void)
void handle_create_dialog(const QString &message, const QString &title, const QString &icon, const QStringList &button, const QString &defbutton, const QStringList &role)
OCTAVE_EXPORT octave_value_list any number nd example oindent prints the prompt xample Pick a any number!nd example oindent and waits for the user to enter a value The string entered by the user is evaluated as an so it may be a literal a variable name
Definition: input.cc:871
void command_window_undo_callback(void)
QHash< QMenu *, QStringList > _hash_menu_text
Definition: main-window.h:298
void handle_exit_debugger(void)
Definition: main-window.cc:936
void open_octave_packages_page(void)
Definition: main-window.cc:627
void change_directory(const QString &dir)
Definition: main-window.cc:849
documentation_dock_widget * doc_browser_window
Definition: main-window.h:307
void finished(void)
void handle_create_listview(const QStringList &list, const QString &mode, int width, int height, const QIntList &initial, const QString &name, const QStringList &prompt, const QString &ok_string, const QString &cancel_string)
bool connect_to_web
Definition: main-window.h:434
void settings_changed(const QSettings *)
void open_donate_page(void)
Definition: main-window.cc:639
QAction * _copy_action
Definition: main-window.h:336
void notice_settings(const QSettings *settings)
Definition: main-window.cc:694
QAction * _debug_step_over
Definition: main-window.h:323
QAction * _contribute_action
Definition: main-window.h:364
void connect_visibility_changed(void)
QAction * _new_script_action
Definition: main-window.h:327
void execute_command_in_terminal(const QString &dir)
Definition: main-window.cc:329
void clipboard_has_changed(QClipboard::Mode)
QComboBox * _current_directory_combo_box
Definition: main-window.h:372
QAction * _current_news_action
Definition: main-window.h:369
QAction * _undo_action
Definition: main-window.h:339
void construct_file_menu(QMenuBar *p)
void save_workspace_callback(const std::string &file)
QString page
Definition: main-window.h:432
QClipboard * _clipboard
Definition: main-window.h:390
void set_screen_size_callback(const int_pair &)
void new_figure_callback(void)
void copyClipboard_signal(void)
void clear_workspace_callback(void)
void closeEvent(QCloseEvent *closeEvent)
static const int current_directory_max_count
Definition: main-window.h:374
QPointer< settings_dialog > _settings_dlg
Definition: main-window.h:378
void configure_shortcuts()
QAction * _select_all_action
Definition: main-window.h:344
void handle_update_breakpoint_marker_request(bool insert, const QString &file, int line, const QString &cond)
void process_settings_dialog_request(const QString &desired_tab=QString())
Definition: main-window.cc:645
void display_news_signal(const QString &news)
QAction * _new_figure_action
Definition: main-window.h:330
void handle_rename_variable_request(const QString &old_name, const QString &new_name)
Definition: main-window.cc:290
void connect_uiwidget_links(void)
QString _release_notes_icon
Definition: main-window.h:315
void load_workspace_callback(const std::string &file)
QAction * _show_editor_action
Definition: main-window.h:350
void construct_documentation_menu(QMenu *p)
void run_file_callback(const QFileInfo &info)
Definition: main-window.cc:346
void selectAll_signal(void)
QAction * _show_file_browser_action
Definition: main-window.h:349
QAction * _new_function_action
Definition: main-window.h:328
void debug_continue(void)
Definition: main-window.cc:952
void open_online_documentation_page(void)
Definition: main-window.cc:359
void handle_show_doc(const QString &file)
QAction * _clear_workspace_action
Definition: main-window.h:342
void execute_octave_interpreter(void)
void undo_signal(void)
QAction * _debug_step_out
Definition: main-window.h:324
QAction * _developer_action
Definition: main-window.h:365
void editor_focus_changed(bool)
std::pair< int, int > int_pair
Definition: main-window.h:76
bool focus_console_after_command()
Definition: main-window.cc:322
QAction * _file_browser_action
Definition: main-window.h:355
QAction * _release_notes_action
Definition: main-window.h:368
QAction * _clear_command_window_action
Definition: main-window.h:340
QAction * _find_files_action
Definition: main-window.h:343
void focus_command_window(void)
Definition: main-window.cc:228
void set_window_layout(QSettings *settings)
void run_file_in_terminal(const QFileInfo &info)
Definition: main-window.cc:338
void handle_new_figure_request(void)
Definition: main-window.cc:353
void open_contribute_page(void)
Definition: main-window.cc:633
QWidget * release_notes_window
Definition: main-window.h:384
void debug_step_over(void)
Definition: main-window.cc:967
void open_bug_tracker_page(void)
Definition: main-window.cc:621
void construct_news_menu(QMenuBar *p)
p
Definition: lu.cc:138
void debug_step_out(void)
Definition: main-window.cc:975
history_dock_widget * history_window
Definition: main-window.h:305
QAction * _show_command_window_action
Definition: main-window.h:346
void construct_menu_bar(void)
void construct_window_menu(QMenuBar *p)
QList< octave_dock_widget * > get_dock_widget_list()
Definition: main-window.h:226
void find_files(const QString &startdir=QDir::currentPath())
QAction * _exit_action
Definition: main-window.h:334
QAction * _history_action
Definition: main-window.h:353
QAction * _show_workspace_action
Definition: main-window.h:348
Dock widget to display files in the current directory.
void handle_clear_command_window_request(void)
Definition: main-window.cc:310
void set_current_working_directory(const QString &dir)
Definition: main-window.cc:881
void init_terminal_size(void)
QList< int > QIntList
Definition: dialog.h:38
void new_file(const QString &commands=QString())
Definition: main-window.cc:234
QAction * _show_history_action
Definition: main-window.h:347
void process(void)
Definition: main-window.cc:429
void construct_help_menu(QMenuBar *p)
void init_terminal_size_signal(void)
void active_dock_changed(octave_dock_widget *, octave_dock_widget *)
void construct_tool_bar(void)
QAction * _load_workspace_action
Definition: main-window.h:331
QAction * _debug_continue
Definition: main-window.h:321
QAction * construct_debug_menu_item(const char *icon, const QString &item, const char *member)
void focus_changed(QWidget *w_old, QWidget *w_new)
Definition: main-window.cc:170
QList< octave_dock_widget * > dock_widget_list()
QMenu * _debug_menu
Definition: main-window.h:319
QAction * _debug_quit
Definition: main-window.h:325
QLineEdit * _current_directory_line_edit
Definition: main-window.h:375
void construct_new_menu(QMenu *p)
bool _start_gui
Definition: main-window.h:404
std::pair< std::string, std::string > name_pair
Definition: main-window.h:75
void new_file_signal(const QString &)
octave_command_queue _cmd_queue
Definition: main-window.h:399
void construct_edit_menu(QMenuBar *p)
void handle_enter_debugger(void)
Definition: main-window.cc:920
void change_directory_up(void)
Definition: main-window.cc:895
If this string is the system will ring the terminal sometimes it is useful to be able to print the original representation of the string
Definition: utils.cc:854
find_files_dialog * find_files_dlg
Definition: main-window.h:381
void pasteClipboard_signal(void)
QWidget * community_news_window
Definition: main-window.h:386
QAction * _ondisk_doc_action
Definition: main-window.h:360
void prepare_to_exit(void)
Definition: main-window.cc:822
void handle_save_workspace_request(void)
Definition: main-window.cc:258
octave_qt_link * _octave_qt_link
Definition: main-window.h:388
void add_actions_signal(QList< QAction * > action_list)
to define functions rather than attempting to enter them directly on the command line The block of commands is executed as soon as you exit the editor To avoid executing any commands
Definition: oct-hist.cc:587
QAction * _editor_action
Definition: main-window.h:356
void handle_delete_debugger_pointer_request(const QString &file, int line)
QAction * _save_workspace_action
Definition: main-window.h:332
void insert_debugger_pointer_signal(const QString &file, int line)
OCTAVE_EXPORT octave_value_list directory
Definition: variables.cc:582
void report_status_message(const QString &statusMessage)
Definition: main-window.cc:252