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>
47 #include <pqPipelineSource.h>
49 #include <vtkSMSessionProxyManager.h>
50 #include <vtkSMProxyIterator.h>
53 #include <QCoreApplication>
56 #include <QMainWindow>
61 PVViewer_GUIElements * PVViewer_GUIElements::theInstance = 0;
63 PVViewer_GUIElements::PVViewer_GUIElements(QMainWindow* desk) :
66 pipelineBrowserWidget(0),
71 myPVWidgetsFlag(false)
75 PVViewer_GUIElements * PVViewer_GUIElements::GetInstance(QMainWindow* desk)
78 theInstance = new PVViewer_GUIElements(desk);
83 * See ParaView source code: pqParaViewMenuBuilders::buildToolbars()
84 * to keep this function up to date:
86 void PVViewer_GUIElements::buildPVWidgets()
88 if (!myPVWidgetsFlag) {
91 if ( !pipelineBrowserWidget ) {
92 pqPipelineModel* pipelineModel = new pqPipelineModel(*pqApplicationCore::instance()->getServerManagerModel(), this);
93 pipelineModel->setView(pqActiveObjects::instance().activeView());
94 pipelineBrowserWidget = new pqPipelineBrowserWidget(myDesktop);
95 pipelineBrowserWidget->setModel(pipelineModel);
99 if ( !propertiesPanel ) {
100 propertiesPanel = new pqPropertiesPanel(myDesktop);
105 sourcesMenu = new QMenu(0);
106 pqParaViewMenuBuilders::buildSourcesMenu(*sourcesMenu, myDesktop);
111 filtersMenu = new QMenu(0);
112 pqParaViewMenuBuilders::buildFiltersMenu(*filtersMenu, myDesktop);
117 macrosMenu = new QMenu(0);
118 pqParaViewMenuBuilders::buildMacrosMenu(*macrosMenu);
121 mainToolBar = new pqMainControlsToolbar(myDesktop)
122 << pqSetName("MainControlsToolbar");
123 mainToolBar->layout()->setSpacing(0);
125 vcrToolbar = new pqVCRToolbar(myDesktop)
126 << pqSetName("VCRToolbar");
127 vcrToolbar->layout()->setSpacing(0);
129 timeToolbar = new pqAnimationTimeToolbar(myDesktop)
130 << pqSetName("currentTimeToolbar");
131 timeToolbar->layout()->setSpacing(0);
133 colorToolbar = new pqColorToolbar(myDesktop)
134 << pqSetName("variableToolbar");
135 colorToolbar->layout()->setSpacing(0);
137 reprToolbar = new pqRepresentationToolbar(myDesktop)
138 << pqSetName("representationToolbar");
139 reprToolbar->layout()->setSpacing(0);
141 cameraToolbar = new pqCameraToolbar(myDesktop)
142 << pqSetName("cameraToolbar");
143 cameraToolbar->layout()->setSpacing(0);
145 axesToolbar = new pqAxesToolbar(myDesktop)
146 << pqSetName("axesToolbar");
147 axesToolbar->layout()->setSpacing(0);
149 // Give the macros menu to the pqPythonMacroSupervisor
150 pqPythonManager* manager = qobject_cast<pqPythonManager*>(
151 pqApplicationCore::instance()->manager("PYTHON_MANAGER"));
153 macrosToolbar = new QToolBar("Macros Toolbars", myDesktop)
154 << pqSetName("MacrosToolbar");
155 manager->addWidgetForRunMacros(macrosToolbar);
157 commonToolbar = new QToolBar("Common", myDesktop) << pqSetName("Common");
158 commonToolbar->layout()->setSpacing(0);
160 dataToolbar = new QToolBar("DataAnalysis", myDesktop) << pqSetName("DataAnalysis");
161 dataToolbar->layout()->setSpacing(0);
164 myDesktop->addToolBar(Qt::TopToolBarArea, mainToolBar);
165 myDesktop->addToolBar(Qt::TopToolBarArea, vcrToolbar);
166 myDesktop->addToolBar(Qt::TopToolBarArea, timeToolbar);
167 myDesktop->addToolBar(Qt::TopToolBarArea, colorToolbar);
168 myDesktop->insertToolBarBreak(colorToolbar);
169 myDesktop->addToolBar(Qt::TopToolBarArea, reprToolbar);
170 myDesktop->addToolBar(Qt::TopToolBarArea, cameraToolbar);
171 myDesktop->addToolBar(Qt::TopToolBarArea, axesToolbar);
172 myDesktop->addToolBar(Qt::TopToolBarArea, macrosToolbar);
173 myDesktop->addToolBar(Qt::TopToolBarArea, commonToolbar);
174 myDesktop->addToolBar(Qt::TopToolBarArea, dataToolbar);
176 mainAction = mainToolBar->toggleViewAction();
177 vcrAction = vcrToolbar->toggleViewAction();
178 timeAction = timeToolbar->toggleViewAction();
179 colorAction = colorToolbar->toggleViewAction();
180 reprAction = reprToolbar->toggleViewAction();
181 cameraAction = cameraToolbar->toggleViewAction();
182 axesAction = axesToolbar->toggleViewAction();
183 macrosAction = macrosToolbar->toggleViewAction();
184 commonAction = commonToolbar->toggleViewAction();
185 dataAction = dataToolbar->toggleViewAction();
187 // The piece od the code below is neccessary to correct update "Pipeline Browser",
188 // "Properties Panel", toolbars and menus
190 // Initilaize pqApplyBehavior here because witout pqPropertiesPanel instance it doesn't make sence
191 pqApplyBehavior* applyBehavior = new pqApplyBehavior(this);
192 foreach (pqPropertiesPanel* ppanel, myDesktop->findChildren<pqPropertiesPanel*>())
194 applyBehavior->registerPanel(ppanel);
197 QMetaObject::invokeMethod( &pqActiveObjects::instance(),
200 Q_ARG( pqOutputPort*, pqActiveObjects::instance().activePort() ) );
202 QMetaObject::invokeMethod( &pqActiveObjects::instance(),
205 Q_ARG( pqView*, pqActiveObjects::instance().activeView() ) );
207 pqServerManagerModel *smModel = pqApplicationCore::instance()->getServerManagerModel();
208 pqServer* serv = pqActiveObjects::instance().activeServer();
211 QMetaObject::invokeMethod( smModel,
214 Q_ARG( pqServer*, serv ) );
216 QMetaObject::invokeMethod( serv,
219 Q_ARG( pqServerManagerModelItem* , NULL ) );
222 //publishExistingSources();
223 myPVWidgetsFlag = true;
227 void PVViewer_GUIElements::setToolBarVisible(bool show)
229 QCoreApplication::processEvents();
230 if (!myPVWidgetsFlag)
233 mainAction->setChecked(!show);
234 mainAction->setVisible(show);
235 mainAction->trigger();
237 setVCRTimeToolBarVisible(show);
239 colorAction->setChecked(!show);
240 colorAction->setVisible(show);
241 colorAction->trigger();
242 reprAction->setChecked(!show);
243 reprAction->setVisible(show);
244 reprAction->trigger();
245 cameraAction->setChecked(!show);
246 cameraAction->setVisible(show);
247 cameraAction->trigger();
248 axesAction->setChecked(!show);
249 axesAction->setVisible(show);
250 axesAction->trigger();
251 macrosAction->setChecked(!show);
252 macrosAction->setVisible(show);
253 macrosAction->trigger();
254 commonAction->setChecked(!show);
255 commonAction->setVisible(show);
256 commonAction->trigger();
257 dataAction->setChecked(!show);
258 dataAction->setVisible(show);
259 dataAction->trigger();
262 void PVViewer_GUIElements::setVCRTimeToolBarVisible(bool show)
264 vcrAction->setChecked(!show);
265 vcrAction->setVisible(show);
266 vcrAction->trigger();
267 timeAction->setChecked(!show);
268 timeAction->setVisible(show);
269 timeAction->trigger();
272 QList<QToolBar*> PVViewer_GUIElements::getToolbars()
276 l << mainToolBar << vcrToolbar << timeToolbar << colorToolbar
277 << reprToolbar << cameraToolbar << axesToolbar << macrosToolbar
278 << commonToolbar << dataToolbar;
282 void PVViewer_GUIElements::setToolBarEnabled(bool enabled)
284 if (!myPVWidgetsFlag)
287 mainToolBar ->setEnabled(enabled);
288 vcrToolbar ->setEnabled(enabled);
289 timeToolbar ->setEnabled(enabled);
290 colorToolbar ->setEnabled(enabled);
291 reprToolbar ->setEnabled(enabled);
292 cameraToolbar->setEnabled(enabled);
293 axesToolbar ->setEnabled(enabled);
294 macrosToolbar->setEnabled(enabled);
295 commonToolbar->setEnabled(enabled);
296 dataToolbar ->setEnabled(enabled);
300 pqPropertiesPanel* PVViewer_GUIElements::getPropertiesPanel()
303 return propertiesPanel;
306 pqPipelineBrowserWidget* PVViewer_GUIElements::getPipelineBrowserWidget()
309 return pipelineBrowserWidget;
313 pqVCRToolbar* PVViewer_GUIElements::getVCRToolbar()
319 pqAnimationTimeToolbar* PVViewer_GUIElements::getTimeToolbar()
325 QMenu* PVViewer_GUIElements::getFiltersMenu() {
329 QMenu* PVViewer_GUIElements::getSourcesMenu() {
334 QMenu* PVViewer_GUIElements::getMacrosMenu() {
339 void PVViewer_GUIElements::publishExistingSources() {
340 vtkSMSessionProxyManager* pxm = pqActiveObjects::instance().proxyManager();
341 pqServerManagerModel* smmodel = pqApplicationCore::instance()->getServerManagerModel();
342 if( !pxm || !smmodel )
344 vtkSMProxyIterator* iter = vtkSMProxyIterator::New();
345 iter->SetModeToOneGroup();
346 iter->SetSessionProxyManager( pxm );
347 for ( iter->Begin( "sources" ); !iter->IsAtEnd(); iter->Next() ) {
348 if ( pqProxy* item = smmodel->findItem<pqProxy*>( iter->GetProxy() ) ) {
349 pqPipelineSource* source = qobject_cast<pqPipelineSource*>( item );
350 QMetaObject::invokeMethod( smmodel,
353 Q_ARG( pqPipelineSource* , source ) );