]> SALOME platform Git repositories - modules/hydro.git/commitdiff
Salome HOME
refs #529: use 'Apply and Close', 'Apply' and 'Close' buttons in HYDRO dialogs.
authormkr <mkr@opencascade.com>
Wed, 20 May 2015 11:31:36 +0000 (14:31 +0300)
committermkr <mkr@opencascade.com>
Wed, 20 May 2015 11:31:36 +0000 (14:31 +0300)
22 files changed:
src/HYDROGUI/HYDROGUI_ChannelOp.cxx
src/HYDROGUI/HYDROGUI_ImmersibleZoneOp.cxx
src/HYDROGUI/HYDROGUI_ImportBathymetryOp.cxx
src/HYDROGUI/HYDROGUI_ImportImageOp.cxx
src/HYDROGUI/HYDROGUI_ImportImageOp.h
src/HYDROGUI/HYDROGUI_InputPanel.cxx
src/HYDROGUI/HYDROGUI_InputPanel.h
src/HYDROGUI/HYDROGUI_Operation.cxx
src/HYDROGUI/HYDROGUI_Operation.h
src/HYDROGUI/HYDROGUI_Poly3DOp.cxx
src/HYDROGUI/HYDROGUI_PolylineOp.cxx
src/HYDROGUI/HYDROGUI_ProfileInterpolateOp.cxx
src/HYDROGUI/HYDROGUI_ProfileOp.cxx
src/HYDROGUI/HYDROGUI_RiverBottomOp.cxx
src/HYDROGUI/HYDROGUI_StreamOp.cxx
src/HYDROGUI/HYDROGUI_TranslateObstacleOp.cxx
src/HYDROGUI/HYDROGUI_TwoImagesOp.cxx
src/HYDROGUI/HYDROGUI_ZLevelsDlg.cxx
src/HYDROGUI/HYDROGUI_ZLevelsDlg.h
src/HYDROGUI/HYDROGUI_ZLevelsOp.cxx
src/HYDROGUI/HYDROGUI_ZLevelsOp.h
src/HYDROGUI/resources/HYDROGUI_msg_en.ts

index 7f96b26d3e29eb338db76904601c205260b5ac08..8bf96b1365f9e645b5a224526b93c57f495acdf3 100644 (file)
@@ -66,15 +66,17 @@ void HYDROGUI_ChannelOp::startOperation()
 
   aPanel->reset();
 
