]> SALOME platform Git repositories - modules/hydro.git/commitdiff
Salome HOME
HYDROGUI_Wizard has been refactored and now uses QStackedWidget instead of QWizard.
authorrkv <rkv@opencascade.com>
Wed, 6 Nov 2013 15:59:37 +0000 (15:59 +0000)
committerrkv <rkv@opencascade.com>
Wed, 6 Nov 2013 15:59:37 +0000 (15:59 +0000)
src/HYDROGUI/HYDROGUI_CalculationDlg.cxx
src/HYDROGUI/HYDROGUI_InputPanel.cxx
src/HYDROGUI/HYDROGUI_InputPanel.h
src/HYDROGUI/HYDROGUI_Wizard.cxx
src/HYDROGUI/HYDROGUI_Wizard.h
src/HYDROGUI/resources/HYDROGUI_msg_en.ts

index 6345e5f5b94f704fbacb4c469d3309c7b48878c7..9b53a2499e4713e20e8ee912a51c05189650f139 100644 (file)
 #include <QToolButton>
 #include <QWizardPage>
 #include <QComboBox>
+#include <QStackedWidget>
 
 HYDROGUI_CalculationDlg::HYDROGUI_CalculationDlg( HYDROGUI_Module* theModule, const QString& theTitle )
 : HYDROGUI_Wizard( theModule, theTitle )
 {
-  QWizard* aWizard = wizard();
-  aWizard->addPage( createObjectsPage() );
-  aWizard->addPage( createZonesPage() );
-  connect( aWizard->button( QWizard::NextButton ), SIGNAL( clicked() ), SIGNAL( splitZones() ) );
-  connect( aWizard->button( QWizard::BackButton ), SIGNAL( clicked() ), SIGNAL( hideZones() ) );
-  
-  aWizard->show();
+  addPage( createObjectsPage() );
+  addPage( createZonesPage() );
+  connect( button( QWizard::NextButton ), SIGNAL( clicked() ), SIGNAL( splitZones() ) );
+  connect( button( QWizard::BackButton ), SIGNAL( clicked() ), SIGNAL( hideZones() ) );
 }
 
 HYDROGUI_CalculationDlg::~HYDROGUI_CalculationDlg()
