]> SALOME platform Git repositories - modules/hydro.git/commitdiff
Salome HOME
Correctnes of user input data checks (Bug #176).
authoradv <adv@opencascade.com>
Thu, 5 Dec 2013 07:15:57 +0000 (07:15 +0000)
committeradv <adv@opencascade.com>
Thu, 5 Dec 2013 07:15:57 +0000 (07:15 +0000)
src/HYDROGUI/HYDROGUI_CalculationDlg.cxx
src/HYDROGUI/HYDROGUI_CalculationDlg.h
src/HYDROGUI/HYDROGUI_CalculationOp.cxx
src/HYDROGUI/HYDROGUI_Wizard.cxx
src/HYDROGUI/HYDROGUI_Wizard.h
src/HYDROGUI/resources/HYDROGUI_msg_en.ts

index 42ba2cbf9f7c76f1ecea73970530269d3e36d58d..5d39423bb634636b4b64654d6e34e9ffeaeb51fa 100644 (file)
@@ -65,8 +65,6 @@ HYDROGUI_CalculationDlg::HYDROGUI_CalculationDlg( HYDROGUI_Module* theModule, co
 {
   addPage( createObjectsPage() );
   addPage( createZonesPage() );
-  connect( button( QWizard::NextButton ), SIGNAL( clicked() ), SIGNAL( splitZones() ) );
-  connect( button( QWizard::BackButton ), SIGNAL( clicked() ), SIGNAL( hideZones() ) );
 }
 
 HYDROGUI_CalculationDlg::~HYDROGUI_CalculationDlg()
@@ -164,20 +162,6 @@ QWizardPage* HYDROGUI_CalculationDlg::createObjectsPage() {
   return aPage;
 }
 
-void HYDROGUI_CalculationDlg::onEmptyName()
-{
-  QString aTitle = QObject::tr( "INSUFFICIENT_INPUT_DATA" );
-  QString aMessage = QObject::tr( "INCORRECT_OBJECT_NAME" );
-  SUIT_MessageBox::critical( module()->getApp()->desktop(), aTitle, aMessage );
-}
-
-void HYDROGUI_CalculationDlg::onAlreadyExists( QString theName )
-{
-  QString aTitle = QObject::tr( "INSUFFICIENT_INPUT_DATA" );
-  QString aMessage = QObject::tr( "OBJECT_EXISTS_IN_DOCUMENT" ).arg( theName );
-  SUIT_MessageBox::critical( module()->getApp()->desktop(), aTitle, aMessage );
-}
-
 QWizardPage* HYDROGUI_CalculationDlg::createZonesPage() {
   QWizardPage* aPage = new QWizardPage( mainFrame() );
   QFrame* aFrame = new QFrame( aPage );
@@ -212,6 +196,42 @@ QWizardPage* HYDROGUI_CalculationDlg::createZonesPage() {
   return aPage;
 }
 
+
+bool HYDROGUI_CalculationDlg::acceptCurrent() const
+{
+  QString anErrorMsg;
+
+  if ( myGeomObjects->count() == 0 )
+  {
+    anErrorMsg = tr( "EMPTY_GEOMETRY_OBJECTS" );
+  }
+
+  if ( !anErrorMsg.isEmpty() )
+  {
+    anErrorMsg += "\n" + tr( "INPUT_VALID_DATA" );
+    
+    QString aTitle = tr( "INSUFFICIENT_INPUT_DATA" );
+    SUIT_MessageBox::critical( module()->getApp()->desktop(), aTitle, anErrorMsg );
+  }
+
+  return anErrorMsg.isEmpty();
+}
+
+void HYDROGUI_CalculationDlg::onEmptyName()
+{
+  QString aTitle = tr( "INSUFFICIENT_INPUT_DATA" );
+  QString aMessage = tr( "INCORRECT_OBJECT_NAME" ) + "\n" + tr( "INPUT_VALID_DATA" );
+  SUIT_MessageBox::critical( module()->getApp()->desktop(), aTitle, aMessage );
+}
+
+void HYDROGUI_CalculationDlg::onAlreadyExists( QString theName )
+{
+  QString aTitle = tr( "INSUFFICIENT_INPUT_DATA" );
+  QString aMessage = QObject::tr( "OBJECT_EXISTS_IN_DOCUMENT" ).arg( theName ) +
+                     "\n" + tr( "INPUT_VALID_DATA" );
+  SUIT_MessageBox::critical( module()->getApp()->desktop(), aTitle, aMessage );
+}
+
 void HYDROGUI_CalculationDlg::onZonesDropped( const QList<SUIT_DataObject*>& theList, 
     SUIT_DataObject* theTargetParent, int theTargetRow, Qt::DropAction theDropAction )
 {
index 15b7578baca31ffc6f291ffe1d347e9ec22da044..7178207fc7d19c3c64c00b29cec4fc672c404b04 100644 (file)
@@ -85,13 +85,15 @@ signals:
   void                       removeObjects();
   void                       objectSelected( const QString & theObjName );
   void                       boundarySelected( const QString & theObjName );
-  void                       splitZones();
-  void                       hideZones();
   void                       setMergeType( int theMergeType, QString& theBathymetryName );
   void                       createRegion( const QList<SUIT_DataObject*>& theZonesList );
   void                       moveZones( SUIT_DataObject* theRegion, const QList<SUIT_DataObject*>& theZonesList );
   void                       clickedInZonesBrowser( SUIT_DataObject* );
 
+protected:
+
+  virtual bool               acceptCurrent() const;
+
 private:
 
   QWizardPage*               createObjectsPage();
index 6fb6cfb4ab9b2ee538421a3440dbcfdf7886ad5f..0323f921935798dd965d6ccf5802fc2a2356ab98 100644 (file)
@@ -186,8 +186,8 @@ HYDROGUI_InputPanel* HYDROGUI_CalculationOp::createInputPanel() const
   // Connect signals and slots
   connect( aPanel, SIGNAL( addObjects() ), SLOT( onAddObjects() ) );
   connect( aPanel, SIGNAL( removeObjects() ), SLOT( onRemoveObjects() ) );
-  connect( aPanel, SIGNAL( splitZones() ), SLOT( onSplitZones() ) );
-  connect( aPanel, SIGNAL( hideZones() ), SLOT( onHideZones() ) );
+  connect( aPanel, SIGNAL( Next( const int ) ), SLOT( onSplitZones() ) );
+  connect( aPanel, SIGNAL( Back( const int ) ), SLOT( onHideZones() ) );
   connect( aPanel, SIGNAL( clicked( SUIT_DataObject* ) ), SLOT( onSelected( SUIT_DataObject* ) ) );
   connect( aPanel, SIGNAL( setMergeType( int, QString& ) ), SLOT( onSetMergeType( int, QString& ) ) );
   connect( aPanel, SIGNAL( moveZones( SUIT_DataObject*, const QList<SUIT_DataObject*>& ) ),
@@ -206,43 +206,39 @@ HYDROGUI_InputPanel* HYDROGUI_CalculationOp::createInputPanel() const
 
 void HYDROGUI_CalculationOp::onBoundarySelected ( const QString & theObjName )
 {
-  // Set the selected boundary polyline to the calculation case
-  Handle(HYDROData_PolylineXY) anObject;
-  Handle(AIS_InteractiveContext) aCtx;
-  if ( myPreviewViewManager ) 
-  {
-    if ( OCCViewer_Viewer* aViewer = myPreviewViewManager->getOCCViewer() )
-    {
-      aCtx = aViewer->getAISContext();
-    }
-  }
+  bool anIsToUpdateViewer = false;
+
   // Remove the old boundary from the operation viewer
-  anObject = myEditedObject->GetBoundaryPolyline();
-  if ( !anObject.IsNull() )
+  Handle(HYDROData_PolylineXY) aPrevPolyline = 
+    myEditedObject->GetBoundaryPolyline();
+  if ( !aPrevPolyline.IsNull() )
   {
-    module()->removeObjectShape( HYDROGUI_Module::VMR_PreviewCaseZones, anObject );
+    module()->removeObjectShape( HYDROGUI_Module::VMR_PreviewCaseZones, aPrevPolyline );
+    anIsToUpdateViewer = true;
   }
 
-  if ( theObjName.trimmed().isEmpty() )
-  {
-    // No polyline is selected
-    myEditedObject->RemoveBoundaryPolyline();
-  }
-  else
+  // Set the selected boundary polyline to the calculation case
+  Handle(HYDROData_PolylineXY) aNewPolyline = Handle(HYDROData_PolylineXY)::DownCast(
+    HYDROGUI_Tool::FindObjectByName( module(), theObjName, KIND_POLYLINEXY ) );
+  myEditedObject->SetBoundaryPolyline( aNewPolyline );
+
+  if ( myPreviewViewManager )
   {
-    Handle(HYDROData_Entity) anEntity = 
-      HYDROGUI_Tool::FindObjectByName( module(), theObjName, KIND_POLYLINEXY );
-    if ( !anEntity.IsNull() )
+    OCCViewer_Viewer* aViewer = myPreviewViewManager->getOCCViewer();
+    if ( aViewer )
     {
-      anObject = Handle(HYDROData_PolylineXY)::DownCast( anEntity );
-      if ( !anObject.IsNull() )
+      if ( !aNewPolyline.IsNull() )
       {
-        myEditedObject->SetBoundaryPolyline( anObject );
+        Handle(AIS_InteractiveContext) aCtx = aViewer->getAISContext();
         if ( !aCtx.IsNull() )
         {
-          showObject( anEntity, aCtx );
+          showObject( aNewPolyline, aCtx );
+          anIsToUpdateViewer = true;
         }
       }
+
+      if ( anIsToUpdateViewer )
+        aViewer->update();
     }
   }
 }
@@ -617,6 +613,8 @@ void HYDROGUI_CalculationOp::setZonesVisible( bool theIsVisible )
           }
         }
       }
+
+      aViewer->update();
     }
   }
 }
