]> SALOME platform Git repositories - modules/hydro.git/commitdiff
Salome HOME
Add update selection button,
authormzn <mzn@opencascade.com>
Fri, 29 Nov 2013 14:51:10 +0000 (14:51 +0000)
committermzn <mzn@opencascade.com>
Fri, 29 Nov 2013 14:51:10 +0000 (14:51 +0000)
add confirmation message on modes switch.

src/HYDROGUI/HYDROGUI_GeoreferencementDlg.cxx
src/HYDROGUI/HYDROGUI_GeoreferencementDlg.h
src/HYDROGUI/HYDROGUI_GeoreferencementOp.cxx
src/HYDROGUI/HYDROGUI_GeoreferencementOp.h
src/HYDROGUI/resources/HYDROGUI_msg_en.ts

index feb21b2952b59011ae47672af27949f1bc255f9d..57bfafb6f4df207c3210b54852eb9be1f1d6f736 100644 (file)
@@ -34,6 +34,7 @@
 #include <QItemDelegate>
 #include <QHeaderView>
 #include <QRadioButton>
+#include <QPushButton>
 #include <QLineEdit>
 #include <QButtonGroup>
 #include <QGroupBox>
@@ -122,7 +123,7 @@ void HYDROGUI_GeoreferencementDlg::Delegate::setModelData(
 }
 
 HYDROGUI_GeoreferencementDlg::HYDROGUI_GeoreferencementDlg( HYDROGUI_Module* theModule, const QString& theTitle )
-: HYDROGUI_InputPanel( theModule, theTitle )
+: HYDROGUI_InputPanel( theModule, theTitle ), myIsModified( false )
 {
   // Mode selector (all/selected)
   QGroupBox* aModeGroup = new QGroupBox( tr( "PROFILES" ), this );
@@ -140,6 +141,13 @@ HYDROGUI_GeoreferencementDlg::HYDROGUI_GeoreferencementDlg( HYDROGUI_Module* the
   aModeSelectorLayout->addWidget( anAllRB );
   aModeSelectorLayout->addWidget( aSelectedRB );
 
+  // Update selection button
+  myUpdateSelBtn = new QPushButton( mainFrame() );
+  myUpdateSelBtn->setText( tr("UPDATE_SELECTION") );
+  QBoxLayout* anUpdateSelLayout = new QHBoxLayout( mainFrame() );
+  anUpdateSelLayout->addWidget( myUpdateSelBtn );
+  anUpdateSelLayout->addStretch();
+
   // Table
   myTable = new QTableWidget( mainFrame() );
   myTable->setItemDelegate( new Delegate( this ) );
@@ -154,10 +162,14 @@ HYDROGUI_GeoreferencementDlg::HYDROGUI_GeoreferencementDlg( HYDROGUI_Module* the
 
   // Layout
   addWidget( aModeGroup );
+  addLayout( anUpdateSelLayout );
   addWidget( myTable );
 
   // Connect signals and slots
   connect( myModeButtons, SIGNAL( buttonClicked( int ) ), this, SLOT( onModeActivated( int ) ) );
+  connect( myUpdateSelBtn, SIGNAL( clicked() ), this, SIGNAL( updateSelection() ) );
+  connect( myTable->model(), SIGNAL( dataChanged ( const QModelIndex&, const QModelIndex& ) ), 
+           this, SLOT( onDataChanged() ) );
 }
 
 HYDROGUI_GeoreferencementDlg::~HYDROGUI_GeoreferencementDlg()
@@ -166,6 +178,7 @@ HYDROGUI_GeoreferencementDlg::~HYDROGUI_GeoreferencementDlg()
 
 void HYDROGUI_GeoreferencementDlg::onModeActivated( int theMode )
 {
+  myUpdateSelBtn->setEnabled( theMode == SelectedProfiles );
   emit modeActivated( theMode );
 }
 
@@ -187,11 +200,16 @@ void HYDROGUI_GeoreferencementDlg::setMode( const int theMode )
     aModeButton->setChecked( true );
   }
 
+  myUpdateSelBtn->setEnabled( theMode == SelectedProfiles );
+
   myModeButtons->blockSignals( isBlocked );
 }
 
 void HYDROGUI_GeoreferencementDlg::setData( const ProfilesGeoDataMap& theMap )
 {
+  disconnect( myTable->model(), SIGNAL( dataChanged ( const QModelIndex&, const QModelIndex& ) ), 
+              this, SLOT( onDataChanged() ) );
+
   myTable->setRowCount( 0 );
 
   foreach ( const QString& aProfileName, theMap.keys() ) {
@@ -236,6 +254,12 @@ void HYDROGUI_GeoreferencementDlg::setData( const ProfilesGeoDataMap& theMap )
   }
 
   myTable->resizeColumnToContents( 0 );
+  myTable->resizeRowsToContents();
+
+  myIsModified = false;
+  
+  connect( myTable->model(), SIGNAL( dataChanged ( const QModelIndex&, const QModelIndex& ) ), 
+           this, SLOT( onDataChanged() ) );
 }
 
 void HYDROGUI_GeoreferencementDlg::getData( ProfilesGeoDataMap& theMap )