@@ -82,7 +80,7 @@ void HYDROGUI_CalculationDlg::reset()
 }
 
 QWizardPage* HYDROGUI_CalculationDlg::createObjectsPage() {
-  QWizardPage* aPage = new QWizardPage( wizard() );
+  QWizardPage* aPage = new QWizardPage( mainFrame() );
   QFrame* aFrame = new QFrame( aPage );
 
   // Calculation name
@@ -149,7 +147,7 @@ void HYDROGUI_CalculationDlg::onAlreadyExists( QString theName )
 }
 
 QWizardPage* HYDROGUI_CalculationDlg::createZonesPage() {
-  QWizardPage* aPage = new QWizardPage( wizard() );
+  QWizardPage* aPage = new QWizardPage( mainFrame() );
   QFrame* aFrame = new QFrame( aPage );
 
   QGridLayout* aLayout = new QGridLayout( aPage );
index 23a9c06e756b29500bc2c3a13b384cce7b696f28..d569896ea1b73c46b9310df3deef85b6999bfd9e 100644 (file)
@@ -37,29 +37,30 @@ HYDROGUI_InputPanel::HYDROGUI_InputPanel( HYDROGUI_Module* theModule, const QStr
   setWindowTitle( theTitle );
   setAllowedAreas( Qt::RightDockWidgetArea );
 
-  if ( doInitLayout ) {
 
-    QFrame* aFrame = new QFrame( this );
-    setWidget( aFrame );
-    QVBoxLayout* aLayout = new QVBoxLayout( aFrame );
+  QFrame* aFrame = new QFrame( this );
+  setWidget( aFrame );
+  QVBoxLayout* aLayout = new QVBoxLayout( aFrame );
+  
+  myMainFrame = new QFrame( aFrame );
+  QBoxLayout* aMainLayout = new QVBoxLayout( myMainFrame );
+  aMainLayout->setMargin( 0 );
+  aMainLayout->setSpacing( 5 );
     
-    myMainFrame = new QFrame( aFrame );
-    QBoxLayout* aMainLayout = new QVBoxLayout( myMainFrame );
-    aMainLayout->setMargin( 0 );
-    aMainLayout->setSpacing( 5 );
-      
-    aLayout->addWidget( myMainFrame, 1 );
+  aLayout->addWidget( myMainFrame, 1 );
+
+  myBtnFrame = new QFrame( aFrame );
+  aLayout->addWidget( myBtnFrame, 0 );
 
-    myBtnFrame = new QFrame( aFrame );
-    aLayout->addWidget( myBtnFrame, 0 );
+  QHBoxLayout* aBtnsLayout = new QHBoxLayout( myBtnFrame );
+  aBtnsLayout->setMargin( 5 );
+  aBtnsLayout->setSpacing( 5 );
 
-    QHBoxLayout* aBtnsLayout = new QHBoxLayout( myBtnFrame );
-    aBtnsLayout->setMargin( 5 );
-    aBtnsLayout->setSpacing( 5 );
+  myCancel = new QPushButton( tr( "CANCEL" ), myBtnFrame );
+  myHelp = new QPushButton( tr( "HELP" ), myBtnFrame );
 
+  if ( doInitLayout ) {
     myApply = new QPushButton( tr( "APPLY" ), myBtnFrame );
-    myCancel = new QPushButton( tr( "CANCEL" ), myBtnFrame );
-    myHelp = new QPushButton( tr( "HELP" ), myBtnFrame );
 
     aBtnsLayout->addWidget( myApply, 0 );
     aBtnsLayout->addWidget( myCancel, 0 );
@@ -67,9 +68,9 @@ HYDROGUI_InputPanel::HYDROGUI_InputPanel( HYDROGUI_Module* theModule, const QStr
     aBtnsLayout->addWidget( myHelp, 0 );
 
     connect( myApply,  SIGNAL( clicked() ), this, SLOT( onApply()  ) );
-    connect( myCancel, SIGNAL( clicked() ), this, SLOT( onCancel() ) );
-    connect( myHelp,   SIGNAL( clicked() ), this, SLOT( onHelp()   ) );
   }
+  connect( myCancel, SIGNAL( clicked() ), this, SLOT( onCancel() ) );
+  connect( myHelp,   SIGNAL( clicked() ), this, SLOT( onHelp()   ) );
 }
 
 HYDROGUI_InputPanel::~HYDROGUI_InputPanel()
@@ -122,3 +123,8 @@ QFrame* HYDROGUI_InputPanel::mainFrame() const
 {
   return myMainFrame;
 }
+
+QFrame* HYDROGUI_InputPanel::buttonFrame() const
+{
+  return myBtnFrame;
+}
index 81a6e5decb90f9675236b32b4c880364e9bb170d..00c2c7109656185ac21be5a3ae62ea5a065b6ad3 100644 (file)
@@ -60,15 +60,17 @@ protected slots:
 
 protected:
   QFrame*         mainFrame() const;
+  QFrame*         buttonFrame() const;
   virtual void    closeEvent ( QCloseEvent * event );
 
+  QPushButton* myCancel;
+  QPushButton* myHelp;
+
 private:
   HYDROGUI_Module* myModule;
   QFrame* myMainFrame;
   QFrame* myBtnFrame;
   QPushButton* myApply;
-  QPushButton* myCancel;
-  QPushButton* myHelp;
 };
 
 #endif
index 34c6a04a4da79016077741c5f0774b7cbb53422b..8acc5641fbba099e2ad46ea6f6bf95fa790e7e47 100644 (file)
 #include <QFrame>
 #include <QVBoxLayout>
 #include <QWidget>
+#include <QPushButton>
+#include <QAbstractButton>
+#include <QStackedWidget>
+#include <QWizardPage>
 
 HYDROGUI_Wizard::HYDROGUI_Wizard( HYDROGUI_Module* theModule, const QString& theTitle )
 : HYDROGUI_InputPanel( theModule, theTitle, false )
 {
 
-  myWizard = new QWizard( theModule->application()->desktop() );
-  myWizard->setOption( QWizard::HaveHelpButton );
-  setWidget( myWizard );
+  myWizard = new QStackedWidget( theModule->application()->desktop() );
 
-  connect( myWizard, SIGNAL( accepted() ),      this, SLOT( onApply()  ) );
-  connect( myWizard, SIGNAL( rejected() ),      this, SLOT( onCancel() ) );
-  connect( myWizard, SIGNAL( helpRequested() ), this, SLOT( onHelp()   ) );
+  myNext = new QPushButton( tr( "NEXT" ), buttonFrame() );
+  myBack = new QPushButton( tr( "BACK" ), buttonFrame() );
+  myFinish = new QPushButton( tr( "FINISH" ), buttonFrame() );
+
+  QHBoxLayout* aBtnsLayout = qobject_cast<QHBoxLayout*>(buttonFrame()->layout());
+  aBtnsLayout->addWidget( myBack, 0 );
+  aBtnsLayout->addWidget( myNext, 0 );
+  aBtnsLayout->addWidget( myFinish, 0 );
+  aBtnsLayout->addWidget( myCancel, 0 );
+  aBtnsLayout->addStretch( 1 );
+  aBtnsLayout->addWidget( myHelp, 0 );
+
+  myBack->setEnabled( false );
+  myNext->setVisible( false );
+
+  connect( myNext,  SIGNAL( clicked() ), SLOT( onNext() ) );
+  connect( myBack,  SIGNAL( clicked() ), SLOT( onBack() ) );
+  connect( myFinish, SIGNAL( clicked() ), SLOT( onApply() ) );
+
+  addWidget( myWizard );
 }
 
 HYDROGUI_Wizard::~HYDROGUI_Wizard()
 {
 }
 
-QWizard* HYDROGUI_Wizard::wizard() const
+QStackedWidget* HYDROGUI_Wizard::wizard() const
 {
   return myWizard;
 }
 
-void HYDROGUI_Wizard::show()
+int HYDROGUI_Wizard::addPage( QWizardPage* thePage )
+{
+  if ( myWizard->count() > 0 )
+  {
+    myNext->setVisible( true );
+    myFinish->setVisible( false );
+  }
+  return myWizard->addWidget( thePage );
+}
+
+void HYDROGUI_Wizard::onNext()
+{
+  if ( myWizard->count() > 0 )
+  {
+    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 );
+  }
+}
+
+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() > 1 )
+  {
+    myNext->setVisible( true );
+    myFinish->setVisible( false );
+  }
+  else
+  {
+    // Wizard has a single page - show finish
+    myNext->setVisible( false );
+    myFinish->setVisible( true );
+  }
+  myWizard->setCurrentIndex( aCurIdx - 1 );
+}
+
+QAbstractButton* HYDROGUI_Wizard::button( QWizard::WizardButton theBtnId ) const
 {
-  HYDROGUI_InputPanel::show();
-  myWizard->show();
+  QAbstractButton* aRes = 0;
+  switch( theBtnId )
+  {
+    case QWizard::BackButton:
+      aRes = myBack;
+      break;
+    case QWizard::NextButton:
+      aRes = myNext;
+      break;
+    case QWizard::FinishButton:
+      aRes = myFinish;
+      break;
+    case QWizard::CancelButton:
+      aRes = myCancel;
+      break;
+    case QWizard::HelpButton:
+      aRes = myHelp;
+  }
+  return aRes;
 }
