X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_Wizard.cxx;h=fd393ae53870eab2bcc655a17e83c4ed76a3e878;hb=d6e19029f8b41f295db878e9aecf451c2edda4af;hp=34c6a04a4da79016077741c5f0774b7cbb53422b;hpb=abe63c42525c9299302649cdb5dcff4f83368c26;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_Wizard.cxx b/src/HYDROGUI/HYDROGUI_Wizard.cxx index 34c6a04a..fd393ae5 100644 --- a/src/HYDROGUI/HYDROGUI_Wizard.cxx +++ b/src/HYDROGUI/HYDROGUI_Wizard.cxx @@ -1,12 +1,8 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// +// Copyright (C) 2014-2015 EDF-R&D // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -27,31 +23,144 @@ #include #include #include +#include +#include +#include +#include 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() ); + + myNext = new QPushButton( tr( "NEXT" ), buttonFrame() ); + myBack = new QPushButton( tr( "BACK" ), buttonFrame() ); + myFinish = new QPushButton( tr( "FINISH" ), buttonFrame() ); + + QHBoxLayout* aBtnsLayout = qobject_cast(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 ); - connect( myWizard, SIGNAL( accepted() ), this, SLOT( onApply() ) ); - connect( myWizard, SIGNAL( rejected() ), this, SLOT( onCancel() ) ); - connect( myWizard, SIGNAL( helpRequested() ), this, SLOT( onHelp() ) ); + 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 ( !acceptCurrent() ) + return; + + if ( myWizard->count() <= 0 ) + return; + + 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 ); + + emit Next( myWizard->currentIndex() ); +} + +void HYDROGUI_Wizard::onBack() +{ + if ( myWizard->count() <= 0 ) + return; + + if ( myWizard->count() > 1 ) + { + myNext->setVisible( true ); + myFinish->setVisible( false ); + } + else + { + // Wizard has a single page - show finish + 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 ); +} + +void HYDROGUI_Wizard::onFirstPage() +{ + if ( myWizard->count() > 1 ) { + myNext->setVisible( true ); + myFinish->setVisible( false ); + myWizard->setCurrentIndex( 0 ); + myBack->setEnabled( false ); + emit Back( myWizard->currentIndex() ); + } +} + +bool HYDROGUI_Wizard::acceptCurrent() const +{ + return true; +} + +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