-// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2015 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 "LightApp_Application.h"
#include "LightApp_Module.h"
#include "LightApp_DataModel.h"
+#include "LightApp_DataOwner.h"
+#include "LightApp_Displayer.h"
#include "LightApp_Study.h"
#include "LightApp_Preferences.h"
#include "LightApp_PreferencesDlg.h"
#include "LightApp_WgViewModel.h"
#include "LightApp_FullScreenHelper.h"
-
#include <GUI_version.h>
-#include <Basics_OCCTVersion.hxx>
#include <SALOME_Event.h>
#include <QtxSearchTool.h>
#include <QtxWorkstack.h>
#include <QtxMap.h>
-#include <QtxWebBrowser.h>
#include <LogWindow.h>
#ifndef DISABLE_OCCVIEWER
#include <OCCViewer_ViewManager.h>
#include <OCCViewer_ViewFrame.h>
+ #include <OCCViewer_ViewPort3d.h>
#ifndef DISABLE_SALOMEOBJECT
#include <SOCC_ViewModel.h>
#else
#include "LightApp_GVSelector.h"
#endif
+#ifndef DISABLE_PVVIEWER
+ #include "PVViewer_ViewManager.h"
+ #include "PVViewer_ViewWindow.h"
+ #include "PVViewer_ViewModel.h"
+#endif
+
+#ifndef DISABLE_PYVIEWER
+ #include <PyViewer_ViewManager.h>
+ #include <PyViewer_ViewModel.h>
+ #include <PyViewer_ViewWindow.h>
+#endif
+
+
#define VISIBILITY_COLUMN_WIDTH 25
#include <QDir>
int LightApp_Application::lastStudyId = 0;
-
// Markers used to parse array with dockable windows and toolbars state.
// For more details please see the qdockarealayout.cpp && qtoolbararealayout.cpp
// in the Qt source code.
myAutoSaveTimer->setSingleShot( true );
connect( myAutoSaveTimer, SIGNAL( timeout() ), this, SLOT( onSaveDoc() ) );
+ //connect( this, SIGNAL( moving() ), this, SLOT( onMoved() ) );
+
SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
QPixmap aLogo = aResMgr->loadPixmap( "LightApp", tr( "APP_DEFAULT_ICO" ), false );
- QtxWebBrowser::setResourceManager( aResMgr );
- QtxWebBrowser::setData("browser:icon", aResMgr->loadPixmap( "LightApp", tr( "BROWSER_ICON" ) ) );
- QtxWebBrowser::setData("browser:title", tr( "BROWSER_TITLE" ) );
- QtxWebBrowser::setData("toolbar:title", tr( "BROWSER_TOOLBAR_TITLE" ) );
- QtxWebBrowser::setData("menu:file:title", tr( "BROWSER_FILEMENU" ) );
- QtxWebBrowser::setData("action:close:title", tr( "BROWSER_CLOSE" ) );
- QtxWebBrowser::setData("action:close:icon", aResMgr->loadPixmap( "LightApp", tr( "BROWSER_CLOSE_ICON" ) ) );
- QtxWebBrowser::setData("action:back:title", tr( "BROWSER_BACK" ) );
- QtxWebBrowser::setData("action:forward:title", tr( "BROWSER_FORWARD" ) );
- QtxWebBrowser::setData("action:find:title", tr( "BROWSER_FIND" ) );
- QtxWebBrowser::setData("action:findnext:title", tr( "BROWSER_FINDNEXT" ) );
- QtxWebBrowser::setData("action:findprev:title", tr( "BROWSER_FINDPREV" ) );
-
desktop()->setWindowIcon( aLogo );
desktop()->setDockableMenuBar( false );
desktop()->setDockableStatusBar( false );
#endif
connect( mySelMgr, SIGNAL( selectionChanged() ), this, SLOT( onSelection() ) );
+ connect( desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
+ this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ), Qt::UniqueConnection );
+ connect( this, SIGNAL( viewManagerRemoved( SUIT_ViewManager* ) ),
+ this, SLOT( onViewManagerRemoved( SUIT_ViewManager* ) ), Qt::UniqueConnection );
+
// Set existing font for the python console in resources
if( !aResMgr->hasValue( "PyConsole", "font" ) )
updateWindows();
updateViewManagers();
+ updateCommandsStatus();
putInfo( "" );
desktop()->statusBar()->showMessage( "" );
LightApp_EventFilter::Init();
}
+/*!Closeapplication.*/
+void LightApp_Application::closeApplication()
+{
+ QProcess::startDetached( "HelpBrowser",
+ QStringList() << QString( "--remove=%1" ).arg( QApplication::instance()->applicationPid() ) );
+
+ CAM_Application::closeApplication();
+}
+
/*!Gets application name.*/
QString LightApp_Application::applicationName() const
{
updateWindows();
updateViewManagers();
+ if ( activeStudy() && activeStudy()->root() && objectBrowser() ) {
+ if ( objectBrowser()->root() != activeStudy()->root() )
+ objectBrowser()->setRoot( activeStudy()->root() );
+ updateObjectBrowser( true );
+ }
return true;
}
createActionForViewer( NewQxSceneViewId, newWinMenu, QString::number( 4 ), Qt::ALT+Qt::Key_S );
#endif
#ifndef DISABLE_GRAPHICSVIEW
- createActionForViewer( NewGraphicsViewId, newWinMenu, QString::number( 5 ), Qt::ALT+Qt::Key_R );
+ createActionForViewer( NewGraphicsViewId, newWinMenu, QString::number( 5 ), Qt::ALT+Qt::Key_C );
+#endif
+#ifndef DISABLE_PVVIEWER
+ createActionForViewer( NewPVViewId, newWinMenu, QString::number( 6 ), Qt::ALT+Qt::Key_A );
+#endif
+#ifndef DISABLE_PYVIEWER
+ createActionForViewer( NewPyViewerId, newWinMenu, QString::number( 7 ), Qt::ALT+Qt::Key_Y );
#endif
createAction( RenameId, tr( "TOT_RENAME" ), QIcon(), tr( "MEN_DESK_RENAME" ), tr( "PRP_RENAME" ),
createMenu( StyleId, viewMenu, 20, -1 );
createMenu( FullScreenId, viewMenu, 20, -1 );
- int modTBar = createTool( tr( "INF_TOOLBAR_MODULES" ) );
+ int modTBar = createTool( tr( "INF_TOOLBAR_MODULES" ), // title (language-dependant)
+ QString( "SalomeModules" ) ); // name (language-independant)
createTool( ModulesListId, modTBar );
}
case NewGraphicsViewId:
type = GraphicsView_Viewer::Type();
break;
+#endif
+#ifndef DISABLE_PVVIEWER
+ case NewPVViewId:
+ type = PVViewer_Viewer::Type();
+ break;
+#endif
+#ifndef DISABLE_PYVIEWER
+ case NewPyViewerId:
+ type = PyViewer_Viewer::Type();
+ break;
#endif
}
*/
void LightApp_Application::onNewDoc()
{
- //asl: fix for 0020515
- if ( activeStudy() )
- saveDockWindowsState();
+#ifdef SINGLE_DESKTOP
+ if ( !checkExistingDoc() )
+ return;
+#endif
+ //asl: fix for 0020515
+ saveDockWindowsState();
+
CAM_Application::onNewDoc();
}
void LightApp_Application::onOpenDoc()
{
SUIT_Study* study = activeStudy();
- saveDockWindowsState();
-
+
+#ifdef SINGLE_DESKTOP
+ if ( !checkExistingDoc() )
+ return;
+#endif
+
CAM_Application::onOpenDoc();
-
+
if ( !study ) // new study will be create in THIS application
{
updateWindows();
*/
bool LightApp_Application::onOpenDoc( const QString& aName )
{
+#ifdef SINGLE_DESKTOP
+ if ( !checkExistingDoc() )
+ return false;
+#endif
+
+ saveDockWindowsState();
+
// We should take mru action first because this application instance can be deleted later.
QtxMRUAction* mru = ::qobject_cast<QtxMRUAction*>( action( MRUId ) );
-
+
bool res = CAM_Application::onOpenDoc( aName );
if ( mru )
if( a )
a->setEnabled( activeStudy() );
#endif
+
+#ifndef DISABLE_PVVIEWER
+ a = action( NewPVViewId );
+ if( a )
+ a->setEnabled( activeStudy() );
+#endif
+
+#ifndef DISABLE_PYVIEWER
+ a = action( NewPyViewerId );
+ if( a )
+ a->setEnabled( activeStudy() );
+#endif
}
/*!
}
}
else {
-#ifdef WIN32
- // On Win32 platform QWebKit of the Qt 4.6.3 hang up in case 'file://' protocol
- // is defined. On Linux platform QWebKit doesn't work correctly without 'file://' protocol.
- QtxWebBrowser::loadUrl(helpFile);
-#else
- QtxWebBrowser::loadUrl(QString("file://%1").arg(helpFile));
-#endif
+ QStringList parameters;
+ parameters << QString( "--language=%1" ).arg( resMgr->stringValue( "language", "language" ) );
+ parameters << QString( "--add=%1" ).arg( QApplication::instance()->applicationPid() );
+ parameters << helpFile;
+ QProcess::startDetached( "HelpBrowser", parameters );
}
}
}
}
else {
-#ifdef WIN32
- // On Win32 platform QWebKit of the Qt 4.6.3 hang up in case 'file://' protocol
- // is defined. On Linux platform QWebKit doesn't work correctly without 'file://' protocol.
- QtxWebBrowser::loadUrl(helpFile, context);
-#else
- QtxWebBrowser::loadUrl(QString("file://%1").arg(helpFile), context);
-#endif
-
+ QStringList parameters;
+ parameters << QString( "--language=%1" ).arg( resMgr->stringValue( "language", "language" ) );
+ parameters << QString( "--add=%1" ).arg( QApplication::instance()->applicationPid() );
+ parameters << QString( "%1#%2" ).arg( helpFile ).arg( context );
+ QProcess::startDetached( "HelpBrowser", parameters );
}
}
}
/*!
- Adds window to application.
- \param wid - QWidget
- \param flag - key for window
- \param studyId - study id
- Flag used how identificator of window in windows list.
+ SLOT: Performs some actions when dockable windows are triggered
*/
-/*
-void LightApp_Application::addWindow( QWidget* wid, const int flag, const int studyId )
+void LightApp_Application::onDockWindowVisibilityChanged( bool )
{
- if ( !wid )
- return;
-
- int sId = studyId;
- if ( sId < 0 )
- {
- if ( !activeStudy() )
- return;
- else
- sId = activeStudy()->id();
- }
-
- if ( !myWindows.contains( flag ) )
- {
- QMap<int, int> winMap;
- currentWindows( winMap );
-
- LightApp_WidgetContainer* newWC = new LightApp_WidgetContainer( flag, desktop() );
- connect( newWC, SIGNAL( destroyed ( QObject* ) ), this, SLOT( onWCDestroyed( QObject* ) ) );
- // asv: connecting a slot for storing visibility flag of a window
- connect( newWC, SIGNAL( visibilityChanged ( bool ) ), SLOT( onVisibilityChanged( bool ) ) );
- myWindows.insert( flag, newWC );
- if ( winMap.contains( flag ) ) {
- //desktop()->removeDockWidget( myWindows[flag] );
- desktop()->addDockWidget( (Qt::DockWidgetArea)winMap[flag], myWindows[flag] );
- }
-
- //myWindows[flag]->setResizeEnabled( true );
- myWindows[flag]->setFeatures( QDockWidget::AllDockWidgetFeatures );
- myWindows[flag]->setObjectName( QString( "dock_window_%1" ).arg( flag ) );
- //myWindows[flag]->setFixedExtentWidth( wid->width() );
- //myWindows[flag]->setFixedExtentHeight( wid->height() );
- myWindows[flag]->resize( wid->width(), wid->height() );
- }
-
- QFont f;
-#ifndef DISABLE_PYCONSOLE
- if( wid->inherits( "PyConsole_Console" ) )
- {
- if( resourceMgr()->hasValue( "PyConsole", "font" ) )
- f = resourceMgr()->fontValue( "PyConsole", "font" );
- else
- {
- f = ( ( PyConsole_Console* )wid )->font();
- resourceMgr()->setValue( "PyConsole", "font", f );
- }
- }
- else
-#endif
- f = wid->font();
-
- myWindows[flag]->insert( sId, wid );
- wid->setFont( f );
-
- setWindowShown( flag, !myWindows[flag]->isEmpty() );
}
-*/
QWidget* LightApp_Application::dockWindow( const int id ) const
{
connect( dock, SIGNAL( destroyed( QObject* ) ), this, SLOT( onWCDestroyed( QObject* ) ) );
dock->setFeatures( QDockWidget::AllDockWidgetFeatures );
- dock->setObjectName( QString( "window_%1" ).arg( id ) );
+ dock->setObjectName( wid->objectName().isEmpty() ? QString( "window_%1" ).arg( id ) :
+ QString( "%1Dock" ).arg( wid->objectName() ) );
dock->setWidget( wid );
+ dock->toggleViewAction()->setData( QVariant( wid->objectName() ) );
+ connect( dock->toggleViewAction(), SIGNAL( triggered( bool ) ),
+ this, SLOT( onDockWindowVisibilityChanged( bool ) ) );
QKeySequence accel = wid->property( "shortcut" ).value<QKeySequence>();
if ( !accel.isEmpty() )
if ( !aVM->getActiveView() )
aVM->createView();
else
- aVM->getActiveView()->setFocus();
+ desktop()->setActiveWindow( aVM->getActiveView() );
}
else if ( create )
aVM = createViewManager( vmType );
new LightApp_GVSelector( (GraphicsView_Viewer*)viewMgr->getViewModel(), mySelMgr );
}
#endif
+#ifndef DISABLE_PVVIEWER
+ if( vmType == PVViewer_Viewer::Type() )
+ {
+ if ( viewMgr = dynamic_cast<PVViewer_ViewManager*>( getViewManager( vmType, false ) ) ) {
+ viewMgr->getActiveView()->setFocus();
+ return 0;
+ } else {
+ viewMgr = new PVViewer_ViewManager( activeStudy(), desktop(), logWindow() );
+ }
+ }
+#endif
+#ifndef DISABLE_PYVIEWER
+ if( vmType == PyViewer_Viewer::Type() )
+ {
+ viewMgr = new PyViewer_ViewManager( activeStudy(), desktop() );
+ }
+#endif
#ifndef DISABLE_OCCVIEWER
if( vmType == OCCViewer_Viewer::Type() )
{
vm->setTrihedronSize( resMgr->doubleValue( "3DViewer", "trihedron_size", vm->trihedronSize() ),
resMgr->booleanValue( "3DViewer", "relative_size", vm->trihedronRelative() ));
vm->setInteractionStyle( resMgr->integerValue( "3DViewer", "navigation_mode", vm->interactionStyle() ) );
+ vm->setProjectionType( resMgr->integerValue( "OCCViewer", "projection_mode", vm->projectionType() ) );
+ #if OCC_VERSION_LARGE > 0x06090000
+ vm->setStereoType( resMgr->integerValue( "OCCViewer", "stereo_type", vm->stereoType() ) );
+ vm->setAnaglyphFilter( resMgr->integerValue( "OCCViewer", "anaglyph_filter", vm->anaglyphFilter() ) );
+ vm->setStereographicFocus( resMgr->integerValue( "OCCViewer", "focus_type", vm->stereographicFocusType() ),
+ resMgr->doubleValue( "OCCViewer", "focus_value", vm->stereographicFocusValue() ));
+ vm->setInterocularDistance( resMgr->integerValue( "OCCViewer", "iod_type", vm->interocularDistanceType() ),
+ resMgr->doubleValue( "OCCViewer", "iod_value", vm->interocularDistanceValue() ));
+
+ vm->setReverseStereo( resMgr->booleanValue( "OCCViewer", "reverse_stereo", vm->isReverseStereo() ) );
+ vm->setVSync( resMgr->booleanValue( "OCCViewer", "enable_vsync", vm->isVSync() ) );
+ vm->setQuadBufferSupport( resMgr->booleanValue( "OCCViewer", "enable_quad_buffer_support", vm->isQuadBufferSupport() ) );
+ #endif
vm->setZoomingStyle( resMgr->integerValue( "3DViewer", "zooming_mode", vm->zoomingStyle() ) );
vm->enablePreselection( resMgr->booleanValue( "OCCViewer", "enable_preselection", vm->isPreselectionEnabled() ) );
vm->enableSelection( resMgr->booleanValue( "OCCViewer", "enable_selection", vm->isSelectionEnabled() ) );
+ vm->setClippingColor( resMgr->colorValue( "OCCViewer", "clipping_color", vm->clippingColor() ) );
+ vm->setClippingTextureParams( resMgr->booleanValue( "OCCViewer", "clipping_use_default_texture", vm->isDefaultTextureUsed() ),
+ resMgr->stringValue( "OCCViewer", "clipping_texture", vm->clippingTexture() ),
+ resMgr->booleanValue( "OCCViewer", "clipping_modulate", vm->isTextureModulated() ),
+ resMgr->doubleValue( "OCCViewer", "clipping_scale", vm->clippingTextureScale() ) );
+
viewMgr->setViewModel( vm );// custom view model, which extends SALOME_View interface
new LightApp_OCCSelector( (OCCViewer_Viewer*)viewMgr->getViewModel(), mySelMgr );
if( vm )
{
vm->setProjectionMode( resMgr->integerValue( "VTKViewer", "projection_mode", vm->projectionMode() ) );
+ vm->setStereoType( resMgr->integerValue( "VTKViewer", "stereo_type", vm->stereoType() ) );
+ vm->setAnaglyphFilter( resMgr->integerValue( "VTKViewer", "anaglyph_filter", vm->anaglyphFilter() ) );
+ vm->setQuadBufferSupport( resMgr->booleanValue( "VTKViewer", "enable_quad_buffer_support", vm->isQuadBufferSupport() ) );
vm->setBackground( resMgr->backgroundValue( "VTKViewer", "background", vm->background() ) );
vm->setTrihedronSize( resMgr->doubleValue( "3DViewer", "trihedron_size", vm->trihedronSize() ),
resMgr->booleanValue( "3DViewer", "relative_size", vm->trihedronRelative() ) );
return vm;
}
+SUIT_ViewManager* LightApp_Application::createViewManager( SUIT_ViewModel* theModel )
+{
+ SUIT_ResourceMgr* resMgr = resourceMgr();
+
+ SUIT_ViewManager* vm = new SUIT_ViewManager( activeStudy(),
+ desktop(),
+ theModel );
+
+ QString vmType = vm->getType();
+
+ vm->setTitle( QString( "%1: %M - viewer %V" ).arg( vmType ) );
+
+ addViewManager( vm );
+ SUIT_ViewWindow* vw = vm->createViewWindow();
+ if ( vw && desktop() ) {
+ vw->resize( (int)( desktop()->width() * 0.6 ), (int)( desktop()->height() * 0.6 ) );
+ vw->setDropDownButtons( resMgr->booleanValue( "viewers", "drop_down_buttons", true ) );
+ }
+
+ if ( !vmType.isEmpty() && !myUserWmTypes.contains( vmType ) )
+ myUserWmTypes << vmType;
+
+ return vm;
+}
+
/*!
SLOT: Removes view manager from application
*/
if ( objectBrowser() )
objectBrowser()->openLevels();
+
+#ifndef DISABLE_PYCONSOLE
+ if( pythonConsole() )
+ getPyInterp()->initStudy();
+#endif
}
/*!
if ( objectBrowser() )
objectBrowser()->openLevels();
+#ifndef DISABLE_PYCONSOLE
+ if( pythonConsole() )
+ getPyInterp()->initStudy();
+#endif
+
emit studyOpened();
}
/*!Protected SLOT. On study closed.*/
void LightApp_Application::onStudyClosed( SUIT_Study* s )
{
+ /*
+ disconnect( this, SIGNAL( viewManagerRemoved( SUIT_ViewManager* ) ),
+ this, SLOT( onViewManagerRemoved( SUIT_ViewManager* ) ) );
+ */
+
// stop auto-save timer
myAutoSaveTimer->stop();
updateObjectBrowser( true );
}
+/*!Private SLOT. Update actions after rename object.*/
+void LightApp_Application::onRenamed()
+{
+ activeStudy()->Modified();
+ updateActions();
+}
+
+// IMN 08.07.2015 : issue 002556: Some stereo outputs are affected by window position.
+// To prevent reversion the window should be either aligned during movement and resize.
+/*!Private SLOT. Update actions after rename object.*/
+/*void LightApp_Application::onMoved()
+{
+ OCCViewer_ViewManager* viewMgr = 0;
+ viewMgr = dynamic_cast<OCCViewer_ViewManager*>( getViewManager( OCCViewer_Viewer::Type(), false ) );
+ if (viewMgr) {
+ OCCViewer_ViewWindow* view = 0;
+ view = dynamic_cast<OCCViewer_ViewWindow*>( viewMgr->getActiveView() );
+ if (view) {
+ view->getViewPort()->repaintViewAfterMove();
+ }
+ }
+}
+*/
/*!Private SLOT. Support drag-and-drop operation.*/
void LightApp_Application::onDropped( const QList<SUIT_DataObject*>& objects, SUIT_DataObject* parent, int row, Qt::DropAction action )
{
/*!Remove all windows from study.*/
void LightApp_Application::beforeCloseDoc( SUIT_Study* s )
{
+ saveDockWindowsState();
+
if ( SUIT_DataBrowser* ob = objectBrowser() )
ob->setModel(0);
if ( flag == WT_ObjectBrowser )
{
SUIT_DataBrowser* ob = new SUIT_DataBrowser( new LightApp_DataObject(), desktop() );
+ ob->setObjectName( "objectBrowser" );
ob->setSortMenuEnabled( true );
ob->setAutoUpdate( true );
if ( resMgr->hasValue( "ObjectBrowser", "auto_hide_search_tool" ) )
if ( proxyModel ) {
connect( proxyModel, SIGNAL( dropped( const QList<SUIT_DataObject*>&, SUIT_DataObject*, int, Qt::DropAction ) ),
this, SLOT( onDropped( const QList<SUIT_DataObject*>&, SUIT_DataObject*, int, Qt::DropAction ) ) );
+ connect( proxyModel, SIGNAL( renamed( SUIT_DataObject* ) ),
+ this, SLOT( onRenamed( ) ) );
+
}
// temporary commented
#ifndef DISABLE_PYCONSOLE
else if ( flag == WT_PyConsole )
{
- PyConsole_Console* pyCons = new PyConsole_EnhConsole( desktop(),new LightApp_PyInterp());
+ PyConsole_Console* pyCons = new PyConsole_EnhConsole( desktop(), getPyInterp() );
+ pyCons->setObjectName( "pythonConsole" );
pyCons->setWindowTitle( tr( "PYTHON_CONSOLE" ) );
pyCons->setFont(resourceMgr()->fontValue( "PyConsole", "font" ));
pyCons->setIsShowBanner(resourceMgr()->booleanValue( "PyConsole", "show_banner", true ));
else if ( flag == WT_LogWindow )
{
LogWindow* logWin = new LogWindow( desktop() );
+ logWin->setObjectName( "logWindow" );
logWin->setWindowTitle( tr( "LOG_WINDOW" ) );
logWin->setProperty( "shortcut", QKeySequence( "Alt+Shift+L" ) );
wid = logWin;
*/
void LightApp_Application::defaultWindows( QMap<int, int>& aMap ) const
{
- aMap.insert( WT_ObjectBrowser, Qt::LeftDockWidgetArea );
#ifndef DISABLE_PYCONSOLE
aMap.insert( WT_PyConsole, Qt::BottomDockWidgetArea );
#endif
- // aMap.insert( WT_LogWindow, Qt::DockBottom );
+ if ( activeStudy() ) {
+ aMap.insert( WT_ObjectBrowser, Qt::LeftDockWidgetArea );
+ // aMap.insert( WT_LogWindow, Qt::DockBottom );
+ }
}
/*!Default view managers*/
that->myPrefs = _prefs_;
connect( myPrefs, SIGNAL( preferenceChanged( QString&, QString&, QString& ) ),
- this, SLOT( onPreferenceChanged( QString&, QString&, QString& ) ) );
+ this, SLOT( onPreferenceChanged( QString&, QString&, QString& ) ), Qt::UniqueConnection );
+ connect( myPrefs, SIGNAL( resetToDefaults() ),
+ this, SIGNAL( preferenceResetToDefaults() ), Qt::UniqueConnection );
if ( !crt )
return myPrefs;
}
pref->setItemProperty( "strings", aLangs, curLang );
pref->setItemProperty( "icons", aIcons, curLang );
+ pref->setItemProperty( "restart", true, curLang );
+
+ int curLocale = pref->addPreference( tr( "PREF_CURRENT_LOCALE" ), langGroup,
+ LightApp_Preferences::Bool, "language", "locale" );
+ pref->setItemProperty( "restart", true, curLocale );
// ... "Language" group <<end>>
// ... "Look and feel" group <<start>>
pref->setItemProperty( "strings", aValuesList, mruLinkType );
pref->setItemProperty( "indexes", anIndicesList, mruLinkType );
// ... "MRU" preferences group <<end>>
+
+ // ... "Full-screen" group <<start>>
+ int fullScreenGroup = pref->addPreference( tr( "PREF_GROUP_FULL_SCREEN" ), genTab );
+ pref->setItemProperty( "columns", 2, fullScreenGroup );
+ // .... -> automatic hiding toolbars
+ pref->addPreference( tr( "PREF_FULL_SCREEN_AUTO" ), fullScreenGroup,
+ LightApp_Preferences::Bool, "OCCViewer", "automatic_hiding" );
+ // ... "Full-screen" group <<end>>
+
// .. "General" preferences tab <<end>>
// .. "3D viewer" group <<start>>
pref->setItemProperty( "strings", aValuesList, vtkStyleMode );
pref->setItemProperty( "indexes", anIndicesList, vtkStyleMode );
// ... -> zooming mode
- #if OCC_VERSION_LARGE > 0x0603000A // available only with OCC-6.3-sp11 and higher version
- int occZoomingStyleMode = pref->addPreference( tr( "PREF_ZOOMING" ), Viewer3DGroup,
- LightApp_Preferences::Selector, "3DViewer", "zooming_mode" );
- aValuesList.clear();
- anIndicesList.clear();
- aValuesList << tr("PREF_ZOOMING_AT_CENTER") << tr("PREF_ZOOMING_AT_CURSOR");
- anIndicesList << 0 << 1;
- pref->setItemProperty( "strings", aValuesList, occZoomingStyleMode );
- pref->setItemProperty( "indexes", anIndicesList, occZoomingStyleMode );
- #endif
+ int occZoomingStyleMode = pref->addPreference( tr( "PREF_ZOOMING" ), Viewer3DGroup,
+ LightApp_Preferences::Selector, "3DViewer", "zooming_mode" );
+ aValuesList.clear();
+ anIndicesList.clear();
+ aValuesList << tr("PREF_ZOOMING_AT_CENTER") << tr("PREF_ZOOMING_AT_CURSOR");
+ anIndicesList << 0 << 1;
+ pref->setItemProperty( "strings", aValuesList, occZoomingStyleMode );
+ pref->setItemProperty( "indexes", anIndicesList, occZoomingStyleMode );
// ... "Trihedron" group <<start>>
int occTriGroup = pref->addPreference( tr( "PREF_TRIHEDRON" ), Viewer3DGroup );
pref->setItemProperty( "columns", 2, occTriGroup );
// ... "Trihedron" group <<end>>
// .. "3D viewer" group <<end>>
+ QString formats;
+ int bgId;
+#ifndef DISABLE_OCCVIEWER
// .. "OCC viewer" group <<start>>
int occGroup = pref->addPreference( tr( "PREF_GROUP_OCCVIEWER" ), salomeCat );
+ // .... -> Projection mode
+ int occProjMode = pref->addPreference( tr( "PREF_PROJECTION_MODE" ), occGroup,
+ LightApp_Preferences::Selector, "OCCViewer", "projection_mode" );
+ aValuesList.clear();
+ anIndicesList.clear();
+ aValuesList << tr("PREF_ORTHOGRAPHIC") << tr("PREF_PERSPECTIVE");
+ anIndicesList << 0 << 1;
+ pref->setItemProperty( "strings", aValuesList, occProjMode );
+ pref->setItemProperty( "indexes", anIndicesList, occProjMode );
+#if OCC_VERSION_LARGE > 0x06090000
+ // .... -> Stereo group
+ int stereoGroup = pref->addPreference( tr( "PREF_GROUP_STEREO" ), occGroup);
+ pref->setItemProperty( "columns", 2, stereoGroup );
+ // .... -> Stereo type
+ int stereoType = pref->addPreference( tr( "PREF_STEREO_TYPE" ), stereoGroup,
+ LightApp_Preferences::Selector, "OCCViewer", "stereo_type" );
+ aValuesList.clear();
+ anIndicesList.clear();
+ idList.clear();
+ OCCViewer_Viewer::stereoData( aValuesList, idList);
+ foreach( int gid, idList ) anIndicesList << gid;
+ pref->setItemProperty( "strings", aValuesList, stereoType );
+ pref->setItemProperty( "indexes", anIndicesList, stereoType );
+
+ // .... -> Anaglyph filter
+ int anaglyphFilter = pref->addPreference( tr( "PREF_ANAGLYPH_FILTER" ), stereoGroup,
+ LightApp_Preferences::Selector, "OCCViewer", "anaglyph_filter" );
+ aValuesList.clear();
+ anIndicesList.clear();
+ aValuesList << tr("PREF_ANAGLYPH_RED_CYAN") << tr("PREF_ANAGLYPH_YELLOW_BLUE") << tr("PREF_ANAGLYPH_GREEN_MAGENTA");
+ anIndicesList << 0 << 1 << 2;
+
+ pref->setItemProperty( "strings", aValuesList, anaglyphFilter );
+ pref->setItemProperty( "indexes", anIndicesList, anaglyphFilter );
+
+ // .... -> Convergence distance type
+ int occFocusType = pref->addPreference( tr( "PREF_FOCUS_TYPE" ), stereoGroup,
+ LightApp_Preferences::Selector, "OCCViewer", "focus_type" );
+ aValuesList.clear();
+ anIndicesList.clear();
+ aValuesList << tr("PREF_ABSOLUTE") << tr("PREF_RELATIVE");
+ anIndicesList << 0 << 1;
+ pref->setItemProperty( "strings", aValuesList, occFocusType );
+ pref->setItemProperty( "indexes", anIndicesList, occFocusType );
+
+ // .... -> Stereographic focus value
+ int focusValue = pref->addPreference( tr( "PREF_FOCUS_VALUE" ), stereoGroup,
+ LightApp_Preferences::DblSpin, "OCCViewer", "focus_value" );
+ pref->setItemProperty( "precision", 3, focusValue );
+ pref->setItemProperty( "min", 1.0E-03, focusValue );
+ pref->setItemProperty( "max", 1.0E03, focusValue );
+ pref->setItemProperty( "step", 0.05, focusValue );
+
+ // .... -> IOD type
+ int occIODType = pref->addPreference( tr( "PREF_IOD_TYPE" ), stereoGroup,
+ LightApp_Preferences::Selector, "OCCViewer", "iod_type" );
+ aValuesList.clear();
+ anIndicesList.clear();
+ aValuesList << tr("PREF_ABSOLUTE") << tr("PREF_RELATIVE");
+ anIndicesList << 0 << 1;
+ pref->setItemProperty( "strings", aValuesList, occIODType );
+ pref->setItemProperty( "indexes", anIndicesList, occIODType );
+
+ // .... -> Interocular distance (IOD) value
+ int IODValue = pref->addPreference( tr( "PREF_IOD_VALUE" ), stereoGroup,
+ LightApp_Preferences::DblSpin, "OCCViewer", "iod_value" );
+ pref->setItemProperty( "precision", 3, IODValue );
+ pref->setItemProperty( "min", 1.0E-03, IODValue );
+ pref->setItemProperty( "max", 1.0E03, IODValue );
+ pref->setItemProperty( "step", 0.05, IODValue );
+
+ // .... -> Reverse stereo
+ pref->addPreference( tr( "PREF_REVERSE_STEREO" ), stereoGroup,
+ LightApp_Preferences::Bool, "OCCViewer", "reverse_stereo" );
+ // .... -> Enable V-Sync
+ pref->addPreference( tr( "PREF_ENABLE_VSYNC" ), stereoGroup,
+ LightApp_Preferences::Bool, "OCCViewer", "enable_vsync" );
+ // .... -> Enable quad-buffer support
+ pref->addPreference( tr( "PREF_ENABLE_QUAD_BUFFER_SUPPORT" ), stereoGroup,
+ LightApp_Preferences::Bool, "OCCViewer", "enable_quad_buffer_support" );
+#endif
// ... "Background" group <<start>>
int bgGroup = pref->addPreference( tr( "PREF_VIEWER_BACKGROUND" ), occGroup );
// pref->setItemProperty( "columns", 2, bgGroup );
aValuesList.clear();
anIndicesList.clear();
txtList.clear();
- QString formats = OCCViewer_Viewer::backgroundData( aValuesList, idList, txtList );
+ idList.clear();
+ formats = OCCViewer_Viewer::backgroundData( aValuesList, idList, txtList );
foreach( int gid, idList ) anIndicesList << gid;
// .... -> 3D viewer background
- int bgId = pref->addPreference( tr( "PREF_3DVIEWER_BACKGROUND" ), bgGroup,
+ bgId = pref->addPreference( tr( "PREF_3DVIEWER_BACKGROUND" ), bgGroup,
LightApp_Preferences::Background, "OCCViewer", "background" );
pref->setItemProperty( "gradient_names", aValuesList, bgId );
pref->setItemProperty( "gradient_ids", anIndicesList, bgId );
LightApp_Preferences::Bool, "OCCViewer", "enable_selection" );
// ... "Selection" group <<end>>
+ // ... "Clipping" group <<start>>
+ int occClippingGroup = pref->addPreference( tr( "PREF_GROUP_CLIPPING" ), occGroup );
+ // .... -> clipping color
+ pref->addPreference( tr( "PREF_CLIPPING_COLOR" ), occClippingGroup,
+ LightApp_Preferences::Color, "OCCViewer", "clipping_color" );
+ int texturePref = pref->addPreference( "", occClippingGroup, LightApp_Preferences::Frame );
+ pref->setItemProperty( "columns", 2, texturePref );
+ // .... -> use default texture
+ pref->addPreference( tr( "PREF_CLIPPING_DEFAULT_TEXTURE" ), texturePref,
+ LightApp_Preferences::Bool, "OCCViewer", "clipping_use_default_texture" );
+ // .... -> clipping texture
+ int filePref = pref->addPreference( tr( "PREF_CLIPPING_TEXTURE" ), texturePref,
+ LightApp_Preferences::File, "OCCViewer", "clipping_texture" );
+ pref->setItemProperty( "path_filter", tr( "OCC_TEXTURE_FILES" ), filePref );
+ // .... -> modulate
+ pref->addPreference( tr( "PREF_CLIPPING_MODULATE" ), texturePref,
+ LightApp_Preferences::Bool, "OCCViewer", "clipping_modulate" );
+ // .... -> scale factor
+ int scaleFactor = pref->addPreference( tr( "PREF_CLIPPING_SCALE" ), texturePref,
+ LightApp_Preferences::DblSpin, "OCCViewer", "clipping_scale" );
+ pref->setItemProperty( "precision", 3, scaleFactor );
+ pref->setItemProperty( "min", 1.0E-03, scaleFactor );
+ pref->setItemProperty( "max", 1.0E03, scaleFactor );
+ pref->setItemProperty( "step", 0.1, scaleFactor );
+ // ... "Clipping" group <<end>>
+
+ // ... "Ray tracing" group <<start>>
+ int occRayTracingGroup = pref->addPreference( tr( "PREF_GROUP_RAY_TRACING" ), occGroup );
+ int rtPref = pref->addPreference( "", occRayTracingGroup, LightApp_Preferences::Frame );
+ pref->setItemProperty( "columns", 2, rtPref );
+ // .... -> depth
+ int rt_depth = pref->addPreference( tr( "PREF_RAY_TRACING_DEPTH" ), rtPref,
+ LightApp_Preferences::IntSpin, "OCCViewer", "rt_depth" );
+ pref->setItemProperty( "min", 1, rt_depth );
+ pref->setItemProperty( "max", 10, rt_depth );
+ pref->setItemProperty( "step", 1, rt_depth );
+ pref->addPreference( "", rtPref, LightApp_Preferences::Frame );
+ // .... -> specular reflections
+ pref->addPreference( tr( "PREF_RAY_TRACING_REFLECTION" ), rtPref,
+ LightApp_Preferences::Bool, "OCCViewer", "rt_reflection" );
+ // .... -> adaptive anti-aliasing
+ pref->addPreference( tr( "PREF_RAY_TRACING_ANTIALIASING" ), rtPref,
+ LightApp_Preferences::Bool, "OCCViewer", "rt_antialiasing" );
+ // .... -> shadows rendering
+ pref->addPreference( tr( "PREF_RAY_TRACING_SHADOW" ), rtPref,
+ LightApp_Preferences::Bool, "OCCViewer", "rt_shadow" );
+ // .... -> transparent shadow
+ pref->addPreference( tr( "PREF_RAY_TRACING_TRANS_SHADOW" ), rtPref,
+ LightApp_Preferences::Bool, "OCCViewer", "rt_trans_shadow" );
+ // ... "Ray tracing" group <<end>>
+
+ // ... "Light source" group <<start>>
+ int occLightGroup = pref->addPreference( tr( "PREF_GROUP_LIGHT" ), occGroup );
+ // .... -> light color
+ pref->addPreference( tr( "PREF_LIGHT_COLOR" ), occLightGroup,
+ LightApp_Preferences::Color, "OCCViewer", "light_color" );
+ int directionPref = pref->addPreference( "", occLightGroup, LightApp_Preferences::Frame );
+ pref->setItemProperty( "columns", 3, directionPref );
+ // .... -> light direction (dx component)
+ int light_dx = pref->addPreference( tr( "Dx" ), directionPref,
+ LightApp_Preferences::DblSpin, "OCCViewer", "light_dx" );
+ pref->setItemProperty( "precision", 2, light_dx );
+ pref->setItemProperty( "min", -1.0E03, light_dx );
+ pref->setItemProperty( "max", 1.0E03, light_dx );
+ pref->setItemProperty( "step", 0.1, light_dx );
+ // .... -> light direction (dy component)
+ int light_dy = pref->addPreference( tr( "Dy" ), directionPref,
+ LightApp_Preferences::DblSpin, "OCCViewer", "light_dy" );
+ pref->setItemProperty( "precision", 2, light_dy );
+ pref->setItemProperty( "min", -1.0E03, light_dy );
+ pref->setItemProperty( "max", 1.0E03, light_dy );
+ pref->setItemProperty( "step", 0.1, light_dy );
+ // .... -> light direction (dz component)
+ int light_dz = pref->addPreference( tr( "Dz" ), directionPref,
+ LightApp_Preferences::DblSpin, "OCCViewer", "light_dz" );
+ pref->setItemProperty( "precision", 2, light_dz );
+ pref->setItemProperty( "min", -1.0E03, light_dz );
+ pref->setItemProperty( "max", 1.0E03, light_dz );
+ pref->setItemProperty( "step", 0.1, light_dz );
+ // ... "Light source" group <<end>>
+
// ... -> empty frame (for layout) <<start>>
int occGen = pref->addPreference( "", occGroup, LightApp_Preferences::Frame );
pref->setItemProperty( "margin", 0, occGen );
pref->setItemProperty( "columns", 2, occGen );
// ... -> empty frame (for layout) <<end>>
+
// .. "OCC viewer" group <<end>>
+#endif
+#ifndef DISABLE_VTKVIEWER
// .. "VTK viewer" group <<start>>
int vtkGroup = pref->addPreference( tr( "PREF_GROUP_VTKVIEWER" ), salomeCat ); //viewTab
anIndicesList << 0 << 1;
pref->setItemProperty( "strings", aValuesList, vtkProjMode );
pref->setItemProperty( "indexes", anIndicesList, vtkProjMode );
+
+ // .... -> Stereo group
+ int vtkStereoGroup = pref->addPreference( tr( "PREF_GROUP_STEREO" ), vtkGroup);
+ pref->setItemProperty( "columns", 2, vtkStereoGroup );
+ // .... -> Stereo type
+ int vtkStereoType = pref->addPreference( tr( "PREF_STEREO_TYPE" ), vtkStereoGroup,
+ LightApp_Preferences::Selector, "VTKViewer", "stereo_type" );
+ aValuesList.clear();
+ anIndicesList.clear();
+ idList.clear();
+ SVTK_Viewer::stereoData( aValuesList, idList);
+ foreach( int gid, idList ) anIndicesList << gid;
+ pref->setItemProperty( "strings", aValuesList, vtkStereoType );
+ pref->setItemProperty( "indexes", anIndicesList, vtkStereoType );
+ // .... -> Anaglyph filter
+ int vtkAnaglyphFilter = pref->addPreference( tr( "PREF_ANAGLYPH_FILTER" ), vtkStereoGroup,
+ LightApp_Preferences::Selector, "VTKViewer", "anaglyph_filter" );
+ aValuesList.clear();
+ anIndicesList.clear();
+ aValuesList << tr("PREF_ANAGLYPH_RED_CYAN") << tr("PREF_ANAGLYPH_YELLOW_BLUE") << tr("PREF_ANAGLYPH_GREEN_MAGENTA");
+ anIndicesList << 0 << 1 << 2;
+
+ pref->setItemProperty( "strings", aValuesList, vtkAnaglyphFilter );
+ pref->setItemProperty( "indexes", anIndicesList, vtkAnaglyphFilter );
+
+ // .... -> Enable quad-buffer support
+ pref->addPreference( tr( "PREF_ENABLE_QUAD_BUFFER_SUPPORT" ), vtkStereoGroup,
+ LightApp_Preferences::Bool, "VTKViewer", "enable_quad_buffer_support" );
+
// .... -> background
aValuesList.clear();
anIndicesList.clear();
txtList.clear();
+ idList.clear();
+#ifndef DISABLE_SALOMEOBJECT
formats = SVTK_Viewer::backgroundData( aValuesList, idList, txtList );
+#endif
foreach( int gid, idList ) anIndicesList << gid;
bgId = pref->addPreference( tr( "PREF_VIEWER_BACKGROUND" ), vtkGen,
LightApp_Preferences::Background, "VTKViewer", "background" );
pref->setItemProperty( "texture_tile_enabled", (bool)txtList.contains( Qtx::TileTexture ), bgId );
pref->setItemProperty( "texture_stretch_enabled", (bool)txtList.contains( Qtx::StretchTexture ), bgId );
pref->setItemProperty( "custom_enabled", false, bgId );
+#ifndef DISABLE_SALOMEOBJECT
pref->setItemProperty( "image_formats", formats, bgId );
+#endif
// .... -> speed increment
int vtkSpeed = pref->addPreference( tr( "PREF_INCREMENTAL_SPEED" ), vtkGen,
LightApp_Preferences::IntSpin, "VTKViewer", "speed_value" );
pref->setItemProperty( "step", 0.1, transPref );
// ... -> group names sub-group <<end>>
// .. "VTK viewer" group <<end>>
+#endif
// .. "Plot2d viewer" group <<start>>
int plot2dGroup = pref->addPreference( tr( "PREF_GROUP_PLOT2DVIEWER" ), salomeCat ); //viewTab
//pref->setItemProperty( "columns", 2, plot2dGroup );
- // ... -> show legend
- pref->addPreference( tr( "PREF_SHOW_LEGEND" ), plot2dGroup,
- LightApp_Preferences::Bool, "Plot2d", "ShowLegend" );
- // ... -> legend position
- int legendPosition = pref->addPreference( tr( "PREF_LEGEND_POSITION" ), plot2dGroup,
- LightApp_Preferences::Selector, "Plot2d", "LegendPos" );
- aValuesList.clear();
- anIndicesList.clear();
- aValuesList << tr("PREF_LEFT") << tr("PREF_RIGHT") << tr("PREF_TOP") << tr("PREF_BOTTOM");
- anIndicesList << 0 << 1 << 2 << 3 ;
- pref->setItemProperty( "strings", aValuesList, legendPosition );
- pref->setItemProperty( "indexes", anIndicesList, legendPosition );
- // ... -> legend font
- pref->addPreference( tr( "PREF_LEGEND_FONT" ), plot2dGroup, LightApp_Preferences::Font, "Plot2d", "LegendFont" );
- // ... -> curve type
- int curveType = pref->addPreference( tr( "PREF_CURVE_TYPE" ), plot2dGroup,
+ // ... -> background
+ pref->addPreference( tr( "PREF_VIEWER_BACKGROUND_COLOR" ), plot2dGroup,
+ LightApp_Preferences::Color, "Plot2d", "Background" );
+ // ... -> selection color
+ pref->addPreference( tr( "PREF_VIEWER_SELECTION" ), plot2dGroup,
+ LightApp_Preferences::Color, "Plot2d", "SelectionColor" );
+
+ // ... "Viewer" group <<start>>
+ int plot2dViewerGroup = pref->addPreference( tr( "PREF_GROUP_VIEWER" ), plot2dGroup );
+
+ // .... -> curve type
+ int curveType = pref->addPreference( tr( "PREF_CURVE_TYPE" ), plot2dViewerGroup,
LightApp_Preferences::Selector, "Plot2d", "CurveType" );
aValuesList.clear();
anIndicesList.clear();
anIndicesList << 0 << 1 << 2 ;
pref->setItemProperty( "strings", aValuesList, curveType );
pref->setItemProperty( "indexes", anIndicesList, curveType );
- // ... -> marker size
- int markerSize = pref->addPreference( tr( "PREF_MARKER_SIZE" ), plot2dGroup,
+ // .... -> marker size
+ int markerSize = pref->addPreference( tr( "PREF_MARKER_SIZE" ), plot2dViewerGroup,
LightApp_Preferences::IntSpin, "Plot2d", "MarkerSize" );
pref->setItemProperty( "min", 0, markerSize );
pref->setItemProperty( "max", 100, markerSize );
- // ... -> horizontal scaling mode
- int horScale = pref->addPreference( tr( "PREF_HOR_AXIS_SCALE" ), plot2dGroup,
+ // .... -> horizontal scaling mode
+ int horScale = pref->addPreference( tr( "PREF_HOR_AXIS_SCALE" ), plot2dViewerGroup,
LightApp_Preferences::Selector, "Plot2d", "HorScaleMode" );
aValuesList.clear();
anIndicesList.clear();
anIndicesList << 0 << 1 ;
pref->setItemProperty( "strings", aValuesList, horScale );
pref->setItemProperty( "indexes", anIndicesList, horScale );
- // ... -> vertical scaling mode
- int verScale = pref->addPreference( tr( "PREF_VERT_AXIS_SCALE" ), plot2dGroup,
+ // .... -> vertical scaling mode
+ int verScale = pref->addPreference( tr( "PREF_VERT_AXIS_SCALE" ), plot2dViewerGroup,
LightApp_Preferences::Selector, "Plot2d", "VerScaleMode" );
pref->setItemProperty( "strings", aValuesList, verScale );
pref->setItemProperty( "indexes", anIndicesList, verScale );
- // ... -> background
- pref->addPreference( tr( "PREF_VIEWER_BACKGROUND_COLOR" ), plot2dGroup,
- LightApp_Preferences::Color, "Plot2d", "Background" );
- // ... -> font color
- pref->addPreference( tr( "PREF_FONT_COLOR" ), plot2dGroup, LightApp_Preferences::Color, "Plot2d", "LegendFontColor" );
- // ... -> selection font color
- pref->addPreference( tr( "PREF_SELECTED_FONT_COLOR" ), plot2dGroup, LightApp_Preferences::Color, "Plot2d", "SelectedLegendFontColor" );
- // ... -> selection color
- pref->addPreference( tr( "PREF_VIEWER_SELECTION" ), plot2dGroup,
- LightApp_Preferences::Color, "Plot2d", "SelectionColor" );
- // ... -> errors/deviation colot
- pref->addPreference( tr( "PREF_DEVIATION_COLOR" ), plot2dGroup,
+
+ // .... -> errors/deviation colot
+ pref->addPreference( tr( "PREF_DEVIATION_COLOR" ), plot2dViewerGroup,
LightApp_Preferences::Color, "Plot2d", "DeviationMarkerColor" );
- // ... -> deviation markers line size
- int deviationMarkerLw = pref->addPreference( tr( "PREF_DEVIATION_MARKER_LW" ), plot2dGroup,
+ // .... -> deviation markers line size
+ int deviationMarkerLw = pref->addPreference( tr( "PREF_DEVIATION_MARKER_LW" ), plot2dViewerGroup,
LightApp_Preferences::IntSpin, "Plot2d", "DeviationMarkerLineWidth" );
pref->setItemProperty( "min", 1, deviationMarkerLw );
pref->setItemProperty( "max", 5, deviationMarkerLw );
- // ... -> deviation markers tick mark size
- int deviationMarkerTs = pref->addPreference( tr( "PREF_DEVIATION_MARKER_TS" ), plot2dGroup,
+ // .... -> deviation markers tick mark size
+ int deviationMarkerTs = pref->addPreference( tr( "PREF_DEVIATION_MARKER_TS" ), plot2dViewerGroup,
LightApp_Preferences::IntSpin, "Plot2d", "DeviationMarkerTickSize" );
pref->setItemProperty( "min", 1, deviationMarkerTs );
pref->setItemProperty( "max", 5, deviationMarkerTs );
+ // .... "Viewer" group <<end>>
+
+ // ... "Legend" group <<start>>
+ int plot2dLegendGroup = pref->addPreference( tr( "PREF_GROUP_LEGEND" ), plot2dGroup );
+
+ // .... -> show legend
+ pref->addPreference( tr( "PREF_SHOW_LEGEND" ), plot2dLegendGroup,
+ LightApp_Preferences::Bool, "Plot2d", "ShowLegend" );
+ // .... -> legend position
+ int legendPosition = pref->addPreference( tr( "PREF_LEGEND_POSITION" ), plot2dLegendGroup,
+ LightApp_Preferences::Selector, "Plot2d", "LegendPos" );
+ aValuesList.clear();
+ anIndicesList.clear();
+ aValuesList << tr("PREF_LEFT") << tr("PREF_RIGHT") << tr("PREF_TOP") << tr("PREF_BOTTOM");
+ anIndicesList << 0 << 1 << 2 << 3 ;
+ pref->setItemProperty( "strings", aValuesList, legendPosition );
+ pref->setItemProperty( "indexes", anIndicesList, legendPosition );
+ // .... -> Symbol type
+ int legendSymbolType = pref->addPreference( tr( "PREF_LEGEND_SYMBOL_TYPE" ), plot2dLegendGroup,
+ LightApp_Preferences::Selector, "Plot2d", "LegendSymbolType" );
+ aValuesList.clear();
+ anIndicesList.clear();
+ aValuesList << tr("PREF_MARKER_ON_LINE") << tr("PREF_MARKER_ABOVE_LINE");
+ anIndicesList << 0 << 1 ;
+ pref->setItemProperty( "strings", aValuesList, legendSymbolType );
+ pref->setItemProperty( "indexes", anIndicesList, legendSymbolType );
+ // .... -> legend font
+ pref->addPreference( tr( "PREF_LEGEND_FONT" ), plot2dLegendGroup, LightApp_Preferences::Font, "Plot2d", "LegendFont" );
+ // ... -> font color
+ pref->addPreference( tr( "PREF_FONT_COLOR" ), plot2dLegendGroup, LightApp_Preferences::Color, "Plot2d", "LegendFontColor" );
+ // ... -> selection font color
+ pref->addPreference( tr( "PREF_SELECTED_FONT_COLOR" ), plot2dLegendGroup, LightApp_Preferences::Color, "Plot2d", "SelectedLegendFontColor" );
+ // ... "Legend" group <<end>>
+
// .. "Plot2d viewer" group <<end>>
+ // .. "PyViewer" preferences tab <<start>>
+ int pyeditTab = pref->addPreference( tr( "PREF_TAB_PYEDITOR" ), salomeCat );
+ // ... "Font settings" group <<start>>
+ int pyFontGroup = pref->addPreference( tr( "PREF_GROUP_PY_FONT" ), pyeditTab );
+ pref->addPreference( tr( "PREF_PY_FONT" ), pyFontGroup,
+ LightApp_Preferences::Font, "PyEditor", "Font" );
+ // ... "Font settings" group <<end>>
+ // ... "Display settings" group <<start>>
+ int pyDispGroup = pref->addPreference( tr( "PREF_GROUP_PY_DISPLAY" ), pyeditTab );
+ pref->setItemProperty( "columns", 2, pyDispGroup );
+ // ... -> current line highlight
+ pref->addPreference( tr( "PREF_PY_CURRLINE_HIGHLIGHT" ), pyDispGroup,
+ LightApp_Preferences::Bool, "PyEditor", "HighlightCurrentLine" );
+ // ... -> text wrapping
+ pref->addPreference( tr( "PREF_PY_TEXT_WRAP" ), pyDispGroup,
+ LightApp_Preferences::Bool, "PyEditor", "TextWrapping" );
+ // ... -> center cursor on scroll
+ pref->addPreference( tr( "PREF_PY_CURSON_ON_SCROLL" ), pyDispGroup,
+ LightApp_Preferences::Bool, "PyEditor", "CenterCursorOnScroll" );
+ // ... -> line numbers area
+ pref->addPreference( tr( "PREF_PY_LINE_NUMBS_AREA" ), pyDispGroup,
+ LightApp_Preferences::Bool, "PyEditor", "LineNumberArea" );
+ // ... "Display settings" group <<end>>
+ // ... "Tab settings" group <<start>>
+ int pyTabGroup = pref->addPreference( tr( "PREF_GROUP_PY_TAB" ), pyeditTab );
+ pref->setItemProperty( "columns", 2, pyTabGroup );
+ // ... -> tab whitespaces
+ pref->addPreference( tr( "PREF_PY_TAB_WHITESPACES" ), pyTabGroup,
+ LightApp_Preferences::Bool, "PyEditor", "TabSpaceVisible" );
+ // ... -> tab size
+ pref->addPreference( tr( "PREF_PY_TAB_SIZE" ), pyTabGroup,
+ LightApp_Preferences::IntSpin, "PyEditor", "TabSize" );
+ // ... "Tab settings" group <<end>>
+ // ... "Vertical edge settings" group <<start>>
+ int pyVertEdgeGroup = pref->addPreference( tr( "PREF_GROUP_VERT_EDGE" ), pyeditTab );
+ pref->setItemProperty( "columns", 2, pyVertEdgeGroup );
+ // ... -> vertical edge
+ pref->addPreference( tr( "PREF_PY_VERT_EDGE" ), pyVertEdgeGroup,
+ LightApp_Preferences::Bool, "PyEditor", "VerticalEdge" );
+ // ... -> number of columns
+ pref->addPreference( tr( "PREF_PY_NUM_COLUMNS" ), pyVertEdgeGroup,
+ LightApp_Preferences::IntSpin, "PyEditor", "NumberColumns" );
+ // ... "Vertical edge settings" group <<end>>
+ // .. "PyEditor" preferences tab <<end>>
+
// .. "Directories" preferences tab <<start>>
int dirTab = pref->addPreference( tr( "PREF_TAB_DIRECTORIES" ), salomeCat );
// ... --> quick directories list
}
#endif
- if ( sec == QString( "3DViewer" ) && param == QString( "zooming_mode" ) )
+#ifndef DISABLE_OCCVIEWER
+ if ( sec == QString( "OCCViewer" ) && param == QString( "clipping_color" ) )
{
- int mode = resMgr->integerValue( "3DViewer", "zooming_mode", 0 );
+ QColor aColor = resMgr->colorValue( "OCCViewer", "clipping_color", QColor( 50, 50, 50 ) );
QList<SUIT_ViewManager*> lst;
-#ifndef DISABLE_OCCVIEWER
viewManagers( OCCViewer_Viewer::Type(), lst );
- QListIterator<SUIT_ViewManager*> itOCC( lst );
- while ( itOCC.hasNext() )
+ QListIterator<SUIT_ViewManager*> it( lst );
+ while ( it.hasNext() )
{
- SUIT_ViewModel* vm = itOCC.next()->getViewModel();
+ SUIT_ViewModel* vm = it.next()->getViewModel();
if ( !vm || !vm->inherits( "OCCViewer_Viewer" ) )
continue;
OCCViewer_Viewer* occVM = (OCCViewer_Viewer*)vm;
- occVM->setZoomingStyle( mode );
- }
-#endif
-#ifndef DISABLE_VTKVIEWER
-#ifndef DISABLE_SALOMEOBJECT
- viewManagers( SVTK_Viewer::Type(), lst );
- QListIterator<SUIT_ViewManager*> itVTK( lst );
- while ( itVTK.hasNext() )
- {
- SUIT_ViewModel* vm = itVTK.next()->getViewModel();
- if ( !vm || !vm->inherits( "SVTK_Viewer" ) )
- continue;
-
- SVTK_Viewer* vtkVM = dynamic_cast<SVTK_Viewer*>( vm );
- if( vtkVM ) vtkVM->setZoomingStyle( mode );
+ occVM->setClippingColor( aColor );
}
-#endif
-#endif
}
+#endif
-#ifndef DISABLE_VTKVIEWER
- if ( sec == QString( "VTKViewer" ) && (param == QString( "speed_value" ) || param == QString( "speed_mode" )) )
+#ifndef DISABLE_OCCVIEWER
+ if ( sec == QString( "OCCViewer" ) && ( param == QString( "clipping_use_default_texture" ) ||
+ param == QString( "clipping_texture" ) ||
+ param == QString( "clipping_modulate" ) ||
+ param == QString( "clipping_scale" ) ) )
{
- int speed = resMgr->integerValue( "VTKViewer", "speed_value", 10 );
- int mode = resMgr->integerValue( "VTKViewer", "speed_mode", 0 );
+ bool isDefaultTextureUsed = resMgr->booleanValue( "OCCViewer", "clipping_use_default_texture" );
+ QString aTexture = resMgr->stringValue( "OCCViewer", "clipping_texture" );
+ bool isModulated = resMgr->booleanValue( "OCCViewer", "clipping_modulate" );
+ double aScale = resMgr->doubleValue( "OCCViewer", "clipping_scale" );
QList<SUIT_ViewManager*> lst;
-#ifndef DISABLE_SALOMEOBJECT
- viewManagers( SVTK_Viewer::Type(), lst );
+ viewManagers( OCCViewer_Viewer::Type(), lst );
+ QListIterator<SUIT_ViewManager*> it( lst );
+ while ( it.hasNext() )
+ {
+ SUIT_ViewModel* vm = it.next()->getViewModel();
+ if ( !vm || !vm->inherits( "OCCViewer_Viewer" ) )
+ continue;
+
+ OCCViewer_Viewer* occVM = (OCCViewer_Viewer*)vm;
+ occVM->setClippingTextureParams( isDefaultTextureUsed, aTexture, isModulated, aScale );
+ }
+ }
+#endif
+
+#ifndef DISABLE_OCCVIEWER
+ if ( sec == QString( "OCCViewer" ) && param == QString( "projection_mode" ) )
+ {
+ int mode = resMgr->integerValue( "OCCViewer", "projection_mode", 0 );
+ QList<SUIT_ViewManager*> lst;
+ viewManagers( OCCViewer_Viewer::Type(), lst );
+ QListIterator<SUIT_ViewManager*> it( lst );
+ while ( it.hasNext() )
+ {
+ SUIT_ViewModel* vm = it.next()->getViewModel();
+ if ( !vm || !vm->inherits( "OCCViewer_Viewer" ) )
+ continue;
+
+ OCCViewer_Viewer* occVM = (OCCViewer_Viewer*)vm;
+ occVM->setProjectionType( mode );
+ }
+ }
+#endif
+#if OCC_VERSION_LARGE > 0x06090000
+#ifndef DISABLE_OCCVIEWER
+ if ( sec == QString( "OCCViewer" ) && param == QString( "stereo_type" ) )
+ {
+ int mode = resMgr->integerValue( "OCCViewer", "stereo_type", 0 );
+ QList<SUIT_ViewManager*> lst;
+ viewManagers( OCCViewer_Viewer::Type(), lst );
+ QListIterator<SUIT_ViewManager*> it( lst );
+ while ( it.hasNext() )
+ {
+ SUIT_ViewModel* vm = it.next()->getViewModel();
+ if ( !vm || !vm->inherits( "OCCViewer_Viewer" ) )
+ continue;
+
+ OCCViewer_Viewer* occVM = (OCCViewer_Viewer*)vm;
+ occVM->setStereoType( mode );
+ }
+ }
+#endif
+
+#ifndef DISABLE_OCCVIEWER
+ if ( sec == QString( "OCCViewer" ) && param == QString( "anaglyph_filter" ) )
+ {
+ int mode = resMgr->integerValue( "OCCViewer", "anaglyph_filter", 0 );
+ QList<SUIT_ViewManager*> lst;
+ viewManagers( OCCViewer_Viewer::Type(), lst );
+ QListIterator<SUIT_ViewManager*> it( lst );
+ while ( it.hasNext() )
+ {
+ SUIT_ViewModel* vm = it.next()->getViewModel();
+ if ( !vm || !vm->inherits( "OCCViewer_Viewer" ) )
+ continue;
+
+ OCCViewer_Viewer* occVM = (OCCViewer_Viewer*)vm;
+ occVM->setAnaglyphFilter( mode );
+ }
+ }
+#endif
+
+#ifndef DISABLE_OCCVIEWER
+ if ( sec == QString( "OCCViewer" ) && ( param == QString( "focus_type" ) ||
+ param == QString( "focus_value" ) ) )
+ {
+ int aType = resMgr->integerValue( "OCCViewer", "focus_type" );
+ double aValue = resMgr->doubleValue( "OCCViewer", "focus_value" );
+ QList<SUIT_ViewManager*> lst;
+ viewManagers( OCCViewer_Viewer::Type(), lst );
+ QListIterator<SUIT_ViewManager*> it( lst );
+ while ( it.hasNext() )
+ {
+ SUIT_ViewModel* vm = it.next()->getViewModel();
+ if ( !vm || !vm->inherits( "OCCViewer_Viewer" ) )
+ continue;
+
+ OCCViewer_Viewer* occVM = (OCCViewer_Viewer*)vm;
+ occVM->setStereographicFocus( aType, aValue );
+ }
+ }
+#endif
+
+#ifndef DISABLE_OCCVIEWER
+ if ( sec == QString( "OCCViewer" ) && ( param == QString( "iod_type" ) ||
+ param == QString( "iod_value" ) ) )
+ {
+ int aType = resMgr->integerValue( "OCCViewer", "iod_type" );
+ double aValue = resMgr->doubleValue( "OCCViewer", "iod_value" );
+ QList<SUIT_ViewManager*> lst;
+ viewManagers( OCCViewer_Viewer::Type(), lst );
+ QListIterator<SUIT_ViewManager*> it( lst );
+ while ( it.hasNext() )
+ {
+ SUIT_ViewModel* vm = it.next()->getViewModel();
+ if ( !vm || !vm->inherits( "OCCViewer_Viewer" ) )
+ continue;
+
+ OCCViewer_Viewer* occVM = (OCCViewer_Viewer*)vm;
+ occVM->setInterocularDistance( aType, aValue );
+ }
+ }
+#endif
+
+#ifndef DISABLE_OCCVIEWER
+ if ( sec == QString( "OCCViewer" ) && param == QString( "reverse_stereo" ) )
+ {
+ bool reverse = resMgr->booleanValue( "OCCViewer", "reverse_stereo", false );
+ QList<SUIT_ViewManager*> lst;
+ viewManagers( OCCViewer_Viewer::Type(), lst );
+ QListIterator<SUIT_ViewManager*> it( lst );
+ while ( it.hasNext() )
+ {
+ SUIT_ViewModel* vm = it.next()->getViewModel();
+ if ( !vm || !vm->inherits( "OCCViewer_Viewer" ) )
+ continue;
+
+ OCCViewer_Viewer* occVM = (OCCViewer_Viewer*)vm;
+ occVM->setReverseStereo( reverse );
+ }
+ }
+#endif
+
+#ifndef DISABLE_OCCVIEWER
+ if ( sec == QString( "OCCViewer" ) && param == QString( "enable_vsync" ) )
+ {
+ bool enable = resMgr->booleanValue( "OCCViewer", "enable_vsync", true );
+ QList<SUIT_ViewManager*> lst;
+ viewManagers( OCCViewer_Viewer::Type(), lst );
+ QListIterator<SUIT_ViewManager*> it( lst );
+ while ( it.hasNext() )
+ {
+ SUIT_ViewModel* vm = it.next()->getViewModel();
+ if ( !vm || !vm->inherits( "OCCViewer_Viewer" ) )
+ continue;
+
+ OCCViewer_Viewer* occVM = (OCCViewer_Viewer*)vm;
+ occVM->setVSync( enable );
+ }
+ }
+#endif
+
+#ifndef DISABLE_OCCVIEWER
+ if ( sec == QString( "OCCViewer" ) && param == QString( "enable_quad_buffer_support" ) )
+ {
+ bool enable = resMgr->booleanValue( "OCCViewer", "enable_quad_buffer_support", false );
+ QList<SUIT_ViewManager*> lst;
+ viewManagers( OCCViewer_Viewer::Type(), lst );
+ QListIterator<SUIT_ViewManager*> it( lst );
+ while ( it.hasNext() )
+ {
+ SUIT_ViewModel* vm = it.next()->getViewModel();
+ if ( !vm || !vm->inherits( "OCCViewer_Viewer" ) )
+ continue;
+
+ OCCViewer_Viewer* occVM = (OCCViewer_Viewer*)vm;
+ occVM->setQuadBufferSupport( enable );
+ }
+ }
+#endif
+#endif
+ if ( sec == QString( "3DViewer" ) && param == QString( "zooming_mode" ) )
+ {
+ int mode = resMgr->integerValue( "3DViewer", "zooming_mode", 0 );
+ QList<SUIT_ViewManager*> lst;
+#ifndef DISABLE_OCCVIEWER
+ viewManagers( OCCViewer_Viewer::Type(), lst );
+ QListIterator<SUIT_ViewManager*> itOCC( lst );
+ while ( itOCC.hasNext() )
+ {
+ SUIT_ViewModel* vm = itOCC.next()->getViewModel();
+ if ( !vm || !vm->inherits( "OCCViewer_Viewer" ) )
+ continue;
+
+ OCCViewer_Viewer* occVM = (OCCViewer_Viewer*)vm;
+ occVM->setZoomingStyle( mode );
+ }
+#endif
+#ifndef DISABLE_VTKVIEWER
+#ifndef DISABLE_SALOMEOBJECT
+ viewManagers( SVTK_Viewer::Type(), lst );
+ QListIterator<SUIT_ViewManager*> itVTK( lst );
+ while ( itVTK.hasNext() )
+ {
+ SUIT_ViewModel* vm = itVTK.next()->getViewModel();
+ if ( !vm || !vm->inherits( "SVTK_Viewer" ) )
+ continue;
+
+ SVTK_Viewer* vtkVM = dynamic_cast<SVTK_Viewer*>( vm );
+ if( vtkVM ) vtkVM->setZoomingStyle( mode );
+ }
+#endif
+#endif
+ }
+
+#ifndef DISABLE_VTKVIEWER
+ if ( sec == QString( "VTKViewer" ) && (param == QString( "speed_value" ) || param == QString( "speed_mode" )) )
+ {
+ int speed = resMgr->integerValue( "VTKViewer", "speed_value", 10 );
+ int mode = resMgr->integerValue( "VTKViewer", "speed_mode", 0 );
+ QList<SUIT_ViewManager*> lst;
+#ifndef DISABLE_SALOMEOBJECT
+ viewManagers( SVTK_Viewer::Type(), lst );
QListIterator<SUIT_ViewManager*> it( lst );
while ( it.hasNext() )
{
}
#endif
+#ifndef DISABLE_VTKVIEWER
+ if ( sec == QString( "VTKViewer" ) && param == QString( "stereo_type" ) )
+ {
+ int mode = resMgr->integerValue( "VTKViewer", "stereo_type", 0 );
+ QList<SUIT_ViewManager*> lst;
+#ifndef DISABLE_SALOMEOBJECT
+ viewManagers( SVTK_Viewer::Type(), lst );
+ QListIterator<SUIT_ViewManager*> it( lst );
+ while ( it.hasNext() )
+ {
+ SUIT_ViewModel* vm = it.next()->getViewModel();
+ if ( !vm || !vm->inherits( "SVTK_Viewer" ) )
+ continue;
+
+ SVTK_Viewer* vtkVM = dynamic_cast<SVTK_Viewer*>( vm );
+ if( vtkVM ) vtkVM->setStereoType( mode );
+ }
+#endif
+ }
+#endif
+
+#ifndef DISABLE_VTKVIEWER
+ if ( sec == QString( "VTKViewer" ) && param == QString( "anaglyph_filter" ) )
+ {
+ int mode = resMgr->integerValue( "VTKViewer", "anaglyph_filter", 0 );
+ QList<SUIT_ViewManager*> lst;
+#ifndef DISABLE_SALOMEOBJECT
+ viewManagers( SVTK_Viewer::Type(), lst );
+ QListIterator<SUIT_ViewManager*> it( lst );
+ while ( it.hasNext() )
+ {
+ SUIT_ViewModel* vm = it.next()->getViewModel();
+ if ( !vm || !vm->inherits( "SVTK_Viewer" ) )
+ continue;
+
+ SVTK_Viewer* vtkVM = dynamic_cast<SVTK_Viewer*>( vm );
+ if( vtkVM ) vtkVM->setAnaglyphFilter( mode );
+ }
+#endif
+ }
+#endif
+
+#ifndef DISABLE_VTKVIEWER
+ if ( sec == QString( "VTKViewer" ) && param == QString( "enable_quad_buffer_support" ) )
+ {
+ int enable = resMgr->booleanValue( "VTKViewer", "enable_quad_buffer_support", false );
+ QList<SUIT_ViewManager*> lst;
+#ifndef DISABLE_SALOMEOBJECT
+ viewManagers( SVTK_Viewer::Type(), lst );
+ QListIterator<SUIT_ViewManager*> it( lst );
+ while ( it.hasNext() )
+ {
+ SUIT_ViewModel* vm = it.next()->getViewModel();
+ if ( !vm || !vm->inherits( "SVTK_Viewer" ) )
+ continue;
+
+ SVTK_Viewer* vtkVM = dynamic_cast<SVTK_Viewer*>( vm );
+ if( vtkVM ) vtkVM->setQuadBufferSupport( enable );
+ }
+#endif
+ }
+#endif
+
#ifndef DISABLE_VTKVIEWER
if ( sec == QString( "VTKViewer" ) && param == QString( "preselection" ) )
{
}
if ( sec == "language" && param == "language" )
{
- SUIT_MessageBox::information( desktop(), tr( "WRN_WARNING" ), tr( "LANG_CHANGED" ) );
+ // VSR 18.06.2015 : commented out : single warning dialog box is now shown by the LightApp_PreferencesDlg
+ //SUIT_MessageBox::information( desktop(), tr( "WRN_WARNING" ), tr( "LANG_CHANGED" ) );
+ }
+ if ( sec == "language" && param == "locale")
+ {
+ // VSR 18.06.2015: commented out : single warning dialog box is now shown by the LightApp_PreferencesDlg
+ //SUIT_MessageBox::information( desktop(), tr( "WRN_WARNING" ), tr( "LOCALE_CHANGED" ) );
}
if ( sec == "desktop" && param == "opaque_resize" ) {
bool opaqueResize = resMgr->booleanValue( "desktop", "opaque_resize", false );
dynamic_cast<STD_TabDesktop*>( desktop() )->workstack()->setOpaqueResize( opaqueResize );
}
- if ( sec == "ExternalBrowser" && param == "use_external_browser" ) {
- if ( resMgr->booleanValue("ExternalBrowser", "use_external_browser", false ) )
- {
- QtxWebBrowser::shutdown();
+#ifndef DISABLE_PLOT2DVIEWER
+ QList<SUIT_ViewManager*> lst;
+ viewManagers( Plot2d_Viewer::Type(), lst );
+ QListIterator<SUIT_ViewManager*> itPlot2d( lst );
+ while ( itPlot2d.hasNext() ) {
+ SUIT_ViewManager* viewMgr = itPlot2d.next();
+ SUIT_ViewModel* vm = viewMgr->getViewModel();
+ if ( !vm || !vm->inherits( "Plot2d_Viewer" ) )
+ continue;
+
+ Plot2d_Viewer* Plot2dVM = dynamic_cast<Plot2d_Viewer*>( vm );
+
+ viewMgr->setViewModel( vm );
+ Plot2d_ViewWindow* wnd = dynamic_cast<Plot2d_ViewWindow*>( viewMgr->getActiveView() );
+ if( wnd ) {
+ Plot2d_ViewFrame* frame = wnd->getViewFrame();
+ frame->SetPreference();
}
}
+#endif
-#ifndef DISABLE_PLOT2DVIEWER
- if ( sec == "Plot2d" ) {
- if( param == "SelectionColor" ) {
- QColor c = resMgr->colorValue( sec, param );
- Plot2d_Object::setSelectionColor(c);
- }
- else if (param == "SelectedLegendFontColor") {
- QColor c = resMgr->colorValue( sec, param );
- Plot2d_Object::setHighlightedLegendTextColor(c);
+#ifndef DISABLE_PYVIEWER
+ if ( sec == QString( "PyViewer" ) && ( param == QString( "HighlightCurrentLine" ) ||
+ param == QString( "LineNumberArea" ) ||
+ param == QString( "TextWrapping" ) ||
+ param == QString( "CenterCursorOnScroll" ) ||
+ param == QString( "TabSpaceVisible" ) ||
+ param == QString( "TabSize" ) ||
+ param == QString( "VerticalEdge" ) ||
+ param == QString( "NumberColumns" ) ||
+ param == QString( "Font" ) ) )
+ {
+ QList<SUIT_ViewManager*> lst;
+ viewManagers( PyViewer_Viewer::Type(), lst );
+ QListIterator<SUIT_ViewManager*> itPy( lst );
+ while ( itPy.hasNext() )
+ {
+ SUIT_ViewManager* viewMgr = itPy.next();
+ SUIT_ViewModel* vm = viewMgr->getViewModel();
+ if ( !vm || !vm->inherits( "PyViewer_Viewer" ) )
+ continue;
+
+ PyViewer_Viewer* pyEditVM = dynamic_cast<PyViewer_Viewer*>( vm );
+
+ viewMgr->setViewModel( vm );
+ PyViewer_ViewWindow* pyView = dynamic_cast<PyViewer_ViewWindow*>( viewMgr->getActiveView() );
+ if( pyView )
+ {
+ pyView->setPreferences();
+ }
}
}
#endif
if ( desktop() )
aResMgr->setValue( "desktop", "geometry", desktop()->storeGeometry() );
+#if GUI_DEVELOPMENT > 0
+ aResMgr->setValue( "salome", "version", QString(GUI_VERSION_STR)+"dev" );
+#else
+ aResMgr->setValue( "salome", "version", QString(GUI_VERSION_STR) );
+#endif
+
aResMgr->save();
}
void LightApp_Application::currentWindows( QMap<int, int>& winMap ) const
{
winMap.clear();
- if ( !activeStudy() )
- return;
-
if ( activeModule() && activeModule()->inherits( "LightApp_Module" ) )
((LightApp_Module*)activeModule())->windows( winMap );
else
QMap<int, int> winMap;
currentWindows( winMap );
- if ( activeStudy() )
+ for ( QMap<int, int>::ConstIterator it = winMap.begin(); it != winMap.end(); ++it )
{
- for ( QMap<int, int>::ConstIterator it = winMap.begin(); it != winMap.end(); ++it )
- {
- if ( !dockWindow( it.key() ) )
- getWindow( it.key() );
- }
+ if ( !dockWindow( it.key() ) )
+ getWindow( it.key() );
}
for ( WinMap::ConstIterator it = myWin.begin(); it != myWin.end(); ++it )
{
QWidget* wid = it.value();
- if ( activeStudy() )
- wid->setVisible( winMap.contains( it.key() ) );
+ if ( winMap.contains( it.key() ) )
+ wid->setVisible( true );
else
delete wid;
}
- if ( activeStudy() )
- loadDockWindowsState();
- else
- myWin.clear();
+ loadDockWindowsState();
}
/*!
QString modName;
if ( activeModule() )
modName = activeModule()->name();
+ else if ( activeStudy() )
+ modName = "nomodule";
- QtxResourceMgr::WorkingMode prevMode = aResMgr->workingMode();
- aResMgr->setWorkingMode(QtxResourceMgr::IgnoreUserValues);
+ QtxResourceMgr::WorkingMode prevMode = aResMgr->setWorkingMode( QtxResourceMgr::IgnoreUserValues );
QByteArray aDefaultState;
- aResMgr->value("windows_geometry", modName , aDefaultState );
+ aResMgr->value( "windows_geometry", modName, aDefaultState );
QByteArray aDefaultVisibility;
- aResMgr->value("windows_visibility", modName , aDefaultVisibility );
+ aResMgr->value( "windows_visibility", modName, aDefaultVisibility );
bool hasDefaultVisibility = !aDefaultVisibility.isEmpty();
- aResMgr->setWorkingMode(prevMode);
+ aResMgr->setWorkingMode( prevMode );
if( !storeWin && !storeTb && aDefaultState.isEmpty() && !hasDefaultVisibility)
return;
if ( aResMgr->hasValue("windows_geometry" ,modName ) ) {
+ long version = Qtx::versionToId( aResMgr->stringValue( "windows_geometry_version", modName, "" ) );
QByteArray arr;
- aResMgr->value("windows_geometry", modName , arr );
- QByteArray aTargetArray = processState(arr, storeWin, storeTb, aDefaultState);
+ if ( version > Qtx::versionToId( "7.4.1" ) )
+ aResMgr->value( "windows_geometry", modName , arr );
+ else
+ arr = aDefaultState;
+ QByteArray aTargetArray = processState(arr, storeWin, storeTb, true, aDefaultState);
desktop()->restoreState( aTargetArray );
}
+ QStringList mainToolbarsNames;
+ mainToolbarsNames << "SalomeStandard" << "SalomeModules";
+ QList<QToolBar*> mainToolbars = findToolBars( mainToolbarsNames );
+ foreach( QToolBar* tb, mainToolbars ) tb->setVisible( true );
+ /*
if ( !myWinVis.contains( modName ) && aDefaultVisibility.isEmpty())
return;
dwMap = &defaultDwMap;
}
}
-
+
if(tbMap) {
QList<QToolBar*> tbList = findToolBars();
for ( QList<QToolBar*>::iterator tit = tbList.begin(); tit != tbList.end(); ++tit )
dw->setVisible( (*dwMap)[dw->objectName()] );
}
}
+ */
}
QString modName;
if ( activeModule() )
modName = activeModule()->name();
+ else if ( activeStudy() )
+ modName = "nomodule";
+
+ QString versionId = GUI_VERSION_STR;
+#if GUI_DEVELOPMENT > 0
+ versionId += "dev";
+#endif
QByteArray arr = desktop()->saveState();
- resourceMgr()->setValue( "windows_geometry", modName, processState(arr, storeWin, storeTb) );
+ resourceMgr()->setValue( "windows_geometry", modName, processState(arr, storeWin, storeTb, false) );
+ resourceMgr()->setValue( "windows_geometry_version", modName, versionId );
QByteArray visArr;
if ( myWinVis.contains( modName ) )
a->setShortcut( ob->shortcutKey(SUIT_DataBrowser::UpdateShortcut) );
}
+#ifndef DISABLE_SALOMEOBJECT
if ( selMgr && ob ) {
SALOME_ListIO selected;
selMgr->selectedObjects( selected );
}
}
}
+#endif
selMgr->setSelectionCacheEnabled( cacheIsOn );
}
if ( desk ) {
connect( desk, SIGNAL( message( const QString& ) ),
this, SLOT( onDesktopMessage( const QString& ) ), Qt::UniqueConnection );
+ connect( desk, SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
+ this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ), Qt::UniqueConnection );
+ /* connect( desk, SIGNAL( windowMoved( SUIT_ViewWindow* ) ),
+ this, SLOT( onWindowMoved( SUIT_ViewWindow* ) ), Qt::UniqueConnection ); */
}
}
this, SLOT( onCloseView( SUIT_ViewManager* ) ) );
LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>(activeStudy());
if (aStudy )
- aStudy->removeViewMgr(vm->getGlobalId());
+ aStudy->removeObjectProperties( vm->getGlobalId() );
CAM_Application::removeViewManager( vm );
#ifndef DISABLE_QXGRAPHVIEWER
aTypesList<<QxScene_Viewer::Type();
#endif
+#ifndef DISABLE_PVVIEWER
+ aTypesList<<PVViewer_Viewer::Type();
+#endif
+#ifndef DISABLE_PYVIEWER
+ aTypesList<<PyViewer_Viewer::Type();
+#endif
#ifndef DISABLE_OCCVIEWER
aTypesList<<OCCViewer_Viewer::Type();
#endif
// update object browser
updateObjectBrowser();
}
+ else if ( message.toLower().startsWith( "activate_viewer" ) ) {
+ QString vtype = message.split( sectionSeparator ).last();
+ if ( !vtype.isEmpty() )
+ getViewManager( vtype, true );
+ }
else {
QStringList data = message.split( sectionSeparator );
if ( data.count() > 1 ) {
Returns all top level toolbars.
Note : Result list contains only main window toolbars, not including toolbars from viewers.
*/
-QList<QToolBar*> LightApp_Application::findToolBars() {
+QList<QToolBar*> LightApp_Application::findToolBars( const QStringList& names )
+{
QList<QToolBar*> aResult;
QList<QToolBar*> tbList = qFindChildren<QToolBar*>( desktop() );
for ( QList<QToolBar*>::iterator tit = tbList.begin(); tit != tbList.end(); ++tit ) {
QObject* po = Qtx::findParent( tb, "QMainWindow" );
if ( po != desktop() )
continue;
- aResult.append(tb);
+ if ( names.isEmpty() || names.contains( tb->objectName() ) )
+ aResult.append(tb);
}
return aResult;
}
/*!
Internal method to parse toolbars and dockable windows state.
*/
-QByteArray LightApp_Application::processState(QByteArray& input, const bool processWin,const bool processTb, QByteArray defaultState) {
+QByteArray LightApp_Application::processState(QByteArray& input,
+ const bool processWin,
+ const bool processTb,
+ const bool isRestoring,
+ QByteArray defaultState) {
QByteArray aRes;
bool hasDefaultState = !defaultState.isEmpty();
bool isDockWinWriten = false;
- if(processWin && processTb) {
+ int nbDocWin = -1;
+ //Write date from users settings
+ if(isRestoring){
+ QDataStream tmpInputData(&input, QIODevice::ReadOnly);
+ int marker, version;
+ uchar dockmarker;
+ tmpInputData >> marker;
+ tmpInputData >> version;
+ tmpInputData >> dockmarker;
+ tmpInputData >> nbDocWin;
+ }
+ if(processWin && processTb && !isRestoring) {
aRes = input;
} else if(!processWin && !processTb ) {
if(hasDefaultState)
}
int toolBarMarkerIndex = getToolbarMarkerIndex(input,aNames);
- QDataStream anInputData(&input, QIODevice::ReadOnly);
if(toolBarMarkerIndex < 0)
return aRes;
+ QDataStream anInputData(&input, QIODevice::ReadOnly);
int toolBarMarkerIndexDef;
if(hasDefaultState) {
QDataStream* aTargetData = 0;
int aTargetIndex = -1;
- if(processWin) {
- //Write date from users settings
+ QByteArray currentArr = desktop()->saveState();
+ QDataStream anInputDataCur(¤tArr, QIODevice::ReadOnly);
+ bool useInputData = !isRestoring || (isRestoring && nbDocWin > 0);
+ if(processWin && useInputData) {
aTargetData = &anInputData;
aTargetIndex = toolBarMarkerIndex;
} else {
//Write date from default settings
if(hasDefaultState) {
aTargetData = &anInputDataDef;
- aTargetIndex = toolBarMarkerIndexDef;
+ aTargetIndex = toolBarMarkerIndexDef;
+ } else {
+ //If no default state, write current snapshot of the dockable windows
+ if(isRestoring) {
+ aTargetData = &anInputDataCur;
+ int toolBarMarkerIndexCur = getToolbarMarkerIndex(currentArr, aNames);
+ aTargetIndex = toolBarMarkerIndexCur;
+ }
}
}
{
emit operationFinished( theModuleName, theOperationName, theEntryList );
}
+
+/*!
+ Update visibility state of given objects
+*/
+void LightApp_Application::updateVisibilityState( DataObjectList& theList,
+ SUIT_ViewModel* theViewModel )
+{
+ if ( !theViewModel || theList.isEmpty() ) return;
+
+ LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>(activeStudy());
+ if ( !aStudy ) return;
+
+ SALOME_View* aView = dynamic_cast<SALOME_View*>( theViewModel );
+
+ for ( DataObjectList::iterator itr = theList.begin(); itr != theList.end(); ++itr ) {
+ LightApp_DataObject* obj = dynamic_cast<LightApp_DataObject*>(*itr);
+
+ if ( !obj || aStudy->isComponent( obj->entry() ) )
+ continue;
+
+ LightApp_Module* anObjModule = dynamic_cast<LightApp_Module*>(obj->module());
+ if ( anObjModule ) {
+ LightApp_Displayer* aDisplayer = anObjModule->displayer();
+ if ( aDisplayer ) {
+ Qtx::VisibilityState anObjState = Qtx::UnpresentableState;
+ if ( aDisplayer->canBeDisplayed( obj->entry(), theViewModel->getType() ) ) {
+ if ( aView && aDisplayer->IsDisplayed( obj->entry(), aView ) )
+ anObjState = Qtx::ShownState;
+ else
+ anObjState = Qtx::HiddenState;
+ }
+ aStudy->setVisibilityState( obj->entry(), anObjState );
+ }
+ }
+ }
+}
+
+/*!
+ * Called when window activated
+ */
+void LightApp_Application::onWindowActivated( SUIT_ViewWindow* theViewWindow )
+{
+ SUIT_DataBrowser* anOB = objectBrowser();
+ if ( !anOB )
+ return;
+ SUIT_DataObject* rootObj = anOB->root();
+ if ( !rootObj )
+ return;
+
+ DataObjectList listObj = rootObj->children( true );
+
+ SUIT_ViewModel* vmod = 0;
+ if ( SUIT_ViewManager* vman = theViewWindow->getViewManager() )
+ vmod = vman->getViewModel();
+ updateVisibilityState( listObj, vmod );
+}
+
+/*!
+ Called then view manager removed
+*/
+void LightApp_Application::onViewManagerRemoved( SUIT_ViewManager* )
+{
+ ViewManagerList lst;
+ viewManagers( lst );
+ if ( lst.count() == 1) { // in case if closed last view window
+ LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( activeStudy() );
+ if ( aStudy )
+ aStudy->setVisibilityStateForAll( Qtx::UnpresentableState );
+ }
+}
+
+/*!
+ Check existing document.
+*/
+bool LightApp_Application::checkExistingDoc()
+{
+ bool result = true;
+ if( activeStudy() ) {
+ int answer = SUIT_MessageBox::question( desktop(),
+ tr( "APPCLOSE_CAPTION" ),
+ tr( "STUDYCLOSE_DESCRIPTION" ),
+ tr( "APPCLOSE_SAVE" ),
+ tr( "APPCLOSE_CLOSE" ),
+ tr( "APPCLOSE_CANCEL" ), 0 );
+ if(answer == 0) {
+ if ( activeStudy()->isSaved() ) {
+ onSaveDoc();
+ closeDoc( false );
+ } else if ( onSaveAsDoc() ) {
+ if( !closeDoc( false ) ) {
+ result = false;
+ }
+ } else {
+ result = false;
+ }
+ }
+ else if( answer == 1 ) {
+ closeDoc( false );
+ } else if( answer == 2 ) {
+ result = false;
+ }
+ }
+ return result;
+}
+
+#ifndef DISABLE_PYCONSOLE
+
+PyConsole_Interp* LightApp_Application::getPyInterp()
+{
+ static PyConsole_Interp* myInterp = 0;
+ if ( !myInterp )
+ myInterp = createPyInterp();
+ return myInterp;
+}
+
+PyConsole_Interp* LightApp_Application::createPyInterp()
+{
+ return new LightApp_PyInterp();
+}
+
+#endif // DISABLE_PYCONSOLE