// Author : Vadim SANDLER, Open CASCADE SAS (vadim.sandler@opencascade.com)
// Project : SALOME
// Module : Installation Wizard
-// Copyright : 2002-2006 CEA
+// Copyright : 2002-2012 CEA
#ifndef __SALOME_InstallWizard
#define __SALOME_InstallWizard
class HelpWindow;
class InstallInfo;
class QButton;
+class QRadioButton;
+class QButtonGroup;
+
+// This enum describes the possible types of the SALOME installation
+enum InstallationType { Binaries, Sources, Compile };
+// This enum describes the possible states of a tristate parameter
+enum BoolTristate { False, True, NotDefined };
/*!
Class Dependancies : Products info
const QStringList& depend,
const long Binsize,
const long Sourcessize,
+ const long SrcBuildsize,
const long tempsize,
- const QString& def = QString::null,
+ const QString& vers = QString::null,
const QString& descr = QString::null,
- const QString& ctx = QString::null,
- bool pickup = false )
+ const QString& tp = QString::null,
+ bool pickup = false,
+ BoolTristate woGui = NotDefined )
: smbName( name ),
dependsOn( depend ),
- sizeSourcesTotal( Sourcessize ),
sizeBinaryTotal( Binsize ),
+ sizeSourcesTotal( Sourcessize ),
+ sizeSrcBuildTotal( SrcBuildsize ),
sizeTemp( tempsize ),
- defaultMode( def ),
+ version( vers ),
description( descr ),
- context( ctx ),
- pickupEnv( pickup ) {}
+ type( tp ),
+ pickupEnv( pickup ),
+ woGuiMode( woGui ) {}
// gets symbolic name
QString getName() const { return smbName; }
// gets dependancies
QStringList getDependancies() const { return dependsOn; }
// gets disk space required
- long getSize(bool sources = false) const
+ long getSize( InstallationType instType ) const
{
- return ( sources ? sizeSourcesTotal : sizeBinaryTotal );
+ return instType == Binaries ? sizeBinaryTotal :
+ instType == Sources ? sizeSourcesTotal :
+ sizeSrcBuildTotal;
}
// gets temporary disk space required
- long getTempSize() const { return sizeTemp; }
+ long getTempSize( InstallationType instType ) const
+ {
+ return ( instType == Binaries ? 0 : instType == Sources ? 0 : sizeTemp );
+ }
+ // gets product's version
+ QString getVersion() const { return version; }
// gets product's description
QString getDescription() const { return description; }
- // gets product's context
- QString getContext() const { return context; }
- // returns true if product supports given context
- bool hasContext( const QString& ctx ) const
- {
- QStringList cl = QStringList::split(",",context);
- return cl.find( ctx ) != cl.end();
- }
- // gets default mode
- QString getDefault() const { return defaultMode; }
+ // gets product's type
+ QString getType() const { return type; }
// returns true if this product needs to pick-up environment
bool pickUpEnvironment() { return pickupEnv; }
+ // returns true if this product supports installation without GUI mode
+ BoolTristate supportWoGuiMode() { return woGuiMode; }
private:
- QString smbName; // symbolic name
- QStringList dependsOn; // prerequisites list
- long sizeSourcesTotal; // disk space required
- long sizeBinaryTotal; // disk space required
- long sizeTemp; // disk space for temporary files required
- QString defaultMode; // default installation mode
- QString description; // product's description
- QString context; // product's context (salome sources, binaries or prerequisite)
+ QString smbName; // symbolic name
+ QStringList dependsOn; // prerequisites list
+ long sizeBinaryTotal; // disk space for binaries required
+ long sizeSourcesTotal; // disk space for sources required
+ long sizeSrcBuildTotal; // disk space for compiled sources required
+ long sizeTemp; // disk space for temporary files required
+ QString version; // product's version
+ QString description; // product's description
+ QString type; // product's type (salome sources, binaries or prerequisite)
bool pickupEnv; // "Pick-up environment" flag
+ BoolTristate woGuiMode; // support of installation without GUI flag
};
/*!
typedef QMap<QCheckListItem*, Dependancies> MapProducts;
typedef QValueList<Button> ButtonList;
+typedef QMap<QString, QString> MapXmlFiles;
+typedef QMap<QString, BoolTristate> MapAttrStates;
/*!
Class SALOME_InstallWizard : Installation Wizard's main window
public:
// constructor
- SALOME_InstallWizard(const QString& aXmlFileName,
- const QString& aTargetDir = QString::null,
- const QString& aTmpDir = QString::null,
- const bool aForceSrc = false);
+ SALOME_InstallWizard( const QString& aXmlFileName = QString::null,
+ const QString& aTargetDir = QString::null,
+ const QString& aTmpDir = QString::null,
+ const bool aForceSrc = false,
+ const bool aSingleDir = false );
// destructor
virtual ~SALOME_InstallWizard( );
+ // get base platform to install binaries package
+ QString getBasePlatform();
+ // get current platform
+ static QStringList currentPlatform();
+ // get application root dir
+ static QString rootDirPath();
+
+ // get binaries path
+ QString getBinPath() const { return binPath; }
+ // get sources path
+ QString getSrcPath() const { return srcPath; }
+ // get platform binaries path
+ QString getPlatformBinPath( const QString& ) const;
+
+ // get map of supported platforms and corresponding XML files
+ MapXmlFiles getXmlMap( const QString& aXmlFileName = QString::null );
+ // check/get XML file and current platform
+ void getXmlAndPlatform();
+
// event filter
bool eventFilter( QObject* object, QEvent* event );
// set dependancies
void setDependancies( QCheckListItem* item, Dependancies dep);
+ // executes some actions after finish of installation process (successful or not)
+ void doPostActions( const QString& btnText,
+ const QString& btnAboutInfo );
+
// add button for the <Finish> page
void addFinishButton( const QString& label,
const QString& tooltip,
- const QString& script);
+ const QString& script,
+ bool toClear = false );
// set version
void setVersion( const QString& version ) { myVersion = version; }
void setCopyright( const QString& copyright ) { myCopyright = copyright; }
// set license
void setLicense( const QString& license ) { myLicense = license; }
- // set OS
- void setOS( const QString& OS ) { myOS = OS; }
+ // set list of optional libraries
+ void setOptionalLibs( const QString& optlibs ) { myOptLibs = QStringList::split( ",", optlibs ); }
// get version
QString getVersion() { return myVersion; }
QString getCopyright() { return myCopyright; }
// get license
QString getLicense() { return myLicense; }
- // get OS
- QString getOS() { return myOS; }
+ // get list of optional libraries
+ QStringList getOptionalLibs() { return myOptLibs; }
+ // get platform
+ QString getPlatform() { return !refPlatform.isEmpty() ? refPlatform : curPlatform; }
+ // get corresponding XML file
+ QString getXmlFile( const QString& platform ) {
+ return (platformsMap.find( platform ) != platformsMap.end() ) ?
+ platformsMap[ platform ] :
+ QString("");
+ }
// get InstallWizard's name
QString getIWName() { return myIWName; }
// process validation event (<val> is validation code)
void processValidateEvent( const int val, void* data );
+ // get private installation type
+ InstallationType getInstType() { return installType; };
public slots:
// polishing of the widget
void closeEvent( QCloseEvent* ce );
// creates introduction page
void setupIntroPage();
- // creates products page
- void setupProductsPage(const bool forceSrc = false);
- // creates directories page
+ // create installation types page
+ void setupTypePage();
+ // create platforms page
+ void setupPlatformPage();
+ // create directories page
void setupDirPage();
+ // creates products page
+ void setupProductsPage();
// creates prestart page
void setupCheckPage();
// creates progress page
// displays choice info
void showChoiceInfo();
// validates page when <Next> button is clicked
- bool acceptData( const QString& );
+ bool acceptData( const QString& );
// calculates disk space required for the installation, returns true if any product selected to be installed (src, bin or native)
bool checkSize( long* totSize = 0, long* tempSize = 0 );
// checks products page validity (directories and products selection)
void checkProductPage();
- // sets the product and all products this one depends on to be checked ( recursively )
+ // sets the product and all products this one depends on to be checked
void setPrerequisites( QCheckListItem* item );
+ // unsets all products which depend of unchecked product ( recursively )
+ void unsetPrerequisites( QCheckListItem* item );
// runs installation script
void launchScript();
// searches product listview item with given symbolic name
void abort();
// clears and (optionally) removes temporary directory
void clean(bool rmDir = false);
+ // Update GUI and check installation errors
+ void completeInstallation();
+ // Run the modification of SALOME *.la files
+ void runModifyLaFiles();
+ // Run the Fortran libraries checking
+ void runCheckFLib();
protected slots:
// reject slot
private slots:
// called when user moves from page to page
void pageChanged( const QString & mytitle);
+ // called when user selected either installation type or installation platform
+ void onButtonGroup( int index );
// invokes Help window
void helpClicked();
// invokes directory selection dialog box
void onSelectionChanged();
// called when user checks/unchecks any product item
void onItemToggled( QCheckListItem* );
- // <SALOME sources>, <SALOME binaries>, <Unselect All> buttons slot
- void onProdBtn();
+ // <Installation with GUI> check-box slot
+ void onInstallGuiBtn();
// <More...> button slot
void onMoreBtn();
- // <Install all products from sources> check box
- void onBuildAll();
+ // Slot to update 'Available disk space' field
+ void updateAvailableSpace();
+ // Slot to take result of modification SALOME *.la files
+ void checkModifyLaResult();
+ // Slot to take result of Fortran libraries checking
+ void checkFLibResult();
+ // Slot to update 'Size' column for modules and prerequisites
+ void updateSizeColumn();
// <Finish> page buttons slot
void onFinishButton();
- // reset to default state
- void resetToDefaultState();
-
// <About> button slot
void onAbout();
void readFromStdout();
// -->something was written to stderr
void readFromStderr();
+ // -->stop installation process if there is an error in stderr
+ void manageInstProc();
private:
QString myIWName; // Installation Wizard's name
QString myCaption; // application name
QString myCopyright; // copyright info
QString myLicense; // license info
- QString myOS; // operation system
+ QString myTargetPath; // target directory path
+ QString myTmpPath; // temporary directory path
+ QStringList myOptLibs; // list of optional libraries
HelpWindow* helpWindow; // help window
QProcess* shellProcess; // shell process (install script)
+ QProcess* diskSpaceProc; // shell process (to get available disk space script)
+ QProcess* modifyLaProc; // shell process (to modify SALOME *.la files script)
+ QProcess* checkFLibProc; // shell process (to check Fortran libraries script)
MapProducts productsMap; // products info (name, dependancies, disk space )
+ MapXmlFiles extraProducts; // additional products to be installed
QStringList toInstall; // list of products being installed
+ QStringList notInstall; // list of products being not installed
+ QStringList prodSequence; // specified list of products being installed
+ MapAttrStates woGuiModules; // map of SALOME modules names, that can support installation without GUI mode
+ InstallationType installType; // type of the installation
+ QString curPlatform; // current operating system
+ QString refPlatform; // referenced operating system (selected by user). It is defined,
+ // if current OS is not determined or not supported only
+ MapXmlFiles platformsMap; // supported operating systems and corresponding XML files
QString xmlFileName; // xml file
- QString targetDirPath; // target directory
- QString tmpDirPath; // temporary directory
+ QString binPath; // binaries path
+ QString srcPath; // sources path
+ QString oneProdDirName; // name of the single directory for binaries of prerequisites
+ QString commonPlatform; // platform with universal binaries
bool moreMode; // advanced mode flag
QWidget* previousPage; // previous page
QString tmpCreated; // created temporary directory
+ bool stateChanged; // flag: whether installation type or platform was changed
bool exitConfirmed; // flag: "Exit confirmed"
+ bool rmSrcPrevState; // flag: status of "Remove SRC & TMP files" is changed ?
// Widgets
// --> introduction page
QWidget* introPage; // page itself
QLabel* logoLab; // logo pixmap
- QLabel* versionLab; // vesrsion info
+ QLabel* versionLab; // version info
QLabel* copyrightLab; // copyright info
QLabel* licenseLab; // license info
QLabel* info; // program info
- // --> products page
- QWidget* productsPage; // page itself
+ // --> installation types page
+ QWidget* typePage; // page itself
+ QButtonGroup* buttonGrp; // group of the available installation types radio-buttons
+ QRadioButton* binBtn; // install binaries button
+ QRadioButton* srcBtn; // install sources button
+ QRadioButton* srcCompileBtn; // install sources and compile button
+ QCheckBox* removeSrcBtn; // <Remove sources & tmp files> checkbox
+ bool forceSrc; // Force all products to be compiled from sources
+ // --> installation platform page
+ QWidget* platformsPage; // page itself
+ QButtonGroup* platBtnGrp; // group of platforms for selection
+ QString warnMsg; // warning message
+ QLabel* warnLab; // warning label
+ QLabel* warnLab3; // additional warning label
+ // --> installation directories page
+ QWidget* dirPage; // page itself
QLineEdit* targetFolder; // target directory for installing of products
QPushButton* targetBtn; // browse target directory button
QLineEdit* tempFolder; // directory for the temporary files: /tmp by default
QPushButton* tempBtn; // browse temp directory button
+ // --> products page
+ QWidget* productsPage; // page itself
+ ProductsView* modulesView; // modules list view
+ QMyCheckBox* installGuiBtn; // <Installation with GUI> checkbox
+ ProductsView* prereqsView; // prerequisites list view
+ QMyCheckBox* oneModDirBtn; // <Install SALOME modules to a single directory> checkbox
+ QMyCheckBox* oneProdDirBtn; // <Install prerequisites to a single directory> checkbox
+ QPushButton* moreBtn; // <Show/Hide prerequisites> button
+ QTextBrowser* productInfo; // products info box
QLabel* requiredSize; // <Total disk space required> label
QLabel* requiredTemp; // <Space required for temporary files> label
- QPushButton* moreBtn; // <More...> button
- QWidget* moreBox; // container for the <More...> mode widgets
- ProductsView* productsView; // products list view
- QTextBrowser* productsInfo; // products info box
- QCheckBox* prerequisites; // <Auto check prerequisites products> checkbox
- QMyCheckBox* selectSrcBtn; // <SALOME sources> check box
- QMyCheckBox* buildSrcBtn; // <Build SALOME sources> check box
- QMyCheckBox* selectBinBtn; // <SALOME binaries> check box
- QPushButton* unselectBtn; // <Unselect All> button
- QWidget* lessBox; // container for the <Less...> mode widgets
- QMyCheckBox* allFromSrcBtn; // <Install all products from sources> check box
+ QLabel* availableSize; // <Available disk space> label
+ bool singleDir; // Force all SALOME modules to be installed into single directory
// --> prestart page
QWidget* prestartPage; // page itself
QTextEdit* choices; // choice text view
QLineEdit* passedParams; // user can pass data to running script
QTextEdit* installProgress;// contains information about progress of installing selected products
ProgressView* progressView; // displays information about progress of installing selected products
+ QCheckBox* ignoreErrCBox; // checkbox to ignore installation errors
+ QLabel* statusLab; // displays currently performed action
// --> finish page
QWidget* readmePage; // page itself
QTextEdit* readme; // Readme information window
ButtonList buttons; // operation buttons
ProcessThread* myThread; // validation thread
+ bool hasErrors; // flag: if there were any errors or warnings during the installation
};
#endif