Mercurial > octave
diff libgui/src/main-window.cc @ 16446:4b3a4bf8569b
improve encapsulation of command window object
* terminal-dockwidget.h, terminal-dockwidget.cc
(terminal_dock_widget::terminal): New data member.
(terminal_dock_widget::terminal_dock_widget): Delete QTerminal
argument. Initialize QTerminal object here.
Connect terminal_dock_widget::notice_settings_signal to
QTerminal::notice_settings.
Connect terminal_dock_widget::relay_command_signal to
Qterminal::relay_command.
Connect terminal_dock_widget::copyClipboard_signal to
Qterminal::copyClipboard.
Connect terminal_dock_widget::pasteClipboard_signal to
Qterminal::pasteClipboard.
(terminal_dock_widget::connect_visibility_changed,
terminal_dock_widget::focus, terminal_dock_widget::handle_visibility,
terminal_dock_widget::notice_settings,
terminal_dock_widget::relay_command,
terminal_dock_widget::copyClipboard,
terminal_dock_widget::pasteClipboard): New functions.
terminal_dock_widget::notice_settings_signal,
terminal_dock_widget::relay_command_signal,
terminal_dock_widget::copyClipboard_signal,
terminal_dock_widget::pasteClipboard_signal): New signals.
* main-window.h, main-window.cc (main_window::command_window): Rename
from main_window::_terminal_dock_widget. Don't use a pointer. Change
all uses.
(main_window::main_window): Initialize it here.
(main_window::~main_window): Don't delete _terminal_dock_widget.
(main_window::relay_command_signal
main_window::focus_command_window_signal): New signals.
(main_window::handle_command_double_clicked): Emit
relay_command_signal, and focus_command_window_signal signals
instead of calling focus_command_window.
(main_window::focus_command_window): Emit
focus_command_window_signal singal instead of performing
actions on _terminal_dock_widget object directly.
(main_window::handle_command_window_visible): Delete.
(main_window::connect_visibility_changed): Call
command_window.connect_visibility_changed instead of performing
actions here.
(main_window::construct): Don't create _terminal_dock_widget.
Adapt signal/slot connections for new command_window object.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Sat, 06 Apr 2013 16:14:32 -0400 |
parents | 3f8d3fc907af |
children | e3b33a7530bc |
line wrap: on
line diff
--- a/libgui/src/main-window.cc Sat Apr 06 14:23:52 2013 -0400 +++ b/libgui/src/main-window.cc Sat Apr 06 16:14:32 2013 -0400 @@ -55,7 +55,7 @@ #include "oct-env.h" main_window::main_window (QWidget *p) - : QMainWindow (p) + : QMainWindow (p), command_window (this) { // We have to set up all our windows, before we finally launch octave. construct (); @@ -78,9 +78,6 @@ delete _file_editor; #endif - if (_terminal_dock_widget) - delete _terminal_dock_widget; - if (_status_bar) delete _status_bar; @@ -162,9 +159,10 @@ } void -main_window::handle_command_double_clicked (const QString&) +main_window::handle_command_double_clicked (const QString& command) { - focus_command_window (); + emit relay_command_signal (command); + emit focus_command_window_signal (); } void @@ -347,20 +345,9 @@ } void -main_window::focus_command_window () +main_window::focus_command_window (void) { - if (!_terminal_dock_widget->isVisible ()) - { - _terminal_dock_widget->setVisible (true); - } - - _terminal_dock_widget->setFocus (); - _terminal_dock_widget->activateWindow (); - _terminal_dock_widget->raise (); - - _terminal_dock_widget->widget ()->setFocus (); - _terminal_dock_widget->widget ()->activateWindow (); - _terminal_dock_widget->widget ()->raise (); + emit focus_command_window_signal (); } void @@ -426,14 +413,6 @@ } void -main_window::handle_command_window_visible (bool visible) -{ - // if widget is changed to visible and is not floating - if (visible && !_terminal_dock_widget->isFloating ()) - focus_command_window (); -} - -void main_window::handle_command_history_visible (bool visible) { // if changed to visible and widget is not floating @@ -637,8 +616,8 @@ void main_window::connect_visibility_changed () { - connect (_terminal_dock_widget, SIGNAL (visibilityChanged (bool)), - this, SLOT (handle_command_window_visible (bool))); + command_window.connect_visibility_changed (); + connect (_workspace_view, SIGNAL (visibilityChanged (bool)), this, SLOT (handle_workspace_visible (bool))); connect (_history_dock_widget, SIGNAL (visibilityChanged (bool)), @@ -697,12 +676,6 @@ QToolButton *current_directory_up_tool_button = new QToolButton (this); current_directory_up_tool_button->setIcon (QIcon(":/actions/icons/up.png")); - // Octave Terminal subwindow. - QTerminal *terminal = new QTerminal (this); - terminal->setObjectName ("OctaveTerminal"); - terminal->setFocusPolicy (Qt::StrongFocus); - _terminal_dock_widget = new terminal_dock_widget (terminal, this); - // Create and set the central widget. QMainWindow takes ownership of // the widget (pointer) so there is no need to delete the object upon // destroying this main_window. @@ -1036,8 +1009,8 @@ connect (about_octave_action, SIGNAL (triggered ()), this, SLOT (show_about_octave ())); connect (show_command_window_action, SIGNAL (toggled (bool)), - _terminal_dock_widget, SLOT (setVisible (bool))); - connect (_terminal_dock_widget, SIGNAL (active_changed (bool)), + &command_window, SLOT (setVisible (bool))); + connect (&command_window, SIGNAL (active_changed (bool)), show_command_window_action, SLOT (setChecked (bool))); connect (show_workspace_action, SIGNAL (toggled (bool)), _workspace_view, SLOT (setVisible (bool))); @@ -1063,7 +1036,11 @@ show_documentation_action, SLOT (setChecked (bool))); connect (command_window_action, SIGNAL (triggered ()), - this, SLOT (focus_command_window ())); + &command_window, SLOT (focus ())); + + connect (this, SIGNAL (focus_command_window_signal ()), + &command_window, SLOT (focus ())); + connect (workspace_action, SIGNAL (triggered ()), this, SLOT (focus_workspace ())); connect (history_action, SIGNAL (triggered ()), @@ -1084,7 +1061,7 @@ _file_editor, SLOT (notice_settings (const QSettings *))); #endif connect (this, SIGNAL (settings_changed (const QSettings *)), - terminal, SLOT (notice_settings (const QSettings *))); + &command_window, SLOT (notice_settings (const QSettings *))); connect (this, SIGNAL (settings_changed (const QSettings *)), _files_dock_widget, SLOT (notice_settings (const QSettings *))); connect (this, SIGNAL (settings_changed (const QSettings *)), @@ -1097,8 +1074,8 @@ this, SLOT (report_status_message (QString))); connect (_history_dock_widget, SIGNAL (command_double_clicked (const QString&)), this, SLOT (handle_command_double_clicked (const QString&))); - connect (_history_dock_widget, SIGNAL (command_double_clicked (const QString&)), - terminal, SLOT (relay_command (const QString&))); + connect (this, SIGNAL (relay_command_signal (const QString&)), + &command_window, SLOT (relay_command (const QString&))); connect (save_workspace_action, SIGNAL (triggered ()), this, SLOT (handle_save_workspace_request ())); connect (load_workspace_action, SIGNAL (triggered ()), @@ -1110,9 +1087,9 @@ connect (current_directory_up_tool_button, SIGNAL (clicked ()), this, SLOT (change_directory_up ())); connect (copy_action, SIGNAL (triggered()), - terminal, SLOT (copyClipboard ())); + &command_window, SLOT (copyClipboard ())); connect (paste_action, SIGNAL (triggered()), - terminal, SLOT (pasteClipboard ())); + &command_window, SLOT (pasteClipboard ())); connect (_current_directory_combo_box, SIGNAL (activated (QString)), this, SLOT (set_current_working_directory (QString))); connect (_current_directory_line_edit, SIGNAL (returnPressed ()), @@ -1133,12 +1110,12 @@ setWindowTitle ("Octave"); setDockOptions(QMainWindow::AnimatedDocks | QMainWindow::AllowNestedDocks | QMainWindow::AllowTabbedDocks); - addDockWidget (Qt::RightDockWidgetArea, _terminal_dock_widget); + addDockWidget (Qt::RightDockWidgetArea, &command_window); addDockWidget (Qt::RightDockWidgetArea, _documentation_dock_widget); - tabifyDockWidget(_terminal_dock_widget,_documentation_dock_widget); + tabifyDockWidget (&command_window, _documentation_dock_widget); #ifdef HAVE_QSCINTILLA addDockWidget (Qt::RightDockWidgetArea, _file_editor); - tabifyDockWidget(_terminal_dock_widget,_file_editor); + tabifyDockWidget (&command_window, _file_editor); #endif addDockWidget (Qt::LeftDockWidgetArea, _files_dock_widget); addDockWidget (Qt::LeftDockWidgetArea, _workspace_view);