X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FMEDCalc%2Fgui%2FMEDModule.cxx;h=d7fe92a037602ce0072bb5dd8e332a39651b911d;hb=b29346253f2ca9139088351013761a970e1647ba;hp=4278c0a9b45e80d96dcb79348d1672ba9b6612b1;hpb=438dc9f606e66c1bc9125a7e429e13aaeeec4564;p=modules%2Fmed.git diff --git a/src/MEDCalc/gui/MEDModule.cxx b/src/MEDCalc/gui/MEDModule.cxx index 4278c0a9b..d7fe92a03 100644 --- a/src/MEDCalc/gui/MEDModule.cxx +++ b/src/MEDCalc/gui/MEDModule.cxx @@ -41,18 +41,21 @@ #include #ifndef DISABLE_PVVIEWER -#include "PVViewer_ViewModel.h" -#include "PVViewer_GUIElements.h" +#include +#include #endif +#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), @@ -83,41 +86,62 @@ 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 ) ) { + if ( CORBA::is_nil( _MED_engine ) ) { Engines::EngineComponent_var comp = SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "MED" ); - myEngine = MED_ORB::MED_Gen::_narrow( comp ); + if (CORBA::is_nil( comp )) + STDLOG("Could not FindOrLoad_Component MED"); + _MED_engine = MED_ORB::MED_Gen::_narrow( comp ); + if (CORBA::is_nil( _MED_engine )) + STDLOG("Could not narrow MED engine"); } } +//void MEDModule::onEventLoopStarted() +//{ +// if(!getApp()->isMainEventLoopStarted()) +// { +// QTimer::singleShot(100, this, SLOT(onEventLoopStarted())); +// return; +// } +//} + void MEDModule::initialize( CAM_Application* app ) { // call the parent implementation SalomeApp_Module::initialize( app ); + 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() ); } @@ -169,7 +193,7 @@ MEDModule::createPreferences() bool MEDModule::activateModule( SUIT_Study* theStudy ) { - if ( CORBA::is_nil( myEngine ) ) + if ( CORBA::is_nil( _MED_engine ) ) return false; // call parent implementation @@ -187,6 +211,10 @@ MEDModule::activateModule( SUIT_Study* theStudy ) _presentationController->showDockWidgets(true); //this->setDockLayout(StandardApp_Module::DOCKLAYOUT_LEFT_VLARGE); + // Mark the start of the main event loop - important for test playback: +// QObject::connect(getApp(), SIGNAL(activated(SUIT_Application *)), this, SLOT(onEventLoopStarted(SUIT_Application *))); +// QTimer::singleShot(0, this, SLOT(onEventLoopStarted())); + // return the activation status return bOk; } @@ -194,6 +222,12 @@ MEDModule::activateModule( SUIT_Study* theStudy ) bool MEDModule::deactivateModule( SUIT_Study* theStudy ) { + // Clean up engine: + STDLOG("MEDModule::deactivateModule(): cleaning up engine side."); + _MED_engine->cleanUp(); + MEDFactoryClient::getFactory()->getPresentationManager()->cleanUp(); + MEDFactoryClient::getFactory()->getDataManager()->cleanUp(); + _workspaceController->showDockWidgets(false); _presentationController->showDockWidgets(false); //this->unsetDockLayout(); @@ -228,13 +262,18 @@ 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); +#endif connect(_datasourceController, SIGNAL(datasourceSignal(const DatasourceEvent*)), _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*))); @@ -244,10 +283,6 @@ MEDModule::createModuleWidgets() { connect(_workspaceController, SIGNAL(workspaceSignal(const MEDCALC::MedEvent*)), _presentationController, SLOT(processWorkspaceEvent(const MEDCALC::MedEvent*))); - - // 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(); } void @@ -265,6 +300,11 @@ MEDModule::initToolbars() QMetaObject::invokeMethod( pqPVApplicationCore::instance()->animationManager(), "activeSceneChanged", Q_ARG( pqAnimationScene*, pqPVApplicationCore::instance()->animationManager()->getActiveScene() ) ); + +#ifdef MED_HAS_QTTESTING + connect(_workspaceController, SIGNAL(workspaceSignal(const MEDCALC::MedEvent*)), + _testController, SLOT(processWorkspaceEvent(const MEDCALC::MedEvent*))); +#endif } void @@ -273,6 +313,9 @@ MEDModule::createModuleActions() { _workspaceController->createActions(); _presentationController->createActions(); _processingController->createActions(); +#ifdef MED_HAS_QTTESTING + _testController->createActions(); +#endif } int @@ -290,9 +333,15 @@ MEDModule::createStandardAction(const QString& label, if ( effToolTip.isEmpty() ) effToolTip = label; + QIcon ico; + if (iconName.isEmpty()) + ico = QIcon(); + else + ico = QIcon(resMgr->loadPixmap("MED", iconName)); + QAction* action = createAction(-1, label, - resMgr->loadPixmap("MED", iconName), + ico, label, effToolTip, 0, @@ -308,7 +357,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(); @@ -320,65 +369,121 @@ 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; + 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); - - // :TODO: - // get edited values from a popup widget - // get presentation - // call presentation edit function +// 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 +MEDModule::requestSALOMETermination() const +{ + STDLOG("Requesting SALOME termination!!"); + SUIT_Session::session()->closeSession( SUIT_Session::DONT_SAVE, 1 ); // killServers = True +} + + +//bool MEDModule::hasMainEventLoopStarted() const +//{ +// return _eventLoopStarted; +//}