1 // Copyright (C) 2014-2016 CEA/DEN, EDF R&D, OPEN CASCADE
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 // Author: Adrien Bruneton (CEA)
21 #include "PVViewer_GUIElements.h"
22 #include "PVServer_ServiceWrapper.h"
23 #include "PVViewer_Core.h"
24 #include "PVViewer_ViewManager.h"
26 #include <pqActiveObjects.h>
27 #include <pqAnimationManager.h>
28 #include <pqAnimationTimeToolbar.h>
29 #include <pqApplicationCore.h>
30 #include <pqApplyBehavior.h>
31 #include <pqAxesToolbar.h>
32 #include <pqCameraToolbar.h>
33 #include <pqColorToolbar.h>
34 #include <pqMainControlsToolbar.h>
35 #include <pqPVApplicationCore.h>
36 #include <pqParaViewMenuBuilders.h>
37 #include <pqPipelineBrowserWidget.h>
38 #include <pqPipelineModel.h>
39 #include <pqPropertiesPanel.h>
40 #include <pqPythonManager.h>
41 #include <pqRepresentationToolbar.h>
42 #include <pqServerConnectReaction.h>
43 #include <pqServerManagerModel.h>
44 #include <pqServerResource.h>
45 #include <pqSetName.h>
46 #include <pqVCRToolbar.h>
49 #include <QCoreApplication>
52 #include <QMainWindow>
57 PVViewer_GUIElements * PVViewer_GUIElements::theInstance = 0;
59 PVViewer_GUIElements::PVViewer_GUIElements(QMainWindow* desk) :
62 pipelineBrowserWidget(0),
66 myPVWidgetsFlag(false)
70 PVViewer_GUIElements * PVViewer_GUIElements::GetInstance(QMainWindow* desk)
73 theInstance = new PVViewer_GUIElements(desk);
78 * See ParaView source code: pqParaViewMenuBuilders::buildToolbars()
79 * to keep this function up to date:
81 void PVViewer_GUIElements::buildPVWidgets()
83 if (!myPVWidgetsFlag) {
86 if ( !pipelineBrowserWidget ) {
87 pipelineBrowserWidget = new pqPipelineBrowserWidget(myDesktop);
91 if ( !propertiesPanel ) {
92 propertiesPanel = new pqPropertiesPanel(myDesktop);
97 sourcesMenu = new QMenu(0);
98 pqParaViewMenuBuilders::buildSourcesMenu(*sourcesMenu, myDesktop);
103 filtersMenu = new QMenu(0);
104 pqParaViewMenuBuilders::buildFiltersMenu(*filtersMenu, myDesktop);
109 macrosMenu = new QMenu(0);
110 pqParaViewMenuBuilders::buildMacrosMenu(*macrosMenu);
113 mainToolBar = new pqMainControlsToolbar(myDesktop)
114 << pqSetName("MainControlsToolbar");
115 mainToolBar->layout()->setSpacing(0);
117 vcrToolbar = new pqVCRToolbar(myDesktop)
118 << pqSetName("VCRToolbar");
119 vcrToolbar->layout()->setSpacing(0);
121 timeToolbar = new pqAnimationTimeToolbar(myDesktop)
122 << pqSetName("currentTimeToolbar");
123 timeToolbar->layout()->setSpacing(0);
125 colorToolbar = new pqColorToolbar(myDesktop)
126 << pqSetName("variableToolbar");
127 colorToolbar->layout()->setSpacing(0);
129 reprToolbar = new pqRepresentationToolbar(myDesktop)
130 << pqSetName("representationToolbar");
131 reprToolbar->layout()->setSpacing(0);
133 cameraToolbar = new pqCameraToolbar(myDesktop)
134 << pqSetName("cameraToolbar");
135 cameraToolbar->layout()->setSpacing(0);
137 axesToolbar = new pqAxesToolbar(myDesktop)
138 << pqSetName("axesToolbar");
139 axesToolbar->layout()->setSpacing(0);
141 // Give the macros menu to the pqPythonMacroSupervisor
142 pqPythonManager* manager = qobject_cast<pqPythonManager*>(
143 pqApplicationCore::instance()->manager("PYTHON_MANAGER"));
145 macrosToolbar = new QToolBar("Macros Toolbars", myDesktop)
146 << pqSetName("MacrosToolbar");
147 manager->addWidgetForRunMacros(macrosToolbar);
149 commonToolbar = new QToolBar("Common", myDesktop) << pqSetName("Common");
150 commonToolbar->layout()->setSpacing(0);
152 dataToolbar = new QToolBar("DataAnalysis", myDesktop) << pqSetName("DataAnalysis");
153 dataToolbar->layout()->setSpacing(0);
156 myDesktop->addToolBar(Qt::TopToolBarArea, mainToolBar);
157 myDesktop->addToolBar(Qt::TopToolBarArea, vcrToolbar);
158 myDesktop->addToolBar(Qt::TopToolBarArea, timeToolbar);
159 myDesktop->addToolBar(Qt::TopToolBarArea, colorToolbar);
160 myDesktop->insertToolBarBreak(colorToolbar);
161 myDesktop->addToolBar(Qt::TopToolBarArea, reprToolbar);
162 myDesktop->addToolBar(Qt::TopToolBarArea, cameraToolbar);
163 myDesktop->addToolBar(Qt::TopToolBarArea, axesToolbar);
164 myDesktop->addToolBar(Qt::TopToolBarArea, macrosToolbar);
165 myDesktop->addToolBar(Qt::TopToolBarArea, commonToolbar);
166 myDesktop->addToolBar(Qt::TopToolBarArea, dataToolbar);
168 mainAction = mainToolBar->toggleViewAction();
169 vcrAction = vcrToolbar->toggleViewAction();
170 timeAction = timeToolbar->toggleViewAction();
171 colorAction = colorToolbar->toggleViewAction();
172 reprAction = reprToolbar->toggleViewAction();
173 cameraAction = cameraToolbar->toggleViewAction();
174 axesAction = axesToolbar->toggleViewAction();
175 macrosAction = macrosToolbar->toggleViewAction();
176 commonAction = commonToolbar->toggleViewAction();
177 dataAction = dataToolbar->toggleViewAction();
179 // The piece od the code below is neccessary to correct update "Pipeline Browser",
180 // "Properties Panel", toolbars and menus
182 // Initilaize pqApplyBehavior here because witout pqPropertiesPanel instance it doesn't make sence
183 pqApplyBehavior* applyBehavior = new pqApplyBehavior(this);
184 foreach (pqPropertiesPanel* ppanel, myDesktop->findChildren<pqPropertiesPanel*>())
186 applyBehavior->registerPanel(ppanel);
189 emit pqActiveObjects::instance().portChanged(pqActiveObjects::instance().activePort());
190 emit pqActiveObjects::instance().viewChanged(pqActiveObjects::instance().activeView());
192 pqServerManagerModel *smModel = pqApplicationCore::instance()->getServerManagerModel();
193 pqServer* serv = pqActiveObjects::instance().activeServer();
196 emit smModel->serverAdded(serv);
197 emit serv->nameChanged(NULL);
200 myPVWidgetsFlag = true;
204 void PVViewer_GUIElements::setToolBarVisible(bool show)
206 QCoreApplication::processEvents();
207 if (!myPVWidgetsFlag)
210 mainAction->setChecked(!show);
211 mainAction->setVisible(show);
212 mainAction->trigger();
213 vcrAction->setChecked(!show);
214 vcrAction->setVisible(show);
215 vcrAction->trigger();
216 timeAction->setChecked(!show);
217 timeAction->setVisible(show);
218 timeAction->trigger();
219 colorAction->setChecked(!show);
220 colorAction->setVisible(show);
221 colorAction->trigger();
222 reprAction->setChecked(!show);
223 reprAction->setVisible(show);
224 reprAction->trigger();
225 cameraAction->setChecked(!show);
226 cameraAction->setVisible(show);
227 cameraAction->trigger();
228 axesAction->setChecked(!show);
229 axesAction->setVisible(show);
230 axesAction->trigger();
231 macrosAction->setChecked(!show);
232 macrosAction->setVisible(show);
233 macrosAction->trigger();
234 commonAction->setChecked(!show);
235 commonAction->setVisible(show);
236 commonAction->trigger();
237 dataAction->setChecked(!show);
238 dataAction->setVisible(show);
239 dataAction->trigger();
242 QList<QToolBar*> PVViewer_GUIElements::getToolbars()
246 l << mainToolBar << vcrToolbar << timeToolbar << colorToolbar
247 << reprToolbar << cameraToolbar << axesToolbar << macrosToolbar
248 << commonToolbar << dataToolbar;
252 void PVViewer_GUIElements::setToolBarEnabled(bool enabled)
254 if (!myPVWidgetsFlag)
257 mainToolBar ->setEnabled(enabled);
258 vcrToolbar ->setEnabled(enabled);
259 timeToolbar ->setEnabled(enabled);
260 colorToolbar ->setEnabled(enabled);
261 reprToolbar ->setEnabled(enabled);
262 cameraToolbar->setEnabled(enabled);
263 axesToolbar ->setEnabled(enabled);
264 macrosToolbar->setEnabled(enabled);
265 commonToolbar->setEnabled(enabled);
266 dataToolbar ->setEnabled(enabled);
270 pqPropertiesPanel* PVViewer_GUIElements::getPropertiesPanel()
273 return propertiesPanel;
276 pqPipelineBrowserWidget* PVViewer_GUIElements::getPipelineBrowserWidget()
279 return pipelineBrowserWidget;
283 pqVCRToolbar* PVViewer_GUIElements::getVCRToolbar()
289 pqAnimationTimeToolbar* PVViewer_GUIElements::getTimeToolbar()
295 QMenu* PVViewer_GUIElements::getFiltersMenu() {
299 QMenu* PVViewer_GUIElements::getSourcesMenu() {
304 QMenu* PVViewer_GUIElements::getMacrosMenu() {