X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FPVGUI%2FPVGUI_Module_widgets.cxx;h=a20a3af46b19fca2fc7a9c807e78068f775bdbd3;hb=651a7397543ef86bbf6c5d187ce185699ce0c1cb;hp=8f0601e63245a2c26ac6d3a86a666088d7e81ff9;hpb=c7c9039d845fb2a5e2eb391139af089b4bed26a5;p=modules%2Fparavis.git diff --git a/src/PVGUI/PVGUI_Module_widgets.cxx b/src/PVGUI/PVGUI_Module_widgets.cxx index 8f0601e6..a20a3af4 100644 --- a/src/PVGUI/PVGUI_Module_widgets.cxx +++ b/src/PVGUI/PVGUI_Module_widgets.cxx @@ -1,11 +1,11 @@ // PARAVIS : ParaView wrapper SALOME module // -// Copyright (C) 2010-2013 CEA/DEN, EDF R&D +// Copyright (C) 2010-2015 CEA/DEN, EDF R&D // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -23,9 +23,12 @@ // #include "PVGUI_Module.h" +#include "PVViewer_ViewManager.h" +#include "PVViewer_GUIElements.h" #include #include +#include // // should ultimately be a LightApp only #include #include @@ -44,46 +47,33 @@ #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 -#include -#include #include #include #include +#include +#include + +#include class ResizeHelper : public pqPVAnimationWidget { - // TEMPORARILY WORKAROUND AROUND PARAVIEW 3.14 BUG: + // TEMPORARY WORKAROUND AROUND PARAVIEW 3.14 BUG: // WHEN ANIMATION VIEW IS RESIZED, ITS CONTENTS IS NOT PREPERLY RE-ARRANGED // CAUSING SOME CONTROLS TO STAY NON-VISIBLE - // THIS BUG IS NATURALLY FIXED BY ADDING + // THIS BUG IS NATURALLY FIXED BY ADDING // this->updateGeometries(); // TO THE // void pqAnimationWidget::resizeEvent(QResizeEvent* e); @@ -96,7 +86,7 @@ protected: void resizeEvent(QResizeEvent* e) { pqAnimationWidget* w = findChild( "pqAnimationWidget" ); - if ( w ) { + if ( w ) { QShowEvent e; QApplication::sendEvent( w, &e ); } @@ -106,70 +96,111 @@ protected: /*! \brief Create dock widgets for ParaView widgets such as object inspector, pipeline browser, etc. - ParaView pqMainWIndowCore class is fully responsible for these dock widgets' contents. + ParaView pqMainWindowCore class is fully responsible for these dock widgets' contents. + ==> To update this function, see the reference set up of ParaView in Application/Paraview/ParaviewMainWindow.ui */ void PVGUI_Module::setupDockWidgets() { SUIT_Desktop* desk = application()->desktop(); + PVViewer_GUIElements * guiElements = PVViewer_GUIElements::GetInstance(desk); desk->setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea); desk->setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea); + desk->setTabPosition(Qt::LeftDockWidgetArea, QTabWidget::North); // Pipeline QDockWidget* pipelineBrowserDock = new QDockWidget( tr( "TTL_PIPELINE_BROWSER" ), desk ); pipelineBrowserDock->setObjectName("pipelineBrowserDock"); pipelineBrowserDock->setAllowedAreas( Qt::LeftDockWidgetArea|Qt::NoDockWidgetArea|Qt::RightDockWidgetArea ); desk->addDockWidget( Qt::LeftDockWidgetArea, pipelineBrowserDock ); - pqPipelineBrowserWidget* browser = new pqPipelineBrowserWidget(pipelineBrowserDock); - pqParaViewMenuBuilders::buildPipelineBrowserContextMenu(*browser); + pqPipelineBrowserWidget* browser = guiElements->getPipelineBrowserWidget(); pipelineBrowserDock->setWidget(browser); myDockWidgets[pipelineBrowserDock] = true; + pipelineBrowserDock->hide(); + + // PROPERTIES, DISPLAY and VIEW: + // See ParaViewMainWindow.cxx - those three panels can be separated or grouped. + pqSettings *settings = pqApplicationCore::instance()->settings(); + + // Properties dock (previously called OBJECT_INSPECTOR) + QDockWidget* propertiesDock = new QDockWidget( tr( "TTL_OBJECT_INSPECTOR" ), desk ); + propertiesDock->setObjectName("propertiesDock"); + propertiesDock->setAllowedAreas( Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea ); + desk->addDockWidget( Qt::LeftDockWidgetArea, propertiesDock ); + + pqPropertiesPanel* propertiesPanel = guiElements->getPropertiesPanel(); + propertiesDock->setWidget(propertiesPanel); + connect( propertiesPanel, SIGNAL( helpRequested(const QString&, const QString&) ), this, SLOT( showHelpForProxy(const QString&, const QString&) ) ); + // hook delete to pqDeleteReaction. + QAction* tempDeleteAction = new QAction(this); + pqDeleteReaction* handler = new pqDeleteReaction(tempDeleteAction); + handler->connect(propertiesPanel, SIGNAL(deleteRequested(pqPipelineSource*)), SLOT(deleteSource(pqPipelineSource*))); + myDockWidgets[propertiesDock] = true; + propertiesDock->hide(); + + // Display dock + QDockWidget* displayPropertiesDock = new QDockWidget( tr( "TTL_DISPLAY" ), desk ); + displayPropertiesDock->setObjectName("displayPropertiesDock"); + displayPropertiesDock->setAllowedAreas( Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea ); + desk->addDockWidget( Qt::LeftDockWidgetArea, displayPropertiesDock ); + + pqPropertiesPanel* displayPropertiesPanel = new pqPropertiesPanel(); + displayPropertiesPanel->setObjectName("displayPropertiesPanel"); + displayPropertiesPanel->setProperty("panelMode", QVariant(2)); // probably to have only the Display part + displayPropertiesDock->setWidget(displayPropertiesPanel); + myDockWidgets[displayPropertiesDock] = false; + displayPropertiesDock->hide(); + + // View dock + QDockWidget* viewPropertiesDock = new QDockWidget( tr( "TTL_VIEW_PANEL" ), desk ); + viewPropertiesDock->setObjectName("viewPropertiesDock"); + viewPropertiesDock->setAllowedAreas( Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea ); + desk->addDockWidget( Qt::LeftDockWidgetArea, viewPropertiesDock ); + + pqPropertiesPanel* viewPropertiesPanel = new pqPropertiesPanel(); + viewPropertiesPanel->setObjectName("viewPropertiesPanel"); + viewPropertiesPanel->setProperty("panelMode", QVariant(4)); // probably to have only the View part + viewPropertiesDock->setWidget(viewPropertiesPanel); + myDockWidgets[viewPropertiesDock] = false; + viewPropertiesDock->hide(); + + // Taken from ParaViewMainWindow.cxx: + int propertiesPanelMode = settings->value( + "GeneralSettings.PropertiesPanelMode", vtkPVGeneralSettings::ALL_IN_ONE).toInt(); + switch (propertiesPanelMode) + { + case vtkPVGeneralSettings::SEPARATE_DISPLAY_PROPERTIES: + viewPropertiesDock->hide(); + propertiesPanel->setPanelMode( + pqPropertiesPanel::SOURCE_PROPERTIES|pqPropertiesPanel::VIEW_PROPERTIES); + break; + + case vtkPVGeneralSettings::SEPARATE_VIEW_PROPERTIES: + displayPropertiesDock->hide(); + propertiesPanel->setPanelMode( + pqPropertiesPanel::SOURCE_PROPERTIES|pqPropertiesPanel::DISPLAY_PROPERTIES); + break; + + case vtkPVGeneralSettings::ALL_SEPARATE: + propertiesPanel->setPanelMode(pqPropertiesPanel::SOURCE_PROPERTIES); + break; + + case vtkPVGeneralSettings::ALL_IN_ONE: + default: + propertiesPanel->setPanelMode( + pqPropertiesPanel::SOURCE_PROPERTIES|pqPropertiesPanel::VIEW_PROPERTIES|pqPropertiesPanel::DISPLAY_PROPERTIES); + viewPropertiesDock->hide(); + displayPropertiesDock->hide(); + break; + } - - - - //Object inspector - QDockWidget* objectInspectorDock = new QDockWidget( tr( "TTL_OBJECT_INSPECTOR" ), desk ); - objectInspectorDock->setObjectName("objectInspectorDock"); - objectInspectorDock->setAllowedAreas( Qt::LeftDockWidgetArea|Qt::NoDockWidgetArea|Qt::RightDockWidgetArea ); - desk->addDockWidget( Qt::LeftDockWidgetArea, objectInspectorDock ); - - pqObjectInspectorWidget* objectInspectorWidget = new pqObjectInspectorWidget(objectInspectorDock); - objectInspectorDock->setObjectName("objectInspectorWidget"); - objectInspectorWidget->setShowOnAccept(true); - objectInspectorDock->setWidget(objectInspectorWidget); - connect( objectInspectorWidget, SIGNAL( helpRequested(const QString&, const QString&) ), this, SLOT( showHelpForProxy(const QString&, const QString&) ) ); - myDockWidgets[objectInspectorDock] = true; - - //Display Dock - QDockWidget* displayDock = new QDockWidget( tr( "TTL_DISPLAY" ), desk ); - displayDock->setObjectName("displayDock"); - QWidget* displayWidgetFrame = new QWidget(displayDock); - displayWidgetFrame->setObjectName("displayWidgetFrame"); - displayDock->setWidget(displayWidgetFrame); - - QScrollArea* displayScrollArea = new QScrollArea(displayWidgetFrame); - displayScrollArea->setObjectName("displayScrollArea"); - displayScrollArea->setWidgetResizable(true); - - QVBoxLayout* verticalLayout = new QVBoxLayout(displayWidgetFrame); - verticalLayout->setSpacing(0); - verticalLayout->setContentsMargins(0, 0, 0, 0); - - pqDisplayProxyEditorWidget* displayWidget = new pqDisplayProxyEditorWidget(displayDock); - displayWidget->setObjectName("displayWidget"); - displayScrollArea->setWidget(displayWidget); - verticalLayout->addWidget(displayScrollArea); - - myDockWidgets[displayDock] = true; - - // information dock + // Information dock QDockWidget* informationDock = new QDockWidget(tr( "TTL_INFORMATION" ), desk); informationDock->setObjectName("informationDock"); QWidget* informationWidgetFrame = new QWidget(informationDock); informationWidgetFrame->setObjectName("informationWidgetFrame"); - + QVBoxLayout* verticalLayout_2 = new QVBoxLayout(informationWidgetFrame); verticalLayout_2->setSpacing(0); verticalLayout_2->setContentsMargins(0, 0, 0, 0); @@ -188,10 +219,10 @@ void PVGUI_Module::setupDockWidgets() myDockWidgets[informationDock] = true; - desk->setTabPosition(Qt::LeftDockWidgetArea, QTabWidget::North); - desk->tabifyDockWidget(objectInspectorDock, displayDock); - desk->tabifyDockWidget(objectInspectorDock, informationDock); - objectInspectorDock->raise(); + desk->tabifyDockWidget(propertiesDock, viewPropertiesDock); + desk->tabifyDockWidget(propertiesDock, displayPropertiesDock); + desk->tabifyDockWidget(propertiesDock, informationDock); + propertiesDock->raise(); // Statistic View QDockWidget* statisticsViewDock = new QDockWidget( tr( "TTL_STATISTICS_VIEW" ), desk ); @@ -207,20 +238,28 @@ void PVGUI_Module::setupDockWidgets() QDockWidget* animationViewDock = new QDockWidget( tr( "TTL_ANIMATION_VIEW" ), desk ); animationViewDock->setObjectName("animationViewDock"); desk->addDockWidget( Qt::BottomDockWidgetArea, animationViewDock ); - pqPVAnimationWidget* animation_panel = new ResizeHelper(animationViewDock); //pqPVAnimationWidget + pqPVAnimationWidget* animation_panel = new ResizeHelper(animationViewDock); // [ABN] was resizeHelper animationViewDock->setWidget(animation_panel); myDockWidgets[animationViewDock] = false; // hidden by default desk->tabifyDockWidget(animationViewDock, statisticsViewDock); - // Selection view - QDockWidget* selectionInspectorDock = new QDockWidget( tr( "TTL_SELECTION_INSPECTOR" ), desk ); - selectionInspectorDock->setObjectName("selectionInspectorDock"); - selectionInspectorDock->setAllowedAreas( Qt::AllDockWidgetAreas ); - desk->addDockWidget( Qt::LeftDockWidgetArea, selectionInspectorDock ); - pqSelectionInspectorPanel* aSelInspector = new pqSelectionInspectorWidget(selectionInspectorDock); - selectionInspectorDock->setWidget(aSelInspector); - myDockWidgets[selectionInspectorDock] = false; // hidden by default + // Selection inspector + QDockWidget* selectionDisplayDock = new QDockWidget( tr( "TTL_SELECTION_INSPECTOR" ), desk ); + selectionDisplayDock->setObjectName("selectionInspectorDock"); + selectionDisplayDock->setAllowedAreas( Qt::AllDockWidgetAreas ); + desk->addDockWidget( Qt::LeftDockWidgetArea, selectionDisplayDock ); + pqFindDataSelectionDisplayFrame* aSelInspector = new pqFindDataSelectionDisplayFrame(selectionDisplayDock); + selectionDisplayDock->setWidget(aSelInspector); + myDockWidgets[selectionDisplayDock] = false; // hidden by default + + // Multi-block inspector + QDockWidget* multiBlockInspectorPanelDock = new QDockWidget( tr( "TTL_MUTLI_BLOCK_INSPECTOR" ), desk ); + multiBlockInspectorPanelDock->setObjectName("multiBlockInspectorPanelDock"); + desk->addDockWidget( Qt::LeftDockWidgetArea, multiBlockInspectorPanelDock ); + pqMultiBlockInspectorPanel* mbi_panel = new pqMultiBlockInspectorPanel( multiBlockInspectorPanelDock ); + multiBlockInspectorPanelDock->setWidget(mbi_panel); + myDockWidgets[multiBlockInspectorPanelDock] = false; // hidden by default // Comparative View QDockWidget* comparativePanelDock = new QDockWidget( tr( "TTL_COMPARATIVE_VIEW_INSPECTOR" ), desk ); @@ -238,13 +277,27 @@ void PVGUI_Module::setupDockWidgets() collaborationPanelDock->setWidget(collaborationPanel); desk->addDockWidget(Qt::RightDockWidgetArea, collaborationPanelDock); myDockWidgets[collaborationPanelDock] = false; // hidden by default + + // Color map editor + QDockWidget* colorMapEditorDock = new QDockWidget( tr( "TTL_COLOR_MAP_EDITOR" ), desk ); + colorMapEditorDock->setObjectName("colorMapEditorDock"); + desk->addDockWidget( Qt::LeftDockWidgetArea, colorMapEditorDock ); + pqColorMapEditor* cmed_panel = new pqColorMapEditor( colorMapEditorDock ); + colorMapEditorDock->setWidget(cmed_panel); + myDockWidgets[colorMapEditorDock] = false; // hidden by default + + // Provide access to the color-editor panel for the application. + pqApplicationCore::instance()->registerManager( + "COLOR_EDITOR_PANEL", colorMapEditorDock); // Memory inspector dock QDockWidget* memoryInspectorDock = new QDockWidget(tr( "TTL_MEMORY_INSPECTOR" ), desk); memoryInspectorDock->setObjectName("memoryInspectorDock"); +#ifndef WIN32 pqMemoryInspectorPanel* dockWidgetContents = new pqMemoryInspectorPanel(); dockWidgetContents->setObjectName("dockWidgetContents"); memoryInspectorDock->setWidget(dockWidgetContents); +#endif desk->addDockWidget(Qt::RightDockWidgetArea, memoryInspectorDock); myDockWidgets[memoryInspectorDock] = false; // hidden by default @@ -273,29 +326,24 @@ void PVGUI_Module::setupDockWidgets() aProgress->setEnabled(true); // Set up the dock window corners to give the vertical docks more room. - desk->setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea); - desk->setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea); - +// desk->setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea); +// desk->setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea); + // Setup the default dock configuration ... statisticsViewDock->hide(); comparativePanelDock->hide(); animationViewDock->hide(); - selectionInspectorDock->hide(); + multiBlockInspectorPanelDock->hide(); + selectionDisplayDock->hide(); collaborationPanelDock->hide(); memoryInspectorDock->hide(); - - // Setup quick-launch shortcuts. - QShortcut *ctrlSpace = new QShortcut(Qt::CTRL + Qt::Key_Space, desk); - QObject::connect(ctrlSpace, SIGNAL(activated()), pqApplicationCore::instance(), SLOT(quickLaunch())); - QShortcut *altSpace = new QShortcut(Qt::ALT + Qt::Key_Space, desk); - QObject::connect(altSpace, SIGNAL(activated()), pqApplicationCore::instance(), SLOT(quickLaunch())); - + colorMapEditorDock->hide(); } /*! \brief Save states of dockable ParaView widgets. */ -void PVGUI_Module::saveDockWidgetsState() +void PVGUI_Module::saveDockWidgetsState(bool hideWidgets) { SUIT_Desktop* desk = application()->desktop(); @@ -314,8 +362,10 @@ void PVGUI_Module::saveDockWidgetsState() it1.next(); QDockWidget* dw = qobject_cast( it1.key() ); myDockWidgets[dw] = dw->isVisible(); - dw->setVisible( false ); - dw->toggleViewAction()->setVisible( false ); + if ( hideWidgets ) { + dw->setVisible( false ); + dw->toggleViewAction()->setVisible( false ); + } } // store toolbar breaks state and remove all tollbar breaks QMapIterator it2( myToolbarBreaks ); @@ -323,7 +373,7 @@ void PVGUI_Module::saveDockWidgetsState() it2.next(); QToolBar* tb = qobject_cast( it2.key() ); myToolbarBreaks[tb] = desk->toolBarBreak( tb ); - if ( myToolbarBreaks[tb] ) + if ( myToolbarBreaks[tb] && hideWidgets ) desk->removeToolBarBreak( tb ); } // store toolbars visibility state and hide'em all @@ -332,8 +382,10 @@ void PVGUI_Module::saveDockWidgetsState() it3.next(); QToolBar* tb = qobject_cast( it3.key() ); myToolbars[tb] = tb->isVisible(); - tb->setVisible( false ); - tb->toggleViewAction()->setVisible( false ); + if ( hideWidgets ) { + tb->setVisible( false ); + tb->toggleViewAction()->setVisible( false ); + } } } @@ -361,14 +413,16 @@ void PVGUI_Module::restoreDockWidgetsState() dw->setVisible( it1.value() ); dw->toggleViewAction()->setVisible( true ); } - // restore toolbar breaks state - QMapIterator it2( myToolbarBreaks ); - while( it2.hasNext() ) { - it2.next(); - QToolBar* tb = qobject_cast( it2.key() ); - if ( myToolbarBreaks[tb] ) - desk->insertToolBarBreak( tb ); - } + + // restore toolbar breaks state + QMapIterator it2( myToolbarBreaks ); + while( it2.hasNext() ) { + it2.next(); + QToolBar* tb = qobject_cast( it2.key() ); + if ( myToolbarBreaks[tb] ) + desk->insertToolBarBreak( tb ); + } + // restore toolbar visibility state QMapIterator it3( myToolbars ); while( it3.hasNext() ) { @@ -378,3 +432,75 @@ void PVGUI_Module::restoreDockWidgetsState() tb->toggleViewAction()->setVisible( true ); } } + + + +/*! + \brief Store visibility of the common dockable windows (OB, PyConsole, ... etc.) +*/ +void PVGUI_Module::storeCommonWindowsState() { + //rnv: Make behaviour of the dockable windows and toolbars coherent with others + // modules: if 'Save position of the windows' or 'Save position of the toolbars' + // in the General SALOME preferences are cheked, then properties of the windows and/or toolbars + // are stored/restored using standard Qt saveState(...) and restoreState(...) methods. + // Otherwise to the windows and toolbars applied default settins stored int the SalomeApp.xml + // configuration file. + // + // But in contrast to others modules ParaVis module default settings hide some dockable + // windows, so to restore it at the moment of the ParaVis de-activation we call + // restoreCommonWindowsState() method, and at the moment of the ParaVis activation we call + // this method. + + //LightApp_Application* anApp = getApp(); + SalomeApp_Application* anApp = getApp(); + if(!anApp) + return; + +// int begin = SalomeApp_Application::WT_ObjectBrowser; +// int end = SalomeApp_Application::WT_NoteBook; + int begin = LightApp_Application::WT_ObjectBrowser; + int end = LightApp_Application::WT_User; + for( int i = begin; i <= end; i++ ) { + QWidget* wg = anApp->getWindow(i); + if(wg) { + QDockWidget* dock = 0; + QWidget* w = wg->parentWidget(); + while ( w && !dock ) { + dock = ::qobject_cast( w ); + w = w->parentWidget(); + } + if(dock){ + if(!myCommonMap.contains(i)){ + myCommonMap.insert(i,dock->isVisible()); + } else { + myCommonMap[i] = dock->isVisible(); + } + } + } + } +} + +/*! + \brief Restore visibility of the common dockable windows (OB, PyConsole, ... etc.) +*/ +void PVGUI_Module::restoreCommonWindowsState() { + SalomeApp_Application* anApp = getApp(); +// LightApp_Application* anApp = getApp(); + if(!anApp) + return; + DockWindowMap::const_iterator it = myCommonMap.begin(); + for( ;it != myCommonMap.end(); it++ ) { + QWidget* wg = anApp->getWindow(it.key()); + if(wg) { + QDockWidget* dock = 0; + QWidget* w = wg->parentWidget(); + while ( w && !dock ) { + dock = ::qobject_cast( w ); + w = w->parentWidget(); + } + if(dock) { + dock->setVisible(it.value()); + } + } + } +}