diff libgui/src/octave-qt-link.cc @ 16415:70032fc70bee

move octave-link and octave-event-listener classes to libinterp * libinterp/interp-core/octave-event-listener.h: Rename from libgui/src/octave-adapter/octave-event-listener.h. * libinterp/interp-core/octave-link.cc: Rename from libgui/src/octave-adapter/octave-link.cc. * libinterp/interp-core/octave-link.h: Rename from libgui/src/octave-adapter/octave-link.h. * octave-link.h, octave-link.cc: (octave_link::connect): New function. (octave_link::instance_ok): Don't create octave_link instance. (octave_link::launch_octave, octave_link::do_launch_octave): Delete. (octave_link::pre_input_event): Rename from octave_link::pre_input_event_hook_fcn. Change all callers. (octave_link::post_input_event): Rename from octave_link::post_input_event_hook_fcn. Change all callers. (octave_link::enter_debugger_event): Rename from octave_link::enter_debugger_event_hook_fcn. Change all callers. (octave_link::exit_debugger_event): Rename from octave_link::exit_debugger_event_hook_fcn. Change all callers. (octave_link::update_breakpoint): Rename from octave_link::update_breakpoint_hook_fcn. Change all callers. (octave_link::do_pre_input_event): Rename from octave_link::do_pre_input_event_hook_fcn. Change all callers. (octave_link::do_post_input_event): Rename from octave_link::do_post_input_event_hook_fcn. Change all callers. (octave_link::do_enter_debugger_event): Rename from octave_link::do_enter_debugger_event_hook_fcn. Change all callers. (octave_link::do_exit_debugger_event): Rename from octave_link::do_exit_debugger_event_hook_fcn. Change all callers. (octave_link::do_update_breakpoint): Rename from octave_link::do_update_breakpoint_hook_fcn. Change all callers. (octave_link::do_update_workspace, octave_link::do_update_history, octave_link::do_insert_debugger_pointer, octave_link::do_delete_debugger_pointer, octave_link::do_pre_input_event, octave_link::do_post_input_event, octave_link::do_enter_debugger_event, octave_link::do_exit_debugger_event, octave_link::do_update_breakpoint, octave_link::do_edit_file): Now pure virtual functions. (octave_link::main_thread): Delete. * libinterp/interp-core/module.mk (INTERP_CORE_INC): Include interp-core/octave-event-listener.h and interp-core/octave-link.h in the list. (INTERP_CORE_SRC): Include interp-core/octave-link.cc in the list. * octave-qt-link.h, octave-qt-link.cc: New files. * main-window.cc (main_window::construct): Call octave_link::connect and octave_link::register_event_listener after everything else is initialized. (main_window::main_window): Don't call octave_link::launch_octave. * libgui/src/octave-main-thread.h: Rename from libgui/src/octave-adapter/octave-main-thread.h. * libgui/src/module.mk (octave_gui_MOC): Update for new location of octave-main-thread.cc. (noinst_HEADERS): Update for new locations of octave-event-listener.h, octave-link.h, and octave-main-thread.h. Include src/octave-qt-link.h in the list. (src_libgui_src_la_SOURCES): Update for new locations of octave-link.cc and octave-main-thread.cc. Include src/octave-qt-link.cc in the list. (src_libgui_src_la_CPPFLAGS): Delete -I$(srcdir)/src/octave-adapter from the list.
author John W. Eaton <jwe@octave.org>
date Wed, 03 Apr 2013 18:11:55 -0400
parents
children 16bfbf9136d3
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libgui/src/octave-qt-link.cc	Wed Apr 03 18:11:55 2013 -0400
@@ -0,0 +1,215 @@
+/*
+
+Copyright (C) 2013 John W. Eaton
+Copyright (C) 2011-2012 Jacob Dawid
+Copyright (C) 2011-2012 John P. Swensen
+
+This file is part of Octave.
+
+Octave is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+Octave is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with Octave; see the file COPYING.  If not, see
+<http://www.gnu.org/licenses/>.
+
+*/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "cmd-edit.h"
+#include "oct-env.h"
+#include "oct-mutex.h"
+#include "singleton-cleanup.h"
+#include "symtab.h"
+#include "toplev.h"
+
+#include "octave-qt-link.h"
+
+octave_qt_link::octave_qt_link (void)
+  : octave_link (), main_thread (new octave_main_thread)
+{
+  // Start the first one.
+  main_thread->start ();
+}
+
+void
+octave_qt_link::do_update_workspace (void)
+{
+  if (event_listener)
+    {
+      event_listener->update_workspace ();
+
+      do_process_events ();
+    }
+}
+
+void
+octave_qt_link::do_update_history (void)
+{
+  if (event_listener)
+    {
+      event_listener->update_history ();
+
+      do_process_events ();
+    }
+}
+
+void
+octave_qt_link::do_insert_debugger_pointer (const octave_value_list& args)
+{
+  if (event_listener)
+    {
+      if (args.length () == 1)
+        {
+          octave_scalar_map m = args(0).scalar_map_value ();
+
+          if (! error_state)
+            {
+              octave_value ov_file = m.getfield ("file");
+              octave_value ov_line = m.getfield ("line");
+
+              std::string file = ov_file.string_value ();
+              int line = ov_line.int_value ();
+
+              if (! error_state)
+                {
+                  event_listener->insert_debugger_pointer (file, line);
+
+                  do_process_events ();
+                }
+              else
+                ::error ("invalid struct in debug pointer callback");
+            }
+          else
+            ::error ("expecting struct in debug pointer callback");
+        }
+      else
+        ::error ("invalid call to debug pointer callback");
+    }
+}
+
+void
+octave_qt_link::do_delete_debugger_pointer (const octave_value_list& args)
+{
+  if (event_listener)
+    {
+      if (args.length () == 1)
+        {
+          octave_scalar_map m = args(0).scalar_map_value ();
+
+          if (! error_state)
+            {
+              octave_value ov_file = m.getfield ("file");
+              octave_value ov_line = m.getfield ("line");
+
+              std::string file = ov_file.string_value ();
+              int line = ov_line.int_value ();
+
+              if (! error_state)
+                {
+                  event_listener->delete_debugger_pointer (file, line);
+
+                  do_process_events ();
+                }
+              else
+                ::error ("invalid struct in debug pointer callback");
+            }
+          else
+            ::error ("expecting struct in debug pointer callback");
+        }
+      else
+        ::error ("invalid call to debug pointer callback");
+    }
+}
+
+void
+octave_qt_link::do_pre_input_event (void)
+{
+  do_update_workspace ();
+}
+
+void
+octave_qt_link::do_post_input_event (void)
+{
+  do_update_history ();
+}
+
+void
+octave_qt_link::do_enter_debugger_event (const octave_value_list& args)
+{
+  do_insert_debugger_pointer (args);
+}
+
+void
+octave_qt_link::do_exit_debugger_event (const octave_value_list& args)
+{
+  do_delete_debugger_pointer (args);
+}
+
+void
+octave_qt_link::do_update_breakpoint (bool insert,
+                                      const octave_value_list& args)
+{
+  if (event_listener)
+    {
+      if (args.length () == 1)
+        {
+          octave_scalar_map m = args(0).scalar_map_value ();
+
+          if (! error_state)
+            {
+              octave_value ov_file = m.getfield ("file");
+              octave_value ov_line = m.getfield ("line");
+
+              std::string file = ov_file.string_value ();
+              int line = ov_line.int_value ();
+
+              if (! error_state)
+                {
+                  event_listener->update_dbstop_marker (insert, file, line);
+
+                  do_process_events ();
+                }
+              else
+                ::error ("invalid struct in dbstop marker callback");
+            }
+          else
+            ::error ("expecting struct in dbstop marker callback");
+        }
+      else
+        ::error ("invalid call to dbstop marker callback");
+    }
+}
+
+void
+octave_qt_link::do_edit_file (const octave_value_list& args)
+{
+  if (event_listener)
+    {
+      if (args.length () == 1)
+        {
+          std::string file = args(0).string_value ();
+
+          if (! error_state)
+            {
+              event_listener->edit_file (file);
+              do_process_events ();
+
+            }
+          else
+            ::error ("expecting file name in edit file callback");
+        }
+      else
+        ::error ("invalid call to edit file callback");
+    }
+}