X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FMEDCalc%2Fgui%2FMEDModule.cxx;h=81f42e91915665f1f6bf8ccfaecdfc1781759242;hb=aec2051b4624c4fdc835a901e30a4b7801022af5;hp=7b8ffb2e1f495267b9b9312023165e56067c8627;hpb=5d20e3407611c56597173037d1ebb118659a4f8d;p=modules%2Fmed.git diff --git a/src/MEDCalc/gui/MEDModule.cxx b/src/MEDCalc/gui/MEDModule.cxx index 7b8ffb2e1..81f42e919 100644 --- a/src/MEDCalc/gui/MEDModule.cxx +++ b/src/MEDCalc/gui/MEDModule.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2016 CEA/DEN, EDF R&D +// Copyright (C) 2007-2019 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 @@ -41,20 +41,28 @@ #include #ifndef DISABLE_PVVIEWER -#include "PVViewer_ViewModel.h" +#include +#include #endif -#include +#include "MEDFactoryClient.hxx" +#include "MEDPresentationManager_i.hxx" +#include #include +#include +#include + //! The only instance of the reference to engine -MED_ORB::MED_Gen_var MEDModule::myEngine; +MED_ORB::MED_Gen_var MEDModule::_MED_engine; MEDModule::MEDModule() : - SalomeApp_Module("MED"), _studyEditor(0), _datasourceController(0), _workspaceController(0), - _presentationController(0), _processingController(0) + SalomeApp_Module("FIELDS"), _studyEditor(0), + _datasourceController(0), _workspaceController(0), _presentationController(0), + _processingController(0), _pvGuiElements(0) { + STDLOG("MEDModule::MEDModule()"); // Note also that we can't use the getApp() function here because // the initialize(...) function has not been called yet. @@ -63,6 +71,12 @@ MEDModule::MEDModule() : MEDModule::~MEDModule() { + // Clean up engine: + STDLOG("MEDModule::~MEDModule(): cleaning up engine side."); + _MED_engine->cleanUp(); + MEDFactoryClient::getFactory()->getPresentationManager()->cleanUp(); + MEDFactoryClient::getFactory()->getDataManager()->cleanUp(); + if (_studyEditor) delete _studyEditor; if (_datasourceController) @@ -79,17 +93,21 @@ MED_ORB::MED_Gen_var MEDModule::engine() { init(); // initialize engine, if necessary - return myEngine; + return _MED_engine; } void MEDModule::init() { - // initialize MED module engine (load, if necessary) - if ( CORBA::is_nil( myEngine ) ) { + // initialize FIELDS module engine (load, if necessary) + if ( CORBA::is_nil( _MED_engine ) ) { Engines::EngineComponent_var comp = - SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "MED" ); - myEngine = MED_ORB::MED_Gen::_narrow( comp ); + SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "FIELDS" ); + if (CORBA::is_nil( comp )) + STDLOG("Could not FindOrLoad_Component FIELDS"); + _MED_engine = MED_ORB::MED_Gen::_narrow( comp ); + if (CORBA::is_nil( _MED_engine )) + STDLOG("Could not narrow FIELDS engine"); } } @@ -105,24 +123,36 @@ MEDModule::init() void MEDModule::initialize( CAM_Application* app ) { + STDLOG("MEDModule::initialize()"); // call the parent implementation SalomeApp_Module::initialize( app ); + if (! getApp()->objectBrowser()) + getApp()->getWindow(SalomeApp_Application::WT_ObjectBrowser); + + getApp()->objectBrowser()->setAutoOpenLevel(5); + if (app && app->desktop()) { connect((QObject*) (getApp()->objectBrowser()->treeView()), SIGNAL(doubleClicked(const QModelIndex&)), this, SLOT(onDblClick(const QModelIndex&))); + connect((QObject*) (getApp()->objectBrowser()->treeView()), SIGNAL(clicked(const QModelIndex&)), + this, SLOT(onClick(const QModelIndex&))); } // The following initializes the GUI widget and associated actions this->createModuleWidgets(); this->createModuleActions(); + + // Now that the workspace controller is created, ParaView core application has normally been started, + // and hidden GUI elements have been created. We can fire the VCR toolbar activation: + initToolbars(); } QString MEDModule::engineIOR() const { init(); // initialize engine, if necessary - CORBA::String_var anIOR = getApp()->orb()->object_to_string( myEngine.in() ); + CORBA::String_var anIOR = getApp()->orb()->object_to_string( _MED_engine.in() ); return QString( anIOR.in() ); } @@ -135,6 +165,7 @@ MEDModule::iconName() const void MEDModule::windows( QMap& theMap ) const { + STDLOG("MEDModule::windows()"); // want Object browser, in the left area theMap.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea ); @@ -174,7 +205,8 @@ MEDModule::createPreferences() bool MEDModule::activateModule( SUIT_Study* theStudy ) { - if ( CORBA::is_nil( myEngine ) ) + STDLOG("MEDModule::activateModule()"); + if ( CORBA::is_nil( _MED_engine ) ) return false; // call parent implementation @@ -203,6 +235,7 @@ MEDModule::activateModule( SUIT_Study* theStudy ) bool MEDModule::deactivateModule( SUIT_Study* theStudy ) { + STDLOG("MEDModule::deactivateModule()"); _workspaceController->showDockWidgets(false); _presentationController->showDockWidgets(false); //this->unsetDockLayout(); @@ -237,6 +270,8 @@ MEDModule::createModuleWidgets() { _xmedDataModel = new XmedDataModel(); _workspaceController->setDataModel(_xmedDataModel); _presentationController = new PresentationController(this); + // ABN: ultimately console driver should be owned by module: everyone needs it, not only WorkspaceController + _presentationController->setConsoleDriver(_workspaceController->getConsoleDriver()); _processingController = new ProcessingController(this); #ifdef MED_HAS_QTTESTING _testController = new TestController(this); @@ -246,7 +281,7 @@ MEDModule::createModuleWidgets() { _workspaceController, SLOT(processDatasourceEvent(const DatasourceEvent*))); connect(_presentationController, SIGNAL(presentationSignal(const PresentationEvent*)), - _workspaceController, SLOT(processPresentationEvent(const PresentationEvent*))); + _presentationController, SLOT(processPresentationEvent(const PresentationEvent*))); connect(_processingController, SIGNAL(processingSignal(const ProcessingEvent*)), _workspaceController, SLOT(processProcessingEvent(const ProcessingEvent*))); @@ -256,6 +291,23 @@ MEDModule::createModuleWidgets() { connect(_workspaceController, SIGNAL(workspaceSignal(const MEDCALC::MedEvent*)), _presentationController, SLOT(processWorkspaceEvent(const MEDCALC::MedEvent*))); +} + +void +MEDModule::initToolbars() +{ + // VCR and Time toolbars: + SUIT_Desktop* dsk = getApp()->desktop(); + _pvGuiElements = PVViewer_GUIElements::GetInstance(dsk); + + _pvGuiElements->getVCRToolbar(); // make sure VCR toolbar is built + _pvGuiElements->setToolBarVisible(false); + _pvGuiElements->setVCRTimeToolBarVisible(true); + + // Emit signal in order to make sure that animation scene is set - same trick as in PARAVIS module activation + QMetaObject::invokeMethod( pqPVApplicationCore::instance()->animationManager(), + "activeSceneChanged", + Q_ARG( pqAnimationScene*, pqPVApplicationCore::instance()->animationManager()->getActiveScene() ) ); #ifdef MED_HAS_QTTESTING connect(_workspaceController, SIGNAL(workspaceSignal(const MEDCALC::MedEvent*)), @@ -293,7 +345,7 @@ MEDModule::createStandardAction(const QString& label, if (iconName.isEmpty()) ico = QIcon(); else - ico = QIcon(resMgr->loadPixmap("MED", iconName)); + ico = QIcon(resMgr->loadPixmap("FIELDS", iconName)); QAction* action = createAction(-1, label, @@ -313,7 +365,7 @@ void MEDModule::addActionInPopupMenu(int actionId,const QString& menus,const QString& rule) { // _GBO_ for a fine customization of the rule (for example with a - // test on the type of the selected object), see the LIGTH module: + // test on the type of the selected object), see the LIGHT module: // implement "LightApp_Selection* createSelection() const;" int parentId = -1; QtxPopupMgr* mgr = this->popupMgr(); @@ -325,62 +377,110 @@ MEDModule::addActionInPopupMenu(int actionId,const QString& menus,const QString& mgr->setRule( this->action( actionId ), rule, QtxPopupMgr::VisibleRule ); } -MEDCALC::MEDPresentationViewMode -MEDModule::getSelectedViewMode() -{ - return _presentationController->getSelectedViewMode(); -} +//MEDCALC::ViewModeType +//MEDModule::getSelectedViewMode() const +//{ +// return _presentationController->getSelectedViewMode(); +//} +// +//MEDCALC::ColorMapType +//MEDModule::getSelectedColorMap() const +//{ +// return _presentationController->getSelectedColorMap(); +//} +// +//MEDCALC::ScalarBarRangeType +//MEDModule::getSelectedScalarBarRange() const +//{ +// return _presentationController->getSelectedScalarBarRange(); +//} -MEDCALC::MEDPresentationColorMap -MEDModule::getSelectedColorMap() -{ - return _presentationController->getSelectedColorMap(); -} -void -MEDModule::onDblClick(const QModelIndex& index) +/** + * Returns presentation name, type and ID from the currently selected presentation in the object + * browser. + */ +bool +MEDModule::itemClickGeneric(std::string & name, std::string & type, int & presId) const { DataObjectList dol = getApp()->objectBrowser()->getSelected(); if (dol.isEmpty()) - return; + return false; SalomeApp_DataObject* item = dynamic_cast(dol[0]); if (!item) - return; + return false; SalomeApp_DataModel *model = dynamic_cast(dataModel()); if (!model) - return; + return false; - if (item->componentDataType().toStdString() != "MED") - return; + if (item->componentDataType().toStdString() != "FIELDS") + return false; _PTR(SObject) obj = item->object(); _PTR(GenericAttribute) anAttribute; if (! obj->FindAttribute(anAttribute, "AttributeName")) - return; + return false; _PTR(AttributeName) attrName(anAttribute); - std::string name = attrName->Value(); + name = attrName->Value(); if (! obj->FindAttribute(anAttribute, "AttributeParameter")) - return; + return false; _PTR(AttributeParameter) attrParam(anAttribute); if (! attrParam->IsSet(IS_PRESENTATION, PT_BOOLEAN) || ! attrParam->GetBool(IS_PRESENTATION)) { // Not a presentation - return; + return false; } - if (!attrParam->IsSet(FIELD_ID, PT_INTEGER)) +// if (!attrParam->IsSet(FIELD_ID, PT_INTEGER)) +// return false; +// fieldId = attrParam->GetInt(FIELD_ID); + if (!attrParam->IsSet(PRESENTATION_ID, PT_INTEGER)) + return false; + presId = attrParam->GetInt(PRESENTATION_ID); + if (!attrParam->IsSet(PRESENTATION_TYPE, PT_STRING)) + return false; + type = attrParam->GetString(PRESENTATION_TYPE); + return true; +} + +void +MEDModule::onClick(const QModelIndex & index) +{ + int presId; + std::string name, type; + if (!itemClickGeneric(name, type, presId)) + { + // Not a presentation - clear widget: + emit presentationSelected(-1, QString(""), QString("")); + return; + } + +// STDLOG("Presentation selection"); +// std::ostringstream oss; +// oss << fieldId << " / " << presId; +// STDLOG(" - Field id / pres id: " + oss.str()); +// STDLOG(" - Presentation type: " + type); +// STDLOG(" - Presentation name: " + name); + + emit presentationSelected(presId, QString::fromStdString(type), QString::fromStdString(name) ); // caught by PresentationController +} + +void +MEDModule::onDblClick(const QModelIndex& index) +{ + int presId; + std::string name, type; + if (!itemClickGeneric(name, type, presId)) return; - int fieldId = attrParam->GetInt(FIELD_ID); - - STDLOG("Presentation edition: NOT IMPLEMENTED YET"); - STDLOG(" Presention infos:"); - STDLOG(" - Component: " + item->componentDataType().toStdString()); - STDLOG(" - Item entry: " + item->entry().toStdString()); - STDLOG(" - Item name: " + item->name().toStdString()); - std::ostringstream oss; - oss << fieldId; - STDLOG(" - Field id: " + oss.str()); - STDLOG(" - Presentation name: " + name); +// STDLOG("Presentation double click"); +// STDLOG(" Presentation infos:"); +// STDLOG(" - Component: " + item->componentDataType().toStdString()); +// STDLOG(" - Item entry: " + item->entry().toStdString()); +// STDLOG(" - Item name: " + item->name().toStdString()); +// std::ostringstream oss; +// oss << fieldId; +// STDLOG(" - Field id: " + oss.str()); +// STDLOG(" - Presentation name: " + name); } void @@ -395,3 +495,19 @@ MEDModule::requestSALOMETermination() const //{ // return _eventLoopStarted; //} + +int +MEDModule::getIntParamFromStudyEditor(SALOMEDS::SObject_var obj, const char* name) +{ + if (obj->_is_nil()) + return -1; + + SALOMEDS::GenericAttribute_var anAttr; + SALOMEDS::AttributeParameter_var aParam; + if ( obj->FindAttribute(anAttr,"AttributeParameter") ) { + aParam = SALOMEDS::AttributeParameter::_narrow(anAttr); + if (aParam->IsSet(name, PT_INTEGER)) + return aParam->GetInt(name); + } + return -1; +}