comparison libgui/graphics/ToolBar.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 <QAction>
27 #include <QActionEvent>
28 #include <QApplication>
29 #include <QEvent>
30 #include <QIcon>
31 #include <QMainWindow>
32 #include <QPixmap>
33 #include <QTimer>
34 #include <QToolBar>
35
36 #include "Figure.h"
37 #include "ToolBar.h"
38 #include "Utils.h"
39
40 //////////////////////////////////////////////////////////////////////////////
41
42 namespace QtHandles
43 {
44
45 //////////////////////////////////////////////////////////////////////////////
46
47 static QAction* addEmptyAction (QToolBar* bar)
48 {
49 static QIcon _empty;
50
51 if (_empty.isNull ())
52 {
53 QPixmap pix (16, 16);
54
55 pix.fill (Qt::transparent);
56
57 _empty = QIcon (pix);
58 }
59
60 QAction* a = bar->addAction (_empty, "Empty Toolbar");
61
62 a->setEnabled (false);
63 a->setToolTip ("");
64
65 return a;
66 }
67
68 //////////////////////////////////////////////////////////////////////////////
69
70 ToolBar* ToolBar::create (const graphics_object& go)
71 {
72 Object* parent = Object::parentObject (go);
73
74 if (parent)
75 {
76 QWidget* parentWidget = parent->qWidget<QWidget> ();
77
78 if (parentWidget)
79 return new ToolBar (go, new QToolBar (parentWidget));
80 }
81
82 return 0;
83 }
84
85 //////////////////////////////////////////////////////////////////////////////
86
87 ToolBar::ToolBar (const graphics_object& go, QToolBar* bar)
88 : Object (go, bar), m_empty (0), m_figure (0)
89 {
90 uitoolbar::properties& tp = properties<uitoolbar> ();
91
92 bar->setFloatable (false);
93 bar->setMovable (false);
94 bar->setVisible (tp.is_visible ());
95
96 m_empty = addEmptyAction (bar);
97
98 m_figure =
99 dynamic_cast<Figure*> (Object::fromQObject (bar->parentWidget ()));
100
101 if (m_figure)
102 m_figure->addCustomToolBar (bar, tp.is_visible ());
103
104 bar->installEventFilter (this);
105 }
106
107 //////////////////////////////////////////////////////////////////////////////
108
109 ToolBar::~ToolBar (void)
110 {
111 }
112
113 //////////////////////////////////////////////////////////////////////////////
114
115 void ToolBar::update (int pId)
116 {
117 uitoolbar::properties& tp = properties<uitoolbar> ();
118 QToolBar* bar = qWidget<QToolBar> ();
119
120 switch (pId)
121 {
122 case base_properties::ID_VISIBLE:
123 if (m_figure)
124 m_figure->showCustomToolBar (bar, tp.is_visible ());
125 break;
126 default:
127 Object::update (pId);
128 break;
129 }
130 }
131
132 //////////////////////////////////////////////////////////////////////////////
133
134 bool ToolBar::eventFilter (QObject* watched, QEvent* event)
135 {
136 if (watched == qObject ())
137 {
138 switch (event->type ())
139 {
140 case QEvent::ActionAdded:
141 case QEvent::ActionRemoved:
142 {
143 QActionEvent* ae = dynamic_cast<QActionEvent*> (event);
144 QToolBar* bar = qWidget<QToolBar> ();
145
146 if (ae->action () != m_empty)
147 {
148 if (event->type () == QEvent::ActionAdded)
149 {
150 if (bar->actions ().size () == 2)
151 QTimer::singleShot (0, this, SLOT (hideEmpty (void)));
152 }
153 else
154 {
155 if (bar->actions ().size () == 1)
156 m_empty->setVisible (true);
157 }
158 }
159 }
160 break;
161 default:
162 break;
163 }
164 }
165
166 return false;
167 }
168
169 //////////////////////////////////////////////////////////////////////////////
170
171 void ToolBar::hideEmpty (void)
172 {
173 m_empty->setVisible (false);
174 }
175
176 //////////////////////////////////////////////////////////////////////////////
177
178 void ToolBar::beingDeleted (void)
179 {
180 if (m_figure)
181 {
182 QToolBar* bar = qWidget<QToolBar> ();
183
184 if (bar)
185 m_figure->showCustomToolBar (bar, false);
186 }
187 }
188
189 //////////////////////////////////////////////////////////////////////////////
190
191 }; // namespace QtHandles