Mercurial > hg > octave-lyh
annotate gui/src/octave-adapter/octave-link.h @ 14721:ec76264adca9 gui
Removed last bits of Qt from octave_link.
* main-window: Made subclass from octave_event_observer.
* octave-event-listener: Added new listener method to interface.
* octave-link: Removed last bits of Qt.
* octave-qt-event-listener: Implemented new listener method.
author | Jacob Dawid <jacob.dawid@googlemail.com> |
---|---|
date | Mon, 04 Jun 2012 22:03:18 +0200 |
parents | cecc7da96e2a |
children | 7784625acf66 |
rev | line source |
---|---|
13674
c0e66d6e3dc8
Updated license headers and moved to AGPLv3.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
13595
diff
changeset
|
1 /* OctaveGUI - A graphical user interface for Octave |
c0e66d6e3dc8
Updated license headers and moved to AGPLv3.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
13595
diff
changeset
|
2 * Copyright (C) 2011 John P. Swensen, Jacob Dawid (jacob.dawid@googlemail.com) |
13501 | 3 * |
13674
c0e66d6e3dc8
Updated license headers and moved to AGPLv3.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
13595
diff
changeset
|
4 * This program is free software: you can redistribute it and/or modify |
14290
faece6b2ab90
Corrected license headers in all files to GPL.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
13683
diff
changeset
|
5 * it under the terms of the GNU General Public License as |
13674
c0e66d6e3dc8
Updated license headers and moved to AGPLv3.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
13595
diff
changeset
|
6 * published by the Free Software Foundation, either version 3 of the |
c0e66d6e3dc8
Updated license headers and moved to AGPLv3.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
13595
diff
changeset
|
7 * License, or (at your option) any later version. |
13501 | 8 * |
13674
c0e66d6e3dc8
Updated license headers and moved to AGPLv3.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
13595
diff
changeset
|
9 * This program is distributed in the hope that it will be useful, |
c0e66d6e3dc8
Updated license headers and moved to AGPLv3.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
13595
diff
changeset
|
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
c0e66d6e3dc8
Updated license headers and moved to AGPLv3.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
13595
diff
changeset
|
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
14290
faece6b2ab90
Corrected license headers in all files to GPL.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
13683
diff
changeset
|
12 * GNU General Public License for more details. |
13501 | 13 * |
14290
faece6b2ab90
Corrected license headers in all files to GPL.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
13683
diff
changeset
|
14 * You should have received a copy of the GNU General Public License |
13674
c0e66d6e3dc8
Updated license headers and moved to AGPLv3.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
13595
diff
changeset
|
15 * along with this program. If not, see <http://www.gnu.org/licenses/>. |
c0e66d6e3dc8
Updated license headers and moved to AGPLv3.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
13595
diff
changeset
|
16 */ |
13501 | 17 |
18 #ifndef OCTAVELINK_H | |
19 #define OCTAVELINK_H | |
20 | |
21 // Octave includes | |
22 #undef PACKAGE_BUGREPORT | |
23 #undef PACKAGE_NAME | |
24 #undef PACKAGE_STRING | |
25 #undef PACKAGE_TARNAME | |
26 #undef PACKAGE_VERSION | |
27 #undef PACKAGE_URL | |
13595
56eb9348ff02
Added missing include flags.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
13543
diff
changeset
|
28 #include "octave/config.h" |
13501 | 29 #include "octave/cmd-edit.h" |
30 #include "octave/error.h" | |
31 #include "octave/file-io.h" | |
32 #include "octave/input.h" | |
33 #include "octave/lex.h" | |
34 #include "octave/load-path.h" | |
35 #include "octave/octave.h" | |
36 #include "octave/oct-hist.h" | |
37 #include "octave/oct-map.h" | |
38 #include "octave/oct-obj.h" | |
39 #include "octave/ops.h" | |
40 #include "octave/ov.h" | |
41 #include "octave/ov-usr-fcn.h" | |
42 #include "octave/symtab.h" | |
43 #include "octave/pt.h" | |
44 #include "octave/pt-eval.h" | |
45 #include "octave/config.h" | |
46 #include "octave/Range.h" | |
47 #include "octave/toplev.h" | |
48 #include "octave/procstream.h" | |
49 #include "octave/sighandlers.h" | |
50 #include "octave/debug.h" | |
51 #include "octave/sysdep.h" | |
52 #include "octave/ov.h" | |
53 #include "octave/unwind-prot.h" | |
54 #include "octave/utils.h" | |
55 #include "octave/variables.h" | |
14721
ec76264adca9
Removed last bits of Qt from octave_link.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14720
diff
changeset
|
56 #include "oct-mutex.h" |
13501 | 57 |
58 // Standard includes | |
59 #include <iostream> | |
60 #include <string> | |
61 #include <vector> | |
62 #include <readline/readline.h> | |
14719
89c64340e9ab
Extended event based communication model.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14718
diff
changeset
|
63 #include <queue> |
13501 | 64 |
14707
674740c44c09
Changed various files to matche file naming conventions.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14703
diff
changeset
|
65 #include "workspace-model.h" |
674740c44c09
Changed various files to matche file naming conventions.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14703
diff
changeset
|
66 #include "octave-main-thread.h" |
14714
4ff6c21c18c4
Solved crash on close by ignoring close event and instead executing exit in the terminal.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14713
diff
changeset
|
67 #include "octave-event.h" |
14718
3df7ef0080c7
Added event based processing and implement exit and change directory event.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14714
diff
changeset
|
68 #include "octave-event-observer.h" |
14719
89c64340e9ab
Extended event based communication model.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14718
diff
changeset
|
69 #include "octave-event-listener.h" |
14707
674740c44c09
Changed various files to matche file naming conventions.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14703
diff
changeset
|
70 #include "symbol-information.h" |
13541
b48ac9ad8de0
Highly improved separation of model and view classes.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
13522
diff
changeset
|
71 |
13501 | 72 /** |
73 * \class OctaveLink | |
14713
565ddd85565e
Added comments for the octave-adapter module.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14712
diff
changeset
|
74 * \brief Provides threadsafe access to octave. |
565ddd85565e
Added comments for the octave-adapter module.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14712
diff
changeset
|
75 * \author Jacob Dawid |
565ddd85565e
Added comments for the octave-adapter module.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14712
diff
changeset
|
76 * This class is a wrapper around octave and provides threadsafety by |
565ddd85565e
Added comments for the octave-adapter module.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14712
diff
changeset
|
77 * buffering access operations to octave and executing them in the readline |
14719
89c64340e9ab
Extended event based communication model.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14718
diff
changeset
|
78 * event hook, which lives in the octave thread. |
13501 | 79 */ |
14719
89c64340e9ab
Extended event based communication model.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14718
diff
changeset
|
80 class octave_link : public octave_event_observer |
13501 | 81 { |
82 public: | |
14713
565ddd85565e
Added comments for the octave-adapter module.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14712
diff
changeset
|
83 /** Provides a way to access the unique octave_link object. */ |
14721
ec76264adca9
Removed last bits of Qt from octave_link.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14720
diff
changeset
|
84 static octave_link * instance () { return &_singleton; } |
14713
565ddd85565e
Added comments for the octave-adapter module.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14712
diff
changeset
|
85 |
565ddd85565e
Added comments for the octave-adapter module.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14712
diff
changeset
|
86 /** Starts octave. */ |
565ddd85565e
Added comments for the octave-adapter module.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14712
diff
changeset
|
87 void launch_octave (); |
14719
89c64340e9ab
Extended event based communication model.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14718
diff
changeset
|
88 void register_event_listener (octave_event_listener *oel); |
89c64340e9ab
Extended event based communication model.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14718
diff
changeset
|
89 |
89c64340e9ab
Extended event based communication model.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14718
diff
changeset
|
90 void generate_events (); |
14718
3df7ef0080c7
Added event based processing and implement exit and change directory event.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14714
diff
changeset
|
91 void process_events (); |
3df7ef0080c7
Added event based processing and implement exit and change directory event.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14714
diff
changeset
|
92 void post_event (octave_event *e); |
14720
cecc7da96e2a
Added update events for the command history model and workspace model.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14719
diff
changeset
|
93 void event_accepted (octave_event *e); |
cecc7da96e2a
Added update events for the command history model and workspace model.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14719
diff
changeset
|
94 void event_reject (octave_event *e); |
14718
3df7ef0080c7
Added event based processing and implement exit and change directory event.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14714
diff
changeset
|
95 |
14721
ec76264adca9
Removed last bits of Qt from octave_link.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14720
diff
changeset
|
96 void about_to_exit (); |
13501 | 97 private: |
14713
565ddd85565e
Added comments for the octave-adapter module.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14712
diff
changeset
|
98 /** Singleton. */ |
14709
f50591409306
Started to rename class names and methods from camel case to underscore-
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14707
diff
changeset
|
99 octave_link (); |
f50591409306
Started to rename class names and methods from camel case to underscore-
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14707
diff
changeset
|
100 ~octave_link (); |
13501 | 101 |
14719
89c64340e9ab
Extended event based communication model.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14718
diff
changeset
|
102 octave_event_listener *_octave_event_listener; |
89c64340e9ab
Extended event based communication model.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14718
diff
changeset
|
103 |
14713
565ddd85565e
Added comments for the octave-adapter module.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14712
diff
changeset
|
104 /** Thread running octave_main. */ |
14712
5cb54cca8a06
Completion of code reformatting.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14709
diff
changeset
|
105 octave_main_thread *_octave_main_thread; |
14713
565ddd85565e
Added comments for the octave-adapter module.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14712
diff
changeset
|
106 |
14718
3df7ef0080c7
Added event based processing and implement exit and change directory event.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14714
diff
changeset
|
107 /** Semaphore to lock access to the event queue. */ |
14721
ec76264adca9
Removed last bits of Qt from octave_link.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14720
diff
changeset
|
108 octave_mutex *_event_queue_mutex; |
14718
3df7ef0080c7
Added event based processing and implement exit and change directory event.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14714
diff
changeset
|
109 |
3df7ef0080c7
Added event based processing and implement exit and change directory event.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14714
diff
changeset
|
110 /** Buffer for queueing events until they will be processed. */ |
14719
89c64340e9ab
Extended event based communication model.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14718
diff
changeset
|
111 std::queue <octave_event *> _event_queue; |
14718
3df7ef0080c7
Added event based processing and implement exit and change directory event.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14714
diff
changeset
|
112 |
14713
565ddd85565e
Added comments for the octave-adapter module.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14712
diff
changeset
|
113 /** Stores the last known current working directory of octave. */ |
14719
89c64340e9ab
Extended event based communication model.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14718
diff
changeset
|
114 std::string _last_working_directory; |
14713
565ddd85565e
Added comments for the octave-adapter module.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14712
diff
changeset
|
115 |
565ddd85565e
Added comments for the octave-adapter module.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14712
diff
changeset
|
116 /** Unique instance. Singelton! */ |
14712
5cb54cca8a06
Completion of code reformatting.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
14709
diff
changeset
|
117 static octave_link _singleton; |
13501 | 118 }; |
119 #endif // OCTAVELINK_H |