annotate libgui/src/octave-qobject.cc @ 27669:271b5cd640d7

Add functions to show GUI windows (bug #57213) * event-manager.h (interpreter_events::focus_window): New empty method. (event_manager::focus_window): New vistual method that executes the instance's focus_window method. * event_manager.cc (commandwindow, commandhistory, filebrowser, workspace): New builtin interpreter functions. * qt-interpreter-events.[h, cc] (qt_interpreter_events::focus_window_signal): New signal. (qt_interpreter_events::focus_window): Implements event_manager::focus_window, emits focus_window_signal. * main-window.[h, cc] (main_window::focus_window): New slot that activates the named window. * octave-qobject.cc (gui_qobject::gui_qobject): Connect qt_interpreter_events::focus_window_signal to main_window::focus_window. * __unimplemented__.m: Remove commandwindow, commandhistory, filebrowser, and workspace from the list. * gui.txi: Add commandwindow, commandhistory, filebrowser, workspace docstrings.
author Pantxo Diribarne <pantxo.diribarne@gmail.com>
date Tue, 12 Nov 2019 14:54:25 +0100
parents 91d43a00620d
children b442ec6dda5c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1 /*
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3 Copyright (C) 2013-2019 John W. Eaton
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4 Copyright (C) 2011-2019 Jacob Dawid
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6 This file is part of Octave.
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
7
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
8 Octave is free software: you can redistribute it and/or modify it
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
9 under the terms of the GNU General Public License as published by
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
10 the Free Software Foundation, either version 3 of the License, or
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
11 (at your option) any later version.
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
12
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
13 Octave is distributed in the hope that it will be useful, but
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
14 WITHOUT ANY WARRANTY; without even the implied warranty of
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
16 GNU General Public License for more details.
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
17
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
19 along with Octave; see the file COPYING. If not, see
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
20 <https://www.gnu.org/licenses/>.
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
21
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
22 */
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
23
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
24 #if defined (HAVE_CONFIG_H)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
25 # include "config.h"
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
26 #endif
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
27
27412
da1f59fe04b3 try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27393
diff changeset
28 #include <utility>
da1f59fe04b3 try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27393
diff changeset
29
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
30 #include <QApplication>
27648
2952471e29a7 eliminate global access to resource_manager in qterminal widget
John W. Eaton <jwe@octave.org>
parents: 27630
diff changeset
31 #include <QClipboard>
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
32 #include <QFile>
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
33 #include <QTextCodec>
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
34 #include <QThread>
27412
da1f59fe04b3 try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27393
diff changeset
35 #include <QTimer>
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
36 #include <QTranslator>
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
37
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
38 #include "interpreter-qobject.h"
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
39 #include "main-window.h"
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
40 #include "octave-qobject.h"
27412
da1f59fe04b3 try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27393
diff changeset
41 #include "qt-application.h"
27263
99aa1bcb8848 rename octave_link and octave_link_events classes, move inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 27261
diff changeset
42 #include "qt-interpreter-events.h"
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
43 #include "resource-manager.h"
27630
262cdd0f7619 don't use singleton pattern for shortcut manager in GUI
John W. Eaton <jwe@octave.org>
parents: 27624
diff changeset
44 #include "shortcut-manager.h"
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
45
27616
1c13a0f36160 Temporarily disable code in cset d0fe6e344c41 (bug #55940)
Rik <rik@octave.org>
parents: 27604
diff changeset
46 // Bug #55940 (Disable App Nap on Mac)
27575
d0fe6e344c41 Disable Mac App Nap feature so that pause, sleep work correctly (bug #55940).
Andrew Janke <andrew@apjanke.net>
parents: 27551
diff changeset
47 #if defined (Q_OS_MAC)
d0fe6e344c41 Disable Mac App Nap feature so that pause, sleep work correctly (bug #55940).
Andrew Janke <andrew@apjanke.net>
parents: 27551
diff changeset
48 # include <objc/runtime.h>
d0fe6e344c41 Disable Mac App Nap feature so that pause, sleep work correctly (bug #55940).
Andrew Janke <andrew@apjanke.net>
parents: 27551
diff changeset
49 # include <objc/message.h>
d0fe6e344c41 Disable Mac App Nap feature so that pause, sleep work correctly (bug #55940).
Andrew Janke <andrew@apjanke.net>
parents: 27551
diff changeset
50 #endif
d0fe6e344c41 Disable Mac App Nap feature so that pause, sleep work correctly (bug #55940).
Andrew Janke <andrew@apjanke.net>
parents: 27551
diff changeset
51
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
52 #include "oct-env.h"
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
53 #include "version.h"
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
54
27412
da1f59fe04b3 try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27393
diff changeset
55 #include "ovl.h"
da1f59fe04b3 try to use consitent ordering for include files in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27393
diff changeset
56
27621
39fac14ab25a Enable App Nap disabling on macOS (bug #55490).
Andrew Janke <andrew@apjanke.net>
parents: 27620
diff changeset
57
39fac14ab25a Enable App Nap disabling on macOS (bug #55490).
Andrew Janke <andrew@apjanke.net>
parents: 27620
diff changeset
58 // Bug #55940 (Disable App Nap on Mac)
39fac14ab25a Enable App Nap disabling on macOS (bug #55490).
Andrew Janke <andrew@apjanke.net>
parents: 27620
diff changeset
59 #if defined (Q_OS_MAC)
27624
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
60 static void disable_app_nap (void)
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
61 {
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
62 Class process_info_class;
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
63 SEL process_info_selector;
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
64 SEL begin_activity_with_options_selector;
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
65 id process_info;
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
66 id reason_string;
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
67 id osx_latencycritical_activity;
27621
39fac14ab25a Enable App Nap disabling on macOS (bug #55490).
Andrew Janke <andrew@apjanke.net>
parents: 27620
diff changeset
68
27624
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
69 // Option codes found at https://stackoverflow.com/questions/22784886/what-can-make-nanosleep-drift-with-exactly-10-sec-on-mac-os-x-10-9/32729281#32729281
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
70 unsigned long long NSActivityUserInitiatedAllowingIdleSystemSleep = 0x00FFFFFFULL;
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
71 unsigned long long NSActivityLatencyCritical = 0xFF00000000ULL;
27621
39fac14ab25a Enable App Nap disabling on macOS (bug #55490).
Andrew Janke <andrew@apjanke.net>
parents: 27620
diff changeset
72
27624
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
73 // Avoid errors on older versions of OS X
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
74 process_info_class = static_cast<Class> (objc_getClass ("NSProcessInfo"));
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
75 if (process_info_class == nil)
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
76 return;
27621
39fac14ab25a Enable App Nap disabling on macOS (bug #55490).
Andrew Janke <andrew@apjanke.net>
parents: 27620
diff changeset
77
27624
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
78 process_info_selector = sel_getUid ("processInfo");
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
79 if (class_getClassMethod (process_info_class, process_info_selector)
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
80 == nullptr)
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
81 return;
27621
39fac14ab25a Enable App Nap disabling on macOS (bug #55490).
Andrew Janke <andrew@apjanke.net>
parents: 27620
diff changeset
82
27624
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
83 begin_activity_with_options_selector = sel_getUid ("beginActivityWithOptions:reason:");
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
84 if (class_getInstanceMethod (process_info_class,
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
85 begin_activity_with_options_selector)
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
86 == nullptr)
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
87 return;
27621
39fac14ab25a Enable App Nap disabling on macOS (bug #55490).
Andrew Janke <andrew@apjanke.net>
parents: 27620
diff changeset
88
27624
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
89 process_info = objc_msgSend (reinterpret_cast<id> (process_info_class),
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
90 process_info_selector);
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
91 if (process_info == nil)
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
92 return;
27621
39fac14ab25a Enable App Nap disabling on macOS (bug #55490).
Andrew Janke <andrew@apjanke.net>
parents: 27620
diff changeset
93
27624
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
94 reason_string = objc_msgSend (reinterpret_cast<id> (objc_getClass ("NSString")),
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
95 sel_getUid ("alloc"));
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
96 reason_string = objc_msgSend (reason_string,
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
97 sel_getUid ("initWithUTF8String:"),
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
98 "App Nap causes pause() malfunction");
27621
39fac14ab25a Enable App Nap disabling on macOS (bug #55490).
Andrew Janke <andrew@apjanke.net>
parents: 27620
diff changeset
99
27624
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
100 // Start an Activity that suppresses App Nap. This Activity will run for
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
101 // the entire duration of the Octave process. This is intentional,
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
102 // not a leak.
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
103 osx_latencycritical_activity = objc_msgSend (process_info,
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
104 begin_activity_with_options_selector,
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
105 NSActivityUserInitiatedAllowingIdleSystemSleep
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
106 | NSActivityLatencyCritical,
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
107 reason_string);
d6b561842eeb maint: Fix indentation in static function to disable App Nap.
Andrew Janke <andrew@apjanke.net>
parents: 27621
diff changeset
108 }
27621
39fac14ab25a Enable App Nap disabling on macOS (bug #55490).
Andrew Janke <andrew@apjanke.net>
parents: 27620
diff changeset
109 #endif
39fac14ab25a Enable App Nap disabling on macOS (bug #55490).
Andrew Janke <andrew@apjanke.net>
parents: 27620
diff changeset
110
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
111 namespace octave
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
112 {
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
113 // Disable all Qt messages by default.
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
114
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
115 static void
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
116 #if defined (QTMESSAGEHANDLER_ACCEPTS_QMESSAGELOGCONTEXT)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
117 message_handler (QtMsgType, const QMessageLogContext &, const QString &)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
118 #else
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
119 message_handler (QtMsgType, const char *)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
120 #endif
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
121 { }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
122
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
123 //! Reimplement QApplication::notify. Octave's own exceptions are
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
124 //! caught and rethrown in the interpreter thread.
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
125
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
126 bool octave_qapplication::notify (QObject *receiver, QEvent *ev)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
127 {
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
128 try
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
129 {
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
130 return QApplication::notify (receiver, ev);
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
131 }
27481
458adc344819 avoid possible crash due to execution_exception in GUI thread
John W. Eaton <jwe@octave.org>
parents: 27412
diff changeset
132 catch (execution_exception& ee)
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
133 {
27302
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
134 emit interpreter_event
27481
458adc344819 avoid possible crash due to execution_exception in GUI thread
John W. Eaton <jwe@octave.org>
parents: 27412
diff changeset
135 ([ee] (void)
27302
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
136 {
27393
efe72866b483 mark all interpreter_event lambda functions with special comment
John W. Eaton <jwe@octave.org>
parents: 27302
diff changeset
137 // INTERPRETER THREAD
efe72866b483 mark all interpreter_event lambda functions with special comment
John W. Eaton <jwe@octave.org>
parents: 27302
diff changeset
138
27481
458adc344819 avoid possible crash due to execution_exception in GUI thread
John W. Eaton <jwe@octave.org>
parents: 27412
diff changeset
139 throw ee;
27302
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
140 });
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
141 }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
142
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
143 return false;
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
144 }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
145
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
146 // We will create a QApplication object, even if START_GUI is false,
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
147 // so that we can use Qt widgets for plot windows when running in
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
148 // command-line mode. Note that we are creating an
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
149 // octave_qapplication object but handling it as a QApplication object
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
150 // because the octave_qapplication should behave identically to a
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
151 // QApplication object except that it overrides the notify method so
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
152 // we can handle forward Octave interpreter exceptions from the GUI
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
153 // thread to the interpreter thread.
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
154
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
155 base_qobject::base_qobject (qt_application& app_context)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
156 : QObject (), m_app_context (app_context),
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
157 m_argc (m_app_context.sys_argc ()),
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
158 m_argv (m_app_context.sys_argv ()),
27218
a044202208af more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents: 27197
diff changeset
159 m_qapplication (new octave_qapplication (m_argc, m_argv)),
27630
262cdd0f7619 don't use singleton pattern for shortcut manager in GUI
John W. Eaton <jwe@octave.org>
parents: 27624
diff changeset
160 m_resource_manager (), m_shortcut_manager (*this),
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
161 m_qt_tr (new QTranslator ()), m_gui_tr (new QTranslator ()),
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
162 m_qsci_tr (new QTranslator ()), m_translators_installed (false),
27588
f0e3f3e28a8e move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents: 27582
diff changeset
163 m_qt_interpreter_events (new qt_interpreter_events (*this)),
f0e3f3e28a8e move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents: 27582
diff changeset
164 m_interpreter_qobj (new interpreter_qobject (*this)),
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
165 m_main_thread (new QThread ())
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
166 {
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
167 std::string show_gui_msgs =
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
168 sys::env::getenv ("OCTAVE_SHOW_GUI_MESSAGES");
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
169
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
170 // Installing our handler suppresses the messages.
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
171
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
172 if (show_gui_msgs.empty ())
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
173 {
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
174 #if defined (HAVE_QINSTALLMESSAGEHANDLER)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
175 qInstallMessageHandler (message_handler);
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
176 #else
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
177 qInstallMsgHandler (message_handler);
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
178 #endif
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
179 }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
180
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
181 // Set the codec for all strings (before wizard or any GUI object)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
182 #if ! defined (Q_OS_WIN32)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
183 QTextCodec::setCodecForLocale (QTextCodec::codecForName ("UTF-8"));
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
184 #endif
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
185
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
186 #if defined (HAVE_QT4)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
187 QTextCodec::setCodecForCStrings (QTextCodec::codecForName ("UTF-8"));
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
188 #endif
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
189
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
190 // Initialize global Qt application metadata.
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
191
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
192 QCoreApplication::setApplicationName ("GNU Octave");
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
193 QCoreApplication::setApplicationVersion (OCTAVE_VERSION);
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
194
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
195 // Register octave_value_list for connecting thread crossing signals.
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
196
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
197 qRegisterMetaType<octave_value_list> ("octave_value_list");
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
198
27616
1c13a0f36160 Temporarily disable code in cset d0fe6e344c41 (bug #55940)
Rik <rik@octave.org>
parents: 27604
diff changeset
199
1c13a0f36160 Temporarily disable code in cset d0fe6e344c41 (bug #55940)
Rik <rik@octave.org>
parents: 27604
diff changeset
200 // Bug #55940 (Disable App Nap on Mac)
27575
d0fe6e344c41 Disable Mac App Nap feature so that pause, sleep work correctly (bug #55940).
Andrew Janke <andrew@apjanke.net>
parents: 27551
diff changeset
201 #if defined (Q_OS_MAC)
d0fe6e344c41 Disable Mac App Nap feature so that pause, sleep work correctly (bug #55940).
Andrew Janke <andrew@apjanke.net>
parents: 27551
diff changeset
202 // Mac App Nap feature causes pause() and sleep() to misbehave.
d0fe6e344c41 Disable Mac App Nap feature so that pause, sleep work correctly (bug #55940).
Andrew Janke <andrew@apjanke.net>
parents: 27551
diff changeset
203 // Disable it for the entire program run.
d0fe6e344c41 Disable Mac App Nap feature so that pause, sleep work correctly (bug #55940).
Andrew Janke <andrew@apjanke.net>
parents: 27551
diff changeset
204 disable_app_nap ();
d0fe6e344c41 Disable Mac App Nap feature so that pause, sleep work correctly (bug #55940).
Andrew Janke <andrew@apjanke.net>
parents: 27551
diff changeset
205 #endif
d0fe6e344c41 Disable Mac App Nap feature so that pause, sleep work correctly (bug #55940).
Andrew Janke <andrew@apjanke.net>
parents: 27551
diff changeset
206
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
207 // Force left-to-right alignment (see bug #46204)
27218
a044202208af more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents: 27197
diff changeset
208 m_qapplication->setLayoutDirection (Qt::LeftToRight);
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
209
27218
a044202208af more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents: 27197
diff changeset
210 connect (m_interpreter_qobj, SIGNAL (octave_finished_signal (int)),
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
211 this, SLOT (handle_octave_finished (int)));
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
212
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
213 connect (m_main_thread, SIGNAL (finished (void)),
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
214 m_main_thread, SLOT (deleteLater (void)));
27302
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
215
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
216 // Handle any interpreter_event signal from the octave_qapplication
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
217 // object here.
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
218
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
219 connect (m_qapplication, SIGNAL (interpreter_event (const fcn_callback&)),
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
220 this, SLOT (interpreter_event (const fcn_callback&)));
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
221
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
222 connect (m_qapplication, SIGNAL (interpreter_event (const meth_callback&)),
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
223 this, SLOT (interpreter_event (const meth_callback&)));
27588
f0e3f3e28a8e move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents: 27582
diff changeset
224
f0e3f3e28a8e move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents: 27582
diff changeset
225 connect (qt_link (),
f0e3f3e28a8e move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents: 27582
diff changeset
226 SIGNAL (copy_image_to_clipboard_signal (const QString&, bool)),
f0e3f3e28a8e move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents: 27582
diff changeset
227 this, SLOT (copy_image_to_clipboard (const QString&, bool)));
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
228 }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
229
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
230 base_qobject::~base_qobject (void)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
231 {
27219
b88d66c631c8 delete translator objects in base_qobject destructor
John W. Eaton <jwe@octave.org>
parents: 27218
diff changeset
232 // Note that we don't delete m_main_thread here. That is handled by
b88d66c631c8 delete translator objects in base_qobject destructor
John W. Eaton <jwe@octave.org>
parents: 27218
diff changeset
233 // deleteLater slot that is called when the m_main_thread issues a
b88d66c631c8 delete translator objects in base_qobject destructor
John W. Eaton <jwe@octave.org>
parents: 27218
diff changeset
234 // finished signal.
b88d66c631c8 delete translator objects in base_qobject destructor
John W. Eaton <jwe@octave.org>
parents: 27218
diff changeset
235
27218
a044202208af more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents: 27197
diff changeset
236 delete m_interpreter_qobj;
27219
b88d66c631c8 delete translator objects in base_qobject destructor
John W. Eaton <jwe@octave.org>
parents: 27218
diff changeset
237 delete m_qsci_tr;
b88d66c631c8 delete translator objects in base_qobject destructor
John W. Eaton <jwe@octave.org>
parents: 27218
diff changeset
238 delete m_gui_tr;
b88d66c631c8 delete translator objects in base_qobject destructor
John W. Eaton <jwe@octave.org>
parents: 27218
diff changeset
239 delete m_qt_tr;
27218
a044202208af more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents: 27197
diff changeset
240 delete m_qapplication;
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
241
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
242 string_vector::delete_c_str_vec (m_argv);
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
243 }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
244
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
245 void base_qobject::config_translators (void)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
246 {
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
247 if (m_translators_installed)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
248 return;
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
249
27620
45bb5bbaf291 don't use singleton pattern for resource manager in GUI
John W. Eaton <jwe@octave.org>
parents: 27619
diff changeset
250 m_resource_manager.config_translators (m_qt_tr, m_qsci_tr, m_gui_tr);
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
251
27218
a044202208af more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents: 27197
diff changeset
252 m_qapplication->installTranslator (m_qt_tr);
a044202208af more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents: 27197
diff changeset
253 m_qapplication->installTranslator (m_gui_tr);
a044202208af more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents: 27197
diff changeset
254 m_qapplication->installTranslator (m_qsci_tr);
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
255
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
256 m_translators_installed = true;
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
257 }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
258
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
259 void base_qobject::start_main_thread (void)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
260 {
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
261 // Defer initializing and executing the interpreter until after the main
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
262 // window and QApplication are running to prevent race conditions
27218
a044202208af more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents: 27197
diff changeset
263 QTimer::singleShot (0, m_interpreter_qobj, SLOT (execute (void)));
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
264
27218
a044202208af more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents: 27197
diff changeset
265 m_interpreter_qobj->moveToThread (m_main_thread);
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
266
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
267 m_main_thread->start ();
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
268 }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
269
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
270 int base_qobject::exec (void)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
271 {
27218
a044202208af more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents: 27197
diff changeset
272 return m_qapplication->exec ();
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
273 }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
274
27588
f0e3f3e28a8e move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents: 27582
diff changeset
275 bool base_qobject::confirm_shutdown (void)
f0e3f3e28a8e move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents: 27582
diff changeset
276 {
f0e3f3e28a8e move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents: 27582
diff changeset
277 return true;
f0e3f3e28a8e move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents: 27582
diff changeset
278 }
f0e3f3e28a8e move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents: 27582
diff changeset
279
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
280 void base_qobject::handle_octave_finished (int exit_status)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
281 {
27485
1bbeb8aeb1cd Work around freeze-on-quit in macOS (bug #50025).
Andrew Janke <andrew@apjanke.net>
parents: 27481
diff changeset
282 #if defined (Q_OS_MAC)
1bbeb8aeb1cd Work around freeze-on-quit in macOS (bug #50025).
Andrew Janke <andrew@apjanke.net>
parents: 27481
diff changeset
283 // fprintf to stderr is needed by macOS, for poorly-understood reasons.
1bbeb8aeb1cd Work around freeze-on-quit in macOS (bug #50025).
Andrew Janke <andrew@apjanke.net>
parents: 27481
diff changeset
284 fprintf (stderr, "\n");
27498
1a4defb4dfc2 call quit on main thread in handle_octave_finished (bug #50025, #56952)
John W. Eaton <jwe@octave.org>
parents: 27485
diff changeset
285 #endif
1a4defb4dfc2 call quit on main thread in handle_octave_finished (bug #50025, #56952)
John W. Eaton <jwe@octave.org>
parents: 27485
diff changeset
286
27485
1bbeb8aeb1cd Work around freeze-on-quit in macOS (bug #50025).
Andrew Janke <andrew@apjanke.net>
parents: 27481
diff changeset
287 m_main_thread->quit ();
27498
1a4defb4dfc2 call quit on main thread in handle_octave_finished (bug #50025, #56952)
John W. Eaton <jwe@octave.org>
parents: 27485
diff changeset
288
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
289 qApp->exit (exit_status);
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
290 }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
291
27302
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
292 void base_qobject::interpreter_event (const fcn_callback& fcn)
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
293 {
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
294 // The following is a direct function call across threads. It works
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
295 // because the it is accessing a thread-safe queue of events that
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
296 // are later executed by the Octave interpreter in the other thread.
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
297
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
298 // See also the comments in interpreter-qobject.h about
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
299 // interpreter_qobject slots.
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
300
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
301 m_interpreter_qobj->interpreter_event (fcn);
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
302 }
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
303
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
304 void base_qobject::interpreter_event (const meth_callback& meth)
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
305 {
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
306 // The following is a direct function call across threads. It works
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
307 // because the it is accessing a thread-safe queue of events that
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
308 // are later executed by the Octave interpreter in the other thread.
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
309
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
310 // See also the comments in interpreter-qobject.h about
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
311 // interpreter_qobject slots.
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
312
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
313 m_interpreter_qobj->interpreter_event (meth);
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
314 }
5f170ea12fa1 use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
315
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
316 void base_qobject::copy_image_to_clipboard (const QString& file,
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
317 bool remove_file)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
318 {
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
319 QClipboard *clipboard = QApplication::clipboard ();
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
320
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
321 QImage img (file);
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
322
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
323 if (img.isNull ())
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
324 {
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
325 // Report error?
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
326 return;
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
327 }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
328
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
329 clipboard->setImage (img);
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
330
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
331 if (remove_file)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
332 QFile::remove (file);
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
333 }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
334
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
335 cli_qobject::cli_qobject (qt_application& app_context)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
336 : base_qobject (app_context)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
337 {
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
338 // Get settings file.
27620
45bb5bbaf291 don't use singleton pattern for resource manager in GUI
John W. Eaton <jwe@octave.org>
parents: 27619
diff changeset
339 m_resource_manager.reload_settings ();
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
340
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
341 // After settings.
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
342 config_translators ();
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
343
27218
a044202208af more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents: 27197
diff changeset
344 m_qapplication->setQuitOnLastWindowClosed (false);
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
345
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
346 start_main_thread ();
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
347 }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
348
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
349 gui_qobject::gui_qobject (qt_application& app_context)
27218
a044202208af more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents: 27197
diff changeset
350 : base_qobject (app_context), m_main_window (new main_window (*this))
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
351 {
27218
a044202208af more refactoring of GUI classes that manage the interpreter
John W. Eaton <jwe@octave.org>
parents: 27197
diff changeset
352 connect (m_interpreter_qobj, SIGNAL (octave_ready_signal (void)),
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
353 m_main_window, SLOT (handle_octave_ready (void)));
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
354
27669
271b5cd640d7 Add functions to show GUI windows (bug #57213)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 27649
diff changeset
355 connect (qt_link (),
271b5cd640d7 Add functions to show GUI windows (bug #57213)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 27649
diff changeset
356 SIGNAL (focus_window_signal (const QString&)),
271b5cd640d7 Add functions to show GUI windows (bug #57213)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 27649
diff changeset
357 m_main_window, SLOT (focus_window (const QString&)));
271b5cd640d7 Add functions to show GUI windows (bug #57213)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 27649
diff changeset
358
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
359 m_app_context.gui_running (true);
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
360
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
361 start_main_thread ();
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
362 }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
363
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
364 gui_qobject::~gui_qobject (void)
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
365 {
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
366 delete m_main_window;
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
367 }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
368
27588
f0e3f3e28a8e move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents: 27582
diff changeset
369 bool gui_qobject::confirm_shutdown (void)
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
370 {
27604
9bc81bf5d8a6 * octave-qobject.cc: Add comment.
John W. Eaton <jwe@octave.org>
parents: 27588
diff changeset
371 // Currently, we forward to main_window::confirm_shutdown instead of
9bc81bf5d8a6 * octave-qobject.cc: Add comment.
John W. Eaton <jwe@octave.org>
parents: 27588
diff changeset
372 // just displaying a dialog box here because the main_window also
9bc81bf5d8a6 * octave-qobject.cc: Add comment.
John W. Eaton <jwe@octave.org>
parents: 27588
diff changeset
373 // knows about and is responsible for notifying the editor.
9bc81bf5d8a6 * octave-qobject.cc: Add comment.
John W. Eaton <jwe@octave.org>
parents: 27588
diff changeset
374
27588
f0e3f3e28a8e move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents: 27582
diff changeset
375 return m_main_window ? m_main_window->confirm_shutdown () : true;
27197
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
376 }
b8c0d5ad024f refactor and rename some qt application objects
John W. Eaton <jwe@octave.org>
parents:
diff changeset
377 }