From: mkr Date: Fri, 5 Dec 2008 13:20:21 +0000 (+0000) Subject: Show/hide ParaViS menus, toolbars and dockable widgets on activate/deactivate ParaViS... X-Git-Tag: PARAVIS_TEST X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=947c7535a518c3583ec8d736fb20f4d8b03ec755;p=modules%2Fparavis.git Show/hide ParaViS menus, toolbars and dockable widgets on activate/deactivate ParaViS module (full Salome configuration). --- diff --git a/resources/SalomeApp.xml b/resources/SalomeApp.xml index db2b2768..6dee7c9f 100644 --- a/resources/SalomeApp.xml +++ b/resources/SalomeApp.xml @@ -7,5 +7,7 @@
+ +
diff --git a/src/PVGUI/PVGUI_Module.cxx b/src/PVGUI/PVGUI_Module.cxx index 15aee11a..c06baf2a 100644 --- a/src/PVGUI/PVGUI_Module.cxx +++ b/src/PVGUI/PVGUI_Module.cxx @@ -36,6 +36,7 @@ #include #include #include +#include #include #include @@ -150,7 +151,10 @@ PVGUI_ProcessModuleHelper* PVGUI_Module::pqImplementation::myPVHelper = 0; */ PVGUI_Module::PVGUI_Module() : LightApp_Module( "PARAVIS" ), - Implementation( 0 ) + Implementation( 0 ), + mySelectionControlsTb( -1 ), + mySourcesMenuId( -1 ), + myFiltersMenuId( -1 ) { } @@ -300,6 +304,8 @@ void PVGUI_Module::showView( bool toShow ) // Now that we're ready, initialize everything ... Implementation->Core.initializeStates(); } + else + restoreDockWidgetsState(); } /*! @@ -308,9 +314,9 @@ void PVGUI_Module::showView( bool toShow ) void PVGUI_Module::onUndoLabel( const QString& label ) { action(UndoId)->setText( - label.isEmpty() ? tr("Can't Undo") : QString(tr("&Undo %1")).arg(label)); + label.isEmpty() ? tr("MEN_CANTUNDO") : QString(tr("MEN_UNDO_ACTION")).arg(label)); action(UndoId)->setStatusTip( - label.isEmpty() ? tr("Can't Undo") : QString(tr("Undo %1")).arg(label)); + label.isEmpty() ? tr("MEN_CANTUNDO") : QString(tr("MEN_UNDO_ACTION_TIP")).arg(label)); } /*! @@ -319,9 +325,9 @@ void PVGUI_Module::onUndoLabel( const QString& label ) void PVGUI_Module::onRedoLabel( const QString& label ) { action(RedoId)->setText( - label.isEmpty() ? tr("Can't Redo") : QString(tr("&Redo %1")).arg(label)); + label.isEmpty() ? tr("MEN_CANTREDO") : QString(tr("MEN_REDO_ACTION")).arg(label)); action(RedoId)->setStatusTip( - label.isEmpty() ? tr("Can't Redo") : QString(tr("Redo %1")).arg(label)); + label.isEmpty() ? tr("MEN_CANTREDO") : QString(tr("MEN_REDO_ACTION_TIP")).arg(label)); } /*! @@ -330,9 +336,9 @@ void PVGUI_Module::onRedoLabel( const QString& label ) void PVGUI_Module::onCameraUndoLabel( const QString& label ) { action(CameraUndoId)->setText( - label.isEmpty() ? tr("Can't Undo Camera") : QString(tr("U&ndo %1")).arg(label)); + label.isEmpty() ? tr("MEN_CANT_CAMERA_UNDO") : QString(tr("MEN_CAMERA_UNDO_ACTION")).arg(label)); action(CameraUndoId)->setStatusTip( - label.isEmpty() ? tr("Can't Undo Camera") : QString(tr("Undo %1")).arg(label)); + label.isEmpty() ? tr("MEN_CANT_CAMERA_UNDO") : QString(tr("MEN_CAMERA_UNDO_ACTION_TIP")).arg(label)); } /*! @@ -341,9 +347,9 @@ void PVGUI_Module::onCameraUndoLabel( const QString& label ) void PVGUI_Module::onCameraRedoLabel( const QString& label ) { action(CameraRedoId)->setText( - label.isEmpty() ? tr("Can't Redo Camera") : QString(tr("R&edo %1")).arg(label)); + label.isEmpty() ? tr("MEN_CANT_CAMERA_REDO") : QString(tr("MEN_CAMERA_REDO_ACTION")).arg(label)); action(CameraRedoId)->setStatusTip( - label.isEmpty() ? tr("Can't Redo Camera") : QString(tr("Redo %1")).arg(label)); + label.isEmpty() ? tr("MEN_CANT_CAMERA_REDO") : QString(tr("MEN_CAMERA_REDO_ACTION_TIP")).arg(label)); } /*! @@ -585,7 +591,7 @@ void PVGUI_Module::assistantError( const QString& error ) */ void PVGUI_Module::onPreAccept() { - getApp()->desktop()->statusBar()->showMessage(tr("Updating...")); + getApp()->desktop()->statusBar()->showMessage(tr("STB_PREACCEPT")); QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); } @@ -594,7 +600,7 @@ void PVGUI_Module::onPreAccept() */ void PVGUI_Module::onPostAccept() { - getApp()->desktop()->statusBar()->showMessage(tr("Ready"), 2000); + getApp()->desktop()->statusBar()->showMessage(tr("STB_POSTACCEPT"), 2000); QTimer::singleShot(0, this, SLOT(endWaitCursor())); } @@ -617,6 +623,45 @@ pqViewManager* PVGUI_Module::getMultiViewManager() const return aMVM; } +/*! + \brief Processes QEvent::ActionAdded and QEvent::ActionRemoved from Lookmarks toolbar + in order to register/unregister this action in/from QtxActionToolMgr. +*/ +bool PVGUI_Module::eventFilter( QObject* theObject, QEvent* theEvent ) +{ + QToolBar* aTB = toolMgr()->toolBar(tr("TOOL_LOOKMARKS")); + if ( theObject == aTB ) { + + if ( theEvent->type() == QEvent::ActionAdded ) { + QList anActns = aTB->actions(); + for (int i = 0; i < anActns.size(); ++i) + if ( toolMgr()->actionId(anActns.at(i)) == -1 ) { + toolMgr()->setUpdatesEnabled(false); + createTool( anActns.at(i), tr("TOOL_LOOKMARKS") ); + toolMgr()->setUpdatesEnabled(true); + } + } + + if ( theEvent->type() == QEvent::ActionRemoved ) { + QList anActns = aTB->actions(); + QIntList aIDL = toolMgr()->idList(); + for (int i = 0; i < aIDL.size(); ++i) { + if ( toolMgr()->action(aIDL.at(i))->parent() == aTB + && + !anActns.contains( toolMgr()->action(aIDL.at(i)) ) ) { + toolMgr()->setUpdatesEnabled(false); + toolMgr()->unRegisterAction( aIDL.at(i) ); + toolMgr()->remove( aIDL.at(i), tr("TOOL_LOOKMARKS") ); + toolMgr()->setUpdatesEnabled(true); + } + } + } + + } + + return QObject::eventFilter( theObject, theEvent ); +} + /*! \brief Activate module. \param study current study @@ -628,10 +673,15 @@ bool PVGUI_Module::activateModule( SUIT_Study* study ) bool isDone = LightApp_Module::activateModule( study ); if ( !isDone ) return false; + if ( mySourcesMenuId != -1 ) menuMgr()->show(mySourcesMenuId); + if ( myFiltersMenuId != -1 ) menuMgr()->show(myFiltersMenuId); setMenuShown( true ); + setToolShown( true ); showView( true ); + toolMgr()->toolBar(tr("TOOL_LOOKMARKS"))->installEventFilter(this); + // Make default server connection if ( Implementation ) Implementation->Core.makeDefaultConnectionIfNoneExists(); @@ -648,8 +698,15 @@ bool PVGUI_Module::activateModule( SUIT_Study* study ) */ bool PVGUI_Module::deactivateModule( SUIT_Study* study ) { + toolMgr()->toolBar(tr("TOOL_LOOKMARKS"))->removeEventFilter(this); + // hide menus + menuMgr()->hide(mySourcesMenuId); + menuMgr()->hide(myFiltersMenuId); setMenuShown( false ); + setToolShown( false ); + + saveDockWidgetsState(); return LightApp_Module::deactivateModule( study ); } diff --git a/src/PVGUI/PVGUI_Module.h b/src/PVGUI/PVGUI_Module.h index 56efb877..210b89e1 100644 --- a/src/PVGUI/PVGUI_Module.h +++ b/src/PVGUI/PVGUI_Module.h @@ -29,6 +29,7 @@ #include class QMenu; +class QDockWidget; class LightApp_Selection; class LightApp_SelectionMgr; class PVGUI_ProcessModuleHelper; @@ -164,6 +165,8 @@ public: pqViewManager* getMultiViewManager() const; + virtual bool eventFilter( QObject*, QEvent* ); + protected: //virtual CAM_DataModel* createDataModel(); @@ -191,6 +194,12 @@ private: //! Create dock widgets context menus void setupDockWidgetsContextMenu(); + //! Save states of dockable ParaView widgets + void saveDockWidgetsState(); + + //! Restore states of dockable ParaView widgets + void restoreDockWidgetsState(); + //! Shows or hides ParaView view window void showView( bool ); @@ -235,6 +244,10 @@ private: pqImplementation* Implementation; int mySelectionControlsTb; + int mySourcesMenuId; + int myFiltersMenuId; + + QList myDockWidgets; }; #endif // PVGUI_Module_H diff --git a/src/PVGUI/PVGUI_Module_actions.cxx b/src/PVGUI/PVGUI_Module_actions.cxx index 4b5ff1c2..c2469df2 100644 --- a/src/PVGUI/PVGUI_Module_actions.cxx +++ b/src/PVGUI/PVGUI_Module_actions.cxx @@ -553,11 +553,15 @@ void PVGUI_Module::pvCreateMenus() createMenu( OpenFileId, aPVMnu, 5 ); // Recent Files - Implementation->RecentFilesMenu = - new pqRecentFilesMenu( *menuMgr()->findMenu( createMenu( tr( "MEN_RECENT_FILES" ), aPVMnu, -1, 5 ) ), - getApp()->desktop() ); + int aMenuId = createMenu( tr( "MEN_RECENT_FILES" ), aPVMnu, -1, 5 ); + QMenu* aMenu = menuMgr()->findMenu( aMenuId ); + Implementation->RecentFilesMenu = new pqRecentFilesMenu( *aMenu, getApp()->desktop() ); connect( Implementation->RecentFilesMenu, SIGNAL( serverConnectFailed() ), &Implementation->Core, SLOT( makeDefaultConnectionIfNoneExists() ) ); + QList anActns = aMenu->actions(); + for (int i = 0; i < anActns.size(); ++i) + createMenu( anActns.at(i), aMenuId ); + createMenu( separator(), aPVMnu, -1, 5 ); @@ -629,8 +633,8 @@ void PVGUI_Module::pvCreateMenus() // Install ParaView managers for "Sources" menu QMenu* aRes = 0; - aPVMnu = createMenu( tr( "MEN_DESK_SOURCES" ), -1, -1, 60 ); - if ( (aRes = getMenu( aPVMnu )) ) { + mySourcesMenuId = createMenu( tr( "MEN_DESK_SOURCES" ), -1, -1, 60 ); + if ( (aRes = getMenu( mySourcesMenuId )) ) { Implementation->Core.setSourceMenu( aRes ); connect( &Implementation->Core, SIGNAL( enableSourceCreate(bool) ), aRes, SLOT( setEnabled(bool) ) ); @@ -639,8 +643,8 @@ void PVGUI_Module::pvCreateMenus() // --- Menu "Filters" // Install ParaView managers for "Filters" menu - aPVMnu = createMenu( tr( "MEN_DESK_FILTERS" ), -1, -1, 70 ); - if ( (aRes = getMenu( aPVMnu )) ) { + myFiltersMenuId = createMenu( tr( "MEN_DESK_FILTERS" ), -1, -1, 70 ); + if ( (aRes = getMenu( myFiltersMenuId )) ) { Implementation->Core.setFilterMenu( aRes ); connect( &Implementation->Core, SIGNAL( enableFilterCreate(bool) ), aRes, SLOT( setEnabled(bool) ) ); @@ -793,12 +797,16 @@ void PVGUI_Module::pvCreateToolBars() // --- Toolbar "Representation" - aTB = toolMgr()->toolBar( createTool( tr("TOOL_REPRESENTATION") ) ); + aToolId = createTool( tr("TOOL_REPRESENTATION") ); + aTB = toolMgr()->toolBar( aToolId ); + Implementation->Core.setupRepresentationToolbar(aTB); anActns = aTB->actions(); - for (int i = 0; i < anActns.size(); ++i) + for (int i = 0; i < anActns.size(); ++i) { + createTool( anActns.at(i), aToolId ); connect( &Implementation->Core, SIGNAL( enableVariableToolbar(bool) ), anActns.at(i), SLOT( setEnabled(bool) ) ); + } // --- Toolbar "Camera Controls" @@ -822,17 +830,23 @@ void PVGUI_Module::pvCreateToolBars() // --- Toolbar "Common Filters" - aTB = toolMgr()->toolBar( createTool( tr("TOOL_COMMON_FILTERS") ) ); + aToolId = createTool( tr("TOOL_COMMON_FILTERS") ); + aTB = toolMgr()->toolBar( aToolId ); + Implementation->Core.setupCommonFiltersToolbar(aTB); - //QList anActns = aTB->actions(); - //for (int i = 0; i < anActns.size(); ++i) - // createTool(anActns.at(i),aToolId); /// !!! + anActns = aTB->actions(); + for (int i = 0; i < anActns.size(); ++i) + createTool( anActns.at(i), aToolId ); // --- Toolbar "Lookmarks" - aTB = toolMgr()->toolBar(createTool( tr("TOOL_LOOKMARKS") )); + aToolId = createTool( tr("TOOL_LOOKMARKS") ); + aTB = toolMgr()->toolBar(aToolId); + aTB->setContextMenuPolicy(Qt::CustomContextMenu); aTB->setOrientation(Qt::Vertical); + aTB->setAllowedAreas(Qt::RightToolBarArea); + toolMgr()->mainWindow()->addToolBar(Qt::RightToolBarArea,aTB); Implementation->Core.setupLookmarkToolbar(aTB); } diff --git a/src/PVGUI/PVGUI_Module_widgets.cxx b/src/PVGUI/PVGUI_Module_widgets.cxx index fe50e027..28f122ca 100644 --- a/src/PVGUI/PVGUI_Module_widgets.cxx +++ b/src/PVGUI/PVGUI_Module_widgets.cxx @@ -31,8 +31,10 @@ #include #include +#include #include +#include #include #include #include @@ -40,6 +42,7 @@ #include #include #include +#include /*! \brief Create dock widgets for ParaView widgets such as object inspector, pipeline browser, etc. @@ -50,15 +53,16 @@ void PVGUI_Module::setupDockWidgets() SUIT_Desktop* desk = application()->desktop(); // See ParaView src/Applications/Client/MainWindow.cxx - QDockWidget* pipelineBrowserDock = new QDockWidget( tr( "Pipeline Browser" ), desk ); + QDockWidget* pipelineBrowserDock = new QDockWidget( tr( "TTL_PIPELINE_BROWSER" ), desk ); pipelineBrowserDock->setObjectName("pipelineBrowserDock"); pipelineBrowserDock->setAllowedAreas( Qt::LeftDockWidgetArea|Qt::NoDockWidgetArea|Qt::RightDockWidgetArea ); desk->addDockWidget( Qt::LeftDockWidgetArea, pipelineBrowserDock ); Implementation->Core.setupPipelineBrowser( pipelineBrowserDock ); pqPipelineBrowser *browser = Implementation->Core.pipelineBrowser(); Implementation->Core.pipelineMenu().setModels(browser->getModel(), browser->getSelectionModel()); + myDockWidgets.append(pipelineBrowserDock); - QDockWidget* objectInspectorDock = new QDockWidget( tr( "Object Inspector" ), desk ); + QDockWidget* objectInspectorDock = new QDockWidget( tr( "TTL_OBJECT_INSPECTOR" ), desk ); objectInspectorDock->setObjectName("objectInspectorDock"); objectInspectorDock->setAllowedAreas( Qt::LeftDockWidgetArea|Qt::NoDockWidgetArea|Qt::RightDockWidgetArea ); desk->addDockWidget( Qt::LeftDockWidgetArea, objectInspectorDock ); @@ -69,20 +73,30 @@ void PVGUI_Module::setupDockWidgets() this, SLOT( onPreAccept() ) ); connect( proxyTab->getObjectInspector(), SIGNAL( postaccept() ), this, SLOT( onPostAccept() ) ); + myDockWidgets.append(objectInspectorDock); - QDockWidget* statisticsViewDock = new QDockWidget( tr( "Statistics View" ), desk ); + QDockWidget* statisticsViewDock = new QDockWidget( tr( "TTL_STATISTICS_VIEW" ), desk ); statisticsViewDock->setObjectName("statisticsViewDock"); statisticsViewDock->setAllowedAreas( Qt::BottomDockWidgetArea|Qt::LeftDockWidgetArea|Qt::NoDockWidgetArea|Qt::RightDockWidgetArea ); desk->addDockWidget( Qt::BottomDockWidgetArea, statisticsViewDock ); Implementation->Core.setupStatisticsView( statisticsViewDock ); + myDockWidgets.append(statisticsViewDock); - QDockWidget* animationPanelDock = new QDockWidget( tr( "Animation Inspector" ), desk ); + QDockWidget* animationPanelDock = new QDockWidget( tr( "TTL_ANIMATION_INSPECTOR" ), desk ); animationPanelDock->setObjectName("animationPanelDock"); desk->addDockWidget( Qt::LeftDockWidgetArea, animationPanelDock ); pqAnimationPanel* animation_panel = Implementation->Core.setupAnimationPanel( animationPanelDock ); - animation_panel->setCurrentTimeToolbar(toolMgr()->toolBar(createTool( tr("TOOL_CURRENT_TIME_CONTROLS") ))); + + int aToolId = createTool( tr("TOOL_CURRENT_TIME_CONTROLS") ); + QToolBar* aTB = toolMgr()->toolBar( aToolId ); + animation_panel->setCurrentTimeToolbar( aTB ); + QList anActns = aTB->actions(); + for (int i = 0; i < anActns.size(); ++i) + createTool( anActns.at(i), aToolId ); + + myDockWidgets.append(animationPanelDock); - QDockWidget* lookmarkBrowserDock = new QDockWidget( tr( "Lookmark Browser" ), desk ); + QDockWidget* lookmarkBrowserDock = new QDockWidget( tr( "TTL_LOOKMARK_BROWSER" ), desk ); lookmarkBrowserDock->setObjectName("lookmarkBrowserDock"); QSizePolicy sp( QSizePolicy::Preferred, QSizePolicy::Preferred ); sp.setHorizontalStretch( 0 ); @@ -91,29 +105,34 @@ void PVGUI_Module::setupDockWidgets() lookmarkBrowserDock->setFloating( false ); desk->addDockWidget( Qt::RightDockWidgetArea, lookmarkBrowserDock ); Implementation->Core.setupLookmarkBrowser( lookmarkBrowserDock ); + myDockWidgets.append(lookmarkBrowserDock); - QDockWidget* lookmarkInspectorDock = new QDockWidget( tr( "Lookmark Inspector" ), desk ); + QDockWidget* lookmarkInspectorDock = new QDockWidget( tr( "TTL_LOOKMARK_INSPECTOR" ), desk ); lookmarkInspectorDock->setObjectName("lookmarkInspectorDock"); lookmarkInspectorDock->setAllowedAreas( Qt::RightDockWidgetArea ); desk->addDockWidget( Qt::RightDockWidgetArea, lookmarkInspectorDock ); Implementation->Core.setupLookmarkInspector( lookmarkInspectorDock ); + myDockWidgets.append(lookmarkInspectorDock); - QDockWidget* comparativePanelDock = new QDockWidget( tr( "Comparative View Inspector" ), desk ); + QDockWidget* comparativePanelDock = new QDockWidget( tr( "TTL_COMPARATIVE_VIEW_INSPECTOR" ), desk ); comparativePanelDock->setObjectName("comparativePanelDock"); desk->addDockWidget( Qt::LeftDockWidgetArea, comparativePanelDock ); pqComparativeVisPanel* cv_panel = new pqComparativeVisPanel( comparativePanelDock ); comparativePanelDock->setWidget(cv_panel); + myDockWidgets.append(comparativePanelDock); - QDockWidget* animationViewDock = new QDockWidget( tr( "Animation View" ), desk ); + QDockWidget* animationViewDock = new QDockWidget( tr( "TTL_ANIMATION_VIEW" ), desk ); animationViewDock->setObjectName("animationViewDock"); desk->addDockWidget( Qt::BottomDockWidgetArea, animationViewDock ); Implementation->Core.setupAnimationView( animationViewDock ); + myDockWidgets.append(animationViewDock); - QDockWidget* selectionInspectorDock = new QDockWidget( tr( "Selection Inspector" ), desk ); + QDockWidget* selectionInspectorDock = new QDockWidget( tr( "TTL_SELECTION_INSPECTOR" ), desk ); selectionInspectorDock->setObjectName("selectionInspectorDock"); selectionInspectorDock->setAllowedAreas( Qt::AllDockWidgetAreas ); desk->addDockWidget( Qt::LeftDockWidgetArea, selectionInspectorDock ); Implementation->Core.setupSelectionInspector( selectionInspectorDock ); + myDockWidgets.append(selectionInspectorDock); // Setup the statusbar ... Implementation->Core.setupProgressBar( desk->statusBar() ); @@ -155,3 +174,31 @@ void PVGUI_Module::setupDockWidgetsContextMenu() browserMenu->setMenuAction(action(DeleteId)); browserMenu->setMenuAction(action(CreateCustomFilterId)); } + +/*! + \brief Save states of dockable ParaView widgets. +*/ +void PVGUI_Module::saveDockWidgetsState() +{ + SUIT_Desktop* desk = application()->desktop(); + + // Save the state of the window ... + pqApplicationCore::instance()->settings()->saveState(*desk, "MainWindow"); + + for (int i = 0; i < myDockWidgets.size(); ++i) + myDockWidgets.at(i)->setParent(0); +} + +/*! + \brief Restore states of dockable ParaView widgets. +*/ +void PVGUI_Module::restoreDockWidgetsState() +{ + SUIT_Desktop* desk = application()->desktop(); + + for (int i = 0; i < myDockWidgets.size(); ++i) + myDockWidgets.at(i)->setParent(desk); + + // Restore the state of the window ... + pqApplicationCore::instance()->settings()->restoreState("MainWindow", *desk); +} diff --git a/src/PVGUI/resources/PARAVIS_msg_en.ts b/src/PVGUI/resources/PARAVIS_msg_en.ts index 0f585a35..530fa16c 100644 --- a/src/PVGUI/resources/PARAVIS_msg_en.ts +++ b/src/PVGUI/resources/PARAVIS_msg_en.ts @@ -167,6 +167,42 @@ PVGUI_Module + + TTL_PIPELINE_BROWSER + Pipeline Browser + + + TTL_OBJECT_INSPECTOR + Object Inspector + + + TTL_STATISTICS_VIEW + Statistics View + + + TTL_ANIMATION_INSPECTOR + Animation Inspector + + + TTL_LOOKMARK_BROWSER + Lookmark Browser + + + TTL_LOOKMARK_INSPECTOR + Lookmark Inspector + + + TTL_COMPARATIVE_VIEW_INSPECTOR + Comparative View Inspector + + + TTL_ANIMATION_VIEW + Animation View + + + TTL_SELECTION_INSPECTOR + Selection Inspector + TOP_OPEN_FILE Open File @@ -177,7 +213,7 @@ MEN_OPEN_FILE - &Open File... + &Open ParaView File... STB_OPEN_FILE @@ -185,7 +221,7 @@ MEN_RECENT_FILES - Recent Files + Recent ParaView Files TOP_LOAD_STATE @@ -303,6 +339,18 @@ MEN_UNDO &Undo + + MEN_CANTUNDO + Can't Undo + + + MEN_UNDO_ACTION + &Undo %1 + + + MEN_UNDO_ACTION_TIP + Undo %1 + STB_UNDO Undoes the last operation @@ -319,6 +367,18 @@ MEN_REDO &Redo + + MEN_CANTREDO + Can't Redo + + + MEN_REDO_ACTION + &Redo %1 + + + MEN_REDO_ACTION_TIP + Redo %1 + STB_REDO Redoes the last operation @@ -335,6 +395,18 @@ MEN_CAMERA_UNDO Camera Undo + + MEN_CANT_CAMERA_UNDO + Can't Undo Camera + + + MEN_CAMERA_UNDO_ACTION + U&ndo %1 + + + MEN_CAMERA_UNDO_ACTION_TIP + Undo %1 + STB_CAMERA_UNDO Undoes the last camera operation @@ -351,6 +423,18 @@ MEN_CAMERA_REDO Camera Redo + + MEN_CANT_CAMERA_REDO + Can't Redo Camera + + + MEN_CAMERA_REDO_ACTION + R&edo %1 + + + MEN_CAMERA_REDO_ACTION_TIP + Redo %1 + STB_CAMERA_REDO Redoes the last camera operation @@ -951,6 +1035,14 @@ STB_ENABLE_TOOLTIPS Enable Tooltips + + STB_PREACCEPT + Updating... + + + STB_POSTACCEPT + Ready + TOOL_ACTIVE_VARIABLE_CONTROLS Active Variable Controls