comparison libgui/graphics/ContextMenu.cc @ 18498:2e7cad6f180c gui-release

Initial integration of QtHandles. * configure.ac: Check for QtOpenGL module. * libgui/Makefile.am: Include libgui/graphics/module.mk. (liboctgui_la_LIBADD): Include graphics/libgui-graphics.la in the list. (rcc-command): Pass "-name DIR" to rcc command. * main-window.cc (main_window::construct): Install qt functions and register qt toolkit. * libgui/src/module.mk (src_libgui_src_la_CPPFLAGS): Include $(FONTCONFIG_CPPFLAGS) and -I$(srcdir)/graphics in the list. * graphics.cc (gtk_manager::gtk_manager): Make qt the default toolkit if it is available. * libgui/graphics/Backend.cc, libgui/graphics/Backend.h, libgui/graphics/BaseControl.cc, libgui/graphics/BaseControl.h, libgui/graphics/ButtonControl.cc, libgui/graphics/ButtonControl.h, libgui/graphics/Canvas.cc, libgui/graphics/Canvas.h, libgui/graphics/CheckBoxControl.cc, libgui/graphics/CheckBoxControl.h, libgui/graphics/Container.cc, libgui/graphics/Container.h, libgui/graphics/ContextMenu.cc, libgui/graphics/ContextMenu.h, libgui/graphics/EditControl.cc, libgui/graphics/EditControl.h, libgui/graphics/Figure.cc, libgui/graphics/Figure.h, libgui/graphics/FigureWindow.cc, libgui/graphics/FigureWindow.h, libgui/graphics/GLCanvas.cc, libgui/graphics/GLCanvas.h, , libgui/graphics/GenericEventNotify.h, libgui/graphics/KeyMap.cc, libgui/graphics/KeyMap.h, libgui/graphics/ListBoxControl.cc, libgui/graphics/ListBoxControl.h, libgui/graphics/Logger.cc, libgui/graphics/Logger.h, libgui/graphics/Menu.cc, libgui/graphics/Menu.h, libgui/graphics/MenuContainer.h, libgui/graphics/MouseModeActionGroup.cc, libgui/graphics/MouseModeActionGroup.h, libgui/graphics/Object.cc, libgui/graphics/Object.h, libgui/graphics/ObjectFactory.cc, libgui/graphics/ObjectFactory.h, libgui/graphics/ObjectProxy.cc, libgui/graphics/ObjectProxy.h, libgui/graphics/Panel.cc, libgui/graphics/Panel.h, libgui/graphics/PopupMenuControl.cc, libgui/graphics/PopupMenuControl.h, libgui/graphics/PushButtonControl.cc, libgui/graphics/PushButtonControl.h, libgui/graphics/PushTool.cc, libgui/graphics/PushTool.h, libgui/graphics/RadioButtonControl.cc, libgui/graphics/RadioButtonControl.h, libgui/graphics/SliderControl.cc, libgui/graphics/SliderControl.h, libgui/graphics/TextControl.cc, libgui/graphics/TextControl.h, libgui/graphics/TextEdit.cc, libgui/graphics/TextEdit.h, libgui/graphics/ToggleButtonControl.cc, libgui/graphics/ToggleButtonControl.h, libgui/graphics/ToggleTool.cc, libgui/graphics/ToggleTool.h, libgui/graphics/ToolBar.cc, libgui/graphics/ToolBar.h, libgui/graphics/ToolBarButton.cc, libgui/graphics/ToolBarButton.h, libgui/graphics/Utils.cc, libgui/graphics/Utils.h, libgui/graphics/__init_qt__.cc, libgui/graphics/__init_qt__.h, libgui/graphics/gl-select.cc, libgui/graphics/gl-select.h, libgui/graphics/images/README, libgui/graphics/images/pan.png, libgui/graphics/images/rotate.png, libgui/graphics/images/select.png, libgui/graphics/images/zoom.png, libgui/graphics/module.mk, libgui/graphics/qthandles.qrc: New files.
author John W. Eaton <jwe@octave.org>
date Thu, 20 Feb 2014 14:05:45 -0500
parents
children 49877d3be064
comparison
equal deleted inserted replaced
18495:1ec884e5ff00 18498:2e7cad6f180c
1 /*
2
3 Copyright (C) 2011 Michael Goffioul.
4
5 This file is part of QtHandles.
6
7 Foobar is free software: you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation, either version 3 of the License, or
10 (at your option) any later version.
11
12 QtHandles is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with Foobar. If not, see <http://www.gnu.org/licenses/>.
19
20 */
21
22 #ifdef HAVE_CONFIG_H
23 #include <config.h>
24 #endif
25
26 #include <QMenu>
27
28 #include "Backend.h"
29 #include "ContextMenu.h"
30 #include "Utils.h"
31
32 //////////////////////////////////////////////////////////////////////////////
33
34 namespace QtHandles
35 {
36
37 //////////////////////////////////////////////////////////////////////////////
38
39 ContextMenu* ContextMenu::create (const graphics_object& go)
40 {
41 Object* parent = Object::parentObject (go);
42
43 if (parent)
44 {
45 QWidget* w = parent->qWidget<QWidget> ();
46
47 return new ContextMenu (go, new QMenu (w));
48 }
49
50 return 0;
51 }
52
53 //////////////////////////////////////////////////////////////////////////////
54
55 ContextMenu::ContextMenu (const graphics_object& go, QMenu* menu)
56 : Object (go, menu)
57 {
58 uicontextmenu::properties& up = properties<uicontextmenu> ();
59
60 menu->setAutoFillBackground (true);
61
62 connect (menu, SIGNAL (aboutToShow (void)), SLOT (aboutToShow (void)));
63 connect (menu, SIGNAL (aboutToHide (void)), SLOT (aboutToHide (void)));
64 }
65
66 //////////////////////////////////////////////////////////////////////////////
67
68 ContextMenu::~ContextMenu (void)
69 {
70 }
71
72 //////////////////////////////////////////////////////////////////////////////
73
74 void ContextMenu::update (int pId)
75 {
76 uicontextmenu::properties& up = properties<uicontextmenu> ();
77 QMenu* menu = qWidget<QMenu> ();
78
79 switch (pId)
80 {
81 case base_properties::ID_VISIBLE:
82 if (up.is_visible ())
83 {
84 Matrix pos = up.get_position ().matrix_value ();
85 QWidget* parentW = menu->parentWidget ();
86 QPoint pt;
87
88 pt.rx () = xround (pos(0));
89 pt.ry () = parentW->height () - xround (pos(1));
90 pt = parentW->mapToGlobal (pt);
91
92 menu->popup (pt);
93 }
94 else
95 menu->hide ();
96 break;
97 default:
98 Object::update (pId);
99 break;
100 }
101 }
102
103 //////////////////////////////////////////////////////////////////////////////
104
105 void ContextMenu::aboutToShow (void)
106 {
107 gh_manager::post_callback (m_handle, "callback");
108 gh_manager::post_set (m_handle, "visible", "on", false);
109 }
110
111 //////////////////////////////////////////////////////////////////////////////
112
113 void ContextMenu::aboutToHide (void)
114 {
115 gh_manager::post_set (m_handle, "visible", "off", false);
116 }
117
118 //////////////////////////////////////////////////////////////////////////////
119
120 QWidget* ContextMenu::menu (void)
121 {
122 return qWidget<QWidget> ();
123 }
124
125 //////////////////////////////////////////////////////////////////////////////
126
127 void ContextMenu::executeAt (const base_properties& props, const QPoint& pt)
128 {
129 graphics_handle h = props.get_uicontextmenu ();
130
131 if (h.ok ())
132 {
133 graphics_object go = gh_manager::get_object (h);
134
135 if (go.valid_object ())
136 {
137 ContextMenu* cMenu =
138 dynamic_cast<ContextMenu*> (Backend::toolkitObject (go));
139
140 if (cMenu)
141 {
142 QMenu* menu = cMenu->qWidget<QMenu> ();
143
144 if (menu)
145 menu->popup (pt);
146 }
147 }
148 }
149 }
150
151 //////////////////////////////////////////////////////////////////////////////
152
153 }; // namespace QtHandles