@@ -291,4 +315,14 @@ void HYDROGUI_GeoreferencementDlg::onMousePress(
 QString HYDROGUI_GeoreferencementDlg::getString( const double theNumber ) const
 {
   return QString::number( theNumber, 'g', 12 );
+}
+
+void HYDROGUI_GeoreferencementDlg::onDataChanged()
+{
+  myIsModified = true;
+}
+
+bool HYDROGUI_GeoreferencementDlg::isModified() const
+{
+  return myIsModified;
 }
\ No newline at end of file
index 428cf1c767898bc6576d35bb1a2445122009bcf5..8ac5f6d9cd13757bd312f23cd3586788a1172343 100644 (file)
@@ -30,6 +30,7 @@ class SUIT_ViewWindow;
 class QGroupBox;
 class QButtonGroup;
 class QTableWidget;
+class QPushButton;
 
 class HYDROGUI_GeoreferencementDlg : public HYDROGUI_InputPanel
 {
@@ -73,21 +74,28 @@ public:
   void                       setData( const ProfilesGeoDataMap& theMap );
   void                       getData( ProfilesGeoDataMap& theMap );
 
+  bool                       isModified() const;
+
 public slots:
   void                       onMousePress( SUIT_ViewWindow*, QMouseEvent* );
 
 protected slots:
   void                       onModeActivated( int );
+  void                       onDataChanged();
 
 signals:
   void                       modeActivated( int );
+  void                       updateSelection();
 
 private:
   QString                    getString( const double theNumber ) const;
 
 private:
   QButtonGroup* myModeButtons;
+  QPushButton* myUpdateSelBtn;
   QTableWidget* myTable;
+
+  bool myIsModified;
 };
 
 #endif
index 15595b6050a611b08f682823a8b8b6bf5499cb39..531283864e94314f5640f8b3515e496e1d12df5a 100644 (file)
@@ -67,13 +67,11 @@ void HYDROGUI_GeoreferencementOp::startOperation()
   aPanel->reset();
 
   if ( myInitialMode == All ) {
-    int anAllMode = HYDROGUI_GeoreferencementDlg::AllProfiles;
-    aPanel->setMode( anAllMode );
-    onModeActivated( anAllMode );
+    //@MZN aPanel->setMode( anAllMode );
+    onModeActivated( HYDROGUI_GeoreferencementDlg::AllProfiles );
   } else if ( myInitialMode == Selected ) {
-    int aSelectionMode = HYDROGUI_GeoreferencementDlg::SelectedProfiles;
-    aPanel->setMode( aSelectionMode );
-    onModeActivated( aSelectionMode );
+    //@MZN aPanel->setMode( aSelectionMode );
+    onModeActivated( HYDROGUI_GeoreferencementDlg::SelectedProfiles );
   }
 
   LightApp_Application* anApp = module()->getApp();
@@ -102,6 +100,7 @@ HYDROGUI_InputPanel* HYDROGUI_GeoreferencementOp::createInputPanel() const
 {
   HYDROGUI_InputPanel* aPanel = new HYDROGUI_GeoreferencementDlg( module(), getName() );
   connect( aPanel, SIGNAL( modeActivated( int ) ), SLOT( onModeActivated( int ) ) );
+  connect( aPanel, SIGNAL( updateSelection() ), SLOT( onUpdateSelection() ) );
 
   return aPanel;
 }
@@ -109,7 +108,7 @@ HYDROGUI_InputPanel* HYDROGUI_GeoreferencementOp::createInputPanel() const
 bool HYDROGUI_GeoreferencementOp::processApply( int& theUpdateFlags,
                                                 QString& theErrorMsg )
 {
-  theUpdateFlags = UF_Model;
+  theUpdateFlags = UF_Model | UF_OCCViewer | UF_OCC_Forced;
 
   return store( theErrorMsg );
 }
@@ -125,12 +124,26 @@ void HYDROGUI_GeoreferencementOp::onModeActivated( const int theActualMode )
     return;
   }
 
