X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FPVGUI%2FPVGUI_Module.cxx;h=800fa266f10d766090baa44d62645240ff5d9132;hb=fdaf93c1e6361cebf5edcc2366e3614922c20ef2;hp=4b1b8e916d5e9452cfb8f70473d31f9225eb2b30;hpb=131810238c451ca45f00ed844144c2b46272df2b;p=modules%2Fparavis.git diff --git a/src/PVGUI/PVGUI_Module.cxx b/src/PVGUI/PVGUI_Module.cxx index 4b1b8e91..800fa266 100644 --- a/src/PVGUI/PVGUI_Module.cxx +++ b/src/PVGUI/PVGUI_Module.cxx @@ -24,25 +24,42 @@ // #include "PVGUI_Module.h" +#include "PVGUI_Module_impl.h" #include "PVGUI_ProcessModuleHelper.h" +#include "PVGUI_ViewModel.h" +#include "PVGUI_ViewManager.h" +#include "PVGUI_ViewWindow.h" -#include #include +#include +#include +#include #include #include -#include -#include -#include -#include +#include +#include #include -#include -#include -#include #include +#include #include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include #include #include @@ -112,9 +129,9 @@ void ParaViewInitializeInterpreter(vtkProcessModule* pm) vtkXdmfCS_Initialize(pm->GetInterpreter()); } -vtkPVMain* PVGUI_Module::myPVMain = 0; -pqOptions* PVGUI_Module::myPVOptions = 0; -PVGUI_ProcessModuleHelper* PVGUI_Module::myPVHelper = 0; +vtkPVMain* PVGUI_Module::pqImplementation::myPVMain = 0; +pqOptions* PVGUI_Module::pqImplementation::myPVOptions = 0; +PVGUI_ProcessModuleHelper* PVGUI_Module::pqImplementation::myPVHelper = 0; /*! \class PVGUI_Module @@ -126,7 +143,8 @@ PVGUI_ProcessModuleHelper* PVGUI_Module::myPVHelper = 0; \brief Constructor. Sets the default name for the module. */ PVGUI_Module::PVGUI_Module() -: LightApp_Module( "PARAVIS" ) + : LightApp_Module( "PARAVIS" ), + Implementation( 0 ) { } @@ -145,11 +163,15 @@ void PVGUI_Module::initialize( CAM_Application* app ) { LightApp_Module::initialize( app ); - SUIT_Desktop* desk = application()->desktop(); - - if ( pvInit() ) { - pvCreateActions(); + /* + int i = 1; + while( i ){ + i = i; } + */ + + pvInit(); + /* createAction( lgLoadFile, tr( "TOP_LOAD_FILE" ), QIcon(), tr( "MEN_LOAD_FILE" ), tr( "STB_LOAD_FILE" ), 0, desk, false, this, SLOT( onLoadFile() ) ); @@ -244,7 +266,7 @@ void PVGUI_Module::windows( QMap& m ) const */ bool PVGUI_Module::pvInit() { - if ( !myPVMain ){ + if ( !pqImplementation::myPVMain ){ // Obtain command-line arguments int argc = 0; QStringList args = QApplication::arguments(); @@ -258,26 +280,27 @@ bool PVGUI_Module::pvInit() // TODO: Set plugin dir from preferences //QApplication::setLibraryPaths(QStringList(dir.absolutePath())); - myPVMain = vtkPVMain::New(); - if ( !myPVOptions ) - myPVOptions = pqOptions::New(); - if ( !myPVHelper ) - myPVHelper = PVGUI_ProcessModuleHelper::New(); + pqImplementation::myPVMain = vtkPVMain::New(); + if ( !pqImplementation::myPVOptions ) + pqImplementation::myPVOptions = pqOptions::New(); + if ( !pqImplementation::myPVHelper ) + pqImplementation::myPVHelper = PVGUI_ProcessModuleHelper::New(); - myPVOptions->SetProcessType(vtkPVOptions::PVCLIENT); + pqImplementation::myPVOptions->SetProcessType(vtkPVOptions::PVCLIENT); // This creates the Process Module and initializes it. - int ret = myPVMain->Initialize(myPVOptions, myPVHelper, ParaViewInitializeInterpreter, - argc, argv); + int ret = pqImplementation::myPVMain->Initialize(pqImplementation::myPVOptions, + pqImplementation::myPVHelper, + ParaViewInitializeInterpreter, + argc, argv); if (!ret){ // Tell process module that we support Multiple connections. // This must be set before starting the event loop. vtkProcessModule::GetProcessModule()->SupportMultipleConnectionsOn(); - ret = myPVHelper->Run(myPVOptions); + ret = pqImplementation::myPVHelper->Run(pqImplementation::myPVOptions); } - //delete[] argv; - cout << "*** ParaView client initalized!!!" << endl; + delete[] argv; return !ret; } @@ -291,14 +314,197 @@ void PVGUI_Module::pvShutdown() { // TODO... } - + /*! - \brief Create actions for ParaView GUI operations - duplicating menus and toolbars in pqMainWindow ParaView class + \brief Shows (toShow = true) or hides ParaView view window */ -void PVGUI_Module::pvCreateActions() +void PVGUI_Module::showView( bool toShow ) { - // TODO... + // TODO: check if ParaView view already exists + if ( !Implementation ){ + LightApp_Application* anApp = getApp(); + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + PVGUI_ViewManager* viewMgr = new PVGUI_ViewManager( anApp->activeStudy(), anApp->desktop() ); + anApp->addViewManager( viewMgr ); + connect( viewMgr, SIGNAL( lastViewClosed( SUIT_ViewManager* ) ), + anApp, SLOT( onCloseView( SUIT_ViewManager* ) ) ); + //connect( viewMgr, SIGNAL( viewCreated( SUIT_ViewWindow* ) ), vm, SLOT( onViewCreated( SUIT_ViewWindow* ) ) ); + //connect( viewMgr, SIGNAL( deleteView( SUIT_ViewWindow* ) ), this, SLOT( onViewDeleted( SUIT_ViewWindow* ) ) ); + SUIT_ViewWindow* wnd = viewMgr->createViewWindow(); + + // Simulate ParaView client main window + Implementation = new pqImplementation( anApp->desktop() ); + PVGUI_ViewWindow* pvWnd = dynamic_cast( wnd ); + pvWnd->setMultiViewManager( &Implementation->Core.multiViewManager() ); + + setupDockWidgets(); + + pvCreateActions(); + pvCreateMenus(); + pvCreateToolBars(); + + setupDockWidgetsContextMenu(); + + // Now that we're ready, initialize everything ... + Implementation->Core.initializeStates(); + } +} + +/*! + \brief Manage the label of Undo operation. +*/ +void PVGUI_Module::onUndoLabel(const QString& label) +{ + action(UndoId)->setText( + label.isEmpty() ? tr("Can't Undo") : QString(tr("&Undo %1")).arg(label)); + action(UndoId)->setStatusTip( + label.isEmpty() ? tr("Can't Undo") : QString(tr("Undo %1")).arg(label)); +} + +/*! + \brief Manage the label of Redo operation. +*/ +void PVGUI_Module::onRedoLabel(const QString& label) +{ + action(RedoId)->setText( + label.isEmpty() ? tr("Can't Redo") : QString(tr("&Redo %1")).arg(label)); + action(RedoId)->setStatusTip( + label.isEmpty() ? tr("Can't Redo") : QString(tr("Redo %1")).arg(label)); +} + +/*! + \brief Manage the label of Undo Camera operation. +*/ +void PVGUI_Module::onCameraUndoLabel(const QString& label) +{ + action(CameraUndoId)->setText( + label.isEmpty() ? tr("Can't Undo Camera") : QString(tr("U&ndo %1")).arg(label)); + action(CameraUndoId)->setStatusTip( + label.isEmpty() ? tr("Can't Undo Camera") : QString(tr("Undo %1")).arg(label)); +} + +/*! + \brief Manage the label of Redo Camera operation. +*/ +void PVGUI_Module::onCameraRedoLabel(const QString& label) +{ + action(CameraRedoId)->setText( + label.isEmpty() ? tr("Can't Redo Camera") : QString(tr("R&edo %1")).arg(label)); + action(CameraRedoId)->setStatusTip( + label.isEmpty() ? tr("Can't Redo Camera") : QString(tr("Redo %1")).arg(label)); +} + +/*! + \brief Slot to delete all objects. +*/ +void PVGUI_Module::onDeleteAll() +{ + pqObjectBuilder* builder = pqApplicationCore::instance()->getObjectBuilder(); + Implementation->Core.getApplicationUndoStack()->beginUndoSet("Delete All"); + builder->destroyPipelineProxies(); + Implementation->Core.getApplicationUndoStack()->endUndoSet(); +} + +/*! + \brief Slot to check/uncheck the action for corresponding selection mode. +*/ +void PVGUI_Module::onSelectionModeChanged(int mode) +{ + if( toolMgr()->toolBar( mySelectionControlsTb )->isEnabled() ) { + if(mode == pqRubberBandHelper::SELECT) //surface selection + action(SelectCellsOnId)->setChecked(true); + else if(mode == pqRubberBandHelper::SELECT_POINTS) //surface selection + action(SelectPointsOnId)->setChecked(true); + else if(mode == pqRubberBandHelper::FRUSTUM) + action(SelectCellsThroughId)->setChecked(true); + else if(mode == pqRubberBandHelper::FRUSTUM_POINTS) + action(SelectPointsThroughId)->setChecked(true); + else if (mode == pqRubberBandHelper::BLOCKS) + action(SelectBlockId)->setChecked(true); + else // INTERACT + action(InteractId)->setChecked(true); + } +} + +/*! + \brief Slot to manage the change of axis center. +*/ +void PVGUI_Module::onShowCenterAxisChanged(bool enabled) +{ + action(ShowCenterId)->setEnabled(enabled); + action(ShowCenterId)->blockSignals(true); + pqRenderView* renView = qobject_cast( + pqActiveView::instance().current()); + action(ShowCenterId)->setChecked( renView ? renView->getCenterAxesVisibility() : false); + action(ShowCenterId)->blockSignals(false); +} + +/*! + \brief Slot to set tooltips for the first anf the last frames, i.e. a time range of animation. +*/ +void PVGUI_Module::setTimeRanges(double start, double end) +{ + action(FirstFrameId)->setToolTip(QString("First Frame (%1)").arg(start, 0, 'g')); + action(LastFrameId)->setToolTip(QString("Last Frame (%1)").arg(end, 0, 'g')); +} + +/*! + \brief Slot to manage the plaing process of animation. +*/ +void PVGUI_Module::onPlaying(bool playing) +{ + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + if(playing) { + disconnect( action(PlayId), SIGNAL( triggered() ), + &Implementation->Core.VCRController(), SLOT( onPlay() ) ); + connect( action(PlayId), SIGNAL( triggered() ), + &Implementation->Core.VCRController(), SLOT( onPause() ) ); + action(PlayId)->setIcon(QIcon(resMgr->loadPixmap("ParaView",tr("ICON_PAUSE"),false))); + action(PlayId)->setText("Pa&use"); + } + else { + connect( action(PlayId), SIGNAL( triggered() ), + &Implementation->Core.VCRController(), SLOT( onPlay() ) ); + disconnect( action(PlayId), SIGNAL( triggered() ), + &Implementation->Core.VCRController(), SLOT( onPause() ) ); + action(PlayId)->setIcon(QIcon(resMgr->loadPixmap("ParaView",tr("ICON_PLAY"),false))); + action(PlayId)->setText("&Play"); + } + + Implementation->Core.setSelectiveEnabledState(!playing); +} + +/*! + \brief Slot to add camera link. +*/ +void PVGUI_Module::onAddCameraLink() +{ + pqView* vm = pqActiveView::instance().current(); + pqRenderView* rm = qobject_cast(vm); + if(rm) rm->linkToOtherView(); + else SUIT_MessageBox::warning(getApp()->desktop(), + tr("WARNING"), tr("WRN_ADD_CAMERA_LINK")); +} + +/*! + \brief Slot to show information about ParaView. +*/ +void PVGUI_Module::onHelpAbout() +{ + pqClientAboutDialog* const dialog = new pqClientAboutDialog(getApp()->desktop()); + dialog->setAttribute(Qt::WA_DeleteOnClose); + dialog->show(); +} + +/*! + \brief Returns the ParaView multi-view manager. +*/ +pqViewManager* PVGUI_Module::getMultiViewManager() const +{ + pqViewManager* aMVM = 0; + if ( Implementation ) + aMVM = &Implementation->Core.multiViewManager(); + return aMVM; } /*! @@ -314,9 +520,16 @@ bool PVGUI_Module::activateModule( SUIT_Study* study ) setMenuShown( true ); + showView( true ); + + // Make default server connection + if ( Implementation ) + Implementation->Core.makeDefaultConnectionIfNoneExists(); + return isDone; } + /*! \brief Deactivate module. \param study current study