X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FLightApp%2FLightApp_Application.cxx;h=f03066468059e246e93285f4bbe78eb295113f5a;hb=9a546cba3468822f879c0c829309d7b344fb22b9;hp=f50576ea8d68e4be8a404d2945d9a90dcf2dbc87;hpb=3be5d622d068adb6b7bfa9c2de7f587f0d82cd0a;p=modules%2Fgui.git diff --git a/src/LightApp/LightApp_Application.cxx b/src/LightApp/LightApp_Application.cxx index f50576ea8..f03066468 100644 --- a/src/LightApp/LightApp_Application.cxx +++ b/src/LightApp/LightApp_Application.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2016 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 @@ -35,8 +35,9 @@ #endif #ifndef DISABLE_PYCONSOLE - #include "LightApp_PyInterp.h" // WARNING! This include must be the first! - #include + #include "LightApp_PyEditor.h" + #include "PyConsole_Interp.h" + #include "PyConsole_Console.h" #endif #include "LightApp_Application.h" @@ -62,8 +63,10 @@ #include +#ifdef USE_SALOME_STYLE #include #include +#endif // USE_SALOME_STYLE #include #include @@ -82,6 +85,7 @@ #include #include +#include #include #include #include @@ -242,24 +246,34 @@ int LightApp_Application::lastStudyId = 0; //since the 'toolbar marker' is not unique, find index of first occurrence of the //'toolbar marker' in the array and check that next string is name of the toolbar -int getToolbarMarkerIndex(QByteArray input, const QStringList& aFlags) { - int aResult = -1,tmp = 0; - int inputLen = input.length(); - QDataStream anInputData(&input, QIODevice::ReadOnly); - while(tmp < inputLen) { - tmp = input.indexOf(QToolBarMarker, tmp + 1); - if(tmp < 0 ) - break; - anInputData.device()->seek(tmp); +void LightAppCleanUpAppResources() +{ + if ( LightApp_Application::_prefs_ ) { + delete LightApp_Application::_prefs_; + LightApp_Application::_prefs_ = 0; + } +} + +namespace +{ + int getToolbarMarkerIndex( QByteArray input, const QStringList& aFlags ) { + int aResult = -1,tmp = 0; + int inputLen = input.length(); + QDataStream anInputData( &input, QIODevice::ReadOnly ); + while ( tmp < inputLen ) { + tmp = input.indexOf( QToolBarMarker, tmp + 1 ); + if ( tmp < 0 ) + break; + anInputData.device()->seek( tmp ); uchar mark; - anInputData>>mark; + anInputData >> mark; int lines; anInputData >> lines; - if(lines == 0 && anInputData.atEnd()){ - //Case then array doesn't contain information about toolbars, - aResult = tmp; - break; + if ( lines == 0 && anInputData.atEnd() ) { + //Case then array doesn't contain information about toolbars, + aResult = tmp; + break; } int pos; @@ -267,13 +281,26 @@ int getToolbarMarkerIndex(QByteArray input, const QStringList& aFlags) { int cnt; anInputData >> cnt; QString str; - anInputData>>str; - if(aFlags.contains(str)) { - aResult = tmp; - break; + anInputData >> str; + if ( aFlags.contains( str ) ) { + aResult = tmp; + break; } - } - return aResult; + } + return aResult; + } + + QString langToName( const QString& lang ) + { + // special processing for English language to avoid such result as "American English" + // as Qt cannot just say "English" + QString result; + if ( lang == "en" ) + result = "English"; + else + result = QLocale( lang ).nativeLanguageName(); + return result; + } } /*! @@ -417,8 +444,10 @@ LightApp_Application::LightApp_Application() */ LightApp_Application::~LightApp_Application() { + savePreferences(); delete mySelMgr; delete myScreenHelper; + myPrefs = 0; } /*!Start application.*/ @@ -439,9 +468,10 @@ void LightApp_Application::start() /*!Closeapplication.*/ void LightApp_Application::closeApplication() { +#ifndef DISABLE_QTXWEBBROWSER QProcess::startDetached( "HelpBrowser", QStringList() << QString( "--remove=%1" ).arg( QApplication::instance()->applicationPid() ) ); - +#endif CAM_Application::closeApplication(); } @@ -520,6 +550,9 @@ bool LightApp_Application::activateModule( const QString& modName ) objectBrowser()->setRoot( activeStudy()->root() ); updateObjectBrowser( true ); } + + if ( activeModule() ) activeModule()->updateModuleVisibilityState(); + return true; } @@ -562,7 +595,7 @@ void LightApp_Application::createActions() // Preferences createAction( PreferencesId, tr( "TOT_DESK_PREFERENCES" ), QIcon(), tr( "MEN_DESK_PREFERENCES" ), tr( "PRP_DESK_PREFERENCES" ), - Qt::CTRL+Qt::Key_R, desk, false, this, SLOT( onPreferences() ) ); + Qt::CTRL+Qt::Key_P, desk, false, this, SLOT( onPreferences() ) ); // Help menu: @@ -570,13 +603,47 @@ void LightApp_Application::createActions() int helpMenu = createMenu( tr( "MEN_DESK_HELP" ), -1, -1, 1000 ); createMenu( separator(), helpMenu, -1, 10 ); + + // Site && forum + int id = LightApp_Application::UserID + FIRST_HELP_ID; + + QString site = tr ( "SALOME_SITE" ); + QAction* as = createAction( id, site, + resMgr->loadPixmap( "LightApp", tr( "ICON_WWW" ), false ), + site, site, + 0, desk, false, this, SLOT( onHelpOnline() ) ); + as->setData( "salome-platform.org" ); + createMenu( as, helpMenu, -1, 0 ); + id++; + + QString forum = tr ( "SALOME_FORUM" ); + + QAction* af = createAction( helpMenu, forum, + resMgr->loadPixmap( "LightApp", tr( "ICON_WWW" ), false ), + forum, forum, + 0, desk, false, this, SLOT( onHelpOnline() ) ); + af->setData( "salome-platform.org/forum" ); + createMenu( af, helpMenu, -1, 0 ); + id++; + + createMenu( separator(), helpMenu, -1, 0 ); + + // YouTube channel + QString video = tr ( "SALOME_VIDEO_TUTORIALS" ); + QAction* av = createAction( helpMenu, video, + resMgr->loadPixmap( "LightApp", tr( "ICON_LIFE_RIGN" ), false ), + video, video, + 0, desk, false, this, SLOT( onHelpOnline() ) ); + av->setData( "www.youtube.com/playlist?list=PLgvBxFyGVRbZZz4wVvP36xXQL-S81RZsc" ); + createMenu( av, helpMenu, -1, 0 ); + id++; + + QStringList aModuleList; modules( aModuleList, false ); aModuleList.prepend( "GUI" ); aModuleList.prepend( "KERNEL" ); - int id = LightApp_Application::UserID + FIRST_HELP_ID; - QString aModule; foreach( aModule, aModuleList ) { if ( aModule.isEmpty() ) // module title (user name) @@ -691,14 +758,11 @@ void LightApp_Application::createActions() QStringList::Iterator it; for ( it = modList.begin(); it != modList.end(); ++it ) { - if ( !isLibExists( *it ) ) + if ( !isModuleAccessible( *it ) ) continue; QString modName = moduleName( *it ); - if ( !isModuleAccessible( *it ) ) - continue; - QString iconName; if ( iconMap.contains( *it ) ) iconName = iconMap[*it]; @@ -707,12 +771,12 @@ void LightApp_Application::createActions() if ( icon.isNull() ) { icon = modIcon; - INFOS ( "\n****************************************************************" << std::endl - << "* Icon for " << (*it).toLatin1().constData() - << " not found. Using the default one." << std::endl - << "****************************************************************" << std::endl ); + INFOS( std::endl << + "****************************************************************" << std::endl << + " Warning: icon for " << qPrintable(*it) << " is not found!" << std::endl << + " Using the default icon." << std::endl << + "****************************************************************" << std::endl); } - icon = Qtx::scaleIcon( icon, iconSize ); moduleAction->insertModule( *it, icon ); @@ -776,8 +840,10 @@ void LightApp_Application::createActions() createMenu( MRUId, fileMenu, 100, -1 ); createMenu( separator(), fileMenu, -1, 100, -1 ); +#ifdef USE_SALOME_STYLE createAction( StyleId, tr( "TOT_THEME" ), QIcon(), tr( "MEN_DESK_THEME" ), tr( "PRP_THEME" ), 0, desk, false, this, SLOT( onStylePreferences() ) ); +#endif // USE_SALOME_STYLE createAction( FullScreenId, tr( "TOT_FULLSCREEN" ), QIcon(), tr( "MEN_DESK_FULLSCREEN" ), tr( "PRP_FULLSCREEN" ), Qt::Key_F11, desk, false, this, SLOT( onFullScreen() ) ); @@ -785,11 +851,13 @@ void LightApp_Application::createActions() int viewMenu = createMenu( tr( "MEN_DESK_VIEW" ), -1 ); createMenu( separator(), viewMenu, -1, 20, -1 ); +#ifdef USE_SALOME_STYLE createMenu( StyleId, viewMenu, 20, -1 ); +#endif // USE_SALOME_STYLE createMenu( FullScreenId, viewMenu, 20, -1 ); int modTBar = createTool( tr( "INF_TOOLBAR_MODULES" ), // title (language-dependant) - QString( "SalomeModules" ) ); // name (language-independant) + QString( "SalomeModules" ) ); // name (language-independant) createTool( ModulesListId, modTBar ); } @@ -979,6 +1047,7 @@ void LightApp_Application::onHelpAbout() */ void LightApp_Application::onSelection() { + //MESSAGE("onSelection") onSelectionChanged(); if ( activeModule() && activeModule()->inherits( "LightApp_Module" ) ) @@ -1062,16 +1131,23 @@ public: const QString& theApp, const QString& theParams, const QString& theHelpFile, - const QString& theContext = QString() ) + const QString& theContext = QString(), + //For the external browser always specify 'file://' protocol, + //because some WEB browsers (for example Mozilla Firefox) can't open local file without protocol. + const QString& theProtocol = QString("file://"), + const bool isFile = true) : myApp( theApp ), myParams( theParams ), myContext( theContext ), myStatus(0), myLApp( app ) { - //For the external browser always specify 'file://' protocol, - //because some WEB browsers (for example Mozilla Firefox) can't open local file without protocol. - myHelpFile = QString("file://%1").arg( QFileInfo( theHelpFile ).canonicalFilePath() ); + QString path_begin = theProtocol+"%1"; + QString path_end = theHelpFile; + if( isFile ) { + path_end = QFileInfo( theHelpFile ).canonicalFilePath(); + } + myHelpFile = path_begin.arg( path_end ); } virtual void run() @@ -1123,8 +1199,12 @@ void LightApp_Application::onHelpContentsModule() anApp.append( quote ); #endif QString aParams = resMgr->stringValue("ExternalBrowser", "parameters"); +#if DISABLE_QTXWEBBROWSER + bool useExtBrowser = true; +#else bool useExtBrowser = resMgr->booleanValue("ExternalBrowser", "use_external_browser", false ); - +#endif + if( useExtBrowser ) { if ( !anApp.isEmpty() ) { RunBrowser* rs = new RunBrowser( this, anApp, aParams, helpFile ); @@ -1193,7 +1273,11 @@ void LightApp_Application::onHelpContextModule( const QString& theComponentName, anApp.append( quote ); #endif +#if DISABLE_QTXWEBBROWSER + bool useExtBrowser = true; +#else bool useExtBrowser = resMgr->booleanValue("ExternalBrowser", "use_external_browser", false ); +#endif if(useExtBrowser) { QString aParams = resMgr->stringValue("ExternalBrowser", "parameters"); @@ -1218,6 +1302,57 @@ void LightApp_Application::onHelpContextModule( const QString& theComponentName, } } +/*! + SLOT: Displays help contents for choosen module +*/ +void LightApp_Application::onHelpOnline() +{ + const QAction* a = (QAction*) sender(); + QString url = a->data().toString(); + if ( url.isEmpty() ) return; + + SUIT_ResourceMgr* resMgr = resourceMgr(); + QString platform; +#ifdef WIN32 + platform = "winapplication"; +#else + platform = "application"; +#endif + QString anApp = resMgr->stringValue("ExternalBrowser", platform); +#ifdef WIN32 + QString quote("\""); + anApp.prepend( quote ); + anApp.append( quote ); +#endif + QString aParams = resMgr->stringValue("ExternalBrowser", "parameters"); +#if DISABLE_QTXWEBBROWSER + bool useExtBrowser = true; +#else + bool useExtBrowser = resMgr->booleanValue("ExternalBrowser", "use_external_browser", false ); +#endif + + if( useExtBrowser ) { + if ( !anApp.isEmpty() ) { + RunBrowser* rs = new RunBrowser( this, anApp, aParams, url, "", "http://", false ); + rs->start(); + } + else { + if ( SUIT_MessageBox::question( desktop(), tr( "WRN_WARNING" ), tr( "DEFINE_EXTERNAL_BROWSER" ), + SUIT_MessageBox::Yes | SUIT_MessageBox::No, + SUIT_MessageBox::Yes ) == SUIT_MessageBox::Yes ) + + showPreferences( tr( "PREF_APP" ) ); + } + } + else { + QStringList parameters; + parameters << QString( "--language=%1" ).arg( resMgr->stringValue( "language", "language" ) ); + parameters << QString( "--add=%1" ).arg( QApplication::instance()->applicationPid() ); + parameters << "http://" + url; + QProcess::startDetached( "HelpBrowser", parameters ); + } +} + /*! Sets enable or disable some actions on selection changed. */ @@ -1275,8 +1410,8 @@ void LightApp_Application::insertDockWindow( const int id, QWidget* wid ) connect( dock, SIGNAL( destroyed( QObject* ) ), this, SLOT( onWCDestroyed( QObject* ) ) ); dock->setFeatures( QDockWidget::AllDockWidgetFeatures ); - dock->setObjectName( wid->objectName().isEmpty() ? QString( "window_%1" ).arg( id ) : - QString( "%1Dock" ).arg( wid->objectName() ) ); + 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 ) ), @@ -1425,19 +1560,31 @@ SUIT_ViewManager* LightApp_Application::getViewManager( const QString& vmType, c { SUIT_ViewManager* aVM = viewManager( vmType ); SUIT_ViewManager* anActiveVM = CAM_Application::activeViewManager(); - + MESSAGE("vmType: " << vmType.toStdString() << " aVM: " << aVM << " anActiveVM: " << anActiveVM ); if ( anActiveVM && anActiveVM->getType() == vmType ) - aVM = anActiveVM; + { + MESSAGE("aVM = anActiveVM"); + aVM = anActiveVM; + } - if ( aVM && create ) + if ( aVM && !aVM->getDetached() && create ) { if ( !aVM->getActiveView() ) - aVM->createView(); + { + MESSAGE("aVM->createView()"); + aVM->createView(); + } else - desktop()->setActiveWindow( aVM->getActiveView() ); + { + MESSAGE("desktop()->setActiveWindow: " << aVM->getActiveView()); + desktop()->setActiveWindow( aVM->getActiveView() ); + } } else if ( create ) - aVM = createViewManager( vmType ); + { + MESSAGE("aVM = createViewManager( vmType )"); + aVM = createViewManager( vmType ); + } return aVM; } @@ -1446,7 +1593,7 @@ SUIT_ViewManager* LightApp_Application::getViewManager( const QString& vmType, c Creates view manager of some type \param vmType - type of view manager */ -SUIT_ViewManager* LightApp_Application::createViewManager( const QString& vmType ) +SUIT_ViewManager* LightApp_Application::createViewManager( const QString& vmType, bool detached ) { SUIT_ResourceMgr* resMgr = resourceMgr(); @@ -1498,7 +1645,7 @@ SUIT_ViewManager* LightApp_Application::createViewManager( const QString& vmType #ifndef DISABLE_PVVIEWER if( vmType == PVViewer_Viewer::Type() ) { - if ( viewMgr = dynamic_cast( getViewManager( vmType, false ) ) ) { + if (( viewMgr = dynamic_cast( getViewManager( vmType, false )))) { viewMgr->getActiveView()->setFocus(); return 0; } else { @@ -1535,7 +1682,6 @@ SUIT_ViewManager* LightApp_Application::createViewManager( const QString& vmType 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() ), @@ -1546,7 +1692,6 @@ SUIT_ViewManager* LightApp_Application::createViewManager( const QString& vmType 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() ) ); @@ -1604,6 +1749,7 @@ SUIT_ViewManager* LightApp_Application::createViewManager( const QString& vmType if ( !viewMgr ) return 0; + viewMgr->setDetached(detached); addViewManager( viewMgr ); SUIT_ViewWindow* viewWin = viewMgr->createViewWindow(); @@ -1739,7 +1885,7 @@ void LightApp_Application::onStudySaved( SUIT_Study* s ) { QtxMRUAction* mru = ::qobject_cast( action( MRUId ) ); if ( mru && s ) - mru->insert( s->studyName() ); + mru->insert( s->studyName() ); emit studySaved(); } @@ -1749,7 +1895,7 @@ void LightApp_Application::onStudyClosed( SUIT_Study* s ) { /* disconnect( this, SIGNAL( viewManagerRemoved( SUIT_ViewManager* ) ), - this, SLOT( onViewManagerRemoved( SUIT_ViewManager* ) ) ); + this, SLOT( onViewManagerRemoved( SUIT_ViewManager* ) ) ); */ // stop auto-save timer @@ -1800,12 +1946,10 @@ void LightApp_Application::studyCreated( SUIT_Study* s ) } /*!Gets file filter. - *\retval QString "(*.bin)" + *\retval QString "(*.hdf)" */ -QString LightApp_Application::getFileFilter() const +QString LightApp_Application::getFileFilter( bool /*open*/) const { - //return "(*.bin)"; - // HDF persistence return "(*.hdf)"; } @@ -2012,8 +2156,11 @@ QWidget* LightApp_Application::createWindow( const int flag ) // Create OBSelector new LightApp_OBSelector( ob, mySelMgr ); - +#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) ob->treeView()->header()->setResizeMode(SUIT_DataObject::VisibilityId, QHeaderView::Fixed); +#else + ob->treeView()->header()->setSectionResizeMode(SUIT_DataObject::VisibilityId, QHeaderView::Fixed); +#endif ob->treeView()->header()->moveSection(SUIT_DataObject::NameId,SUIT_DataObject::VisibilityId); ob->treeView()->setColumnWidth(SUIT_DataObject::VisibilityId, VISIBILITY_COLUMN_WIDTH); ob->setProperty( "shortcut", QKeySequence( "Alt+Shift+O" ) ); @@ -2023,15 +2170,14 @@ QWidget* LightApp_Application::createWindow( const int flag ) #ifndef DISABLE_PYCONSOLE else if ( flag == WT_PyConsole ) { - PyConsole_Console* pyCons = new PyConsole_EnhConsole( desktop(), getPyInterp() ); + PyConsole_Console* pyCons = new PyConsole_Console( desktop(), new LightApp_PyEditor( getPyInterp() ) ); pyCons->setObjectName( "pythonConsole" ); pyCons->setWindowTitle( tr( "PYTHON_CONSOLE" ) ); - pyCons->setFont(resourceMgr()->fontValue( "PyConsole", "font" )); - pyCons->setIsShowBanner(resourceMgr()->booleanValue( "PyConsole", "show_banner", true )); + pyCons->setFont( resMgr->fontValue( "PyConsole", "font" ) ); + pyCons->setIsShowBanner( resMgr->booleanValue( "PyConsole", "show_banner", true ) ); + pyCons->setAutoCompletion( resMgr->booleanValue( "PyConsole", "auto_completion", true ) ); pyCons->setProperty( "shortcut", QKeySequence( "Alt+Shift+P" ) ); - wid = pyCons; - pyCons->connectPopupRequest( this, SLOT( onConnectPopupRequest( SUIT_PopupClient*, QContextMenuEvent* ) ) ); } #endif else if ( flag == WT_LogWindow ) @@ -2083,6 +2229,7 @@ LightApp_Preferences* LightApp_Application::preferences( const bool crt ) const { _prefs_ = new LightApp_Preferences( resourceMgr() ); that->createPreferences( _prefs_ ); + qAddPostRoutine( LightAppCleanUpAppResources ); } that->myPrefs = _prefs_; @@ -2112,7 +2259,7 @@ LightApp_Preferences* LightApp_Application::preferences( const bool crt ) const for ( QStringList::const_iterator it = modNameList.begin(); it != modNameList.end(); ++it ) { - if ( !app->isLibExists( *it ) || _prefs_->hasModule( *it ) ) + if ( !app->isModuleAccessible( *it ) || _prefs_->hasModule( *it ) ) continue; int modId = _prefs_->addPreference( *it ); @@ -2207,10 +2354,15 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref ) LightApp_Preferences::Selector, "language", "language" ); QStringList aLangs = SUIT_Session::session()->resourceMgr()->stringValue( "language", "languages", "en" ).split( "," ); QList aIcons; + QList aNumbers; + QStringList aTitles; foreach ( QString aLang, aLangs ) { aIcons << QPixmap( QString( ":/images/%1" ).arg( aLang ) ); + aNumbers << aLang; + aTitles << langToName( aLang ); } - pref->setItemProperty( "strings", aLangs, curLang ); + pref->setItemProperty( "strings", aTitles, curLang ); + pref->setItemProperty( "ids", aNumbers, curLang ); pref->setItemProperty( "icons", aIcons, curLang ); pref->setItemProperty( "restart", true, curLang ); @@ -2238,6 +2390,7 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref ) // .... -> ascii save mode pref->addPreference( tr( "PREF_ASCII_FILE" ), studyGroup, LightApp_Preferences::Bool, "Study", "ascii_file" ); // .... -> store windows geometry + pref->addPreference( tr( "PREF_LOAD_LIGHT" ), studyGroup, LightApp_Preferences::Bool, "Study", "autoload_light_modules" ); pref->addPreference( tr( "PREF_STORE_POS" ), studyGroup, LightApp_Preferences::Bool, "Study", "store_positions" ); pref->addPreference( "", studyGroup, LightApp_Preferences::Space ); pref->addPreference( tr( "PREF_STORE_TOOL_POS" ), studyGroup, LightApp_Preferences::Bool, "Study", "store_tool_positions" ); @@ -2250,7 +2403,12 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref ) // ... "Study properties" group <> // ... "Help browser" group <> +#ifndef DISABLE_QTXWEBBROWSER int extgroup = pref->addPreference( tr( "PREF_GROUP_EXT_BROWSER" ), genTab, LightApp_Preferences::Auto, "ExternalBrowser", "use_external_browser"); +#else + int extgroup = pref->addPreference( tr( "PREF_GROUP_EXT_BROWSER" ), genTab ); +#endif + #ifdef WIN32 QString platform = "winapplication"; #else @@ -2265,10 +2423,13 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref ) // ... "Python console properties" group <> int pythonConsoleGroup = pref->addPreference( tr( "PREF_GROUP_PY_CONSOLE" ), genTab ); + pref->setItemProperty( "columns", 2, pythonConsoleGroup ); // .... -> font pref->addPreference( tr( "PREF_FONT" ), pythonConsoleGroup, LightApp_Preferences::Font, "PyConsole", "font" ); // .... -> show banner pref->addPreference( tr( "PREF_SHOW_BANNER" ), pythonConsoleGroup, LightApp_Preferences::Bool, "PyConsole", "show_banner" ); + // .... -> auto-completion + pref->addPreference( tr( "PREF_AUTO_COMPLETION" ), pythonConsoleGroup, LightApp_Preferences::Bool, "PyConsole", "auto_completion" ); // ... "Python console properties" group <> // ... "MRU" preferences group <> @@ -2295,7 +2456,7 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref ) pref->setItemProperty( "columns", 2, fullScreenGroup ); // .... -> automatic hiding toolbars pref->addPreference( tr( "PREF_FULL_SCREEN_AUTO" ), fullScreenGroup, - LightApp_Preferences::Bool, "OCCViewer", "automatic_hiding" ); + LightApp_Preferences::Bool, "OCCViewer", "automatic_hiding" ); // ... "Full-screen" group <> // .. "General" preferences tab <> @@ -2350,7 +2511,7 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref ) 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 ); @@ -2414,14 +2575,14 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref ) // .... -> Reverse stereo pref->addPreference( tr( "PREF_REVERSE_STEREO" ), stereoGroup, - LightApp_Preferences::Bool, "OCCViewer", "reverse_stereo" ); + LightApp_Preferences::Bool, "OCCViewer", "reverse_stereo" ); // .... -> Enable V-Sync pref->addPreference( tr( "PREF_ENABLE_VSYNC" ), stereoGroup, - LightApp_Preferences::Bool, "OCCViewer", "enable_vsync" ); + 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 + LightApp_Preferences::Bool, "OCCViewer", "enable_quad_buffer_support" ); + // ... "Background" group <> int bgGroup = pref->addPreference( tr( "PREF_VIEWER_BACKGROUND" ), occGroup ); // pref->setItemProperty( "columns", 2, bgGroup ); @@ -2482,18 +2643,18 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref ) int occSelectionGroup = pref->addPreference( tr( "PREF_GROUP_SELECTION" ), occGroup ); pref->setItemProperty( "columns", 2, occSelectionGroup ); // .... -> enable preselection - pref->addPreference( tr( "PREF_ENABLE_PRESELECTION" ), occSelectionGroup, - LightApp_Preferences::Bool, "OCCViewer", "enable_preselection" ); + pref->addPreference( tr( "PREF_ENABLE_PRESELECTION" ), occSelectionGroup, + LightApp_Preferences::Bool, "OCCViewer", "enable_preselection" ); // .... -> enable selection - pref->addPreference( tr( "PREF_ENABLE_SELECTION" ), occSelectionGroup, - LightApp_Preferences::Bool, "OCCViewer", "enable_selection" ); + pref->addPreference( tr( "PREF_ENABLE_SELECTION" ), occSelectionGroup, + LightApp_Preferences::Bool, "OCCViewer", "enable_selection" ); // ... "Selection" group <> // ... "Clipping" group <> int occClippingGroup = pref->addPreference( tr( "PREF_GROUP_CLIPPING" ), occGroup ); // .... -> clipping color pref->addPreference( tr( "PREF_CLIPPING_COLOR" ), occClippingGroup, - LightApp_Preferences::Color, "OCCViewer", "clipping_color" ); + LightApp_Preferences::Color, "OCCViewer", "clipping_color" ); int texturePref = pref->addPreference( "", occClippingGroup, LightApp_Preferences::Frame ); pref->setItemProperty( "columns", 2, texturePref ); // .... -> use default texture @@ -2515,6 +2676,61 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref ) pref->setItemProperty( "step", 0.1, scaleFactor ); // ... "Clipping" group <> + // ... "Ray tracing" group <> + 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 <> + + // ... "Light source" group <> + 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 <> + // ... -> empty frame (for layout) <> int occGen = pref->addPreference( "", occGroup, LightApp_Preferences::Frame ); pref->setItemProperty( "margin", 0, occGen ); @@ -2793,8 +3009,9 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref ) int pyeditTab = pref->addPreference( tr( "PREF_TAB_PYEDITOR" ), salomeCat ); // ... "Font settings" group <> int pyFontGroup = pref->addPreference( tr( "PREF_GROUP_PY_FONT" ), pyeditTab ); - pref->addPreference( tr( "PREF_PY_FONT" ), pyFontGroup, - LightApp_Preferences::Font, "PyEditor", "Font" ); + int pyFont = pref->addPreference( tr( "PREF_PY_FONT" ), pyFontGroup, + LightApp_Preferences::Font, "PyEditor", "Font" ); + pref->setItemProperty( "features", QtxFontEdit::Family | QtxFontEdit::Size | QtxFontEdit::UserSize, pyFont ); // ... "Font settings" group <> // ... "Display settings" group <> int pyDispGroup = pref->addPreference( tr( "PREF_GROUP_PY_DISPLAY" ), pyeditTab ); @@ -2812,6 +3029,20 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref ) pref->addPreference( tr( "PREF_PY_LINE_NUMBS_AREA" ), pyDispGroup, LightApp_Preferences::Bool, "PyEditor", "LineNumberArea" ); // ... "Display settings" group <> + + // ... "Editor settings" group <> + int pyEditGroup = pref->addPreference( tr( "PREF_GROUP_PY_EDITOR" ), pyeditTab ); + // ... -> navigation mode + int pyCompletion = pref->addPreference( tr( "PREF_PY_COMPLETION_MODE" ), pyEditGroup, + LightApp_Preferences::Selector, "PyEditor", "CompletionPolicy" ); + aValuesList.clear(); + anIndicesList.clear(); + aValuesList << tr("PREF_PY_NONE") << tr("PREF_PY_AUTO") << tr("PREF_PY_MANUAL") << tr("PREF_PY_ALWAYS"); + anIndicesList << 0 << 1 << 2 << 3 ; + pref->setItemProperty( "strings", aValuesList, pyCompletion ); + pref->setItemProperty( "indexes", anIndicesList, pyCompletion ); + // ... "Editor settings" group <> + // ... "Tab settings" group <> int pyTabGroup = pref->addPreference( tr( "PREF_GROUP_PY_TAB" ), pyeditTab ); pref->setItemProperty( "columns", 2, pyTabGroup ); @@ -3126,7 +3357,7 @@ void LightApp_Application::preferencesChanged( const QString& sec, const QString } } #endif -#if OCC_VERSION_LARGE > 0x06090000 + #ifndef DISABLE_OCCVIEWER if ( sec == QString( "OCCViewer" ) && param == QString( "stereo_type" ) ) { @@ -3263,7 +3494,7 @@ void LightApp_Application::preferencesChanged( const QString& sec, const QString } } #endif -#endif + if ( sec == QString( "3DViewer" ) && param == QString( "zooming_mode" ) ) { int mode = resMgr->integerValue( "3DViewer", "zooming_mode", 0 ); @@ -3516,6 +3747,9 @@ void LightApp_Application::preferencesChanged( const QString& sec, const QString else if ( param=="show_banner" ) { pythonConsole()->setIsShowBanner( resMgr->booleanValue( "PyConsole", "show_banner", true ) ); } + else if ( param=="auto_completion" ) { + pythonConsole()->setAutoCompletion( resMgr->booleanValue( "PyConsole", "auto_completion", true ) ); + } } #endif @@ -3549,10 +3783,15 @@ void LightApp_Application::preferencesChanged( const QString& sec, const QString } if ( sec == "desktop" && param == "opaque_resize" ) { bool opaqueResize = resMgr->booleanValue( "desktop", "opaque_resize", false ); - QMainWindow::DockOptions dopts = desktop()->dockOptions(); - if ( opaqueResize ) dopts |= QMainWindow::AnimatedDocks; - else dopts &= ~QMainWindow::AnimatedDocks; - desktop()->setDockOptions( dopts ); + // RNV: This code has been commented, because clearing of the QMainWindow::AnimatedDocks option + // leads to strange behaviour of the dockable windows (at least at qt-5.6.1): + // any dockable window can't be docked to the another area, except initial area. + // It is possible to move window to another area, but it always returns to the initial area. + // + // QMainWindow::DockOptions dopts = desktop()->dockOptions(); + // if ( opaqueResize ) dopts |= QMainWindow::AnimatedDocks; + // else dopts &= ~QMainWindow::AnimatedDocks; + // desktop()->setDockOptions( dopts ); desktop()->setOpaqueResize( opaqueResize ); if ( dynamic_cast( desktop() ) ) dynamic_cast( desktop() )->workstack()->setOpaqueResize( opaqueResize ); @@ -3568,7 +3807,7 @@ void LightApp_Application::preferencesChanged( const QString& sec, const QString if ( !vm || !vm->inherits( "Plot2d_Viewer" ) ) continue; - Plot2d_Viewer* Plot2dVM = dynamic_cast( vm ); + //Plot2d_Viewer* Plot2dVM = dynamic_cast( vm ); viewMgr->setViewModel( vm ); Plot2d_ViewWindow* wnd = dynamic_cast( viewMgr->getActiveView() ); @@ -3578,39 +3817,6 @@ void LightApp_Application::preferencesChanged( const QString& sec, const QString } } #endif - -#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 lst; - viewManagers( PyViewer_Viewer::Type(), lst ); - QListIterator 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( vm ); - - viewMgr->setViewModel( vm ); - PyViewer_ViewWindow* pyView = dynamic_cast( viewMgr->getActiveView() ); - if( pyView ) - { - pyView->setPreferences(); - } - } - } -#endif } /*! @@ -3653,10 +3859,10 @@ void LightApp_Application::loadPreferences() if ( desktop() ) { desktop()->retrieveGeometry( aResMgr->stringValue( "desktop", "geometry" ) ); bool opaqueResize = aResMgr->booleanValue( "desktop", "opaque_resize", false ); - QMainWindow::DockOptions dopts = desktop()->dockOptions(); - if ( opaqueResize ) dopts |= QMainWindow::AnimatedDocks; - else dopts &= ~QMainWindow::AnimatedDocks; - desktop()->setDockOptions( dopts ); + // QMainWindow::DockOptions dopts = desktop()->dockOptions(); + // if ( opaqueResize ) dopts |= QMainWindow::AnimatedDocks; + // else dopts &= ~QMainWindow::AnimatedDocks; + // desktop()->setDockOptions( dopts ); desktop()->setOpaqueResize( opaqueResize ); if ( dynamic_cast( desktop() ) ) dynamic_cast( desktop() )->workstack()->setOpaqueResize( opaqueResize ); @@ -3802,6 +4008,70 @@ void LightApp_Application::removeModuleAction( const QString& modName ) moduleAction->removeModule( modName ); } +bool LightApp_Application::checkModule( const QString& title ) +{ + if ( title.isEmpty() ) + return false; + + QString library = moduleLibrary( title, true ); + if ( library.isEmpty() ) + return false; + + QString name = moduleName( title ); + + bool isPyModule = library.contains( "SalomePyQtGUI" ) || library.contains( "SalomePyQtGUILight" ); + + QStringList paths; +#if defined(WIN32) + paths = QString( ::getenv( "PATH" ) ).split( ";", QString::SkipEmptyParts ); +#elif defined(__APPLE__) + paths = QString( ::getenv( "DYLD_LIBRARY_PATH" ) ).split( ":", QString::SkipEmptyParts ); +#else + paths = QString( ::getenv( "LD_LIBRARY_PATH" ) ).split( ":", QString::SkipEmptyParts ); +#endif + + bool isFound = false; + QStringList::const_iterator it; + for ( it = paths.begin(); it != paths.end() && !isFound; ++it ) + { + isFound = QFileInfo( Qtx::addSlash( *it ) + library ).exists(); + } + + if ( !isFound ) + { + INFOS( std::endl << + "****************************************************************" << std::endl << + " Warning: library " << qPrintable( library ) << " is not found!" << std::endl << + " Module " << qPrintable( title ) << " will not be available in GUI mode!" << std::endl << + "****************************************************************" << std::endl); + return false; + } + + if ( isPyModule ) + { + QString pyModule = QString( "%1GUI.py" ).arg( name ); + paths = QString( ::getenv( "PYTHONPATH" ) ).split( ":", QString::SkipEmptyParts ); + + isFound = false; + for ( it = paths.begin(); it != paths.end() && !isFound; ++it ) + { + isFound = QFileInfo( Qtx::addSlash( *it ) + pyModule ).exists(); + } + + if ( !isFound ) + { + INFOS( std::endl << + "****************************************************************" << std::endl << + " Warning: Python module " << qPrintable( pyModule ) << " is not found!" << std::endl << + " Module " << qPrintable( title ) << " will not be available in GUI mode!" << std::endl << + "****************************************************************" << std::endl); + return false; + } + } + + return true; +} + /*! Gets current windows. \param winMap - output current windows map. @@ -3946,26 +4216,26 @@ void LightApp_Application::loadDockWindowsState() if(tbMap) { QList tbList = findToolBars(); for ( QList::iterator tit = tbList.begin(); tit != tbList.end(); ++tit ) - { - QToolBar* tb = *tit; - if ( tbMap->contains( tb->objectName() ) ) { - tb->setVisible( (*tbMap)[tb->objectName()] ); - } + { + QToolBar* tb = *tit; + if ( tbMap->contains( tb->objectName() ) ) { + tb->setVisible( (*tbMap)[tb->objectName()] ); + } } } if(dwMap) { - QList dwList = qFindChildren( desktop() ); + QList dwList = desktop()->findChildren(); for ( QList::iterator dit = dwList.begin(); dit != dwList.end(); ++dit ) { - QDockWidget* dw = *dit; - - QObject* po = Qtx::findParent( dw, "QMainWindow" ); - if ( po != desktop() ) - continue; - - if ( dwMap->contains( dw->objectName() ) ) - dw->setVisible( (*dwMap)[dw->objectName()] ); + QDockWidget* dw = *dit; + + QObject* po = Qtx::findParent( dw, "QMainWindow" ); + if ( po != desktop() ) + continue; + + if ( dwMap->contains( dw->objectName() ) ) + dw->setVisible( (*dwMap)[dw->objectName()] ); } } */ @@ -4008,14 +4278,14 @@ void LightApp_Application::saveDockWindowsState() QMap tbMap, dwMap; dockWindowsState( visArr, tbMap, dwMap ); - QList tbList = qFindChildren( desktop() ); + QList tbList = desktop()->findChildren(); for ( QList::iterator it = tbList.begin(); it != tbList.end(); ++it ) { QToolBar* tb = *it; tbMap.insert( tb->objectName(), tb->toggleViewAction()->isChecked() ); } - QList dwList = qFindChildren( desktop() ); + QList dwList = desktop()->findChildren(); for ( QList::iterator it = dwList.begin(); it != dwList.end(); ++it ) { QDockWidget* wid = *it; @@ -4245,10 +4515,12 @@ void LightApp_Application::onMRUActivated( const QString& name ) void LightApp_Application::onStylePreferences() { +#ifdef USE_SALOME_STYLE Style_PrefDlg dlg( desktop() ); dlg.exec(); resourceMgr()->setValue( "Style", "use_salome_style", Style_Salome::isActive() ); +#endif // USE_SALOME_STYLE } void LightApp_Application::onFullScreen(){ @@ -4362,92 +4634,6 @@ void LightApp_Application::onGroupAllWindow() wgStack->stack(); } -/*! - \return if the library of module exists - \param moduleTitle - title of module -*/ -bool LightApp_Application::isLibExists( const QString& moduleTitle ) const -{ - if( moduleTitle.isEmpty() ) - return false; - - QString lib = moduleLibrary( moduleTitle ); - - //abd: changed libSalomePyQtGUI to SalomePyQtGUI for WIN32 - bool isPythonModule = lib.contains("SalomePyQtGUI"); - bool isPythonLightModule = lib.contains("SalomePyQtGUILight"); - - QStringList paths; -#ifdef WIN32 - paths = QString(::getenv( "PATH" )).split( ";", QString::SkipEmptyParts ); -#else - paths = QString(::getenv( "LD_LIBRARY_PATH" )).split( ":", QString::SkipEmptyParts ); -#endif - - bool isLibFound = false; - QStringList::const_iterator anIt = paths.begin(), aLast = paths.end(); - for( ; anIt!=aLast; anIt++ ) - { - QFileInfo inf( Qtx::addSlash( *anIt ) + lib ); - - if( inf.exists() ) - { - isLibFound = true; - break; - } - } - - if ( !isLibFound ) - { - INFOS( "\n****************************************************************" << std::endl - << "* Warning: library " << lib.toLatin1().constData() << " cannot be found" << std::endl - << "* Module " << moduleTitle.toLatin1().constData() << " will not be available in GUI mode" << std::endl - << "****************************************************************" << std::endl ); - } - else if ( !isPythonModule && !isPythonLightModule) - return true; - - if ( isPythonModule || isPythonLightModule) - { - QString pylib = moduleName( moduleTitle ) + QString(".py"); - QString pylibgui = moduleName( moduleTitle ) + QString("GUI.py"); - - // Check the python library -// #ifdef WIN32 -// paths = QString(::getenv( "PATH" )).split( ";", QString::SkipEmptyParts ); -// #else - paths = QString(::getenv( "PYTHONPATH" )).split( ":", QString::SkipEmptyParts ); -// #endif - bool isPyLib = false, isPyGuiLib = false; - QStringList::const_iterator anIt = paths.begin(), aLast = paths.end(); - for( ; anIt!=aLast; anIt++ ) - { - QFileInfo inf( Qtx::addSlash( *anIt ) + pylib ); - QFileInfo infgui( Qtx::addSlash( *anIt ) + pylibgui ); - - if(!isPythonLightModule) - if( !isPyLib && inf.exists() ) - isPyLib = true; - - if( !isPyGuiLib && infgui.exists() ) - isPyGuiLib = true; - - if ((isPyLib || isPythonLightModule ) && isPyGuiLib && isLibFound) - return true; - } - - printf( "\n****************************************************************\n" ); - printf( "* Warning: python library for %s cannot be found:\n", moduleTitle.toLatin1().constData() ); - if (!isPyLib) - printf( "* No module named %s\n", moduleName( moduleTitle ).toLatin1().constData() ); - if (!isPyGuiLib) - printf( "* No module named %s\n", (moduleName( moduleTitle ) + QString("GUI")).toLatin1().constData() ); - printf( "****************************************************************\n" ); - return true; - } - return false; -} - /*! \return default name for an active study */ @@ -4802,12 +4988,12 @@ void LightApp_Application::onDesktopMessage( const QString& message ) QList LightApp_Application::findToolBars( const QStringList& names ) { QList aResult; - QList tbList = qFindChildren( desktop() ); + QList tbList = desktop()->findChildren(); for ( QList::iterator tit = tbList.begin(); tit != tbList.end(); ++tit ) { - QToolBar* tb = *tit; + QToolBar* tb = *tit; QObject* po = Qtx::findParent( tb, "QMainWindow" ); if ( po != desktop() ) - continue; + continue; if ( names.isEmpty() || names.contains( tb->objectName() ) ) aResult.append(tb); } @@ -4816,12 +5002,12 @@ QList LightApp_Application::findToolBars( const QStringList& names ) /*! Internal method to parse toolbars and dockable windows state. - */ -QByteArray LightApp_Application::processState(QByteArray& input, - const bool processWin, - const bool processTb, - const bool isRestoring, - 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(); @@ -4836,7 +5022,7 @@ QByteArray LightApp_Application::processState(QByteArray& input, tmpInputData >> version; tmpInputData >> dockmarker; tmpInputData >> nbDocWin; - } + } if(processWin && processTb && !isRestoring) { aRes = input; } else if(!processWin && !processTb ) { @@ -4847,7 +5033,7 @@ QByteArray LightApp_Application::processState(QByteArray& input, QList aToolBars = findToolBars(); QStringList aNames; - for ( QList::iterator tit = aToolBars.begin(); tit != aToolBars.end(); ++tit ) { + for ( QList::iterator tit = aToolBars.begin(); tit != aToolBars.end(); ++tit ) { QToolBar* tb = *tit; aNames.append(tb->objectName()); } @@ -4861,7 +5047,7 @@ QByteArray LightApp_Application::processState(QByteArray& input, if(hasDefaultState) { toolBarMarkerIndexDef = getToolbarMarkerIndex(defaultState, aNames); if(toolBarMarkerIndexDef < 0) - return aRes; + return aRes; } QDataStream anInputDataDef(&defaultState, QIODevice::ReadOnly); @@ -4877,28 +5063,28 @@ QByteArray LightApp_Application::processState(QByteArray& input, } else { //Write date from default settings if(hasDefaultState) { - aTargetData = &anInputDataDef; - aTargetIndex = toolBarMarkerIndexDef; + aTargetData = &anInputDataDef; + 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; - } + //If no default state, write current snapshot of the dockable windows + if(isRestoring) { + aTargetData = &anInputDataCur; + int toolBarMarkerIndexCur = getToolbarMarkerIndex(currentArr, aNames); + aTargetIndex = toolBarMarkerIndexCur; + } } } if(aTargetData && aTargetIndex >= 0 ) { aTargetData->device()->seek(0); while( aTargetData->device()->pos() < aTargetIndex ) { - uchar ch; - *aTargetData >> ch; - aData<> ch; + aData<= 0) { int index; if(!isDockWinWriten ) { - //Write version marker - int marker, version; - aTargetData->device()->seek(0); - *aTargetData >> marker; - *aTargetData >> version; - aData << marker; - aData << version; - aData << (uchar) QDockWidgetMarker; - aData << (int) 0; - int shift = 4*sizeof(int) + sizeof(QSize); - index = aTargetIndex - shift; + //Write version marker + int marker, version; + aTargetData->device()->seek(0); + *aTargetData >> marker; + *aTargetData >> version; + aData << marker; + aData << version; + aData << (uchar) QDockWidgetMarker; + aData << (int) 0; + int shift = 4*sizeof(int) + sizeof(QSize); + index = aTargetIndex - shift; } else { - index = aTargetIndex; + index = aTargetIndex; } - + aTargetData->device()->seek(index); while(!aTargetData->atEnd()) { - uchar ch; - *aTargetData >> ch; - aData << ch; + uchar ch; + *aTargetData >> ch; + aData << ch; } } else { // Not treat toolbars aData << (uchar) QToolBarMarker; @@ -4961,7 +5147,7 @@ void LightApp_Application::emitOperationFinished( const QString& theModuleName, Update visibility state of given objects */ void LightApp_Application::updateVisibilityState( DataObjectList& theList, - SUIT_ViewModel* theViewModel ) + SUIT_ViewModel* theViewModel ) { if ( !theViewModel || theList.isEmpty() ) return; @@ -4980,14 +5166,14 @@ void LightApp_Application::updateVisibilityState( DataObjectList& theList, if ( anObjModule ) { LightApp_Displayer* aDisplayer = anObjModule->displayer(); if ( aDisplayer ) { - Qtx::VisibilityState anObjState = Qtx::UnpresentableState; + 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 ); + aStudy->setVisibilityState( obj->entry(), anObjState ); } } } @@ -5034,23 +5220,23 @@ 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 ); + 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 ); + onSaveDoc(); + closeDoc( false ); } else if ( onSaveAsDoc() ) { - if( !closeDoc( false ) ) { - result = false; - } + if( !closeDoc( false ) ) { + result = false; + } } else { - result = false; - } + result = false; + } } else if( answer == 1 ) { closeDoc( false ); @@ -5066,14 +5252,16 @@ bool LightApp_Application::checkExistingDoc() PyConsole_Interp* LightApp_Application::getPyInterp() { static PyConsole_Interp* myInterp = 0; - if ( !myInterp ) + if ( !myInterp ) { myInterp = createPyInterp(); + myInterp->initialize(); + } return myInterp; } PyConsole_Interp* LightApp_Application::createPyInterp() { - return new LightApp_PyInterp(); + return new PyConsole_Interp(); } #endif // DISABLE_PYCONSOLE