-  // Store the dialog data to the data model
-  if ( !store( anErrorMsg ) ) {
-    aPanel->setMode( theActualMode == HYDROGUI_GeoreferencementDlg::AllProfiles ?
-                     HYDROGUI_GeoreferencementDlg::SelectedProfiles :
-                     HYDROGUI_GeoreferencementDlg::AllProfiles);
+  aPanel->setMode( theActualMode == HYDROGUI_GeoreferencementDlg::AllProfiles ?
+                   HYDROGUI_GeoreferencementDlg::SelectedProfiles :
+                   HYDROGUI_GeoreferencementDlg::AllProfiles);
 
+  // Store the dialog data to the data model
+  bool isToStore = false;
+  // Check if modifications exists
+  if ( aPanel->isModified() ) {
+    // Show confirmation dialog
+    SUIT_MessageBox::StandardButtons aButtons = 
+      SUIT_MessageBox::Yes | SUIT_MessageBox::No;
+
+    isToStore = SUIT_MessageBox::question( module()->getApp()->desktop(),
+                                           tr( "CONFIRMATION" ),
+                                           tr( "CONFIRM_STORE" ),
+                                           aButtons, 
+                                           SUIT_MessageBox::Yes) == SUIT_MessageBox::Yes;
+  }
+  // Store modifications if needed
+  if ( isToStore && !store( anErrorMsg ) ) {
     anErrorMsg.append( "\n" + tr( "INPUT_VALID_DATA" ) );
     SUIT_MessageBox::critical( module()->getApp()->desktop(),
                                tr( "INSUFFICIENT_INPUT_DATA" ),
@@ -138,8 +151,9 @@ void HYDROGUI_GeoreferencementOp::onModeActivated( const int theActualMode )
     return;
   }
 
-  // Get georeferencement data from the data model
-  HYDROGUI_GeoreferencementDlg::ProfilesGeoDataMap aDataMap;
+  aPanel->setMode( theActualMode );
+
+  // Get the list of profiles
   HYDROData_SequenceOfObjects aSeqOfProfiles;
   
   if( theActualMode == HYDROGUI_GeoreferencementDlg::AllProfiles ) {
@@ -152,28 +166,8 @@ void HYDROGUI_GeoreferencementOp::onModeActivated( const int theActualMode )
     aSeqOfProfiles = HYDROGUI_Tool::GetSelectedObjects( module() );
   }
 
-  HYDROData_SequenceOfObjects::Iterator anIter( aSeqOfProfiles );
-  for ( ; anIter.More(); anIter.Next() ) {
-    Handle(HYDROData_Profile) aProfile =
-        Handle(HYDROData_Profile)::DownCast( anIter.Value() );
-    if ( aProfile.IsNull() ) {
-      continue;
-    }
-
-    HYDROGUI_GeoreferencementDlg::ProfileGeoData aGeoData;
-
-    gp_XY aFirstPoint, aLastPoint;
-    if ( aProfile->GetFirstPoint( aFirstPoint ) && aProfile->GetLastPoint( aLastPoint ) ) {
-      aGeoData = 
-        HYDROGUI_GeoreferencementDlg::ProfileGeoData( aFirstPoint.X(), aFirstPoint.Y(),
-                                                      aLastPoint.X(), aLastPoint.Y() );
-    }
-   
-    aDataMap.insert( aProfile->GetName(), aGeoData );
-  }
-
-  // Set the collected data to the dialog
-  aPanel->setData( aDataMap );
+  // Set the profiles to the panel
+  setPanelData( aSeqOfProfiles );
 }
 
 void HYDROGUI_GeoreferencementOp::onWindowActivated( SUIT_ViewWindow* theViewWindow )
@@ -239,8 +233,60 @@ bool HYDROGUI_GeoreferencementOp::store( QString& theErrorMsg )
       } else {
         aProfile->Invalidate();
       }
