X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSALOME_InstallWizard.cxx;h=ecc0a901f762b66de73df4561eefe1e8e18a26e3;hb=15d500ad3ebc31eec8b286677cf4cee0e9899307;hp=87fe009202beb1ffcceed957e8ca8b43a18cae7a;hpb=ba3338fe7b16f9fda96a27e9d8d286e150142206;p=tools%2Finstall.git diff --git a/src/SALOME_InstallWizard.cxx b/src/SALOME_InstallWizard.cxx index 87fe009..ecc0a90 100644 --- a/src/SALOME_InstallWizard.cxx +++ b/src/SALOME_InstallWizard.cxx @@ -270,6 +270,19 @@ static bool hasSpace( const QString& dir ) return false; } +// ================================================================ +/*! + * QMyCheckBox class : custom check box + * The only goal is to give access to the protected setState() method + */ +// ================================================================ +class QMyCheckBox: public QCheckBox +{ +public: + QMyCheckBox( const QString& text, QWidget* parent, const char* name = 0 ) : QCheckBox ( text, parent, name ) {} + void setState ( ToggleState s ) { QCheckBox::setState( s ); } +}; + // ================================================================ /*! * SALOME_InstallWizard::SALOME_InstallWizard @@ -290,12 +303,12 @@ SALOME_InstallWizard::SALOME_InstallWizard(QString aXmlFileName) setTitleFont( fnt ); // set icon - setIcon( QPixmap( ( const char** ) image0_data ) ); + setIcon( QPixmap( ( const char** ) image_icon ) ); // enable sizegrip setSizeGripEnabled( true ); // add logo - addLogo( QPixmap( (const char**)image1_data ) ); + addLogo( QPixmap( (const char**)image_logo ) ); // set defaults setVersion( "1.2" ); @@ -548,12 +561,23 @@ void SALOME_InstallWizard::setupProductsPage() prerequisites->setChecked( true ); QWhatsThis::add( prerequisites, tr( "Check this if you want prerequisites products to be set on automatically" ) ); QToolTip::add ( prerequisites, tr( "Check this if you want prerequisites products to be set on automatically" ) ); - // buttons - unselectBtn = new QPushButton( tr( "&Unselect All" ), moreBox ); + // button + unselectBtn = new QPushButton( tr( "&Unselect All" ), moreBox ); QWhatsThis::add( unselectBtn, tr( "Unselects all products" ) ); QToolTip::add ( unselectBtn, tr( "Unselects all products" ) ); + // / tri-state checkboxes + selectSrcBtn = new QMyCheckBox( tr( "SALOME sources" ), moreBox ); + selectSrcBtn->setTristate( true ); + QWhatsThis::add( selectSrcBtn, tr( "Selects/unselects SALOME sources" ) ); + QToolTip::add ( selectSrcBtn, tr( "Selects/unselects SALOME sources" ) ); + selectBinBtn = new QMyCheckBox( tr( "SALOME binaries" ), moreBox ); + selectBinBtn->setTristate( true ); + QWhatsThis::add( selectBinBtn, tr( "Selects/unselects SALOME binaries" ) ); + QToolTip::add ( selectBinBtn, tr( "Selects/unselects SALOME binaries" ) ); QVBoxLayout* btnLayout = new QVBoxLayout; btnLayout->setMargin( 0 ); btnLayout->setSpacing( 6 ); btnLayout->addWidget( unselectBtn ); + btnLayout->addWidget( selectSrcBtn ); + btnLayout->addWidget( selectBinBtn ); // layouting advancet mode widgets moreBoxLayout->addMultiCellWidget( tempLab, 0, 0, 0, 2 ); moreBoxLayout->addMultiCellWidget( tempFolder, 1, 1, 0, 1 ); @@ -599,6 +623,10 @@ void SALOME_InstallWizard::setupProductsPage() connect( productsView, SIGNAL( itemToggled( QCheckListItem* ) ), this, SLOT( onItemToggled( QCheckListItem* ) ) ); connect( unselectBtn, SIGNAL( clicked() ), this, SLOT( onProdBtn() ) ); + connect( selectSrcBtn, SIGNAL( stateChanged(int) ), + this, SLOT( onProdBtn() ) ); + connect( selectBinBtn, SIGNAL( stateChanged(int) ), + this, SLOT( onProdBtn() ) ); // connecting signals connect( targetFolder, SIGNAL( textChanged( const QString& ) ), this, SLOT( directoryChanged( const QString& ) ) ); @@ -1134,6 +1162,29 @@ void SALOME_InstallWizard::checkProductPage() // update required size information requiredSize->setText( QString::number( tots ) + " Kb"); requiredTemp->setText( QString::number( temps ) + " Kb"); + + // update , check boxes state + int totSrc = 0, selSrc = 0; + int totBin = 0, selBin = 0; + MapProducts::Iterator itProd; + for ( itProd = productsMap.begin(); itProd != productsMap.end(); ++itProd ) { + if ( itProd.data().getContext() == "salome sources" ) { + totSrc++; + if ( productsView->isSources( itProd.key() ) ) + selSrc++; + } + if ( itProd.data().getContext() == "salome binaries" ) { + totBin++; + if ( productsView->isBinaries( itProd.key() ) ) + selBin++; + } + } + selectSrcBtn->blockSignals( true ); + selectBinBtn->blockSignals( true ); + selectSrcBtn->setState( selSrc == 0 ? QButton::Off : ( selSrc == totSrc ? QButton::On : QButton::NoChange ) ); + selectBinBtn->setState( selBin == 0 ? QButton::Off : ( selBin == totBin ? QButton::On : QButton::NoChange ) ); + selectSrcBtn->blockSignals( false ); + selectBinBtn->blockSignals( false ); // enable/disable "Next" button setNextEnabled( productsPage, isAnyProductSelected && isTargetDirValid && isTempDirValid ); @@ -1288,8 +1339,9 @@ void SALOME_InstallWizard::launchScript() nextButton()->setText( tr( "&Next >" ) ); QWhatsThis::add( nextButton(), tr( "Moves to the next step of the installation procedure" ) ); QToolTip::add ( nextButton(), tr( "Moves to the next step of the installation procedure" ) ); - nextButton()->disconnect(); - connect( nextButton(), SIGNAL( clicked() ), this, SLOT( next() ) ); + disconnect( this, SIGNAL( nextClicked() ), this, SLOT( next() ) ); + disconnect( this, SIGNAL( nextClicked() ), this, SLOT( onStart() ) ); + connect( this, SIGNAL( nextClicked() ), this, SLOT( next() ) ); // button setBackEnabled( true ); // script parameters @@ -1481,8 +1533,9 @@ void SALOME_InstallWizard::pageChanged( const QString & mytitle) nextButton()->setText( tr( "&Next >" ) ); QWhatsThis::add( nextButton(), tr( "Moves to the next step of the installation procedure" ) ); QToolTip::add ( nextButton(), tr( "Moves to the next step of the installation procedure" ) ); - nextButton()->disconnect(); - connect( nextButton(), SIGNAL( clicked() ), this, SLOT( next() ) ); + disconnect( this, SIGNAL( nextClicked() ), this, SLOT( next() ) ); + disconnect( this, SIGNAL( nextClicked() ), this, SLOT( onStart() ) ); + connect( this, SIGNAL( nextClicked() ), this, SLOT( next() ) ); cancelButton()->disconnect(); connect( cancelButton(), SIGNAL( clicked()), this, SLOT( reject() ) ); @@ -1511,8 +1564,9 @@ void SALOME_InstallWizard::pageChanged( const QString & mytitle) QWhatsThis::add( nextButton(), tr( "Starts installation process" ) ); QToolTip::add ( nextButton(), tr( "Starts installation process" ) ); // reconnect Next button - to use it as Start button - nextButton()->disconnect(); - connect( nextButton(), SIGNAL( clicked() ), this, SLOT( onStart() ) ); + disconnect( this, SIGNAL( nextClicked() ), this, SLOT( next() ) ); + disconnect( this, SIGNAL( nextClicked() ), this, SLOT( onStart() ) ); + connect( this, SIGNAL( nextClicked() ), this, SLOT( onStart() ) ); setNextEnabled( true ); // reconnect Cancel button to terminate process cancelButton()->disconnect(); @@ -1675,8 +1729,9 @@ void SALOME_InstallWizard::productInstalled( ) nextButton()->setText( tr( "&Next >" ) ); QWhatsThis::add( nextButton(), tr( "Moves to the next step of the installation procedure" ) ); QToolTip::add ( nextButton(), tr( "Moves to the next step of the installation procedure" ) ); - nextButton()->disconnect(); - connect( nextButton(), SIGNAL( clicked() ), this, SLOT( next() ) ); + disconnect( this, SIGNAL( nextClicked() ), this, SLOT( next() ) ); + disconnect( this, SIGNAL( nextClicked() ), this, SLOT( onStart() ) ); + connect( this, SIGNAL( nextClicked() ), this, SLOT( next() ) ); // enable button setBackEnabled( true ); } @@ -1805,6 +1860,8 @@ void SALOME_InstallWizard::onProdBtn() { const QObject* snd = sender(); productsView->blockSignals( true ); + selectSrcBtn->blockSignals( true ); + selectBinBtn->blockSignals( true ); if ( snd == unselectBtn ) { QCheckListItem* item = (QCheckListItem*)( productsView->firstChild() ); while( item ) { @@ -1812,6 +1869,36 @@ void SALOME_InstallWizard::onProdBtn() item = (QCheckListItem*)( item->nextSibling() ); } } + else if ( snd == selectSrcBtn ) { + QMyCheckBox* checkBox = ( QMyCheckBox* )snd; + if ( checkBox->state() == QButton::NoChange ) + checkBox->setState( QButton::On ); + MapProducts::Iterator itProd; + for ( itProd = productsMap.begin(); itProd != productsMap.end(); ++itProd ) { + if ( itProd.data().getContext() == "salome sources" ) { + if ( checkBox->state() == QButton::Off ) + productsView->setNone( itProd.key() ); + else + productsView->setSources( itProd.key() ); + } + } + } + else if ( snd == selectBinBtn ) { + QMyCheckBox* checkBox = ( QMyCheckBox* )snd; + if ( checkBox->state() == QButton::NoChange ) + checkBox->setState( QButton::On ); + MapProducts::Iterator itProd; + for ( itProd = productsMap.begin(); itProd != productsMap.end(); ++itProd ) { + if ( itProd.data().getContext() == "salome binaries" ) { + if ( checkBox->state() == QButton::Off ) + productsView->setNone( itProd.key() ); + else + productsView->setBinaries( itProd.key() ); + } + } + } + selectSrcBtn->blockSignals( false ); + selectBinBtn->blockSignals( false ); productsView->blockSignals( false ); onSelectionChanged(); checkProductPage();