diff libgui/src/main-window.cc @ 15402:7f423c6111c6

refactor GUI event handling to use new event_queue class * octave-link.h, octave-link.cc (event_queue): Delete. (gui_event_queue): New event_queue variable. Change all uses of event_queue to user gui_event_queue instead. (octave_link::handle_event): Delete. (octave_link::post_event, octave_link::do_post_event): Provide methods that work directly with member functions pointers and data. * octave-event.h, octave-event.cc, octave-event-observer.h: Delete. Delete all uses. * libgui/src/module.mk (noinst_HEADERS): Delete octave-event.h and octave-event-observer.h from the list. (src_libgui_src_la_SOURCES): Delete octave-event.cc from the list. * workspace-view.h, history-dockwidget.h, main-window.h: Don't include octave-link.h. * history-dockwidget.cc (history_dock_widget::handle_event): Delete. (history_dock_widget::handle_event): New function adapted from handle_event. (history_dock_widget::request_history_model_update): Update for new event callback mechanism. * history-dockwidget.h: Update decls. * file-editor-tab.cc (file_editor_tab::handle_event): Delete. (file_editor_tab::run_file_callback, file_editor_tab::add_breakpoint_callback, file_editor_tab::remove_breakpoint_callback, file_editor_tab::remove_all_breakpoints_callback): New functions adapted from handle_event and corresponding octave_event classes. (file_editor_tab::request_add_breakpoint, file_editor_tab::request_remove_breakpoint, file_editor_tab::remove_all_breakpoints, file_editor_tab::run_file): Update for new event callback mechanism. * file-editor-tab.h: Update decls. (file_editor_tab::bp_info): New nested struct. * main-window.cc (main_window::handle_event): Delete. (main_window::save_workspace_callback, main_window::load_workspace_callback, main_window::clear_workspace_callback, main_window::clear_history_callback, main_window::change_directory_callback, main_window::debug_continue_callback, main_window::debug_step_into_callback, main_window::debug_step_over_callback, main_window::debug_step_out_callback, main_window::debug_quit_callback, main_window::exit_callback): New functions. (main_window::handle_save_workspace_request, main_window::handle_load_workspace_request, main_window::handle_clear_workspace_request, main_window::handle_clear_history_request, main_window::change_current_working_directory, main_window::set_current_working_directory, main_window::debug_continue, main_window::debug_step_into, main_window::debug_step_over, main_window::debug_step_out, main_window::debug_quit): Update for new event callback mechanism. * main-window.h: Update decls. * workspace-model.cc (workspace_model::handle_event): Delete. (workspace_model::update_workspace_callback): New function. (workspace_model::request_update_workspace): Update for new event callback mechanism. * workspace-model.h: Update decls.
author John W. Eaton <jwe@octave.org>
date Mon, 17 Sep 2012 23:07:22 -0400
parents 24b5348d38e7
children f52a62a6db3a 8ae34ffe5c1b
line wrap: on
line diff
--- a/libgui/src/main-window.cc	Mon Sep 17 22:38:53 2012 -0400
+++ b/libgui/src/main-window.cc	Mon Sep 17 23:07:22 2012 -0400
@@ -37,12 +37,21 @@
 #include <QMessageBox>
 #include <QIcon>
 
+#include "file-editor.h"
 #include "main-window.h"
-#include "file-editor.h"
+#include "octave-link.h"
 #include "settings-dialog.h"
 
+#include "debug.h"
+#include "load-save.h"
+#include "toplev.h"
+#include "variables.h"
+
+#include "cmd-hist.h"
+#include "oct-env.h"
+
 main_window::main_window (QWidget *p)
-  : QMainWindow (p), octave_event_observer ()
+  : QMainWindow (p)
 {
   // We have to set up all our windows, before we finally launch octave.
   construct ();
@@ -54,23 +63,6 @@
 }
 
 void
-main_window::handle_event (octave_event *e, bool accept)
-{
-  if (accept)
-    {
-      if (dynamic_cast<octave_clear_history_event*> (e))
-        {
-          // After clearing the history, we need to reset the model.
-          _history_dock_widget->reset_model ();
-        }
-    }
-  else
-    {
-      // octave_event::perform failed to process event.
-    }
-}
-
-void
 main_window::new_file ()
 {
   _file_editor->request_new_file ();
@@ -104,10 +96,8 @@
     QFileDialog::getSaveFileName (this, tr ("Save Workspace"),
                                   resource_manager::get_home_path ());
   if (!selectedFile.isEmpty ())
-    {
-      octave_link::post_event (new octave_save_workspace_event
-                               (*this, selectedFile.toStdString ()));
-    }
+    octave_link::post_event (this, &main_window::save_workspace_callback,
+                             selectedFile.toStdString ());
 }
 
 void
