X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FPVViewer%2FPVViewer_GUIElements.cxx;h=2a6d260ff815f0f1d7482d945c0c2faae0ebaf81;hb=2eb0753e65ecc3327b7d1fae6ad8dab16e35a814;hp=ff139e682c2cff50d2983a86526ccdd9238db051;hpb=be5ccfda044312edcd493d753af4f8491b07b28c;p=modules%2Fgui.git diff --git a/src/PVViewer/PVViewer_GUIElements.cxx b/src/PVViewer/PVViewer_GUIElements.cxx index ff139e682..2a6d260ff 100644 --- a/src/PVViewer/PVViewer_GUIElements.cxx +++ b/src/PVViewer/PVViewer_GUIElements.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2010-2014 CEA/DEN, EDF R&D +// Copyright (C) 2014-2016 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -19,86 +19,310 @@ // Author: Adrien Bruneton (CEA) #include "PVViewer_GUIElements.h" -#include "SUIT_Desktop.h" +#include "PVServer_ServiceWrapper.h" +#include "PVViewer_Core.h" +#include "PVViewer_ViewManager.h" -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include -#include -#include #include +#include +#include +#include +#include +#include +#include + PVViewer_GUIElements * PVViewer_GUIElements::theInstance = 0; -PVViewer_GUIElements::PVViewer_GUIElements(SUIT_Desktop* desk) : - propertiesPanel(0), pipelineBrowserWidget(0), - sourcesMenu(0) +PVViewer_GUIElements::PVViewer_GUIElements(QMainWindow* desk) : + myDesktop(desk), + propertiesPanel(0), + pipelineBrowserWidget(0), + sourcesMenu(0), + filtersMenu(0), + macrosMenu(0), + myPVWidgetsFlag(false) { - propertiesPanel = new pqPropertiesPanel(desk); - propertiesPanel->hide(); - pipelineBrowserWidget = new pqPipelineBrowserWidget(desk); - pipelineBrowserWidget->hide(); - - sourcesMenu = new QMenu(desk); - pqParaViewMenuBuilders::buildSourcesMenu(*sourcesMenu, desk); - - filtersMenu = new QMenu(desk); - pqParaViewMenuBuilders::buildFiltersMenu(*filtersMenu, desk); - - macrosMenu = new QMenu(desk); - pqParaViewMenuBuilders::buildMacrosMenu(*macrosMenu); } -PVViewer_GUIElements * PVViewer_GUIElements::GetInstance(SUIT_Desktop* desk) +PVViewer_GUIElements * PVViewer_GUIElements::GetInstance(QMainWindow* desk) { if (! theInstance) theInstance = new PVViewer_GUIElements(desk); return theInstance; } -void PVViewer_GUIElements::updateSourcesMenu(QMenu *menu) +/** + * See ParaView source code: pqParaViewMenuBuilders::buildToolbars() + * to keep this function up to date: + */ +void PVViewer_GUIElements::buildPVWidgets() { - if (menu) - { - menu->clear(); - QList act_list = sourcesMenu->actions(); - foreach(QAction * a, act_list) + if (!myPVWidgetsFlag) { + + //Pipeline Browser + if ( !pipelineBrowserWidget ) { + pipelineBrowserWidget = new pqPipelineBrowserWidget(myDesktop); + } + + // Properties panel + if ( !propertiesPanel ) { + propertiesPanel = new pqPropertiesPanel(myDesktop); + } + + // Sources Menu + if (!sourcesMenu) { + sourcesMenu = new QMenu(0); + pqParaViewMenuBuilders::buildSourcesMenu(*sourcesMenu, myDesktop); + } + + //Filer Menu + if (!filtersMenu) { + filtersMenu = new QMenu(0); + pqParaViewMenuBuilders::buildFiltersMenu(*filtersMenu, myDesktop); + } + + // Macros Menu + if (!macrosMenu) { + macrosMenu = new QMenu(0); + pqParaViewMenuBuilders::buildMacrosMenu(*macrosMenu); + } + + mainToolBar = new pqMainControlsToolbar(myDesktop) + << pqSetName("MainControlsToolbar"); + mainToolBar->layout()->setSpacing(0); + + vcrToolbar = new pqVCRToolbar(myDesktop) + << pqSetName("VCRToolbar"); + vcrToolbar->layout()->setSpacing(0); + + timeToolbar = new pqAnimationTimeToolbar(myDesktop) + << pqSetName("currentTimeToolbar"); + timeToolbar->layout()->setSpacing(0); + + colorToolbar = new pqColorToolbar(myDesktop) + << pqSetName("variableToolbar"); + colorToolbar->layout()->setSpacing(0); + + reprToolbar = new pqRepresentationToolbar(myDesktop) + << pqSetName("representationToolbar"); + reprToolbar->layout()->setSpacing(0); + + cameraToolbar = new pqCameraToolbar(myDesktop) + << pqSetName("cameraToolbar"); + cameraToolbar->layout()->setSpacing(0); + + axesToolbar = new pqAxesToolbar(myDesktop) + << pqSetName("axesToolbar"); + axesToolbar->layout()->setSpacing(0); + + // Give the macros menu to the pqPythonMacroSupervisor + pqPythonManager* manager = qobject_cast( + pqApplicationCore::instance()->manager("PYTHON_MANAGER")); + + macrosToolbar = new QToolBar("Macros Toolbars", myDesktop) + << pqSetName("MacrosToolbar"); + manager->addWidgetForRunMacros(macrosToolbar); + + commonToolbar = new QToolBar("Common", myDesktop) << pqSetName("Common"); + commonToolbar->layout()->setSpacing(0); + + dataToolbar = new QToolBar("DataAnalysis", myDesktop) << pqSetName("DataAnalysis"); + dataToolbar->layout()->setSpacing(0); + + // add Toolbars + myDesktop->addToolBar(Qt::TopToolBarArea, mainToolBar); + myDesktop->addToolBar(Qt::TopToolBarArea, vcrToolbar); + myDesktop->addToolBar(Qt::TopToolBarArea, timeToolbar); + myDesktop->addToolBar(Qt::TopToolBarArea, colorToolbar); + myDesktop->insertToolBarBreak(colorToolbar); + myDesktop->addToolBar(Qt::TopToolBarArea, reprToolbar); + myDesktop->addToolBar(Qt::TopToolBarArea, cameraToolbar); + myDesktop->addToolBar(Qt::TopToolBarArea, axesToolbar); + myDesktop->addToolBar(Qt::TopToolBarArea, macrosToolbar); + myDesktop->addToolBar(Qt::TopToolBarArea, commonToolbar); + myDesktop->addToolBar(Qt::TopToolBarArea, dataToolbar); + + mainAction = mainToolBar->toggleViewAction(); + vcrAction = vcrToolbar->toggleViewAction(); + timeAction = timeToolbar->toggleViewAction(); + colorAction = colorToolbar->toggleViewAction(); + reprAction = reprToolbar->toggleViewAction(); + cameraAction = cameraToolbar->toggleViewAction(); + axesAction = axesToolbar->toggleViewAction(); + macrosAction = macrosToolbar->toggleViewAction(); + commonAction = commonToolbar->toggleViewAction(); + dataAction = dataToolbar->toggleViewAction(); + + // The piece od the code below is neccessary to correct update "Pipeline Browser", + // "Properties Panel", toolbars and menus + + // Initilaize pqApplyBehavior here because witout pqPropertiesPanel instance it doesn't make sence + pqApplyBehavior* applyBehavior = new pqApplyBehavior(this); + foreach (pqPropertiesPanel* ppanel, myDesktop->findChildren()) { - menu->addAction(a); + applyBehavior->registerPanel(ppanel); } + + QMetaObject::invokeMethod( &pqActiveObjects::instance(), + "portChanged", + Qt::AutoConnection, + Q_ARG( pqOutputPort*, pqActiveObjects::instance().activePort() ) ); + + QMetaObject::invokeMethod( &pqActiveObjects::instance(), + "viewChanged", + Qt::AutoConnection, + Q_ARG( pqView*, pqActiveObjects::instance().activeView() ) ); + + pqServerManagerModel *smModel = pqApplicationCore::instance()->getServerManagerModel(); + pqServer* serv = pqActiveObjects::instance().activeServer(); + + if (serv) { + QMetaObject::invokeMethod( smModel, + "serverAdded", + Qt::AutoConnection, + Q_ARG( pqServer*, serv ) ); + + QMetaObject::invokeMethod( serv, + "nameChanged", + Qt::AutoConnection, + Q_ARG( pqServerManagerModelItem* , NULL ) ); } + + myPVWidgetsFlag = true; + } +} + +void PVViewer_GUIElements::setToolBarVisible(bool show) +{ + QCoreApplication::processEvents(); + if (!myPVWidgetsFlag) + return; + + mainAction->setChecked(!show); + mainAction->setVisible(show); + mainAction->trigger(); + + setVCRTimeToolBarVisible(show); + + colorAction->setChecked(!show); + colorAction->setVisible(show); + colorAction->trigger(); + reprAction->setChecked(!show); + reprAction->setVisible(show); + reprAction->trigger(); + cameraAction->setChecked(!show); + cameraAction->setVisible(show); + cameraAction->trigger(); + axesAction->setChecked(!show); + axesAction->setVisible(show); + axesAction->trigger(); + macrosAction->setChecked(!show); + macrosAction->setVisible(show); + macrosAction->trigger(); + commonAction->setChecked(!show); + commonAction->setVisible(show); + commonAction->trigger(); + dataAction->setChecked(!show); + dataAction->setVisible(show); + dataAction->trigger(); } -void PVViewer_GUIElements::updateFiltersMenu(QMenu *menu) +void PVViewer_GUIElements::setVCRTimeToolBarVisible(bool show) { - if (menu) - { - menu->clear(); - QList act_list = filtersMenu->actions(); - foreach(QAction * a, act_list) - { - menu->addAction(a); - } - } + vcrAction->setChecked(!show); + vcrAction->setVisible(show); + vcrAction->trigger(); + timeAction->setChecked(!show); + timeAction->setVisible(show); + timeAction->trigger(); } -void PVViewer_GUIElements::updateMacrosMenu(QMenu *menu) +QList PVViewer_GUIElements::getToolbars() { - if (menu) - { - menu->clear(); - QList act_list = macrosMenu->actions(); - foreach(QAction * a, act_list) - { - menu->addAction(a); - } - } + buildPVWidgets(); + QList l; + l << mainToolBar << vcrToolbar << timeToolbar << colorToolbar + << reprToolbar << cameraToolbar << axesToolbar << macrosToolbar + << commonToolbar << dataToolbar; + return l; +} + +void PVViewer_GUIElements::setToolBarEnabled(bool enabled) +{ + if (!myPVWidgetsFlag) + return; + + mainToolBar ->setEnabled(enabled); + vcrToolbar ->setEnabled(enabled); + timeToolbar ->setEnabled(enabled); + colorToolbar ->setEnabled(enabled); + reprToolbar ->setEnabled(enabled); + cameraToolbar->setEnabled(enabled); + axesToolbar ->setEnabled(enabled); + macrosToolbar->setEnabled(enabled); + commonToolbar->setEnabled(enabled); + dataToolbar ->setEnabled(enabled); } -void PVViewer_GUIElements::onEmulateApply() +pqPropertiesPanel* PVViewer_GUIElements::getPropertiesPanel() { - if (propertiesPanel) - propertiesPanel->apply(); + buildPVWidgets(); + return propertiesPanel; +} + +pqPipelineBrowserWidget* PVViewer_GUIElements::getPipelineBrowserWidget() +{ + buildPVWidgets(); + return pipelineBrowserWidget; +} + + +pqVCRToolbar* PVViewer_GUIElements::getVCRToolbar() +{ + buildPVWidgets(); + return vcrToolbar; +} + +pqAnimationTimeToolbar* PVViewer_GUIElements::getTimeToolbar() +{ + buildPVWidgets(); + return timeToolbar; +} + +QMenu* PVViewer_GUIElements::getFiltersMenu() { + buildPVWidgets(); + return filtersMenu; +} +QMenu* PVViewer_GUIElements::getSourcesMenu() { + buildPVWidgets(); + return sourcesMenu; +} + +QMenu* PVViewer_GUIElements::getMacrosMenu() { + buildPVWidgets(); + return macrosMenu; }