1 // Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
23 // File: SalomeApp_Module.cxx
24 // Created: 10/25/2004 11:39:56 AM
25 // Author: Sergey LITONIN
27 #include "SalomeApp_Module.h"
28 #include "SalomeApp_DataModel.h"
29 #include "SalomeApp_Application.h"
30 #include "SalomeApp_Study.h"
31 #include "SalomeApp_DataObject.h"
33 #include "LightApp_Selection.h"
35 #include "CAM_DataModel.h"
37 // temporary commented
38 //#include "OB_Browser.h"
40 #include <SALOME_ListIO.hxx>
41 #include <SALOME_ListIteratorOfListIO.hxx>
42 #include <SALOME_InteractiveObject.hxx>
44 #include <LightApp_DataObject.h>
46 #include <SUIT_Session.h>
47 #include <SUIT_DataBrowser.h>
48 #include <SUIT_ViewManager.h>
49 #include <SUIT_MessageBox.h>
50 #include <SUIT_Desktop.h>
55 SalomeApp_Module::SalomeApp_Module( const QString& name )
56 : LightApp_Module( name ),
57 myIsFirstActivate( true )
62 SalomeApp_Module::~SalomeApp_Module()
66 /*!Gets application.*/
67 SalomeApp_Application* SalomeApp_Module::getApp() const
69 return (SalomeApp_Application*)application();
72 /*!Create new instance of data model and return it.*/
73 CAM_DataModel* SalomeApp_Module::createDataModel()
75 return new SalomeApp_DataModel(this);
78 /*!Create and return instance of LightApp_Selection.*/
79 LightApp_Selection* SalomeApp_Module::createSelection() const
81 return LightApp_Module::createSelection();
85 Converts objects-containers to list of objects, those are contained
86 Other objects must be added without conversion
87 \param source - source list of objects
88 \param dest - list of converted objects
90 void SalomeApp_Module::extractContainers( const SALOME_ListIO& source, SALOME_ListIO& dest ) const
92 SalomeApp_Study* study = dynamic_cast<SalomeApp_Study*>( SUIT_Session::session()->activeApplication()->activeStudy() );
99 SALOME_ListIteratorOfListIO anIt( source );
100 for( ; anIt.More(); anIt.Next() )
102 Handle( SALOME_InteractiveObject ) obj = anIt.Value();
103 if( obj->hasEntry() )
105 _PTR(SObject) SO = study->studyDS()->FindObjectID( obj->getEntry() );
106 if( SO && QString( SO->GetID().c_str() ) == SO->GetFatherComponent()->GetID().c_str() )
107 { //component is selected
108 _PTR(SComponent) SC( SO->GetFatherComponent() );
109 _PTR(ChildIterator) anIter ( study->studyDS()->NewChildIterator( SC ) );
110 anIter->InitEx( true );
111 while( anIter->More() )
113 _PTR(SObject) valSO ( anIter->Value() );
115 if( !valSO->ReferencedObject( refSO ) )
117 QString id = valSO->GetID().c_str(),
118 comp = SC->ComponentDataType().c_str(),
119 val = valSO->GetName().c_str();
121 Handle( SALOME_InteractiveObject ) new_obj =
122 new SALOME_InteractiveObject( id.toLatin1(), comp.toLatin1(), val.toLatin1() );
123 dest.Append( new_obj );
135 * \brief Virtual public
137 * This method is called just before the study document is saved, so the module has a possibility
138 * to store visual parameters in AttributeParameter attribut
140 void SalomeApp_Module::storeVisualParameters(int savePoint)
145 /*!Activate module.*/
146 bool SalomeApp_Module::activateModule( SUIT_Study* theStudy )
148 bool state = LightApp_Module::activateModule( theStudy );
150 if (!myIsFirstActivate)
153 updateModuleVisibilityState();
155 myIsFirstActivate = false;
161 * \brief Virtual public
163 * This method is called after the study document is opened, so the module has a possibility to restore
166 void SalomeApp_Module::restoreVisualParameters(int savePoint)
170 /*! Redefined to reset internal flags valid for study instance */
171 void SalomeApp_Module::studyClosed( SUIT_Study* theStudy )
173 LightApp_Module::studyClosed( theStudy );
175 myIsFirstActivate = true;
177 LightApp_Application* app = dynamic_cast<LightApp_Application*>(application());
181 SUIT_DataBrowser* ob = app->objectBrowser();
182 if (ob && ob->model())
183 disconnect( ob->model(), SIGNAL( clicked( SUIT_DataObject*, int ) ),
184 this, SLOT( onObjectClicked( SUIT_DataObject*, int ) ) );
189 * \brief Virtual public slot
191 * This method is called after the object inserted into data view to update their visibility state
192 * This is default implementation
194 void SalomeApp_Module::onObjectClicked( SUIT_DataObject* theObject, int theColumn )
196 if (!isActiveModule())
198 // change visibility of object
199 if (!theObject || theColumn != SUIT_DataObject::VisibilityId )
202 SalomeApp_Study* study = dynamic_cast<SalomeApp_Study*>( SUIT_Session::session()->activeApplication()->activeStudy() );
206 LightApp_DataObject* lo = dynamic_cast<LightApp_DataObject*>(theObject);
210 // detect action index (from LightApp level)
213 if ( study->visibilityState(lo->entry()) == Qtx::ShownState )
215 else if ( study->visibilityState(lo->entry()) == Qtx::HiddenState )
219 startOperation( id );
224 Called then study closed
226 void SalomeApp_Application::onStudyClosed( SUIT_Study* theStudy){
227 LightApp_Application::onStudyClosed(theStudy);
229 disconnect( this, SIGNAL( viewManagerRemoved( SUIT_ViewManager* ) ),
230 this, SLOT( onViewManagerRemoved( SUIT_ViewManager* ) ) );
234 void SalomeApp_Module::updateModuleVisibilityState() {
236 // update visibility state of objects
237 SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>(SUIT_Session::session()->activeApplication());
241 SUIT_DataBrowser* ob = app->objectBrowser();
242 if (!ob || !ob->model())
245 // connect to click on item
246 connect( ob->model(), SIGNAL( clicked( SUIT_DataObject*, int ) ),
247 this, SLOT( onObjectClicked( SUIT_DataObject*, int ) ), Qt::UniqueConnection );
249 SUIT_DataObject* rootObj = ob->root();
253 DataObjectList listObj = rootObj->children( true );
255 SUIT_ViewModel* vmod = 0;
256 if ( SUIT_ViewManager* vman = app->activeViewManager() )
257 vmod = vman->getViewModel();
258 app->updateVisibilityState( listObj, vmod );