1 // Copyright (C) 2007-2019 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, or (at your option) any later version.
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: LightApp_Module.cxx
24 // Created: 6/20/2005 16:30:56 AM
27 #include "LightApp_Module.h"
29 #include "CAM_Application.h"
31 #include "LightApp_Application.h"
32 #include "LightApp_DataModel.h"
33 #include "LightApp_DataObject.h"
34 #include "LightApp_Study.h"
35 #include "LightApp_Preferences.h"
36 #include "LightApp_Selection.h"
37 #include "LightApp_Operation.h"
38 #include "LightApp_SwitchOp.h"
39 #include "LightApp_UpdateFlags.h"
40 #include "LightApp_ShowHideOp.h"
41 #include "LightApp_SelectionMgr.h"
43 #include <SUIT_Study.h>
44 #include <SUIT_DataObject.h>
45 #include <SUIT_DataBrowser.h>
46 #include <SUIT_Operation.h>
47 #include <SUIT_ViewManager.h>
48 #include <SUIT_ResourceMgr.h>
49 #include <SUIT_ShortcutMgr.h>
50 #include <SUIT_Desktop.h>
51 #include <SUIT_TreeModel.h>
52 #include <SUIT_Session.h>
54 #ifndef DISABLE_SALOMEOBJECT
55 #include <SALOME_ListIO.hxx>
58 #ifndef DISABLE_VTKVIEWER
59 #ifndef DISABLE_SALOMEOBJECT
60 #include <SVTK_ViewWindow.h>
61 #include <SVTK_ViewModel.h>
63 #include <VTKViewer_ViewWindow.h>
65 #include <VTKViewer_ViewModel.h>
67 #ifndef DISABLE_OCCVIEWER
68 #include <OCCViewer_ViewWindow.h>
69 #include <OCCViewer_ViewPort3d.h>
70 #ifndef DISABLE_SALOMEOBJECT
71 #include <SOCC_ViewModel.h>
73 #include <OCCViewer_ViewModel.h>
76 #ifndef DISABLE_GLVIEWER
77 #include <GLViewer_ViewFrame.h>
78 #include <GLViewer_ViewPort.h>
80 #ifndef DISABLE_PVVIEWER
81 #include <PVViewer_ViewManager.h>
82 #include <PVViewer_ViewWindow.h>
84 #ifndef DISABLE_PLOT2DVIEWER
85 #include <Plot2d_ViewWindow.h>
86 #include <Plot2d_ViewFrame.h>
87 #ifndef DISABLE_SALOMEOBJECT
88 #include <SPlot2d_ViewModel.h>
90 #include <Plot2d_ViewModel.h>
94 #include <QtxPopupMgr.h>
98 #include <QStringList>
104 LightApp_Module::LightApp_Module( const QString& name )
105 : CAM_Module( name ),
112 myIsFirstActivate( true )
117 LightApp_Module::~LightApp_Module()
123 /*!Initialize module.*/
124 void LightApp_Module::initialize( CAM_Application* app )
126 CAM_Module::initialize( app );
128 SUIT_ResourceMgr* resMgr = app ? app->resourceMgr() : 0;
130 resMgr->raiseTranslators( name() );
134 void LightApp_Module::windows( QMap<int, int>& ) const
139 void LightApp_Module::viewManagers( QStringList& ) const
143 /*!Context menu popup.*/
144 void LightApp_Module::contextMenuPopup( const QString& client, QMenu* menu, QString& /*title*/ )
146 LightApp_Selection* sel = createSelection();
147 sel->init( client, getApp()->selectionMgr() );
149 popupMgr()->setSelection( sel );
150 popupMgr()->setMenu( menu );
151 popupMgr()->updateMenu();
152 popupMgr()->setSelection( 0 );
155 /*!Update object browser.
156 * For updating model or whole object browser use update() method can be used.
158 void LightApp_Module::updateObjBrowser( bool theIsUpdateDataModel,
159 SUIT_DataObject* theDataObject )
161 if (!getApp()->objectBrowser())
163 bool upd = getApp()->objectBrowser()->autoUpdate();
164 getApp()->objectBrowser()->setAutoUpdate( false );
166 if( theIsUpdateDataModel ){
167 if( CAM_DataModel* aDataModel = dataModel() ){
168 if ( LightApp_DataModel* aModel = dynamic_cast<LightApp_DataModel*>( aDataModel ) ) {
169 //SUIT_DataObject* aParent = NULL;
170 //if(theDataObject && theDataObject != aDataModel->root())
171 // aParent = theDataObject->parent();
173 LightApp_DataObject* anObject = dynamic_cast<LightApp_DataObject*>(theDataObject);
174 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>(getApp()->activeStudy());
175 aModel->update( anObject, aStudy );
180 getApp()->objectBrowser()->setAutoUpdate( upd );
181 getApp()->objectBrowser()->updateTree( 0, false );
185 void LightApp_Module::selectionChanged()
189 /*! \brief If return false, selection will be cleared at module activation
191 bool LightApp_Module::isSelectionCompatible()
193 // return true if selected objects belong to this module
194 bool isCompatible = true;
195 #ifndef DISABLE_SALOMEOBJECT
196 SALOME_ListIO selected;
197 if ( LightApp_SelectionMgr *Sel = getApp()->selectionMgr() )
198 Sel->selectedObjects( selected );
200 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( getApp()->activeStudy() );
201 LightApp_DataObject* aRoot = dynamic_cast<LightApp_DataObject*>( dataModel()->root() );
202 if ( aStudy && aRoot ) {
204 QString moduleDataType = aRoot->componentDataType();
205 // check data type of selection
206 SALOME_ListIteratorOfListIO It( selected );
207 for ( ; isCompatible && It.More(); It.Next()) {
208 Handle(SALOME_InteractiveObject) io = It.Value();
209 isCompatible = ( aStudy->componentDataType( io->getEntry() ) == moduleDataType );
216 /*!Activate module.*/
217 bool LightApp_Module::activateModule( SUIT_Study* study )
219 bool res = CAM_Module::activateModule( study );
221 if ( !isSelectionCompatible() )// PAL19290, PAL18352
222 getApp()->selectionMgr()->clearSelected();
224 if ( res && application() && application()->resourceMgr() )
225 application()->resourceMgr()->raiseTranslators( name() );
227 connect( application(), SIGNAL( viewManagerAdded( SUIT_ViewManager* ) ),
228 this, SLOT( onViewManagerAdded( SUIT_ViewManager* ) ) );
229 connect( application(), SIGNAL( viewManagerRemoved( SUIT_ViewManager* ) ),
230 this, SLOT( onViewManagerRemoved( SUIT_ViewManager* ) ) );
232 if ( mySwitchOp == 0 )
233 mySwitchOp = new LightApp_SwitchOp( this );
235 // Enable Display and Erase actions
236 if ( action(myDisplay) )
237 action(myDisplay)->setEnabled(true);
238 if ( action(myErase) )
239 action(myErase)->setEnabled(true);
241 application()->shortcutMgr()->setSectionEnabled( moduleName() );
243 /* BUG 0020498 : The Entry column is always shown at module activation
244 The registration of column is moved into LightApp_Application
246 QString EntryCol = QObject::tr( "ENTRY_COLUMN" );
247 LightApp_DataModel* m = dynamic_cast<LightApp_DataModel*>( dataModel() );
250 SUIT_AbstractModel* treeModel = dynamic_cast<SUIT_AbstractModel*>( getApp()->objectBrowser()->model() );
251 m->registerColumn( getApp()->objectBrowser(), EntryCol, LightApp_DataObject::EntryId );
252 treeModel->setAppropriate( EntryCol, Qtx::Toggled );
258 /*!Deactivate module.*/
259 bool LightApp_Module::deactivateModule( SUIT_Study* study )
264 disconnect( application(), SIGNAL( viewManagerAdded( SUIT_ViewManager* ) ),
265 this, SLOT( onViewManagerAdded( SUIT_ViewManager* ) ) );
266 disconnect( application(), SIGNAL( viewManagerRemoved( SUIT_ViewManager* ) ),
267 this, SLOT( onViewManagerRemoved( SUIT_ViewManager* ) ) );
269 // abort all operations
270 MapOfOperation::const_iterator anIt;
271 for( anIt = myOperations.begin(); anIt != myOperations.end(); anIt++ ) {
272 anIt.value()->abort();
275 // Disable Display and Erase action
276 if ( action(myDisplay) )
277 action(myDisplay)->setEnabled(false);
278 if ( action(myErase) )
279 action(myErase)->setEnabled(false);
281 application()->shortcutMgr()->setSectionEnabled( moduleName(), false );
283 /* BUG 0020498 : The Entry column is always shown at module activation
284 QString EntryCol = QObject::tr( "ENTRY_COLUMN" );
285 LightApp_DataModel* m = dynamic_cast<LightApp_DataModel*>( dataModel() );
288 SUIT_AbstractModel* treeModel = dynamic_cast<SUIT_AbstractModel*>( getApp()->objectBrowser()->model() );
290 treeModel->setAppropriate( EntryCol, Qtx::Shown );
291 m->unregisterColumn( getApp()->objectBrowser(), EntryCol );
294 return CAM_Module::deactivateModule( study );
297 /*! Redefined to reset internal flags valid for study instance */
298 void LightApp_Module::studyClosed( SUIT_Study* theStudy )
300 CAM_Module::studyClosed( theStudy );
302 myIsFirstActivate = true;
304 LightApp_Application* app = dynamic_cast<LightApp_Application*>(application());
306 SUIT_DataBrowser* ob = app->objectBrowser();
307 if ( ob && ob->model() )
308 disconnect( ob->model(), SIGNAL( clicked( SUIT_DataObject*, int ) ),
309 this, SLOT( onObjectClicked( SUIT_DataObject*, int ) ) );
314 void LightApp_Module::MenuItem()
319 void LightApp_Module::createPreferences()
324 void LightApp_Module::preferencesChanged( const QString&, const QString& )
329 void LightApp_Module::message( const QString& )
333 /*!Gets application.*/
334 LightApp_Application* LightApp_Module::getApp() const
336 return (LightApp_Application*)application();
340 * \brief Update something in accordance with update flags
341 * \param theFlags - update flags
343 * Update viewer or/and object browser etc. in accordance with update flags ( see
344 * LightApp_UpdateFlags enumeration ). Derived modules can redefine this method for their
347 void LightApp_Module::update( const int theFlags )
349 if ( theFlags & UF_Model )
351 if( CAM_DataModel* aDataModel = dataModel() )
352 if( LightApp_DataModel* aModel = dynamic_cast<LightApp_DataModel*>( aDataModel ) )
353 aModel->update( 0, dynamic_cast<LightApp_Study*>( getApp()->activeStudy() ) );
356 if ( theFlags & UF_ObjBrowser )
357 getApp()->objectBrowser()->updateTree( 0 );
359 if ( theFlags & UF_Controls )
361 if ( theFlags & UF_Viewer )
363 if ( SUIT_ViewManager* viewMgr = getApp()->activeViewManager() )
364 if ( SUIT_ViewWindow* viewWnd = viewMgr->getActiveView() )
366 #ifndef DISABLE_VTKVIEWER
367 #ifndef DISABLE_SALOMEOBJECT
368 if ( viewWnd->inherits( "SVTK_ViewWindow" ) )
369 ( (SVTK_ViewWindow*)viewWnd )->Repaint();
371 if ( viewWnd->inherits( "VTKViewer_ViewWindow" ) )
372 ( (VTKViewer_ViewWindow*)viewWnd )->Repaint();
375 #ifndef DISABLE_OCCVIEWER
376 if ( viewWnd->inherits( "OCCViewer_ViewWindow" ) )
377 ( (OCCViewer_ViewWindow*)viewWnd )->getViewPort()->onUpdate();
379 #ifndef DISABLE_PLOT2DVIEWER
380 if ( viewWnd->inherits( "Plot2d_ViewWindow" ) )
381 ( (Plot2d_ViewWindow*)viewWnd )->getViewFrame()->Repaint();
383 #ifndef DISABLE_GLVIEWER
384 if ( viewWnd->inherits( "GLViewer_ViewFrame" ) )
385 ( (GLViewer_ViewFrame*)viewWnd )->getViewPort()->onUpdate();
387 #ifndef DISABLE_PVVIEWER
388 // if ( viewWnd->inherits( "PVViewer_ViewWindow" ) )
389 // ( (PVViewer_ViewWindow*)viewWnd )->getViewPort()->onUpdate();
395 * \brief Updates controls
397 * Updates (i.e. disable/enable) controls states (menus, tool bars etc.). This method is
398 * called from update( UF_Controls ). You may redefine it in concrete module.
400 void LightApp_Module::updateControls()
404 /*!Create new instance of data model and return it.*/
405 CAM_DataModel* LightApp_Module::createDataModel()
407 return new LightApp_DataModel( this );
410 /*!Create and return instance of LightApp_Selection.*/
411 LightApp_Selection* LightApp_Module::createSelection() const
413 return new LightApp_Selection();
417 void LightApp_Module::onModelOpened()
422 void LightApp_Module::onModelSaved()
427 void LightApp_Module::onModelClosed()
431 /*!Gets popup manager.(create if not exist)*/
432 QtxPopupMgr* LightApp_Module::popupMgr()
436 myPopupMgr = new QtxPopupMgr( 0, this );
439 SUIT_Desktop* d = application()->desktop();
442 *disp = createAction( -1, tr( "TOP_SHOW" ), p, tr( "MEN_SHOW" ), tr( "STB_SHOW" ),
443 0, d, false, this, SLOT( onShowHide() ), QString("General:Show object(s)") ),
444 *erase = createAction( -1, tr( "TOP_HIDE" ), p, tr( "MEN_HIDE" ), tr( "STB_HIDE" ),
445 0, d, false, this, SLOT( onShowHide() ) , QString("General:Hide object(s)") ),
446 *dispOnly = createAction( -1, tr( "TOP_DISPLAY_ONLY" ), p, tr( "MEN_DISPLAY_ONLY" ), tr( "STB_DISPLAY_ONLY" ),
447 0, d, false, this, SLOT( onShowHide() ) ),
448 *eraseAll = createAction( -1, tr( "TOP_ERASE_ALL" ), p, tr( "MEN_ERASE_ALL" ), tr( "STB_ERASE_ALL" ),
449 0, d, false, this, SLOT( onShowHide() ) );
450 myDisplay = actionId( disp );
451 myErase = actionId( erase );
452 myDisplayOnly = actionId( dispOnly );
453 myEraseAll = actionId( eraseAll );
455 myPopupMgr->insert( disp, -1, 0 );
456 myPopupMgr->insert( erase, -1, 0 );
457 myPopupMgr->insert( dispOnly, -1, 0 );
458 myPopupMgr->insert( eraseAll, -1, 0 );
459 myPopupMgr->insert( separator(), -1, 0 );
461 QString oneAndNotActive = "( count( $component ) = 1 ) and ( not( activeModule in $component ) )";
462 QString uniform = "true in $canBeDisplayed and %1 and ( activeModule = '%2' )";
463 uniform = uniform.arg( oneAndNotActive ).arg( name() );
464 myPopupMgr->setRule( disp, /*QString( "( not isVisible ) and " ) + */ uniform, QtxPopupMgr::VisibleRule );
465 myPopupMgr->setRule( erase, /*QString( "( isVisible ) and " ) + */ uniform, QtxPopupMgr::VisibleRule );
466 myPopupMgr->setRule( dispOnly, uniform, QtxPopupMgr::VisibleRule );
470 #ifndef DISABLE_OCCVIEWER
471 #ifndef DISABLE_SALOMEOBJECT
472 viewers.append( SOCC_Viewer::Type() );
474 viewers.append( OCCViewer_Viewer::Type() );
477 #ifndef DISABLE_VTKVIEWER
478 #ifndef DISABLE_SALOMEOBJECT
479 viewers.append( SVTK_Viewer::Type() );
481 viewers.append( VTKViewer_Viewer::Type() );
484 #ifndef DISABLE_PLOT2DVIEWER
485 #ifndef DISABLE_SALOMEOBJECT
486 viewers.append( SPlot2d_Viewer::Type() );
488 viewers.append( Plot2d_Viewer::Type() );
492 if( !viewers.isEmpty() )
494 QString strViewers = "{ ", temp = "'%1' ";
495 QStringList::const_iterator anIt = viewers.begin(), aLast = viewers.end();
496 for( ; anIt!=aLast; anIt++ )
497 strViewers+=temp.arg( *anIt );
499 myPopupMgr->setRule( eraseAll, QString( "client in %1" ).arg( strViewers ), QtxPopupMgr::VisibleRule );
505 /*!Gets preferences.*/
506 LightApp_Preferences* LightApp_Module::preferences() const
508 LightApp_Preferences* pref = 0;
510 pref = getApp()->preferences();
514 /*!Add preference to preferences.*/
515 int LightApp_Module::addPreference( const QString& label )
517 LightApp_Preferences* pref = preferences();
521 int catId = pref->addPreference( moduleName(), -1 );
525 return pref->addPreference( label, catId );
528 /*!Add preference to preferences.*/
529 int LightApp_Module::addPreference( const QString& label, const int pId, const int type,
530 const QString& section, const QString& param )
532 LightApp_Preferences* pref = preferences();
536 return pref->addPreference( moduleName(), label, pId, type, section, param );
539 /*!Gets property of preferences.*/
540 QVariant LightApp_Module::preferenceProperty( const int id, const QString& prop ) const
543 LightApp_Preferences* pref = preferences();
545 var = pref->itemProperty( prop, id );
549 /*!Set property of preferences.*/
550 void LightApp_Module::setPreferenceProperty( const int id, const QString& prop, const QVariant& var )
552 LightApp_Preferences* pref = preferences();
554 pref->setItemProperty( prop, var, id );
558 * \brief Starts operation with given identifier
559 * \param id - identifier of operation to be started
561 * Module stores operations in map. This method starts operation by id.
562 * If operation isn't in map, then it will be created by createOperation method
563 * and will be inserted to map
565 void LightApp_Module::startOperation( const int id )
567 LightApp_Operation* op = 0;
568 if( myOperations.contains( id ) && reusableOperation( id ) )
569 op = myOperations[ id ];
572 op = createOperation( id );
575 myOperations.insert( id, op );
576 op->setModule( this );
577 connect( op, SIGNAL( stopped( SUIT_Operation* ) ), this, SLOT( onOperationStopped( SUIT_Operation* ) ) );
578 connect( op, SIGNAL( destroyed() ), this, SLOT( onOperationDestroyed() ) );
584 // be sure that operation has correct study pointer
585 op->setStudy( application() ? application()->activeStudy() : 0 );
591 * \brief Creates operation with given identifier
592 * \param id - identifier of operation to be started
593 * \return Pointer on created operation or NULL if operation is not created
595 * Creates operation with given id. You should not call this method, it will be called
596 * automatically from startOperation. You may redefine this method in concrete module to
599 LightApp_Operation* LightApp_Module::createOperation( const int id ) const
605 return new LightApp_ShowHideOp( LightApp_ShowHideOp::DISPLAY );
606 else if( id==myErase )
607 return new LightApp_ShowHideOp( LightApp_ShowHideOp::ERASE );
608 else if( id==myDisplayOnly )
609 return new LightApp_ShowHideOp( LightApp_ShowHideOp::DISPLAY_ONLY );
610 else if( id==myEraseAll )
611 return new LightApp_ShowHideOp( LightApp_ShowHideOp::ERASE_ALL );
617 * \brief Virtual protected slot called when operation stopped
618 * \param theOp - stopped operation
620 * Virtual protected slot called when operation stopped. Redefine this slot if you want to
621 * perform actions after stopping operation
623 void LightApp_Module::onOperationStopped( SUIT_Operation* /*theOp*/ )
628 * \brief Virtual protected slot called when operation destroyed
629 * \param theOp - destroyed operation
631 * Virtual protected slot called when operation destroyed. Redefine this slot if you want to
632 * perform actions after destroying operation. Base implementation removes pointer on
633 * destroyed operation from the map of operations
635 void LightApp_Module::onOperationDestroyed()
637 const QObject* s = sender();
638 if( s && s->inherits( "LightApp_Operation" ) )
640 const LightApp_Operation* op = ( LightApp_Operation* )s;
641 MapOfOperation::const_iterator anIt = myOperations.begin(),
642 aLast = myOperations.end();
643 for( ; anIt!=aLast; anIt++ )
644 if( anIt.value()==op )
646 myOperations.remove( anIt.key() );
653 Must be redefined in order to use standard displayer mechanism
654 \return displayer of module
656 LightApp_Displayer* LightApp_Module::displayer()
662 SLOT: called on activating of standard operations show/hide
664 void LightApp_Module::onShowHide()
666 if( !sender()->inherits( "QAction" ) || !popupMgr() )
669 QAction* act = ( QAction* )sender();
670 int id = actionId( act );
672 startOperation( id );
676 virtual SLOT: called on view manager adding
678 void LightApp_Module::onViewManagerAdded( SUIT_ViewManager* )
683 virtual SLOT: called on view manager removing
685 void LightApp_Module::onViewManagerRemoved( SUIT_ViewManager* )
690 \brief Returns instance of operation by its id; if there is no operation
691 corresponding to this id, null pointer is returned
692 \param id - operation id
693 \return operation instance
695 LightApp_Operation* LightApp_Module::operation( const int id ) const
697 return myOperations.contains( id ) ? myOperations[id] : 0;
701 virtual method called to manage the same operations
703 bool LightApp_Module::reusableOperation( const int id )
710 \return true if module can copy the current selection
712 bool LightApp_Module::canCopy() const
719 \return true if module can paste previously copied data
721 bool LightApp_Module::canPaste() const
728 \brief Copies the current selection into clipboard
730 void LightApp_Module::copy()
736 \brief Pastes the current data in the clipboard
738 void LightApp_Module::paste()
744 \return true if module allows dragging the given object
746 bool LightApp_Module::isDraggable( const SUIT_DataObject* /*what*/ ) const
753 \return true if module allows dropping one or more objects (currently selected) on the object \c where
755 bool LightApp_Module::isDropAccepted( const SUIT_DataObject* /*where*/ ) const
762 Complete drag-n-drop operation by processing objects \a what being dragged, dropped to the line \a row
763 within the object \a where. The drop action being performed is specified by \a action.
765 void LightApp_Module::dropObjects( const DataObjectList& /*what*/, SUIT_DataObject* /*where*/,
766 const int /*row*/, Qt::DropAction /*action*/ )
771 \brief Return \c true if object can be renamed
773 bool LightApp_Module::renameAllowed( const QString& /*entry*/ ) const
779 Rename object by entry.
780 \param entry entry of the object
781 \param name new name of the object
782 \brief Return \c true if rename operation finished successfully, \c false otherwise.
784 bool LightApp_Module::renameObject( const QString& /*entry*/, const QString& /*name*/ )
790 Update visibility state for data objects
792 void LightApp_Module::updateModuleVisibilityState()
794 // update visibility state of objects
795 LightApp_Application* app = dynamic_cast<LightApp_Application*>(SUIT_Session::session()->activeApplication());
798 SUIT_DataBrowser* ob = app->objectBrowser();
799 if ( !ob || !ob->model() ) return;
801 if ( !myIsFirstActivate )
804 myIsFirstActivate = false;
806 // connect to click on item
807 connect( ob->model(), SIGNAL( clicked( SUIT_DataObject*, int ) ),
808 this, SLOT( onObjectClicked( SUIT_DataObject*, int ) ), Qt::UniqueConnection );
809 // connect to click on item
810 connect( ob, SIGNAL( destroyed( QObject* ) ),
811 this, SLOT( onOBDestroyed() ), Qt::UniqueConnection );
813 SUIT_DataObject* rootObj = ob->root();
814 if ( !rootObj ) return;
816 DataObjectList listObj = rootObj->children( true );
818 SUIT_ViewModel* vmod = 0;
819 if ( SUIT_ViewManager* vman = app->activeViewManager() )
820 vmod = vman->getViewModel();
821 app->updateVisibilityState( listObj, vmod );
825 * \brief Virtual public slot
827 * This method is called after the object inserted into data view to update their visibility state
828 * This is default implementation
830 void LightApp_Module::onObjectClicked( SUIT_DataObject* theObject, int theColumn )
832 if ( !isActiveModule() ) return;
834 // change visibility of object
835 if ( !theObject || theColumn != SUIT_DataObject::VisibilityId ) return;
837 LightApp_Study* study = dynamic_cast<LightApp_Study*>( SUIT_Session::session()->activeApplication()->activeStudy() );
838 if ( !study ) return;
840 LightApp_DataObject* lo = dynamic_cast<LightApp_DataObject*>( theObject );
843 // detect action index (from LightApp level)
846 if ( study->visibilityState( lo->entry() ) == Qtx::ShownState )
848 else if ( study->visibilityState( lo->entry() ) == Qtx::HiddenState )
852 startOperation( id );
855 void LightApp_Module::onOBDestroyed()
857 myIsFirstActivate = true;