-// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2022 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
// 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
#include <SUIT_ShortcutMgr.h>
#include <SUIT_Desktop.h>
#include <SUIT_TreeModel.h>
+#include <SUIT_Session.h>
#ifndef DISABLE_SALOMEOBJECT
#include <SALOME_ListIO.hxx>
-#include <SALOME_ListIteratorOfListIO.hxx>
#endif
#ifndef DISABLE_VTKVIEWER
#include <GLViewer_ViewFrame.h>
#include <GLViewer_ViewPort.h>
#endif
+#ifndef DISABLE_PVVIEWER
+ #include <PVViewer_ViewManager.h>
+ #include <PVViewer_ViewWindow.h>
+#endif
#ifndef DISABLE_PLOT2DVIEWER
#include <Plot2d_ViewWindow.h>
#include <Plot2d_ViewFrame.h>
#include <QVariant>
#include <QString>
#include <QStringList>
+#include <QAction>
#include <iostream>
myDisplay( -1 ),
myErase( -1 ),
myDisplayOnly( -1 ),
- myEraseAll( -1 )
+ myEraseAll( -1 ),
+ myIsFirstActivate( true )
{
}
popupMgr()->setSelection( sel );
popupMgr()->setMenu( menu );
popupMgr()->updateMenu();
+ popupMgr()->setSelection( 0 );
}
/*!Update object browser.
void LightApp_Module::updateObjBrowser( bool theIsUpdateDataModel,
SUIT_DataObject* theDataObject )
{
+ if (!getApp()->objectBrowser())
+ return;
bool upd = getApp()->objectBrowser()->autoUpdate();
getApp()->objectBrowser()->setAutoUpdate( false );
// check data type of selection
SALOME_ListIteratorOfListIO It( selected );
for ( ; isCompatible && It.More(); It.Next()) {
- Handle(SALOME_InteractiveObject)& io = It.Value();
+ Handle(SALOME_InteractiveObject) io = It.Value();
isCompatible = ( aStudy->componentDataType( io->getEntry() ) == moduleDataType );
}
}
m->registerColumn( getApp()->objectBrowser(), EntryCol, LightApp_DataObject::EntryId );
treeModel->setAppropriate( EntryCol, Qtx::Toggled );
}*/
+
return res;
}
return CAM_Module::deactivateModule( study );
}
+/*! Redefined to reset internal flags valid for study instance */
+void LightApp_Module::studyClosed( SUIT_Study* theStudy )
+{
+ CAM_Module::studyClosed( theStudy );
+
+ myIsFirstActivate = true;
+
+ LightApp_Application* app = dynamic_cast<LightApp_Application*>(application());
+ if ( app ) {
+ SUIT_DataBrowser* ob = app->objectBrowser();
+ if ( ob && ob->model() )
+ disconnect( ob->model(), SIGNAL( clicked( SUIT_DataObject*, int ) ),
+ this, SLOT( onObjectClicked( SUIT_DataObject*, int ) ) );
+ }
+}
+
/*!NOT IMPLEMENTED*/
void LightApp_Module::MenuItem()
{
}
+/*!NOT IMPLEMENTED*/
+void LightApp_Module::updateInfoPanel()
+{
+}
+
/*!NOT IMPLEMENTED*/
void LightApp_Module::createPreferences()
{
#ifndef DISABLE_GLVIEWER
if ( viewWnd->inherits( "GLViewer_ViewFrame" ) )
( (GLViewer_ViewFrame*)viewWnd )->getViewPort()->onUpdate();
+#endif
+#ifndef DISABLE_PVVIEWER
+// if ( viewWnd->inherits( "PVViewer_ViewWindow" ) )
+// ( (PVViewer_ViewWindow*)viewWnd )->getViewPort()->onUpdate();
#endif
}
}
myPopupMgr->insert( eraseAll, -1, 0 );
myPopupMgr->insert( separator(), -1, 0 );
- QString oneAndNotActive = "( count( $component ) = 1 ) and ( not( activeModule in $component ) )";
+ QString oneAndNotActive = "( count( $component ) = 1 ) and ( not( activeModule in $component ) ) and ( not($displayer={'%3'}) )";
QString uniform = "true in $canBeDisplayed and %1 and ( activeModule = '%2' )";
- uniform = uniform.arg( oneAndNotActive ).arg( name() );
+ uniform = uniform.arg( oneAndNotActive ).arg( name() ).arg( LightApp_Application::moduleDisplayer( name() ) );
myPopupMgr->setRule( disp, /*QString( "( not isVisible ) and " ) + */ uniform, QtxPopupMgr::VisibleRule );
myPopupMgr->setRule( erase, /*QString( "( isVisible ) and " ) + */ uniform, QtxPopupMgr::VisibleRule );
myPopupMgr->setRule( dispOnly, uniform, QtxPopupMgr::VisibleRule );
/*!
virtual method called to manage the same operations
*/
-bool LightApp_Module::reusableOperation( const int id )
+bool LightApp_Module::reusableOperation( const int /*id*/ )
{
return true;
}
{
return false;
}
+
+/*!
+ Update visibility state for data objects
+*/
+void LightApp_Module::updateModuleVisibilityState()
+{
+ // update visibility state of objects
+ LightApp_Application* app = dynamic_cast<LightApp_Application*>(SUIT_Session::session()->activeApplication());
+ if ( !app ) return;
+
+ SUIT_DataBrowser* ob = app->objectBrowser();
+ if ( !ob || !ob->model() ) return;
+
+ if ( !myIsFirstActivate )
+ return;
+
+ myIsFirstActivate = false;
+
+ // connect to click on item
+ connect( ob->model(), SIGNAL( clicked( SUIT_DataObject*, int ) ),
+ this, SLOT( onObjectClicked( SUIT_DataObject*, int ) ), Qt::UniqueConnection );
+ // connect to click on item
+ connect( ob, SIGNAL( destroyed( QObject* ) ),
+ this, SLOT( onOBDestroyed() ), Qt::UniqueConnection );
+
+ SUIT_DataObject* rootObj = ob->root();
+ if ( !rootObj ) return;
+
+ DataObjectList listObj = rootObj->children( true );
+
+ SUIT_ViewModel* vmod = 0;
+ if ( SUIT_ViewManager* vman = app->activeViewManager() )
+ vmod = vman->getViewModel();
+ app->updateVisibilityState( listObj, vmod );
+}
+
+/*!
+ * \brief Virtual public slot
+ *
+ * This method is called after the object inserted into data view to update their visibility state
+ * This is default implementation
+ */
+void LightApp_Module::onObjectClicked( SUIT_DataObject* theObject, int theColumn )
+{
+ if ( !isActiveModule() ) return;
+
+ // change visibility of object
+ if ( !theObject || theColumn != SUIT_DataObject::VisibilityId ) return;
+
+ LightApp_Study* study = dynamic_cast<LightApp_Study*>( SUIT_Session::session()->activeApplication()->activeStudy() );
+ if ( !study ) return;
+
+ LightApp_DataObject* lo = dynamic_cast<LightApp_DataObject*>( theObject );
+ if ( !lo ) return;
+
+ // detect action index (from LightApp level)
+ int id = -1;
+
+ if ( study->visibilityState( lo->entry() ) == Qtx::ShownState )
+ id = myErase;
+ else if ( study->visibilityState( lo->entry() ) == Qtx::HiddenState )
+ id = myDisplay;
+
+ if ( id != -1 )
+ startOperation( id );
+}
+
+void LightApp_Module::onOBDestroyed()
+{
+ myIsFirstActivate = true;
+}