@@ -117,22 +107,20 @@
     QFileDialog::getOpenFileName (this, tr ("Load Workspace"),
                                   resource_manager::get_home_path ());
   if (!selectedFile.isEmpty ())
-    {
-      octave_link::post_event (new octave_load_workspace_event
-                               (*this, selectedFile.toStdString ()));
-    }
+    octave_link::post_event (this, &main_window::load_workspace_callback,
+                             selectedFile.toStdString ());
 }
 
 void
 main_window::handle_clear_workspace_request ()
 {
-  octave_link::post_event (new octave_clear_workspace_event (*this));
+  octave_link::post_event (this, &main_window::clear_workspace_callback);
 }
 
 void
 main_window::handle_clear_history_request()
 {
-  octave_link::post_event (new octave_clear_history_event (*this));
+  octave_link::post_event (this, &main_window::clear_history_callback);
 }
 
 void
@@ -232,17 +220,15 @@
     QFileDialog::getExistingDirectory(this, tr ("Set working direcotry"));
 
   if (!selectedDirectory.isEmpty ())
-    {
-      octave_link::post_event (new octave_change_directory_event
-                               (*this, selectedDirectory.toStdString ()));
-    }
+    octave_link::post_event (this, &main_window::change_directory_callback,
+                             selectedDirectory.toStdString ());
 }
 
 void
 main_window::set_current_working_directory (const QString& directory)
 {
-  octave_link::post_event (new octave_change_directory_event
-                           (*this, directory.toStdString ()));
+  octave_link::post_event (this, &main_window::change_directory_callback,
+                           directory.toStdString ());
 }
 
 void
@@ -360,31 +346,31 @@
 void
 main_window::debug_continue ()
 {
-  octave_link::post_event (new octave_debug_continue_event (*this));
+  octave_link::post_event (this, &main_window::debug_continue_callback);
 }
 
 void
 main_window::debug_step_into ()
 {
-  octave_link::post_event (new octave_debug_step_into_event (*this));
+  octave_link::post_event (this, &main_window::debug_step_into_callback);
 }
 
 void
 main_window::debug_step_over ()
 {
-  octave_link::post_event (new octave_debug_step_over_event (*this));
+  octave_link::post_event (this, &main_window::debug_step_over_callback);
 }
 
 void
 main_window::debug_step_out ()
 {
-  octave_link::post_event (new octave_debug_step_out_event (*this));
+  octave_link::post_event (this, &main_window::debug_step_out_callback);
 }
 
 void
 main_window::debug_quit ()
 {
-  octave_link::post_event (new octave_debug_quit_event (*this));
+  octave_link::post_event (this, &main_window::debug_quit_callback);
 }
 
 void
@@ -414,7 +400,7 @@
 main_window::closeEvent (QCloseEvent *e)
 {
   e->ignore ();
-  octave_link::post_event (new octave_exit_event (*this));
+  octave_link::post_event (this, &main_window::exit_callback);
 }
 
 void
@@ -895,3 +881,70 @@
            SLOT (handle_quit_debug_mode ()));
 }
 
+void
+main_window::save_workspace_callback (const std::string& file)
+{
+  save_workspace (file);
+}
+
+void
+main_window::load_workspace_callback (const std::string& file)
+{
+  load_workspace (file);
+}
+
+void
+main_window::clear_workspace_callback (void)
+{
+  clear_current_scope ();
+}
+
+void
+main_window::clear_history_callback (void)
+{
+  command_history::clear ();
+
+  _history_dock_widget->reset_model ();
+}
+
+void
+main_window::change_directory_callback (const std::string& directory)
+{
+  octave_env::chdir (directory); 
+}
+
+void
+main_window::debug_continue_callback (void)
+{
+  debug_continue ();
+}
+
+void
+main_window::debug_step_into_callback (void)
+{
+  debug_step ("in");
+}
+
+void
+main_window::debug_step_over_callback (void)
+{
+  debug_step ();
+}
+
+void
+main_window::debug_step_out_callback (void)
+{
+  debug_step ("out");
+}
+
+void
+main_window::debug_quit_callback (void)
+{
+  debug_quit ();
+}
+
+void
+main_window::exit_callback (void)
+{
+  clean_up_and_exit (0);
+}