annotate libinterp/corefcn/gtk-manager.h @ 23774:41795b504a8b

don't use singleton for gtk_manager * graphics-handle.h, graphics-toolkit.cc, graphics-toolkit.h, gtk-manager.cc, gtk-manager.h: New files, extracted from graphics.cc and graphics.in.h. * libinterp/corefcn/module.mk: Update. * graphics.cc (Favailable_graphics_toolkits, Fregister_graphics_toolkit, Floaded_graphics_toolkits): Now defined with DEFMETHOD. * main-window.cc (octave_interpreter::execute): Pass interpreter object to Fregister_graphics_toolkit. * interpreter-private.cc, interpreter-private.h (__get_gtk_manager__): New function. * interpreter.cc, interpreter.h (interpreter::m_gtk_manager): New data member. (interpreter::get_gtk_manager): New function. (interpreter::cleanup): Update call to unload_all_toolkits. * __init_qt__.cc (__init__): Pass reference to interpreter. Update caller. (__shutdown__): Don't call gtk_manager::unload_toolkit here. (F__init_qt__): Define with DEFMETHOD. * __init_fltk__.cc (F__init_fltk__): Access gtk_manager through interpreter object. * __init_gnuplot__.cc (gnuplot_graphics_toolkit::close): Don't call gtk_manager::unload_toolkit here. F__init_gnuplot__): Access gtk_manager through interpreter object.
author John W. Eaton <jwe@octave.org>
date Fri, 14 Jul 2017 16:05:59 -0400
parents
children 194eb4bd202b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
23774
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1 /*
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3 Copyright (C) 2007-2017 John W. Eaton
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5 This file is part of Octave.
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
7 Octave is free software; you can redistribute it and/or modify it
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
8 under the terms of the GNU General Public License as published by
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
9 the Free Software Foundation; either version 3 of the License, or
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
10 (at your option) any later version.
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
11
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
12 Octave is distributed in the hope that it will be useful, but
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
13 WITHOUT ANY WARRANTY; without even the implied warranty of
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
15 GNU General Public License for more details.
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
16
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
18 along with Octave; see the file COPYING. If not, see
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
19 <http://www.gnu.org/licenses/>.
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
20
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
21 */
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
22
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
23 #if ! defined (octave_gtk_manager_h)
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
24 #define octave_gtk_manager_h 1
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
25
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
26 #include "octave-config.h"
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
27
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
28 #include <map>
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
29 #include <set>
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
30 #include <string>
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
31
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
32 #include "Cell.h"
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
33 #include "graphics-toolkit.h"
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
34
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
35 namespace octave
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
36 {
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
37 class gtk_manager
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
38 {
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
39 public:
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
40
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
41 gtk_manager (void) { }
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
42
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
43 ~gtk_manager (void)
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
44 {
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
45 unload_all_toolkits ();
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
46 }
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
47
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
48 graphics_toolkit get_toolkit (void) const;
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
49
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
50 void register_toolkit (const std::string& name);
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
51
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
52 void unregister_toolkit (const std::string& name);
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
53
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
54 void load_toolkit (const graphics_toolkit& tk)
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
55 {
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
56 loaded_toolkits[tk.get_name ()] = tk;
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
57 }
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
58
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
59 void unload_toolkit (const std::string& name)
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
60 {
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
61 loaded_toolkits.erase (name);
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
62 }
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
63
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
64 graphics_toolkit find_toolkit (const std::string& name) const
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
65 {
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
66 const_loaded_toolkits_iterator p = loaded_toolkits.find (name);
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
67
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
68 if (p != loaded_toolkits.end ())
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
69 return p->second;
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
70 else
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
71 return graphics_toolkit ();
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
72 }
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
73
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
74 Cell available_toolkits_list (void) const
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
75 {
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
76 Cell m (1, available_toolkits.size ());
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
77
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
78 octave_idx_type i = 0;
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
79 for (const auto& tkit : available_toolkits)
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
80 m(i++) = tkit;
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
81
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
82 return m;
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
83 }
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
84
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
85 Cell loaded_toolkits_list (void) const
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
86 {
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
87 Cell m (1, loaded_toolkits.size ());
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
88
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
89 octave_idx_type i = 0;
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
90 for (const auto& nm_tkit_p : loaded_toolkits)
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
91 m(i++) = nm_tkit_p.first;
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
92
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
93 return m;
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
94 }
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
95
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
96 void unload_all_toolkits (void)
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
97 {
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
98 while (! loaded_toolkits.empty ())
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
99 {
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
100 loaded_toolkits_iterator p = loaded_toolkits.begin ();
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
101
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
102 std::string name = p->first;
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
103
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
104 p->second.close ();
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
105
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
106 // The toolkit may have unloaded itself. If not, we'll do it here.
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
107 if (loaded_toolkits.find (name) != loaded_toolkits.end ())
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
108 unload_toolkit (name);
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
109 }
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
110 }
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
111
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
112 std::string default_toolkit (void) const { return dtk; }
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
113
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
114 private:
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
115
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
116 // The name of the default toolkit.
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
117 std::string dtk;
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
118
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
119 // The list of toolkits that we know about.
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
120 std::set<std::string> available_toolkits;
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
121
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
122 // The list of toolkits we have actually loaded.
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
123 std::map<std::string, graphics_toolkit> loaded_toolkits;
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
124
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
125 typedef std::set<std::string>::iterator available_toolkits_iterator;
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
126
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
127 typedef std::set<std::string>::const_iterator
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
128 const_available_toolkits_iterator;
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
129
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
130 typedef std::map<std::string, graphics_toolkit>::iterator
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
131 loaded_toolkits_iterator;
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
132
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
133 typedef std::map<std::string, graphics_toolkit>::const_iterator
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
134 const_loaded_toolkits_iterator;
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
135 };
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
136 }
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
137
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
diff changeset
138 #endif