annotate libgui/src/octave-adapter/octave-link.h @ 16399:f9a737fd8829

allow command-line edit function to use GUI editor * file-editor-interface.h (file_editor_interface::handle_edit_file_request): New pure virtual function. * file-editor.h, file-editor.cc (file_editor::handle_edit_file_request): New function. * octave-event-listener.h (octave_event_listenter::edit_file): New pure virtual function. * octave-qt-event-listener.h, octave-qt-event-listener.cc (octave_qt_event_listener::edit_file): New function. (octave_qt_event_listener::edit_file_signal): New signal. * main-window.h, main-window.cc (main_window::handle_edit_file_request): New function. (main_window::construct): Connect edit_file_signal to handle_edit_file_request. * __execute_edit_hook__.cc: New file. Provide Fadd_edit_hook, Fremove_edit_hook, and F__execute_edit_hook__ functions for the interpreter. * libinterp/corefcn/module.mk (COREFCN_SRC): Include it in the list. * octave-link.h, octave-link.cc (octave_link::edit_file, octave_link::do_edit_file): New functions. * octave-main-thread.cc (edit_hook_fcn): New function. (octave_main_thread::run): Install it as an edit_hook function. * miscellaneous/edit.m (do_edit): New subfunction. Allow edit request to be intercepted by edit_hook function. (edit): Use it to uniformly handle starting the editor.
author John W. Eaton <jwe@octave.org>
date Sat, 30 Mar 2013 10:57:15 -0400
parents fc491da603f6
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15204
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
1 /*
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
2
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
3 Copyright (C) 2011-2012 Jacob Dawid
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
4 Copyright (C) 2011-2012 John P. Swensen
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
5
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
6 This file is part of Octave.
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
7
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
8 Octave is free software; you can redistribute it and/or modify it
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
9 under the terms of the GNU General Public License as published by the
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
10 Free Software Foundation; either version 3 of the License, or (at your
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
11 option) any later version.
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
12
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
13 Octave is distributed in the hope that it will be useful, but WITHOUT
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
16 for more details.
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
17
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
18 You should have received a copy of the GNU General Public License
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
19 along with Octave; see the file COPYING. If not, see
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
20 <http://www.gnu.org/licenses/>.
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
21
359098ad343e update copyright notices in libgui directory
John W. Eaton <jwe@octave.org>
parents: 15196
diff changeset
22 */
13501
86d6c3b90ad7 Added new gui files.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
23
86d6c3b90ad7 Added new gui files.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
24 #ifndef OCTAVELINK_H
86d6c3b90ad7 Added new gui files.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
25 #define OCTAVELINK_H
86d6c3b90ad7 Added new gui files.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
26
15155
9e62d5a3a45e partial cleanup of include files in gui sources
John W. Eaton <jwe@octave.org>
parents: 15080
diff changeset
27 #include <string>
13501
86d6c3b90ad7 Added new gui files.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
28
15155
9e62d5a3a45e partial cleanup of include files in gui sources
John W. Eaton <jwe@octave.org>
parents: 15080
diff changeset
29 class octave_mutex;
13501
86d6c3b90ad7 Added new gui files.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
30
16377
8430ea8c1594 open editor tab and insert marker for debugging with gui
John W. Eaton <jwe@octave.org>
parents: 16350
diff changeset
31 #include "oct-obj.h"
8430ea8c1594 open editor tab and insert marker for debugging with gui
John W. Eaton <jwe@octave.org>
parents: 16350
diff changeset
32
15402
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
33 #include "event-queue.h"
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
34
14707
674740c44c09 Changed various files to matche file naming conventions.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 14703
diff changeset
35 #include "octave-main-thread.h"
14719
89c64340e9ab Extended event based communication model.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 14718
diff changeset
36 #include "octave-event-listener.h"
13541
b48ac9ad8de0 Highly improved separation of model and view classes.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 13522
diff changeset
37
15371
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
38 // \class OctaveLink
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
39 // \brief Provides threadsafe access to octave.
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
40 // \author Jacob Dawid
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
41 //
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
42 // This class is a wrapper around octave and provides thread safety by
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
43 // buffering access operations to octave and executing them in the
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
44 // readline event hook, which lives in the octave thread.
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
45
15402
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
46 class octave_link
13501
86d6c3b90ad7 Added new gui files.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
47 {
15371
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
48 protected:
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
49
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
50 octave_link (void);
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
51
13501
86d6c3b90ad7 Added new gui files.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
52 public:
15371
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
53
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
54 ~octave_link (void) { }
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
55
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
56 static void launch_octave (void)
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
57 {
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
58 if (instance_ok ())
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
59 instance->do_launch_octave ();
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
60 }
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
61
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
62 static void register_event_listener (octave_event_listener *el)
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
63 {
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
64 if (instance_ok ())
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
65 instance->do_register_event_listener (el);
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
66 }
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
67
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
68 static void generate_events (void)
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
69 {
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
70 if (instance_ok ())
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
71 instance->do_generate_events ();
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
72 }
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
73
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
74 static void process_events (void)
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
75 {
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
76 if (instance_ok ())
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
77 instance->do_process_events ();
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
78 }
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
79
15402
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
80 template <class T>
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
81 static void post_event (T *obj, void (T::*method) (void))
15371
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
82 {
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
83 if (instance_ok ())
15402
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
84 instance->do_post_event (obj, method);
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
85 }
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
86
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
87 template <class T, class A>
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
88 static void post_event (T *obj, void (T::*method) (A), A arg)
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
89 {
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
90 if (instance_ok ())
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
91 instance->do_post_event (obj, method, arg);
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
92 }
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
93
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
94 template <class T, class A>
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
95 static void post_event (T *obj, void (T::*method) (const A&), const A& arg)
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
96 {
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
97 if (instance_ok ())
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
98 instance->do_post_event (obj, method, arg);
15371
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
99 }
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
100
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
101 static void about_to_exit (void)
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
102 {
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
103 if (instance_ok ())
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
104 instance->do_about_to_exit ();
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
105 }
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
106
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
107 static void entered_readline_hook (void)
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
108 {
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
109 if (instance_ok ())
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
110 instance->do_entered_readline_hook ();
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
111 }
14713
565ddd85565e Added comments for the octave-adapter module.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 14712
diff changeset
112
15371
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
113 static void finished_readline_hook (void)
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
114 {
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
115 if (instance_ok ())
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
116 instance->do_finished_readline_hook ();
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
117 }
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
118
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
119 static std::string last_working_directory (void)
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
120 {
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
121 return instance_ok ()
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
122 ? instance->do_last_working_directory () : std::string ();
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
123 }
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
124
16350
d4b6ad43bc87 use direct callbacks instead to handle history and workspace list updates
John W. Eaton <jwe@octave.org>
parents: 15402
diff changeset
125 static void update_workspace (void)
d4b6ad43bc87 use direct callbacks instead to handle history and workspace list updates
John W. Eaton <jwe@octave.org>
parents: 15402
diff changeset
126 {
d4b6ad43bc87 use direct callbacks instead to handle history and workspace list updates
John W. Eaton <jwe@octave.org>
parents: 15402
diff changeset
127 if (instance_ok ())
d4b6ad43bc87 use direct callbacks instead to handle history and workspace list updates
John W. Eaton <jwe@octave.org>
parents: 15402
diff changeset
128 instance->do_update_workspace ();
d4b6ad43bc87 use direct callbacks instead to handle history and workspace list updates
John W. Eaton <jwe@octave.org>
parents: 15402
diff changeset
129 }
d4b6ad43bc87 use direct callbacks instead to handle history and workspace list updates
John W. Eaton <jwe@octave.org>
parents: 15402
diff changeset
130
d4b6ad43bc87 use direct callbacks instead to handle history and workspace list updates
John W. Eaton <jwe@octave.org>
parents: 15402
diff changeset
131 static void update_history (void)
d4b6ad43bc87 use direct callbacks instead to handle history and workspace list updates
John W. Eaton <jwe@octave.org>
parents: 15402
diff changeset
132 {
d4b6ad43bc87 use direct callbacks instead to handle history and workspace list updates
John W. Eaton <jwe@octave.org>
parents: 15402
diff changeset
133 if (instance_ok ())
d4b6ad43bc87 use direct callbacks instead to handle history and workspace list updates
John W. Eaton <jwe@octave.org>
parents: 15402
diff changeset
134 instance->do_update_history ();
d4b6ad43bc87 use direct callbacks instead to handle history and workspace list updates
John W. Eaton <jwe@octave.org>
parents: 15402
diff changeset
135 }
d4b6ad43bc87 use direct callbacks instead to handle history and workspace list updates
John W. Eaton <jwe@octave.org>
parents: 15402
diff changeset
136
d4b6ad43bc87 use direct callbacks instead to handle history and workspace list updates
John W. Eaton <jwe@octave.org>
parents: 15402
diff changeset
137 static void pre_input_event_hook_fcn (void)
d4b6ad43bc87 use direct callbacks instead to handle history and workspace list updates
John W. Eaton <jwe@octave.org>
parents: 15402
diff changeset
138 {
d4b6ad43bc87 use direct callbacks instead to handle history and workspace list updates
John W. Eaton <jwe@octave.org>
parents: 15402
diff changeset
139 if (instance_ok ())
d4b6ad43bc87 use direct callbacks instead to handle history and workspace list updates
John W. Eaton <jwe@octave.org>
parents: 15402
diff changeset
140 instance->do_pre_input_event_hook_fcn ();
d4b6ad43bc87 use direct callbacks instead to handle history and workspace list updates
John W. Eaton <jwe@octave.org>
parents: 15402
diff changeset
141 }
d4b6ad43bc87 use direct callbacks instead to handle history and workspace list updates
John W. Eaton <jwe@octave.org>
parents: 15402
diff changeset
142
d4b6ad43bc87 use direct callbacks instead to handle history and workspace list updates
John W. Eaton <jwe@octave.org>
parents: 15402
diff changeset
143 static void post_input_event_hook_fcn (void)
d4b6ad43bc87 use direct callbacks instead to handle history and workspace list updates
John W. Eaton <jwe@octave.org>
parents: 15402
diff changeset
144 {
d4b6ad43bc87 use direct callbacks instead to handle history and workspace list updates
John W. Eaton <jwe@octave.org>
parents: 15402
diff changeset
145 if (instance_ok ())
d4b6ad43bc87 use direct callbacks instead to handle history and workspace list updates
John W. Eaton <jwe@octave.org>
parents: 15402
diff changeset
146 instance->do_post_input_event_hook_fcn ();
d4b6ad43bc87 use direct callbacks instead to handle history and workspace list updates
John W. Eaton <jwe@octave.org>
parents: 15402
diff changeset
147 }
d4b6ad43bc87 use direct callbacks instead to handle history and workspace list updates
John W. Eaton <jwe@octave.org>
parents: 15402
diff changeset
148
16395
fc491da603f6 also provide a hook for exiting debugger
John W. Eaton <jwe@octave.org>
parents: 16386
diff changeset
149 static void enter_debugger_event_hook_fcn (const octave_value_list& args)
16377
8430ea8c1594 open editor tab and insert marker for debugging with gui
John W. Eaton <jwe@octave.org>
parents: 16350
diff changeset
150 {
8430ea8c1594 open editor tab and insert marker for debugging with gui
John W. Eaton <jwe@octave.org>
parents: 16350
diff changeset
151 if (instance_ok ())
16395
fc491da603f6 also provide a hook for exiting debugger
John W. Eaton <jwe@octave.org>
parents: 16386
diff changeset
152 instance->do_enter_debugger_event_hook_fcn (args);
fc491da603f6 also provide a hook for exiting debugger
John W. Eaton <jwe@octave.org>
parents: 16386
diff changeset
153 }
fc491da603f6 also provide a hook for exiting debugger
John W. Eaton <jwe@octave.org>
parents: 16386
diff changeset
154
fc491da603f6 also provide a hook for exiting debugger
John W. Eaton <jwe@octave.org>
parents: 16386
diff changeset
155 static void exit_debugger_event_hook_fcn (const octave_value_list& args)
fc491da603f6 also provide a hook for exiting debugger
John W. Eaton <jwe@octave.org>
parents: 16386
diff changeset
156 {
fc491da603f6 also provide a hook for exiting debugger
John W. Eaton <jwe@octave.org>
parents: 16386
diff changeset
157 if (instance_ok ())
fc491da603f6 also provide a hook for exiting debugger
John W. Eaton <jwe@octave.org>
parents: 16386
diff changeset
158 instance->do_exit_debugger_event_hook_fcn (args);
16377
8430ea8c1594 open editor tab and insert marker for debugging with gui
John W. Eaton <jwe@octave.org>
parents: 16350
diff changeset
159 }
8430ea8c1594 open editor tab and insert marker for debugging with gui
John W. Eaton <jwe@octave.org>
parents: 16350
diff changeset
160
16386
4902484f9181 callbacks to set markers in editor using command line dbstop function
John W. Eaton <jwe@octave.org>
parents: 16383
diff changeset
161 static void
4902484f9181 callbacks to set markers in editor using command line dbstop function
John W. Eaton <jwe@octave.org>
parents: 16383
diff changeset
162 update_breakpoint_hook_fcn (bool insert, const octave_value_list& args)
4902484f9181 callbacks to set markers in editor using command line dbstop function
John W. Eaton <jwe@octave.org>
parents: 16383
diff changeset
163 {
4902484f9181 callbacks to set markers in editor using command line dbstop function
John W. Eaton <jwe@octave.org>
parents: 16383
diff changeset
164 if (instance_ok ())
4902484f9181 callbacks to set markers in editor using command line dbstop function
John W. Eaton <jwe@octave.org>
parents: 16383
diff changeset
165 instance->do_update_breakpoint_hook_fcn (insert, args);
4902484f9181 callbacks to set markers in editor using command line dbstop function
John W. Eaton <jwe@octave.org>
parents: 16383
diff changeset
166 }
4902484f9181 callbacks to set markers in editor using command line dbstop function
John W. Eaton <jwe@octave.org>
parents: 16383
diff changeset
167
16399
f9a737fd8829 allow command-line edit function to use GUI editor
John W. Eaton <jwe@octave.org>
parents: 16395
diff changeset
168 static void
f9a737fd8829 allow command-line edit function to use GUI editor
John W. Eaton <jwe@octave.org>
parents: 16395
diff changeset
169 edit_file (const octave_value_list& args)
f9a737fd8829 allow command-line edit function to use GUI editor
John W. Eaton <jwe@octave.org>
parents: 16395
diff changeset
170 {
f9a737fd8829 allow command-line edit function to use GUI editor
John W. Eaton <jwe@octave.org>
parents: 16395
diff changeset
171 if (instance_ok ())
f9a737fd8829 allow command-line edit function to use GUI editor
John W. Eaton <jwe@octave.org>
parents: 16395
diff changeset
172 instance->do_edit_file (args);
f9a737fd8829 allow command-line edit function to use GUI editor
John W. Eaton <jwe@octave.org>
parents: 16395
diff changeset
173 }
f9a737fd8829 allow command-line edit function to use GUI editor
John W. Eaton <jwe@octave.org>
parents: 16395
diff changeset
174
15371
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
175 private:
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
176
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
177 static octave_link *instance;
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
178
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
179 static void cleanup_instance (void) { delete instance; instance = 0; }
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
180
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
181 // No copying!
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
182
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
183 octave_link (const octave_link&);
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
184
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
185 octave_link& operator = (const octave_link&);
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
186
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
187 static bool instance_ok (void);
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
188
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
189 octave_event_listener *event_listener;
14719
89c64340e9ab Extended event based communication model.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 14718
diff changeset
190
15371
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
191 // Thread running octave_main.
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
192 octave_main_thread *main_thread;
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
193
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
194 // Semaphore to lock access to the event queue.
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
195 octave_mutex *event_queue_mutex;
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
196
15402
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
197 // Event Queue.
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
198 event_queue gui_event_queue;
15371
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
199
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
200 // Stores the last known current working directory of octave.
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
201 std::string last_cwd;
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
202
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
203 bool debugging;
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
204
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
205 void do_launch_octave (void);
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
206 void do_register_event_listener (octave_event_listener *oel);
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
207
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
208 void do_generate_events (void);
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
209 void do_process_events (void);
15402
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
210
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
211 template <class T>
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
212 void do_post_event (T *obj, void (T::*method) (void))
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
213 {
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
214 gui_event_queue.add_method (obj, method);
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
215 }
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
216
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
217 template <class T, class A>
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
218 void do_post_event (T *obj, void (T::*method) (A), A arg)
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
219 {
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
220 gui_event_queue.add_method (obj, method, arg);
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
221 }
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
222
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
223 template <class T, class A>
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
224 void do_post_event (T *obj, void (T::*method) (const A&), const A& arg)
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
225 {
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
226 gui_event_queue.add_method (obj, method, arg);
7f423c6111c6 refactor GUI event handling to use new event_queue class
John W. Eaton <jwe@octave.org>
parents: 15388
diff changeset
227 }
15371
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
228
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
229 void do_about_to_exit (void);
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
230
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
231 void do_entered_readline_hook (void) { }
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
232 void do_finished_readline_hook (void) { }
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
233
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
234 std::string do_last_working_directory (void);
16350
d4b6ad43bc87 use direct callbacks instead to handle history and workspace list updates
John W. Eaton <jwe@octave.org>
parents: 15402
diff changeset
235 void do_update_workspace (void);
d4b6ad43bc87 use direct callbacks instead to handle history and workspace list updates
John W. Eaton <jwe@octave.org>
parents: 15402
diff changeset
236 void do_update_history (void);
16395
fc491da603f6 also provide a hook for exiting debugger
John W. Eaton <jwe@octave.org>
parents: 16386
diff changeset
237 void do_insert_debugger_pointer (const octave_value_list& args);
fc491da603f6 also provide a hook for exiting debugger
John W. Eaton <jwe@octave.org>
parents: 16386
diff changeset
238 void do_delete_debugger_pointer (const octave_value_list& args);
16350
d4b6ad43bc87 use direct callbacks instead to handle history and workspace list updates
John W. Eaton <jwe@octave.org>
parents: 15402
diff changeset
239
d4b6ad43bc87 use direct callbacks instead to handle history and workspace list updates
John W. Eaton <jwe@octave.org>
parents: 15402
diff changeset
240 void do_pre_input_event_hook_fcn (void);
d4b6ad43bc87 use direct callbacks instead to handle history and workspace list updates
John W. Eaton <jwe@octave.org>
parents: 15402
diff changeset
241 void do_post_input_event_hook_fcn (void);
16395
fc491da603f6 also provide a hook for exiting debugger
John W. Eaton <jwe@octave.org>
parents: 16386
diff changeset
242 void do_enter_debugger_event_hook_fcn (const octave_value_list& args);
fc491da603f6 also provide a hook for exiting debugger
John W. Eaton <jwe@octave.org>
parents: 16386
diff changeset
243 void do_exit_debugger_event_hook_fcn (const octave_value_list& args);
16386
4902484f9181 callbacks to set markers in editor using command line dbstop function
John W. Eaton <jwe@octave.org>
parents: 16383
diff changeset
244 void do_update_breakpoint_hook_fcn (bool insert,
4902484f9181 callbacks to set markers in editor using command line dbstop function
John W. Eaton <jwe@octave.org>
parents: 16383
diff changeset
245 const octave_value_list& args);
16399
f9a737fd8829 allow command-line edit function to use GUI editor
John W. Eaton <jwe@octave.org>
parents: 16395
diff changeset
246
f9a737fd8829 allow command-line edit function to use GUI editor
John W. Eaton <jwe@octave.org>
parents: 16395
diff changeset
247 void do_edit_file (const octave_value_list& args);
15371
eec0d1fcba4f use Octave singleton style for octave_link class
John W. Eaton <jwe@octave.org>
parents: 15204
diff changeset
248 };
14713
565ddd85565e Added comments for the octave-adapter module.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 14712
diff changeset
249
13501
86d6c3b90ad7 Added new gui files.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
250 #endif // OCTAVELINK_H