+
+      aProfile->Update();
     }
   }
 
+  module()->update( UF_Model | UF_OCCViewer | UF_OCC_Forced );
+  commitDocOperation(); // TODO: analyze the consequences
+
   return true;
 }
+
+void HYDROGUI_GeoreferencementOp::onUpdateSelection()
+{
+  // Get the selected profiles
+  HYDROData_SequenceOfObjects aSeqOfProfiles = 
+    HYDROGUI_Tool::GetSelectedObjects( module() );
+
+  // Set them to the dialog
+  setPanelData( aSeqOfProfiles );
+}
+
+void HYDROGUI_GeoreferencementOp::setPanelData( 
+  const HYDROData_SequenceOfObjects& theProfiles )
+{
+  // Get the panel
+  HYDROGUI_GeoreferencementDlg* aPanel = 
+    ::qobject_cast<HYDROGUI_GeoreferencementDlg*>( inputPanel() );
+  if ( !aPanel ) {
+    return;
+  }
+
+  // Get georeferencement data from the data model
+  HYDROGUI_GeoreferencementDlg::ProfilesGeoDataMap aDataMap;
+
+  HYDROData_SequenceOfObjects::Iterator anIter( theProfiles );
+  for ( ; anIter.More(); anIter.Next() ) {
+    Handle(HYDROData_Profile) aProfile =
+        Handle(HYDROData_Profile)::DownCast( anIter.Value() );
+    if ( aProfile.IsNull() ) {
+      continue;
+    }
+
+    HYDROGUI_GeoreferencementDlg::ProfileGeoData aGeoData;
+
+    gp_XY aFirstPoint, aLastPoint;
+    if ( aProfile->GetFirstPoint( aFirstPoint ) && aProfile->GetLastPoint( aLastPoint ) ) {
+      aGeoData = 
+        HYDROGUI_GeoreferencementDlg::ProfileGeoData( aFirstPoint.X(), aFirstPoint.Y(),
+                                                      aLastPoint.X(), aLastPoint.Y() );
+    }
+   
+    aDataMap.insert( aProfile->GetName(), aGeoData );
+  }
+
+  // Set the collected data to the dialog
+  aPanel->setData( aDataMap );
+}
\ No newline at end of file
index e76cbd1222bf361b9f85eff43ee55dd4f302d519..6fa244c0b1f937c9b9f114cd36755af1c7459919 100644 (file)
@@ -25,6 +25,8 @@
 
 #include "HYDROGUI_Operation.h"
 
+#include <HYDROData_Entity.h>
+
 class SUIT_ViewWindow;
 
 class HYDROGUI_GeoreferencementOp : public HYDROGUI_Operation
@@ -49,9 +51,11 @@ protected:
 
 protected slots:
   void                            onModeActivated( const int theActualMode );
+  void                            onUpdateSelection();
   void                            onWindowActivated( SUIT_ViewWindow* theViewWindow );
 
 private:
+  void                            setPanelData( const HYDROData_SequenceOfObjects& theProfiles );
   bool                            store( QString& theErrorMsg );
 
 private:
index 27f7350c5657aab2bd5508032f87d4e18d256888..9a1cba46d7d84ac90d151663f5fccddb09d55156 100644 (file)
@@ -1323,6 +1323,10 @@ file cannot be correctly imported for an Obstacle definition.</translation>
       <source>SELECTED_MODE</source>
       <translation>Selected</translation>
     </message>
+    <message>
+      <source>UPDATE_SELECTION</source>
+      <translation>Update selection</translation>
+    </message>
     <message>
       <source>PROFILE_HEADER</source>
       <translation>Profile</translation>
@@ -1355,6 +1359,14 @@ file cannot be correctly imported for an Obstacle definition.</translation>
       <source>INCOMPLETE_DATA</source>
       <translation>Incomplete data is set for '%1'.</translation>
     </message>
+    <message>
+      <source>CONFIRMATION</source>
+      <translation>Confirmation</translation>
+    </message>
+    <message>
+      <source>CONFIRM_STORE</source>
+      <translation>Do you want to store table data in the data model?</translation>
+    </message>
   </context>
  
   <context>