-  myEditedObject.Nullify();
+  if ( isApplyAndClose() )
+    myEditedObject.Nullify();
 
   QString aSelectedGuideLine, aSelectedProfile;
 
   QString anObjectName = HYDROGUI_Tool::GenerateObjectName( module(), tr( "DEFAULT_CHANNEL_NAME" ) );
   if ( myIsEdit )
   {
-    myEditedObject =
-      Handle(HYDROData_Channel)::DownCast( HYDROGUI_Tool::GetSelectedObject( module() ) );
+    if ( isApplyAndClose() )
+      myEditedObject =
+        Handle(HYDROData_Channel)::DownCast( HYDROGUI_Tool::GetSelectedObject( module() ) );
     if ( !myEditedObject.IsNull() )
     {
       anObjectName = myEditedObject->GetName();
index 5778c6f133362aa95a66f5744b5b81277c6fef13..b75b8ca3ff359d1cf54bee379e3002168d8e63b8 100644 (file)
@@ -82,7 +82,8 @@ void HYDROGUI_ImmersibleZoneOp::startOperation()
 
   if ( myIsEdit )
   {
-    myEditedObject = Handle(HYDROData_ImmersibleZone)::DownCast( HYDROGUI_Tool::GetSelectedObject( module() ) );
+    if ( isApplyAndClose() )
+      myEditedObject = Handle(HYDROData_ImmersibleZone)::DownCast( HYDROGUI_Tool::GetSelectedObject( module() ) );
     if( !myEditedObject.IsNull() )
     {
       anObjectName = myEditedObject->GetName();
index 3b9b0b87c7c599c70ab7920a685cb485164f3e65..61165fd33a6d2e17d3f0db4c3fb99c5824b5dfab 100644 (file)
@@ -63,7 +63,8 @@ void HYDROGUI_ImportBathymetryOp::startOperation()
 
   if( myIsEdit )
   {
-    myEditedObject = Handle(HYDROData_Bathymetry)::DownCast( HYDROGUI_Tool::GetSelectedObject( module() ) );
+    if ( isApplyAndClose() )
+      myEditedObject = Handle(HYDROData_Bathymetry)::DownCast( HYDROGUI_Tool::GetSelectedObject( module() ) );
     if( !myEditedObject.IsNull() )
     {
       QString aName = myEditedObject->GetName();
index 12a71ec54cd32c8e6deae6235edf53ef984652fc..a7f9e98c904944e390638bda0bec3a0b3a823cae 100644 (file)
@@ -78,7 +78,8 @@ void HYDROGUI_ImportImageOp::startOperation()
 
   if( myIsEdit )
   {
-    myEditedObject = Handle(HYDROData_Image)::DownCast( HYDROGUI_Tool::GetSelectedObject( module() ) );
+    if ( isApplyAndClose() )
+      myEditedObject = Handle(HYDROData_Image)::DownCast( HYDROGUI_Tool::GetSelectedObject( module() ) );
     if( !myEditedObject.IsNull() )
     {
       QImage anImage = myEditedObject->Image();
@@ -262,7 +263,8 @@ void HYDROGUI_ImportImageOp::abortOperation()
 
 void HYDROGUI_ImportImageOp::commitOperation()
 {
-  closePreview();
+  if ( isApplyAndClose() )
+    closePreview();
 
   HYDROGUI_Operation::commitOperation();
 }
@@ -497,14 +499,18 @@ bool HYDROGUI_ImportImageOp::processApply( int& theUpdateFlags,
   }
    
   // must be done after all checks and before calling SetVisible() method below
-  closePreview();
+  if ( isApplyAndClose() )
+    closePreview();
 
   if( !myIsEdit )
     module()->setObjectVisible( HYDROGUI_Tool::GetActiveGraphicsViewId( module() ), anImageObj, true );
 
   anImageObj->Update();
 
-  theUpdateFlags = UF_Model | UF_Viewer | UF_GV_Forced | UF_OCCViewer | UF_OCC_Forced;
+  theUpdateFlags = UF_Model;
+  if ( isApplyAndClose() )
+    theUpdateFlags |= UF_Viewer | UF_GV_Forced | UF_OCCViewer | UF_OCC_Forced;
+
   return true;
 }
 
@@ -532,7 +538,7 @@ bool HYDROGUI_ImportImageOp::isReferenceCorrect() const
   return isCorrect;
 }
 
-void HYDROGUI_ImportImageOp::onApply()
+void HYDROGUI_ImportImageOp::apply()
 {
   HYDROGUI_ImportImageDlg* aPanel = (HYDROGUI_ImportImageDlg*)inputPanel();
 
@@ -548,7 +554,7 @@ void HYDROGUI_ImportImageOp::onApply()
                     QMessageBox::Yes | QMessageBox::No, QMessageBox::No ) == QMessageBox::Yes;
   }
   if ( aCanApply )
-    HYDROGUI_Operation::onApply();
+    HYDROGUI_Operation::apply();
   else {
     aPanel->setRefImageName( "" );
     onRefImageActivated( aPanel->getRefImageName() );
index 365978d7e4e809d6871983d94b8c72d7530dc1a4..a3e853a0d529891724cc14210fce786542f7e29d 100644 (file)
@@ -53,9 +53,12 @@ protected:
                                            QStringList& theBrowseObjectsEntries );
   bool                       isReferenceCorrect() const;
 
-protected slots:
-  virtual void               onApply();
+  /**
+   * Apply changes done by this operation.
+   */
+  virtual void               apply();
 
+protected slots:
   void                       onCreatePreview( QImage );
   void                       onActivatePointSelection( int );
   void                       onPointCoordChanged( bool, int, bool, int );
index a496a82d7c416e31d2e9832ebab8dd8b45edd65f..a12421f284288d099b9d66fcd6493b3cd35e90d5 100644 (file)
@@ -57,17 +57,20 @@ HYDROGUI_InputPanel::HYDROGUI_InputPanel( HYDROGUI_Module* theModule, const QStr
   aBtnsLayout->setMargin( 5 );
   aBtnsLayout->setSpacing( 5 );
 
-  myCancel = new QPushButton( tr( "CANCEL" ), myBtnFrame );
+  myCancel = new QPushButton( tr( "CLOSE" ), myBtnFrame );
   myHelp = new QPushButton( tr( "HELP" ), myBtnFrame );
 
   if ( doInitLayout ) {
+    myApplyAndClose = new QPushButton( tr( "APPLY_AND_CLOSE" ), myBtnFrame );
     myApply = new QPushButton( tr( "APPLY" ), myBtnFrame );
 
+    aBtnsLayout->addWidget( myApplyAndClose, 0 );
     aBtnsLayout->addWidget( myApply, 0 );
     aBtnsLayout->addWidget( myCancel, 0 );
     aBtnsLayout->addStretch( 1 );
     aBtnsLayout->addWidget( myHelp, 0 );
 
+    connect( myApplyAndClose,  SIGNAL( clicked() ), this, SLOT( onApplyAndClose()  ) );
     connect( myApply,  SIGNAL( clicked() ), this, SLOT( onApply()  ) );
   }
   connect( myCancel, SIGNAL( clicked() ), this, SLOT( onCancel() ) );
@@ -85,12 +88,18 @@ HYDROGUI_Module* HYDROGUI_InputPanel::module() const
 
 bool HYDROGUI_InputPanel::isApplyEnabled() const
 {
-    return myApply->isEnabled();
+  return myApply->isEnabled();
 }
 
 void HYDROGUI_InputPanel::setApplyEnabled( bool on )
 {
-    myApply->setEnabled( on );
+  myApplyAndClose->setEnabled( on );
+  myApply->setEnabled( on );
+}
+
+void HYDROGUI_InputPanel::onApplyAndClose()
+{
+  emit panelApplyAndClose();
 }
 
 void HYDROGUI_InputPanel::onApply()
index b9dadee6b6b5a91d09b97894bd66f8274c59442f..7662bf9cb0495c1057e3accbfd6da3e3f1c79869 100644 (file)
@@ -53,11 +53,13 @@ public:
   void             setApplyEnabled( bool );
 
 signals:
+  void panelApplyAndClose();
   void panelApply();
   void panelCancel();
   void panelHelp();
 
 protected slots:
+  void onApplyAndClose();
   void onApply();
   void onCancel();
   void onHelp();
@@ -74,6 +76,7 @@ private:
   HYDROGUI_Module* myModule;
   QFrame* myMainFrame;
   QFrame* myBtnFrame;
+  QPushButton* myApplyAndClose;
   QPushButton* myApply;
 };
 
index 38281c81545b5abb08e2b6ac2a65c66c8e38ea47..a218483cca731acf4a591b07fdab1f2da1a6eec5 100644 (file)
@@ -51,7 +51,8 @@ HYDROGUI_Operation::HYDROGUI_Operation( HYDROGUI_Module* theModule )
   myIsPrintErrorMessage( true ),
   myIsTransactionOpened( false ),
   myPreviewManager( 0 ),
-  myPreviewZLayer( -1 )
+  myPreviewZLayer( -1 ),
+  myIsApplyAndClose( true )
 {
   connect( this, SIGNAL( helpContextModule( const QString&, const QString&,
                                             const QString& ) ),
@@ -78,6 +79,7 @@ HYDROGUI_InputPanel* HYDROGUI_Operation::inputPanel() const
   if( !myPanel )
   {
     ( ( HYDROGUI_Operation* )this )->myPanel = createInputPanel();
+    connect( myPanel, SIGNAL( panelApplyAndClose() ), this, SLOT( onApplyAndClose() ) );
     connect( myPanel, SIGNAL( panelApply() ),  this, SLOT( onApply() ) );
     connect( myPanel, SIGNAL( panelCancel() ), this, SLOT( onCancel() ) );
     connect( myPanel, SIGNAL( panelHelp() ), this, SLOT( onHelp() ) );
@@ -205,12 +207,76 @@ void HYDROGUI_Operation::restoreCursor()
   }
 }
 
+void HYDROGUI_Operation::setIsApplyAndClose( const bool theFlag )
+{
+  myIsApplyAndClose = theFlag;
+}
+
+bool HYDROGUI_Operation::isApplyAndClose() const
+{
+  return myIsApplyAndClose;
+}
+
+void HYDROGUI_Operation::apply()
+{
+  QApplication::setOverrideCursor( Qt::WaitCursor );
+
+  startDocOperation();
+
+  int anUpdateFlags = 0;
+  QString anErrorMsg;
+
+  bool aResult = false;
+  QStringList aBrowseObjectsEntries;
+
+  try
+  {
+    aResult = processApply( anUpdateFlags, anErrorMsg, aBrowseObjectsEntries );
+  }
+  catch ( Standard_Failure )
+  {
+    Handle(Standard_Failure) aFailure = Standard_Failure::Caught();
+    anErrorMsg = aFailure->GetMessageString();
+    aResult = false;
+  }
+  catch ( ... )
+  {
+    aResult = false;
+  }
+  
+  QApplication::restoreOverrideCursor();
+
+  if ( aResult )
+  {
+    module()->update( anUpdateFlags );
+    commitDocOperation();
+    commit();
+    browseObjects( aBrowseObjectsEntries, myIsApplyAndClose );
+
+    if ( !myIsApplyAndClose && inputPanel() )
+      start();
+  }
+  else
+  {
+    // Abort document opeartion only if requested
+    if ( isToAbortOnApply() )
+      abortDocOperation();
+
+    printErrorMessage( anErrorMsg );
+    // If the operation has no input panel - do abort
+    if ( !inputPanel() ) {
+      abort();
+    }
+  } 
+}
+
 void HYDROGUI_Operation::startOperation()
 {
   LightApp_Operation::startOperation();
   myModule->getActiveOperations().push( this );
 
-  if( inputPanel() )
+  if( myIsApplyAndClose && inputPanel() )
   {
     myModule->getApp()->desktop()->addDockWidget( Qt::RightDockWidgetArea, inputPanel() );
     inputPanel()->show();
@@ -226,7 +292,8 @@ void HYDROGUI_Operation::abortOperation()
 void HYDROGUI_Operation::commitOperation()
 {
   LightApp_Operation::commitOperation();
-  closeInputPanel();
+  if ( myIsApplyAndClose )
+    closeInputPanel();
 }
 
 void HYDROGUI_Operation::stopOperation()
@@ -332,55 +399,16 @@ Handle_HYDROData_Document HYDROGUI_Operation::doc() const
   return HYDROData_Document::Document( myModule->getStudyId() );
 }
 
-void HYDROGUI_Operation::onApply()
+void HYDROGUI_Operation::onApplyAndClose()
 {
-  QApplication::setOverrideCursor( Qt::WaitCursor );
-
-  startDocOperation();
-
-  int anUpdateFlags = 0;
-  QString anErrorMsg;
-
-  bool aResult = false;
-  QStringList aBrowseObjectsEntries;
-
-  try
-  {
-    aResult = processApply( anUpdateFlags, anErrorMsg, aBrowseObjectsEntries );
-  }
-  catch ( Standard_Failure )
-  {
-    Handle(Standard_Failure) aFailure = Standard_Failure::Caught();
-    anErrorMsg = aFailure->GetMessageString();
-    aResult = false;
-  }
-  catch ( ... )
-  {
-    aResult = false;
-  }
-  
-  QApplication::restoreOverrideCursor();
-
-  if ( aResult )
-  {
-    module()->update( anUpdateFlags );
-    commitDocOperation();
-    commit();
-    browseObjects( aBrowseObjectsEntries );
-  }
-  else
-  {
-    // Abort document opeartion only if requested
-    if ( isToAbortOnApply() )
-      abortDocOperation();
+  myIsApplyAndClose = true;
+  apply();
+}
 
-    printErrorMessage( anErrorMsg );
-    // If the operation has no input panel - do abort
-    if ( !inputPanel() ) {
-      abort();
-    }
-  }
+void HYDROGUI_Operation::onApply()
+{
+  myIsApplyAndClose = false;
+  apply();
 }
 
 void HYDROGUI_Operation::setPrintErrorMessage( const bool theIsPrint )
@@ -408,6 +436,9 @@ void HYDROGUI_Operation::onCancel()
 {
   processCancel();
   abort();
+  if ( myPanel )
+    abortOperation();
+  myIsApplyAndClose = true;
 }
 
 void HYDROGUI_Operation::onHelp()
@@ -431,9 +462,9 @@ QString HYDROGUI_Operation::getHelpContext() const
    return QString();
 }
 
-void HYDROGUI_Operation::browseObjects( const QStringList& theBrowseObjectsEntries )
+void HYDROGUI_Operation::browseObjects( const QStringList& theBrowseObjectsEntries,
+                                        const bool theIsApplyAndClose/* = true*/ )
 {
-  bool isApplyAndClose = true;
   bool isOptimizedBrowse = true;
-  module()->getApp()->browseObjects( theBrowseObjectsEntries, isApplyAndClose, isOptimizedBrowse );
+  module()->getApp()->browseObjects( theBrowseObjectsEntries, theIsApplyAndClose, isOptimizedBrowse );
 }
index 89f6c9d2153300b8f25233d3e317a5b73ecec00e..e3c835066c343a8ef75b76690c3783c383bd14cd 100644 (file)
@@ -88,10 +88,12 @@ protected:
   void                                printErrorMessage( const QString& theErrorMsg );
   void                                setPrintErrorMessage( const bool theIsPrint );
 
-  void                                browseObjects( const QStringList& theBrowseObjectsEntries );
+  void                                browseObjects( const QStringList& theBrowseObjectsEntries,
+                                                     const bool theIsApplyAndClose = true );
 
 protected slots:
 
+  virtual void                        onApplyAndClose();
   virtual void                        onApply();
   virtual void                        onCancel();
   virtual void                        onHelp();
@@ -110,11 +112,27 @@ protected:
   /**
    * Set specific cursor chosen in preferences for edition operations.
    */
-  virtual void setCursor();
+  virtual void                        setCursor();
   /**
    * Restore the default cursor.
    */
-  virtual void restoreCursor();
+  virtual void                        restoreCursor();
+
+  /**
+   * Set flag indicating, if 'Apply and Close' button is clicked on input panel.
+   * @param theFlag a flag value to be set
+   */
+  virtual void                        setIsApplyAndClose( const bool theFlag );
+  /**
+   * Get flag indicating, if 'Apply and Close' button is clicked on input panel.
+   * \return a flag value
+   */
+  virtual bool                        isApplyAndClose() const;
+
+  /**
+   * Apply changes done by this operation.
+   */
+  virtual void                        apply();
 
 private:
 
@@ -127,6 +145,8 @@ private:
   int                                 myPreviewZLayer;
 
   QCursor                             myCursor;
+
+  bool                                myIsApplyAndClose;
 };
 
 #endif
index b158cfb1201f401a18ae93c01bc8ec82c94f145e..09d603922d4ddf9fd140f284988c337737dcf3ae 100644 (file)
@@ -65,7 +65,8 @@ void HYDROGUI_Poly3DOp::startOperation()
   QString aPoly3DName;
   if( myIsEdit )
   {
-    myEditedObject = Handle(HYDROData_Polyline3D)::DownCast( HYDROGUI_Tool::GetSelectedObject( module() ) );
+    if ( isApplyAndClose() )
+      myEditedObject = Handle(HYDROData_Polyline3D)::DownCast( HYDROGUI_Tool::GetSelectedObject( module() ) );
     if( !myEditedObject.IsNull() )
       aPoly3DName = myEditedObject->GetName();
   }
index dff33ecf9dcfdad8c0ea818054bf5a75f66a2441..9e6737ac42e0c6cab69cfa6f7e9cff7b3c529dbb 100755 (executable)
@@ -111,7 +111,8 @@ void HYDROGUI_PolylineOp::startOperation()
 {
   if( myIsEdit )
   {
-    myEditedObject = Handle(HYDROData_PolylineXY)::DownCast( HYDROGUI_Tool::GetSelectedObject( module() ) );
+    if ( isApplyAndClose() )
+         myEditedObject = Handle(HYDROData_PolylineXY)::DownCast( HYDROGUI_Tool::GetSelectedObject( module() ) );
     if ( !myEditedObject.IsNull() && !myEditedObject->IsEditable() )
     {
       // Polyline is imported from GEOM module an is not recognized as
@@ -140,7 +141,8 @@ void HYDROGUI_PolylineOp::startOperation()
   aPanel->setOCCViewer( aViewManager ? aViewManager->getOCCViewer() : 0 );
   setPreviewManager( aViewManager );
 
-  setCursor();
+  if ( isApplyAndClose() )
+    setCursor();
 
   QString aPolylineName;
   if( !myEditedObject.IsNull() )
@@ -200,11 +202,15 @@ void HYDROGUI_PolylineOp::abortOperation()
 
 void HYDROGUI_PolylineOp::commitOperation()
 {
-  restoreCursor();
+  if ( isApplyAndClose() )
+  {
+    restoreCursor();
+
+    HYDROGUI_PolylineDlg* aPanel = (HYDROGUI_PolylineDlg*)inputPanel();
+    if ( aPanel )
+      aPanel->setOCCViewer( 0 );
+  }
 
-  HYDROGUI_PolylineDlg* aPanel = (HYDROGUI_PolylineDlg*)inputPanel();
-  if ( aPanel )
-    aPanel->setOCCViewer( 0 );
   erasePreview();
 
   HYDROGUI_Operation::commitOperation();
index fd46bc546747bbf8781cb64e0288320f92d88eaf..a6a9965334a0849b4cb2a3bfa605ee82a98e2786 100644 (file)
@@ -69,11 +69,14 @@ void HYDROGUI_ProfileInterpolateOp::startOperation()
 {
     HYDROGUI_Operation::startOperation();
 
-    HYDROGUI_ProfileInterpolateDlg* aPanel = ::qobject_cast<HYDROGUI_ProfileInterpolateDlg*>( inputPanel() );
-    if ( aPanel )
+    if ( isApplyAndClose() )
     {
+      HYDROGUI_ProfileInterpolateDlg* aPanel = ::qobject_cast<HYDROGUI_ProfileInterpolateDlg*>( inputPanel() );
+      if ( aPanel )
+      {
         aPanel->reset();
         aPanel->setInterpolators( interpolators() );
+      }
     }
 }
 
index 75fbed1e39065f8a7dbe2b79adbfb147b649f786..ff20db083ede50f98bb0072955c86a9d680d9f9a 100644 (file)
@@ -87,7 +87,8 @@ void HYDROGUI_ProfileOp::startOperation()
   aPanel->reset();
 
   if( myIsEdit )
-    myEditedObject = Handle(HYDROData_Profile)::DownCast( HYDROGUI_Tool::GetSelectedObject( module() ) );
+    if ( isApplyAndClose() )
+      myEditedObject = Handle(HYDROData_Profile)::DownCast( HYDROGUI_Tool::GetSelectedObject( module() ) );
 
   QString aProfileName;
   if( !myEditedObject.IsNull() )
index a3b9682038d8db743f4513c3e820245df89758e4..59e5c80ce9be9c4d595c483b313776c397fc73ba 100644 (file)
@@ -60,9 +60,12 @@ void HYDROGUI_RiverBottomOp::startOperation()
 {
   HYDROGUI_Operation::startOperation();
 
-  HYDROGUI_RiverBottomDlg* aPanel = ::qobject_cast<HYDROGUI_RiverBottomDlg*>( inputPanel() );
+  if ( isApplyAndClose() )
+  {
+    HYDROGUI_RiverBottomDlg* aPanel = ::qobject_cast<HYDROGUI_RiverBottomDlg*>( inputPanel() );
 
-  aPanel->reset();
+    aPanel->reset();
+  }
 }
 
 void HYDROGUI_RiverBottomOp::abortOperation()
index b36158151611c1accfcefcde8d58ec0b0355e919..2d453d5b37cb4c68ac8c64a43bb19bdefcebb422 100755 (executable)
@@ -96,7 +96,8 @@ void HYDROGUI_StreamOp::startOperation()
 {
   HYDROGUI_Operation::startOperation();
 
-  myEditedObject.Nullify();
+  if ( !myIsEdit || isApplyAndClose() )
+    myEditedObject.Nullify();
   myHydAxis.clear();
   myProfiles.clear();
   myProfileParams.clear();
@@ -108,8 +109,9 @@ void HYDROGUI_StreamOp::startOperation()
   QString anObjectName = HYDROGUI_Tool::GenerateObjectName( module(), tr( "DEFAULT_STREAM_NAME" ) );
   if ( myIsEdit )
   {
-    myEditedObject =
-      Handle(HYDROData_Stream)::DownCast( HYDROGUI_Tool::GetSelectedObject( module() ) );
+    if ( isApplyAndClose() )
+      myEditedObject =
+        Handle(HYDROData_Stream)::DownCast( HYDROGUI_Tool::GetSelectedObject( module() ) );
     if ( !myEditedObject.IsNull() )
     {
       anObjectName = myEditedObject->GetName();
index 5533ea6a00a280e576da7e0a05ff24b40222d06e..14aaf01c4b8684a464ee5c7492df1ec82fb6be07 100644 (file)
@@ -63,7 +63,8 @@ void HYDROGUI_TranslateObstacleOp::startOperation()
   aPanel->reset();
 
   // Get the edited object
-  myEditedObject = Handle(HYDROData_Obstacle)::DownCast( HYDROGUI_Tool::GetSelectedObject( module() ) );
+  if ( isApplyAndClose() )
+    myEditedObject = Handle(HYDROData_Obstacle)::DownCast( HYDROGUI_Tool::GetSelectedObject( module() ) );
   if ( myEditedObject.IsNull() ) {
     abort();
     return;
index 50ecc0086a3e2640b75f4b4d2966da66cb225b4a..9da8d523ddb65c5a411b891d725078e0179efcd9 100644 (file)
@@ -88,7 +88,8 @@ void HYDROGUI_TwoImagesOp::startOperation()
   QString anImageName;
   if( myIsEdit )
   {
-    myEditedObject = Handle(HYDROData_Image)::DownCast( HYDROGUI_Tool::GetSelectedObject( module() ) );
+    if ( isApplyAndClose() )
+      myEditedObject = Handle(HYDROData_Image)::DownCast( HYDROGUI_Tool::GetSelectedObject( module() ) );
     if( !myEditedObject.IsNull() )
       anImageName = myEditedObject->GetName();
   }
index 2f093a20c65b29a1d344f83d9cfda59c530ef993..4d2d847baece989251a40d8b021d909ba0f4f39d 100644 (file)
@@ -63,13 +63,15 @@ HYDROGUI_ZLevelsDlg::HYDROGUI_ZLevelsDlg( QWidget* theParent, HYDROGUI_Module* t
   myAllObjects = new QCheckBox( tr( "ALL_OBJECTS" ) );
 
   // Apply and close buttons
+  myApplyAndClose = new QPushButton( tr("APPLY_AND_CLOSE") );
+  myApplyAndClose->setDefault( true );
   myApply = new QPushButton( tr("APPLY") );
-  myApply->setDefault( true );
   myClose = new QPushButton( tr("CLOSE") );
   
   // Layout
   // apply and close buttons
   QHBoxLayout* aDlgButtonsLayout = new QHBoxLayout(); 
+  aDlgButtonsLayout->addWidget( myApplyAndClose );
   aDlgButtonsLayout->addWidget( myApply );
   aDlgButtonsLayout->addWidget( myClose );
   aDlgButtonsLayout->addStretch();
@@ -81,6 +83,7 @@ HYDROGUI_ZLevelsDlg::HYDROGUI_ZLevelsDlg( QWidget* theParent, HYDROGUI_Module* t
   // Connections
   connect( myAllObjects, SIGNAL( stateChanged( int ) ), this, SLOT( onStateChanged() ) );
 
+  connect( myApplyAndClose, SIGNAL( clicked() ), this, SIGNAL( applyOrderAndClose() ) );
   connect( myApply, SIGNAL( clicked() ), this, SIGNAL( applyOrder() ) );
   connect( myClose, SIGNAL( clicked() ), this, SLOT( reject() ) );
 
index 8e7310ea6e1906f028e0f07c6066ed7e2cbd4864..d4ff2d7deb0d4821c7d363791622f7b69691c7e1 100644 (file)
@@ -50,6 +50,7 @@ public:
   HYDROGUI_ListModel::ObjectList getObjects() const;
 
 signals:
+  void applyOrderAndClose();
   void applyOrder();
 
 private slots:
@@ -57,9 +58,10 @@ private slots:
 
 private:
   HYDROGUI_OrderedListWidget* myListWidget; ///< the ordered list widget
-  QCheckBox* myAllObjects; ///< the show all objects button
-  QPushButton* myApply;    ///< the apply changes button
-  QPushButton* myClose;    ///< the close dialog button
+  QCheckBox* myAllObjects;         ///< the show all objects button
+  QPushButton* myApplyAndClose;    ///< the apply changes and close dialog button
+  QPushButton* myApply;            ///< the apply changes button  
+  QPushButton* myClose;            ///< the close dialog button
 };
 
 #endif
index e2b52b87e7cabf3550fa6daa06f25748a4a1f220..bfbe5aa71d5485620da23994fc95a5f4b021fcc4 100644 (file)
@@ -84,6 +84,7 @@ void HYDROGUI_ZLevelsOp::startOperation()
   // Show the dialog
   if ( !myDlg ) {
     myDlg = new HYDROGUI_ZLevelsDlg( module()->getApp()->desktop(), module() );
+       connect( myDlg, SIGNAL( applyOrderAndClose() ), this, SLOT( onApplyAndClose() ) );
     connect( myDlg, SIGNAL( applyOrder() ), this, SLOT( onApply() ) );
     connect( myDlg, SIGNAL( rejected() ), this, SLOT( onCancel() ) );
   }
@@ -135,4 +136,11 @@ void HYDROGUI_ZLevelsOp::processCancel()
     delete myDlg;
     myDlg = 0;
   }
-}
\ No newline at end of file
+}
+
+void HYDROGUI_ZLevelsOp::onApplyAndClose()
+{
+  HYDROGUI_Operation::onApplyAndClose();
+  if ( myDlg )
+    myDlg->reject();
+}
index e049735431a69420d7c7ecdd8550406a5122113c..49f4308c459116bc2af0060d211a576734140cad 100644 (file)
@@ -47,6 +47,9 @@ protected:
                              QStringList& theBrowseObjectsEntries );
   virtual void processCancel();
 
+protected slots:
+  virtual void onApplyAndClose();
+
 private:
   HYDROGUI_ZLevelsDlg* myDlg;
 
index 862778450422773bd8e51b45537fdec8a21282cc..b45a5d8cd39ec643418338d942d99ab4dbf4cda2 100644 (file)
@@ -436,6 +436,10 @@ First remove objects which are created on their basis.
   
   <context>
     <name>HYDROGUI_InputPanel</name>
+    <message>
+      <source>APPLY_AND_CLOSE</source>
+      <translation>Apply and Close</translation>
+    </message>
     <message>
       <source>APPLY</source>
       <translation>Apply</translation>
@@ -444,6 +448,10 @@ First remove objects which are created on their basis.
       <source>CANCEL</source>
       <translation>Cancel</translation>
     </message>
+    <message>
+      <source>CLOSE</source>
+      <translation>Close</translation>
+    </message>
     <message>
       <source>HELP</source>
       <translation>Help</translation>
@@ -2186,6 +2194,10 @@ Polyline should consist from one not closed curve.</translation>
         <source>ALL_OBJECTS_CHECKED_TLT</source>
         <translation>Exclude hidden objects from the list</translation>
     </message>
+    <message>
+      <source>APPLY_AND_CLOSE</source>
+      <translation>Apply and Close</translation>
+    </message>
     <message>
         <source>APPLY</source>
         <translation>Apply</translation>