@@ -695,6 +693,8 @@ void HYDROGUI_CalculationOp::createPreview()
       if ( OCCViewer_ViewWindow* vw = (OCCViewer_ViewWindow*)myPreviewViewManager->getActiveView() )
         vw->onTopView();
     }
+
+    aViewer->update();
   }
 }
 
@@ -708,7 +708,7 @@ void HYDROGUI_CalculationOp::showObject( Handle(HYDROData_Entity) theEntity, Han
       aShape = new HYDROGUI_Shape( theCtx, theEntity );
       module()->setObjectShape( HYDROGUI_Module::VMR_PreviewCaseZones, theEntity, aShape );
     }
-    aShape->update();
+    aShape->update( false );
   }
 }
 
index 8acc5641fbba099e2ad46ea6f6bf95fa790e7e47..35707867c75380e4f0d562cda2427f3f40e26a4d 100644 (file)
@@ -81,28 +81,30 @@ int HYDROGUI_Wizard::addPage( QWizardPage* thePage )
 
 void HYDROGUI_Wizard::onNext()
 {
-  if ( myWizard->count() > 0 )
+  if ( !acceptCurrent() )
+    return;
+
+  if ( myWizard->count() <= 0 )
+    return;
+
+  myBack->setEnabled( true );
+  int aCurIdx = myWizard->currentIndex();
+  if ( aCurIdx == ( myWizard->count() - 2 ) )
   {
-    myBack->setEnabled( true );
-    int aCurIdx = myWizard->currentIndex();
-    if ( aCurIdx == ( myWizard->count() - 2 ) )
-    {
-      // Go to the last page
-      myNext->setVisible( false );
-      myFinish->setVisible( true );
-    }
-    myWizard->setCurrentIndex( aCurIdx + 1 );
+    // Go to the last page
+    myNext->setVisible( false );
+    myFinish->setVisible( true );
   }
+  myWizard->setCurrentIndex( aCurIdx + 1 );
+
+  emit Next( myWizard->currentIndex() );
 }
 
 void HYDROGUI_Wizard::onBack()
 {
-  int aCurIdx = myWizard->currentIndex();
-  if ( aCurIdx <= 1 )
-  {
-    // Disable back if go to the first page
-    myBack->setEnabled( false );
-  }
+  if ( myWizard->count() <= 0 )
+    return;
+
   if ( myWizard->count() > 1 )
   {
     myNext->setVisible( true );
@@ -114,7 +116,23 @@ void HYDROGUI_Wizard::onBack()
     myNext->setVisible( false );
     myFinish->setVisible( true );
   }
+
+  int aCurIdx = myWizard->currentIndex();
   myWizard->setCurrentIndex( aCurIdx - 1 );
+
+  aCurIdx = myWizard->currentIndex();
+  if ( aCurIdx <= 0 )
+  {
+    // Disable back if go to the first page
+    myBack->setEnabled( false );
+  }
+
+  emit Back( aCurIdx );
+}
+
+bool HYDROGUI_Wizard::acceptCurrent() const
+{
+  return true;
 }
 
 QAbstractButton* HYDROGUI_Wizard::button( QWizard::WizardButton theBtnId ) const
index 39f4fbf2b2f32dc9164112d2b020f58b206daac5..2d31434ab1225f63887e4c1134c337ae3d2b64d4 100644 (file)
@@ -45,8 +45,18 @@ public:
   QStackedWidget*  wizard() const;
 
 public slots:
-  void onNext();
-  void onBack();
+  void             onNext();
+  void             onBack();
+
+signals:
+  void             Next( const int );
+  void             Back( const int );
+
+protected:
+
+  // Returns the state of current page filing.
+  // Reimplement this method in your subclass to verify user input data.
+  virtual bool    acceptCurrent() const;
 
 private:
   QStackedWidget* myWizard;
index fe2d0936f1ebb7a79e48c861abf5ecb46f611895..4fece1fa9f7906072ad2befb0fce6427fbd5bbc1 100644 (file)
@@ -213,6 +213,10 @@ All supported formats (*.brep *.iges *.igs *.step *.stp)</translation>
       <source>REMOVE</source>
       <translation>Remove</translation>
     </message>
+    <message>
+      <source>EMPTY_GEOMETRY_OBJECTS</source>
+      <translation>No one geometry object is selected, should be at least one.</translation>
+    </message>
   </context>
 
   <context>