comparison libgui/graphics/PopupMenuControl.cc @ 18566: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
18563:1ec884e5ff00 18566: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 <QComboBox>
27
28 #include "Container.h"
29 #include "PopupMenuControl.h"
30 #include "Utils.h"
31
32 //////////////////////////////////////////////////////////////////////////////
33
34 namespace QtHandles
35 {
36
37 //////////////////////////////////////////////////////////////////////////////
38
39 PopupMenuControl* PopupMenuControl::create (const graphics_object& go)
40 {
41 Object* parent = Object::parentObject (go);
42
43 if (parent)
44 {
45 Container* container = parent->innerContainer ();
46
47 if (container)
48 return new PopupMenuControl (go, new QComboBox (container));
49 }
50
51 return 0;
52 }
53
54 //////////////////////////////////////////////////////////////////////////////
55
56 PopupMenuControl::PopupMenuControl (const graphics_object& go, QComboBox *box)
57 : BaseControl (go, box), m_blockUpdate (false)
58 {
59 uicontrol::properties& up = properties<uicontrol> ();
60
61 box->addItems (Utils::fromStdString (up.get_string_string ()).split ('|'));
62
63 connect (box, SIGNAL (currentIndexChanged (int)),
64 SLOT (currentIndexChanged (int)));
65 }
66
67 //////////////////////////////////////////////////////////////////////////////
68
69 PopupMenuControl::~PopupMenuControl (void)
70 {
71 }
72
73 //////////////////////////////////////////////////////////////////////////////
74
75 void PopupMenuControl::update (int pId)
76 {
77 uicontrol::properties& up = properties<uicontrol> ();
78 QComboBox* box = qWidget<QComboBox> ();
79
80 switch (pId)
81 {
82 case uicontrol::properties::ID_STRING:
83 m_blockUpdate = true;
84 {
85 int oldCurrent = box->currentIndex ();
86
87 box->clear ();
88 box->addItems (Utils::fromStdString
89 (up.get_string_string ()).split ('|'));
90 if (box->count() > 0
91 && oldCurrent >= 0
92 && oldCurrent < box->count ())
93 {
94 box->setCurrentIndex (oldCurrent);
95 }
96 else
97 {
98 gh_manager::post_set (m_handle, "value",
99 octave_value (box->count () > 0
100 ? 1.0 : 0.0),
101 false);
102 }
103 }
104 m_blockUpdate = false;
105 break;
106 case uicontrol::properties::ID_VALUE:
107 {
108 Matrix value = up.get_value ().matrix_value ();
109
110 if (value.numel () > 0)
111 {
112 int newIndex = int (value(0)) - 1;
113
114 if (newIndex >= 0 && newIndex < box->count ()
115 && newIndex != box->currentIndex ())
116 {
117 box->setCurrentIndex (newIndex);
118 }
119 }
120 }
121 break;
122 default:
123 BaseControl::update (pId);
124 break;
125 }
126 }
127
128 //////////////////////////////////////////////////////////////////////////////
129
130 void PopupMenuControl::currentIndexChanged (int index)
131 {
132 if (! m_blockUpdate)
133 {
134 gh_manager::post_set (m_handle, "value",
135 octave_value (double (index + 1)),
136 false);
137 gh_manager::post_callback (m_handle, "callback");
138 }
139 }
140
141 //////////////////////////////////////////////////////////////////////////////
142
143 }; // namespace QtHandles