#include <vtkActorCollection.h>
#include <OCCViewer_ViewModel.h>
+#include <VTKViewer_ViewModel.h>
#include <AIS.hxx>
#include <AIS_InteractiveObject.hxx>
bool GEOMGUI_Selection::isOCC() const
{
- SUIT_ViewWindow* window = SUIT_Session::session()->activeApplication()->desktop()->activeWindow();
- return ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
+ return activeViewType( OCCViewer_Viewer::Type() );
}
QString GEOMGUI_Selection::displayMode( const int index ) const
{
SALOME_View* view = GEOM_Displayer::GetActiveView();
- if ( view ) {
+ if ( view /*fix for 9320==>*/&& ( isOCC() || activeViewType( VTKViewer_Viewer::Type() ) ) ) {
SALOME_Prs* prs = view->CreatePrs( entry( index ) );
if ( prs ) {
if ( isOCC() ) { // assuming OCC
}
}
}
- else { // assuming VTK
+ else if ( activeViewType( VTKViewer_Viewer::Type() ) ) { // assuming VTK
SVTK_Prs* vtkPrs = (SVTK_Prs*) prs;
vtkActorCollection* lst = vtkPrs->GetObjects();
if ( lst ) {
return GEOM::GEOM_Object::_nil();
}
+SUIT_ViewWindow* activeVW()
+{
+ SUIT_Session* session = SUIT_Session::session();
+ if ( session ) {
+ SUIT_Application* app = session->activeApplication();
+ if ( app ) {
+ SUIT_Desktop* desk = app->desktop();
+ if ( desk )
+ return desk->activeWindow();
+ }
+ }
+ return 0;
+}
+
bool GEOMGUI_Selection::isActiveViewer() const
{
- return ( SUIT_Session::session()->activeApplication()->desktop()->activeWindow() != 0 );
+ return ( activeVW != 0 );
}
+bool GEOMGUI_Selection::activeViewType( const QString& type ) const
+{
+ SUIT_ViewWindow* win = activeVW();
+ if ( win ) {
+ SUIT_ViewManager* vm = win->getViewManager();
+ return ( vm && vm->getType() == type );
+ }
+ return false;
+}
dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
mgr->insert( action( 80311 ), dispmodeId, -1 ); // wireframe
mgr->setRule( action( 80311 ), "$client in {'OCCViewer' 'VTKViewer'} and selcount>0", true );
- mgr->setRule( action( 80311 ), "$displaymode in {'Wireframe'}", false );
+ mgr->setRule( action( 80311 ), "$client in {'OCCViewer' 'VTKViewer'} and $displaymode in {'Wireframe'}", false );
mgr->insert( action( 80312 ), dispmodeId, -1 ); // shading
mgr->setRule( action( 80312 ), "$client in {'OCCViewer' 'VTKViewer'} and selcount>0", true );
- mgr->setRule( action( 80312 ), "$displaymode in {'Shading'}", false );
+ mgr->setRule( action( 80312 ), "$client in {'OCCViewer' 'VTKViewer'} and $displaymode in {'Shading'}", false );
mgr->insert( separator(), -1, -1 ); // -----------
mgr->insert( action( 8032 ), -1, -1 ); // color
mgr->setRule( action( 8032 ), "$client in {'OCCViewer' 'VTKViewer'} and selcount>0", true );