\ No newline at end of file
index 1ddf93f110e6d321aeb4d0645bfe80afa2a3e6c8..39f4fbf2b2f32dc9164112d2b020f58b206daac5 100644 (file)
@@ -25,6 +25,9 @@
 
 #include "HYDROGUI_InputPanel.h"
 #include <QWizard>
+class QAbstractButton;
+class QStackedWidget;
+class QWizardPage;
 
 /**\class HYDROGUI_Wizard
  *\brief The base class representing base wizard for HYDROGUI module
@@ -37,12 +40,19 @@ public:
   HYDROGUI_Wizard( HYDROGUI_Module* theModule, const QString& theTitle );
   virtual ~HYDROGUI_Wizard();
 
-  void show();
+  QAbstractButton* button( QWizard::WizardButton theBtnId ) const;
+  int              addPage( QWizardPage* thePage );
+  QStackedWidget*  wizard() const;
 
-  QWizard* wizard() const;
+public slots:
+  void onNext();
+  void onBack();
 
 private:
-  QWizard* myWizard;
+  QStackedWidget* myWizard;
+  QPushButton*    myNext;
+  QPushButton*    myBack;
+  QPushButton*    myFinish;
 };
 
 #endif
index e931d9b8ee5c4611aace72c97f2d1b074961accf..22fdedc0d8812ba785830cc67cebd6454f1fd6f6 100644 (file)
@@ -188,6 +188,22 @@ Do you want to continue?</translation>
     </message>
   </context>
   
+  <context>
+    <name>HYDROGUI_Wizard</name>
+    <message>
+      <source>NEXT</source>
+      <translation>Next &gt;</translation>
+    </message>
+    <message>
+      <source>BACK</source>
+      <translation>&lt; Back</translation>
+    </message>
+    <message>
+      <source>FINISH</source>
+      <translation>Finish</translation>
+    </message>
+  </context>
+  
   <context>
     <name>HYDROGUI_ImportBathymetryDlg</name>
     <message>