X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FPVGUI%2FPVGUI_Module.cxx;h=dcf2a70253be0a4987ecafb4270656f0cfc47f6d;hb=426d802b883d87c37928df9f874497c26518c56b;hp=f4d072bc8f568e145d4cf634fa1bb6d1f74b70e0;hpb=567d1f0ea0003a9b7978447cc619bf1ce8e9f79a;p=modules%2Fparavis.git diff --git a/src/PVGUI/PVGUI_Module.cxx b/src/PVGUI/PVGUI_Module.cxx index f4d072bc..dcf2a702 100644 --- a/src/PVGUI/PVGUI_Module.cxx +++ b/src/PVGUI/PVGUI_Module.cxx @@ -1,11 +1,11 @@ // PARAVIS : ParaView wrapper SALOME module // -// Copyright (C) 2010-2012 CEA/DEN, EDF R&D +// Copyright (C) 2010-2014 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 @@ -52,6 +52,7 @@ #include #include #include +#include // SALOME Includes #include "SALOME_LifeCycleCORBA.hxx" @@ -65,6 +66,7 @@ #include #include #include +#include #include #include @@ -101,6 +103,9 @@ #include #include #include +#include +#include +#include #include #include #include @@ -111,7 +116,7 @@ #include #include #include -#include +//#include #include #include #include @@ -121,11 +126,18 @@ #include #include #include +#include +#include +#include +#include +#include #include #include +#include + #include CORBA_SERVER_HEADER(SALOME_ModuleCatalog) /* @@ -135,18 +147,18 @@ * collect. */ -#include -#include -#include -#include -#include -#include -#include +//#include +//#include +//#include +//#include +//#include +//#include +//#include -#include -#include -#include -#include +//#include +//#include +//#include +//#include #include #include @@ -306,12 +318,23 @@ void vtkEDFHelperInit() { return aSComponent; } +/*! + Clean up function; used to stop ParaView progress events when + exception is caught by global exception handler. +*/ +void paravisCleanUp() +{ + if ( pqApplicationCore::instance() ) { + pqServer* s = pqApplicationCore::instance()->getActiveServer(); + if ( s ) s->session()->GetProgressHandler()->CleanupPendingProgress(); + } +} + /*! \brief Constructor. Sets the default name for the module. */ PVGUI_Module::PVGUI_Module() : SalomeApp_Module( "PARAVIS" ), - LightApp_Module( "PARAVIS" ), // Implementation( 0 ), mySelectionControlsTb( -1 ), mySourcesMenuId( -1 ), @@ -328,15 +351,18 @@ PVGUI_Module::PVGUI_Module() #endif ParavisModule = this; - // Clear old macros + // Clear old copies of embedded macros files QString aDestPath = QString( "%1/.config/%2/Macros" ).arg( QDir::homePath() ).arg( QApplication::applicationName() ); QStringList aFilter; aFilter << "*.py"; QDir aDestDir(aDestPath); QStringList aDestFiles = aDestDir.entryList(aFilter, QDir::Files); - foreach (QString aStr, aDestFiles) { - aDestDir.remove(aStr); + foreach (QString aMacrosPath, getEmbeddedMacrosList()) { + QString aMacrosName = QFileInfo(aMacrosPath).fileName(); + if (aDestFiles.contains(aMacrosName)) { + aDestDir.remove(aMacrosName); + } } } @@ -355,6 +381,9 @@ PVGUI_Module::~PVGUI_Module() */ void PVGUI_Module::initialize( CAM_Application* app ) { + //VTN: Disable conflict with python initialization for MatPlot. + PVGUI_MatplotlibMathTextUtilities::Disable(); + SalomeApp_Module::initialize( app ); // Create ParaViS actions @@ -393,6 +422,9 @@ void PVGUI_Module::initialize( CAM_Application* app ) pvCreateToolBars(); pvCreateMenus(); + QList activeDocks = aDesktop->findChildren(); + QList activeMenus = aDesktop->findChildren(); + // new pqParaViewBehaviors(anApp->desktop(), this); // Has to be replaced in order to exclude using of pqQtMessageHandlerBehaviour // Start pqParaViewBehaviors @@ -403,6 +435,7 @@ void PVGUI_Module::initialize( CAM_Application* app ) // * adds support for standard paraview views. pgm->addInterface(new pqStandardViewModules(pgm)); pgm->addInterface(new pqStandardSummaryPanelImplementation(pgm)); + pgm->addInterface(new pqStandardPropertyWidgetInterface(pgm)); // Load plugins distributed with application. pqApplicationCore::instance()->loadDistributedPlugins(); @@ -428,16 +461,32 @@ void PVGUI_Module::initialize( CAM_Application* app ) new pqPersistentMainWindowStateBehavior(aDesktop); new pqObjectPickingBehavior(aDesktop); new pqCollaborationBehavior(this); + new pqMultiServerBehavior(this); + new pqViewStreamingBehavior(this); // Setup quick-launch shortcuts. QShortcut *ctrlSpace = new QShortcut(Qt::CTRL + Qt::Key_Space, aDesktop); QObject::connect(ctrlSpace, SIGNAL(activated()), pqApplicationCore::instance(), SLOT(quickLaunch())); - QShortcut *altSpace = new QShortcut(Qt::ALT + Qt::Key_Space, aDesktop); - QObject::connect(altSpace, SIGNAL(activated()), - pqApplicationCore::instance(), SLOT(quickLaunch())); - // End pqParaViewBehaviors + // Find Plugin Dock Widgets + QList currentDocks = aDesktop->findChildren(); + QList::iterator i; + for (i = currentDocks.begin(); i != currentDocks.end(); ++i) { + if(!activeDocks.contains(*i)) { + myDockWidgets[*i] = false; // hidden by default + (*i)->hide(); + } + } + + // Find Plugin Menus + QList currentMenus = aDesktop->findChildren(); + QList::iterator im; + for (im = currentMenus.begin(); im != currentMenus.end(); ++im) { + if(!activeMenus.contains(*im)) { + myMenus.append(*im); + } + } SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); QString aPath = resMgr->stringValue("resources", "PARAVIS", QString()); @@ -480,16 +529,24 @@ void PVGUI_Module::initialize( CAM_Application* app ) bool isStop = aResourceMgr->booleanValue( "PARAVIS", "stop_trace", false ); // start timer to activate trace in a proper moment if(!isStop) - startTimer( 50 ); + startTimer( 1000 ); this->VTKConnect = vtkEventQtSlotConnect::New(); + vtkProcessModule* pm = vtkProcessModule::GetProcessModule(); - - this->VTKConnect->Connect(pm, vtkCommand::StartEvent, - this, SLOT(onStartProgress())); - this->VTKConnect->Connect(pm, vtkCommand::EndEvent, - this, SLOT(onEndProgress())); - + if(pm) { + vtkPVSession* pvs = dynamic_cast(pm->GetSession()); + if(pvs) { + vtkPVProgressHandler* ph = pvs->GetProgressHandler(); + if(ph) { + this->VTKConnect->Connect(ph, vtkCommand::StartEvent, + this, SLOT(onStartProgress())); + this->VTKConnect->Connect(ph, vtkCommand::EndEvent, + this, SLOT(onEndProgress())); + } + } + } + connect(&pqActiveObjects::instance(), SIGNAL(representationChanged(pqRepresentation*)), this, SLOT(onRepresentationChanged(pqRepresentation*))); @@ -510,7 +567,7 @@ void PVGUI_Module::onFinishedAddingServer(pqServer* /*server*/) SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr(); bool isStop = aResourceMgr->booleanValue( "PARAVIS", "stop_trace", false ); if(!isStop) - startTimer( 50 ); + startTimer( 500 ); } void PVGUI_Module::onDataRepresentationCreated(pqDataRepresentation* data) { @@ -530,6 +587,15 @@ void PVGUI_Module::onDataRepresentationCreated(pqDataRepresentation* data) { if(lut_mgr) { lut_mgr->setScalarBarVisibility(data,visible); } + + connect(data, SIGNAL(dataUpdated()), this, SLOT(onDataRepresentationUpdated())); +} + +void PVGUI_Module::onDataRepresentationUpdated() { + SalomeApp_Study* activeStudy = dynamic_cast(application()->activeStudy()); + if(!activeStudy) return; + + activeStudy->Modified(); } void PVGUI_Module::onVariableChanged(pqVariableType t, const QString) { @@ -541,11 +607,6 @@ void PVGUI_Module::onVariableChanged(pqVariableType t, const QString) { if( t == VARIABLE_TYPE_NONE ) return; - pqDataRepresentation* data = colorWidget->getRepresentation(); - - if( !data->getLookupTable() ) - return; - SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr(); if(!aResourceMgr) @@ -556,23 +617,39 @@ void PVGUI_Module::onVariableChanged(pqVariableType t, const QString) { if(!visible) return; + /*//VTN: getRepresentation is protected + pqDataRepresentation* data = colorWidget->getRepresentation(); + + if( !data->getLookupTable() ) + return; + pqLookupTableManager* lut_mgr = pqApplicationCore::instance()->getLookupTableManager(); if(lut_mgr) { lut_mgr->setScalarBarVisibility(data,visible); } - -} + */ + pqColorToolbar* colorTooBar = qobject_cast(colorWidget->parent()); + if( !colorTooBar ) + return; + pqScalarBarVisibilityReaction* scalarBarVisibility = colorTooBar->findChild(); + if(scalarBarVisibility) { + scalarBarVisibility->setScalarBarVisibility(visible); + } +} -/*! - \brief Launches a tracing of current server -*/ -void PVGUI_Module::timerEvent(QTimerEvent* te ) +void PVGUI_Module::execPythonCommand(const QString& cmd, bool inSalomeConsole) { -#ifndef WNT - PyInterp_Dispatcher* aDispatcher = PyInterp_Dispatcher::Get(); - if ( !aDispatcher->IsBusy() ) { + if ( PyInterp_Dispatcher::Get()->IsBusy() ) return; + if ( inSalomeConsole ) { + SalomeApp_Application* app = + dynamic_cast< SalomeApp_Application* >(SUIT_Session::session()->activeApplication()); + PyConsole_Console* pyConsole = app->pythonConsole(); + if (pyConsole) + pyConsole->exec(cmd); + } + else { pqPythonManager* manager = qobject_cast ( pqApplicationCore::instance()->manager( "PYTHON_MANAGER" ) ); if ( manager ) { @@ -580,23 +657,29 @@ void PVGUI_Module::timerEvent(QTimerEvent* te ) if ( pyDiag ) { pqPythonShell* shell = pyDiag->shell(); if ( shell ) { - QString script = "from paraview import smtrace\nsmtrace.start_trace()\n"; - shell->executeScript(script); - killTimer( te->timerId() ); + shell->executeScript(cmd); } } } } +} + +/*! + \brief Launches a tracing of current server +*/ +void PVGUI_Module::timerEvent(QTimerEvent* te ) +{ +#ifndef WNT + execPythonCommand("from paraview import smtrace\nsmtrace.start_trace()\n", false); + killTimer( te->timerId() ); #endif } -void PVGUI_Module::updateMacros() +/*! + \brief Get list of embedded macros files +*/ +QStringList PVGUI_Module::getEmbeddedMacrosList() { - pqPythonManager* aPythonManager = pqPVApplicationCore::instance()->pythonManager(); - if(!aPythonManager) { - return; - } - QString aRootDir = getenv("PARAVIS_ROOT_DIR"); QString aSourcePath = aRootDir + "/bin/salome/Macro"; @@ -606,8 +689,22 @@ void PVGUI_Module::updateMacros() QDir aSourceDir(aSourcePath); QStringList aSourceFiles = aSourceDir.entryList(aFilter, QDir::Files); - foreach (QString aStr, aSourceFiles) { - aPythonManager->addMacro(aSourcePath + "/" + aStr); + QStringList aFullPathSourceFiles; + foreach (QString aMacrosName, aSourceFiles) { + aFullPathSourceFiles << aSourceDir.absoluteFilePath(aMacrosName); + } + return aFullPathSourceFiles; +} + +void PVGUI_Module::updateMacros() +{ + pqPythonManager* aPythonManager = pqPVApplicationCore::instance()->pythonManager(); + if(!aPythonManager) { + return; + } + + foreach (QString aStr, getEmbeddedMacrosList()) { + aPythonManager->addMacro(aStr); } } @@ -654,6 +751,7 @@ bool PVGUI_Module::pvInit() return false; } + /* VTN: Looks like trash. For porting see branded_paraview_initializer.cxx.in // Not sure why this is needed. Andy added this ages ago with comment saying // needed for Mac apps. Need to check that it's indeed still required. QDir dir(QApplication::applicationDirPath()); @@ -673,7 +771,7 @@ bool PVGUI_Module::pvInit() plugin_string = ""; plugin_list = plugin_string.split(';',QString::SkipEmptyParts); loader.loadPlugins(plugin_list, true); //quietly skip not-found plugins. - + */ // End of Initializer code vtkOutputWindow::SetInstance(PVGUI_OutputWindowAdapter::New()); @@ -786,6 +884,10 @@ static void ParavisMessageOutput(QtMsgType type, const char *msg) bool PVGUI_Module::activateModule( SUIT_Study* study ) { myOldMsgHandler = qInstallMsgHandler(ParavisMessageOutput); + + SUIT_ExceptionHandler::addCleanUpRoutine( paravisCleanUp ); + + storeCommonWindowsState(); bool isDone = SalomeApp_Module::activateModule( study ); if ( !isDone ) return false; @@ -800,15 +902,22 @@ bool PVGUI_Module::activateModule( SUIT_Study* study ) restoreDockWidgetsState(); - QMenu* aMenu = menuMgr()->findMenu( myRecentMenuId ); - if(aMenu) { - QList anActns = aMenu->actions(); - for (int i = 0; i < anActns.size(); ++i) { - QAction* a = anActns.at(i); - if(a) - a->setVisible(true); - } + QMenu* aMenu = menuMgr()->findMenu( myRecentMenuId ); + if(aMenu) { + QList anActns = aMenu->actions(); + for (int i = 0; i < anActns.size(); ++i) { + QAction* a = anActns.at(i); + if(a) + a->setVisible(true); } + } + + QList::iterator it; + for (it = myMenus.begin(); it != myMenus.end(); ++it) { + QAction* a = (*it)->menuAction(); + if(a) + a->setVisible(true); + } if ( myRecentMenuId != -1 ) menuMgr()->show(myRecentMenuId); @@ -826,15 +935,22 @@ bool PVGUI_Module::activateModule( SUIT_Study* study ) */ bool PVGUI_Module::deactivateModule( SUIT_Study* study ) { - QMenu* aMenu = menuMgr()->findMenu( myRecentMenuId ); - if(aMenu) { - QList anActns = aMenu->actions(); - for (int i = 0; i < anActns.size(); ++i) { - QAction* a = anActns.at(i); - if(a) - a->setVisible(false); - } + QMenu* aMenu = menuMgr()->findMenu( myRecentMenuId ); + if(aMenu) { + QList anActns = aMenu->actions(); + for (int i = 0; i < anActns.size(); ++i) { + QAction* a = anActns.at(i); + if(a) + a->setVisible(false); } + } + + QList::iterator it; + for (it = myMenus.begin(); it != myMenus.end(); ++it) { + QAction* a = (*it)->menuAction(); + if(a) + a->setVisible(false); + } QList aStreamingViews = application()->desktop()->findChildren("pqStreamingControls"); foreach(QDockWidget* aView, aStreamingViews) { @@ -858,9 +974,13 @@ bool PVGUI_Module::deactivateModule( SUIT_Study* study ) saveDockWidgetsState(); + SUIT_ExceptionHandler::removeCleanUpRoutine( paravisCleanUp ); + if (myOldMsgHandler) qInstallMsgHandler(myOldMsgHandler); + restoreCommonWindowsState(); + return SalomeApp_Module::deactivateModule( study ); } @@ -1232,6 +1352,9 @@ void PVGUI_Module::contextMenuPopup(const QString& theClient, QMenu* theMenu, QS } } +/*! + \brief. Show ParaView python trace. +*/ void PVGUI_Module::onShowTrace() { if (!myTraceWindow) { @@ -1243,6 +1366,18 @@ void PVGUI_Module::onShowTrace() myTraceWindow->activateWindow(); } + +/*! + \brief. Re-initialize ParaView python trace. +*/ +void PVGUI_Module::onRestartTrace() +{ + QString script = "from paraview import smtrace\n"; + script += "smtrace.stop_trace()\n"; + script += "smtrace.start_trace()\n"; + execPythonCommand(script, false); +} + /*! \brief Show ParaView view. */