diff libgui/src/m-editor/file-editor-tab.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 f918db8102d5
children 8ae34ffe5c1b
line wrap: on
line diff
--- a/libgui/src/m-editor/file-editor-tab.cc	Mon Sep 17 22:38:53 2012 -0400
+++ b/libgui/src/m-editor/file-editor-tab.cc	Mon Sep 17 23:07:22 2012 -0400
@@ -24,12 +24,6 @@
 #include <config.h>
 #endif
 
-#include "file-editor-tab.h"
-#include "file-editor.h"
-#include "find-dialog.h"
-#include "octave-link.h"
-
-
 #include <Qsci/qsciapis.h>
 // Not available in the Debian repos yet!
 // #include <Qsci/qscilexeroctave.h>
@@ -46,8 +40,16 @@
 #include <QTextStream>
 #include <QVBoxLayout>
 
+#include "file-editor-tab.h"
+#include "file-editor.h"
+#include "find-dialog.h"
+#include "octave-link.h"
+
+#include "debug.h"
+#include "oct-env.h"
+
 file_editor_tab::file_editor_tab(file_editor *fileEditor)
-  : QWidget ((QWidget*)fileEditor), octave_event_observer ()
+  : QWidget ((QWidget*)fileEditor)
 {
   _file_editor = fileEditor;
   _file_name = "";
@@ -116,44 +118,6 @@
 }
 
 void
-file_editor_tab::handle_event (octave_event *e, bool accept)
-{
-  if (accept)
-    {
-      if (dynamic_cast<octave_run_file_event*> (e))
-        {
-          // File was run successfully.
-        }
-
-      if (octave_add_breakpoint_event *abe
-          = dynamic_cast<octave_add_breakpoint_event*> (e))
-        {
-          // TODO: Check file.
-          _edit_area->markerAdd (abe->get_line (), breakpoint);
-        }
-
-      if (octave_remove_breakpoint_event *rbe
-          = dynamic_cast<octave_remove_breakpoint_event*> (e))
-        {
-          // TODO: Check file.
-          _edit_area->markerDelete (rbe->get_line (), breakpoint);
-        }
-
-      if (dynamic_cast<octave_remove_all_breakpoints_event*> (e))
-        {
-          _edit_area->markerDeleteAll (breakpoint);
-        }
-    }
-  else
-    {
-      if (dynamic_cast<octave_run_file_event*> (e))
-        {
-          // Running file failed.
-        }
-    }
-}
-
-void
 file_editor_tab::closeEvent (QCloseEvent *e)
 {
   if (_file_editor->get_main_window ()->is_closing ())
@@ -307,9 +271,10 @@
   // We have to cut off the suffix, because octave appends it.
   function_name.chop (file_info.suffix ().length () + 1);
 
-  octave_link::post_event (new octave_add_breakpoint_event
-                           (*this, path.toStdString (),
-                            function_name.toStdString (), line));
+  bp_info info (path, function_name, line);
+
+  octave_link::post_event
+    (this, &file_editor_tab::add_breakpoint_callback, info);
 }
 
 void
@@ -322,9 +287,10 @@
   // We have to cut off the suffix, because octave appends it.
   function_name.chop (file_info.suffix ().length () + 1);
 
-  octave_link::post_event (new octave_remove_breakpoint_event
-                           (*this, path.toStdString (),
-                            function_name.toStdString (), line));
+  bp_info info (path, function_name, line);
+
+  octave_link::post_event
+    (this, &file_editor_tab::remove_breakpoint_callback, info);
 }
 
 void
@@ -492,9 +458,10 @@
   // We have to cut off the suffix, because octave appends it.
   function_name.chop (file_info.suffix ().length () + 1);
 
-  octave_link::post_event (new octave_remove_all_breakpoints_event
-                           (*this, path.toStdString (),
-                            function_name.toStdString ()));
+  bp_info info (path, function_name, 0);
+
+  octave_link::post_event
+    (this, &file_editor_tab::remove_all_breakpoints_callback, info);
 }
 
 void
@@ -749,8 +716,8 @@
   _file_editor->terminal ()->sendText (QString ("cd \'%1\'\n%2\n")
                                        .arg(path).arg (function_name));
   // TODO: Sending a run event crashes for long scripts. Find out why.
-  //  octave_link::post_event (new octave_run_file_event
-  //                           (*this, _file_name.toStdString ()));
+  // octave_link::post_event
+  //   (this, &file_editor_tab::run_file_callback, _file_name.toStdString ()));
 }
 
 void
@@ -839,3 +806,61 @@
 
   update_window_title (false);
 }
+
+void
+file_editor_tab::run_file_callback (void)
+{
+  // Maybe someday we will do something here?
+}
+
+void
+file_editor_tab::add_breakpoint_callback (const bp_info& info)
+{
+  bp_table::intmap intmap;
+  intmap[0] = info.line + 1;
+
+  std::string previous_directory = octave_env::get_current_directory ();
+  octave_env::chdir (info.path);
+  intmap = bp_table::add_breakpoint (info.function_name, intmap);
+  octave_env::chdir (previous_directory);
+
+  if (intmap.size () > 0)
+    {
+    // FIXME -- Check file.
+      _edit_area->markerAdd (info.line, breakpoint);
+    }
+}
+
+void
+file_editor_tab::remove_breakpoint_callback (const bp_info& info)
+{
+  bp_table::intmap intmap;
+  intmap[0] = info.line;
+
+  std::string previous_directory = octave_env::get_current_directory ();
+  octave_env::chdir (info.path);
+  bp_table::remove_breakpoint (info.function_name, intmap);
+  octave_env::chdir (previous_directory);
+
+  // FIXME -- check result
+  bool success = true;
+
+  if (success)
+    {
+      // FIXME -- check file.
+      _edit_area->markerDelete (info.line, breakpoint);
+    }
+}
+
+void
+file_editor_tab::remove_all_breakpoints_callback (const bp_info& info)
+{
+  bp_table::intmap intmap;
+  std::string previous_directory = octave_env::get_current_directory ();
+  octave_env::chdir (info.path);
+  intmap = bp_table::remove_all_breakpoints_in_file (info.function_name, true);
+  octave_env::chdir (previous_directory);
+
+  if (intmap.size() > 0)
+    _edit_area->markerDeleteAll (breakpoint);
+}