]> SALOME platform Git repositories - tools/install.git/blob - src/SALOME_InstallWizard.hxx
Salome HOME
Update for IW salome 5.X
[tools/install.git] / src / SALOME_InstallWizard.hxx
1 //  File      : SALOME_InstallWizard.hxx
2 //  Created   : Thu Dec 18 12:01:00 2002
3 //  Author    : Vadim SANDLER, Open CASCADE SAS (vadim.sandler@opencascade.com)
4 //  Project   : SALOME
5 //  Module    : Installation Wizard
6 //  Copyright : 2002-2008 CEA
7
8 #ifndef __SALOME_InstallWizard
9 #define __SALOME_InstallWizard
10
11 #include "InstallWizard.h"
12
13 #include <qmap.h>
14 #include <qvaluelist.h>
15 #include <qstringlist.h> 
16
17 class QLineEdit;
18 class QPushButton;
19 class QListViewItem;
20 class QCheckListItem;
21 class QLabel;
22 class QTextEdit;
23 class QTextBrowser;
24 class QProcess;
25 class QCheckBox;
26 class QSplitter;
27 class QMyCheckBox;
28 class ProcessThread;
29 class ProductsView;
30 class ProgressView;
31 class HelpWindow;
32 class InstallInfo;
33 class QButton;
34 class QRadioButton;
35 class QButtonGroup;
36
37 // This enum describes the possible types of the SALOME installation
38 enum InstallationType { Binaries, Sources, Compile };
39 // This enum describes the possible states of a tristate parameter
40 enum BoolTristate { False, True, NotDefined };
41
42 /*! 
43   Class Dependancies : Products info
44   This class stores all product dependancies for correct work of installation procedure
45 */
46 class Dependancies
47 {
48  public:
49   // default constructor, necessary for map
50   Dependancies() {}
51   // constructor
52   Dependancies( const QString&     name, 
53                 const QStringList& depend, 
54                 const long         Binsize,  
55                 const long         Sourcessize, 
56                 const long         SrcBuildsize, 
57                 const long         tempsize, 
58                 const QString&     vers = QString::null,
59                 const QString&     descr = QString::null,
60                 const QString&     tp = QString::null,
61                 bool               pickup = false,
62                 BoolTristate       woGui = NotDefined )
63     : smbName( name ), 
64       dependsOn( depend ), 
65       sizeBinaryTotal( Binsize ), 
66       sizeSourcesTotal( Sourcessize ), 
67       sizeSrcBuildTotal( SrcBuildsize ), 
68       sizeTemp( tempsize ),
69       version( vers ),
70       description( descr ),
71       type( tp ),
72       pickupEnv( pickup ),
73       woGuiMode( woGui ) {}
74
75   // gets symbolic name
76   QString     getName() const         { return smbName;   }
77   // gets dependancies
78   QStringList getDependancies() const { return dependsOn; }
79   // gets disk space required
80   long        getSize( InstallationType instType ) const 
81   { 
82     return instType == Binaries ? sizeBinaryTotal : 
83       instType == Sources ? sizeSourcesTotal : 
84       sizeSrcBuildTotal;
85   }
86   // gets temporary disk space required
87   long        getTempSize( InstallationType instType ) const     
88   { 
89     return ( instType == Binaries ? 0 : instType == Sources ? 0 : sizeTemp );
90   }
91   // gets product's version
92   QString     getVersion() const      { return version; }
93   // gets product's description
94   QString     getDescription() const  { return description; }
95   // gets product's type
96   QString     getType() const         { return type; }
97   // returns true if this product needs to pick-up environment
98   bool        pickUpEnvironment()     { return pickupEnv; }
99   // returns true if this product supports installation without GUI mode
100   BoolTristate supportWoGuiMode()     { return woGuiMode; }
101
102  private:
103   QString     smbName;           // symbolic name
104   QStringList dependsOn;         // prerequisites list
105   long        sizeBinaryTotal;   // disk space for binaries required
106   long        sizeSourcesTotal;  // disk space for sources required
107   long        sizeSrcBuildTotal; // disk space for compiled sources required
108   long        sizeTemp;          // disk space for temporary files required
109   QString     version;           // product's version
110   QString     description;       // product's description
111   QString     type;              // product's type (salome sources, binaries or prerequisite)
112   bool        pickupEnv;        // "Pick-up environment" flag
113   BoolTristate woGuiMode;        // support of installation without GUI flag
114 };
115
116 /*! 
117   Class Button : Operation button info
118   This class stores information about the custom operation buttons which appear on
119   the <Finish> page of the Install Wizard.
120 */
121 class Button
122 {
123  public:
124   // default constructor, required for list
125   Button() : myButton( 0 ) {}
126   // constructor
127   Button( const QString& label, const QString& tooltip, const QString& script )
128     : myLabel( label ), myTootip( tooltip ), myScript( script ), myButton( 0 ) {}
129
130   // set operation button
131   void setButton( QButton* btn ) { myButton = btn; }
132
133   // get label
134   QString  label()  const { return myLabel;  } 
135   // get tooltip
136   QString  tootip() const { return myTootip; }
137   // get script name
138   QString  script() const { return myScript; }
139   // get operation button
140   QButton* button() const { return myButton; }
141
142  private:
143   QString  myLabel;    // button label
144   QString  myTootip;   // button tooltip
145   QString  myScript;   // operation script
146   QButton* myButton;   // operation button
147 };
148
149 typedef QMap<QCheckListItem*, Dependancies> MapProducts;
150 typedef QValueList<Button>                  ButtonList;
151 typedef QMap<QString, QString>              MapXmlFiles;
152 typedef QMap<QString, BoolTristate>         MapAttrStates;
153
154 /*!
155   Class SALOME_InstallWizard : Installation Wizard's main window
156 */
157 class SALOME_InstallWizard: public InstallWizard
158 {
159   Q_OBJECT
160     
161  public:
162   // constructor
163   SALOME_InstallWizard( const QString& aXmlFileName = QString::null,
164                         const QString& aTargetDir   = QString::null,
165                         const QString& aTmpDir      = QString::null,
166                         const bool     aForceSrc    = false,
167                         const bool     aSingleDir   = false );
168   // destructor
169   virtual ~SALOME_InstallWizard( );
170
171   // get base platform to install binaries package
172   QString getBasePlatform();
173   // get current platform
174   static QStringList currentPlatform();
175
176   // get binaries path
177   QString getBinPath() const { return binPath; }
178   // get sources path
179   QString getSrcPath() const { return srcPath; }
180   // get platform binaries path
181   QString getPlatformBinPath( const QString& ) const;
182
183   // get map of supported platforms and corresponding XML files
184   MapXmlFiles getXmlMap( const QString& aXmlFileName = QString::null );
185   // check/get XML file and current platform
186   void getXmlAndPlatform();
187
188   // event filter
189   bool eventFilter( QObject* object, QEvent* event );
190
191   // set dependancies
192   void setDependancies( QCheckListItem* item, Dependancies dep);
193
194   // add button for the <Finish> page
195   void addFinishButton( const QString& label, 
196                         const QString& tooltip, 
197                         const QString& script,
198                         bool toClear = false );
199
200   // set version
201   void setVersion( const QString& version ) { myVersion = version; }
202   // set caption
203   void setCaption( const QString& caption ) { myCaption = caption; updateCaption(); }
204   // set copyright
205   void setCopyright( const QString& copyright ) { myCopyright = copyright; }
206   // set license
207   void setLicense( const QString& license ) { myLicense = license; }
208
209   // get version
210   QString getVersion() { return myVersion; }
211   // get caption
212   QString getCaption() { return myCaption; }
213   // get copyright
214   QString getCopyright() { return myCopyright; }
215   // get license
216   QString getLicense() { return myLicense; }
217   // get platform
218   QString getPlatform() { return refPlatform ? refPlatform : curPlatform; }
219   // get InstallWizard's name
220   QString getIWName() { return myIWName; }
221
222   // process validation event (<val> is validation code)
223   void processValidateEvent( const int val, void* data );
224   // get private installation type
225   InstallationType getInstType() { return installType; };
226
227  public slots:
228   // polishing of the widget
229   void polish();
230   
231   // save install log to file
232   void saveLog();
233
234  protected:
235   // updates caption according to the current page number
236   void updateCaption();
237   // close event handler
238   void closeEvent( QCloseEvent* ce );
239   // creates introduction page
240   void setupIntroPage();   
241   // create installation types page
242   void setupTypePage();
243   // create platforms page
244   void setupPlatformPage();
245   // create directories page
246   void setupDirPage();
247   // creates products page
248   void setupProductsPage();
249   // creates prestart page
250   void setupCheckPage();
251   // creates progress page
252   void setupProgressPage();
253   // creates readme page
254   void setupReadmePage();
255   // displays choice info
256   void showChoiceInfo();
257   // validates page when <Next> button is clicked
258   bool acceptData( const QString& );
259   // calculates disk space required for the installation, returns true if any product selected to be installed (src, bin or native)
260   bool checkSize( long* totSize = 0, long* tempSize = 0 );
261   // checks products page validity (directories and products selection)
262   void checkProductPage();
263   // sets the product and all products this one depends on to be checked
264   void setPrerequisites( QCheckListItem* item );
265   // unsets all products which depend of unchecked product ( recursively )
266   void unsetPrerequisites( QCheckListItem* item );
267   // runs installation script
268   void launchScript(); 
269   // searches product listview item with given symbolic name 
270   QCheckListItem* findItem( const QString& sName );
271   // sets progress state to Aborted
272   void abort();
273   // clears and (optionally) removes temporary directory
274   void clean(bool rmDir = false);
275   // Update GUI and check installation errors
276   void completeInstallation();
277   // Run the modification of SALOME *.la files
278   void runModifyLaFiles();
279   // Run the Fortran libraries checking
280   void runCheckFLib();
281
282  protected slots:
283   // reject slot
284   void reject();
285   // accept slot
286   void accept();
287   
288  private slots:
289   // called when user moves from page to page
290   void pageChanged( const QString & mytitle);
291   // called when user selected either installation type or installation platform
292   void onButtonGroup( int index );
293   // invokes Help window
294   void helpClicked();
295   // invokes directory selection dialog box
296   void browseDirectory();
297   // called when directory path (target or temp) is changed
298   void directoryChanged( const QString& text );
299   // <Start> button's slot - runs installation
300   void onStart();
301   // called when users tries to pass parameters for the script
302   void onReturnPressed();
303   // callback function - as response for the script finishing
304   void productInstalled();
305   // called when <Cancel> button is clicked during installation script running
306   void tryTerminate();
307   // kills installation process and quits application
308   void onCancel();
309   // called when selection is changed in the products list view
310   void onSelectionChanged();
311   // called when user checks/unchecks any product item
312   void onItemToggled( QCheckListItem* );
313   // <Installation with GUI> check-box slot
314   void onInstallGuiBtn();
315   // <More...> button slot
316   void onMoreBtn();
317   // Slot to update 'Available disk space' field
318   void updateAvailableSpace();
319   // Slot to take result of modification SALOME *.la files
320   void checkModifyLaResult();
321   // Slot to take result of Fortran libraries checking
322   void checkFLibResult();
323   // Slot to update 'Size' column for modules and prerequisites
324   void updateSizeColumn();
325
326   // <Finish> page buttons slot
327   void onFinishButton();
328
329   // <About> button slot
330   void onAbout();
331
332   // QProcess slots:
333   // -->something was written to stdin
334   void wroteToStdin();
335   // -->something was written to stout
336   void readFromStdout();
337   // -->something was written to stderr
338   void readFromStderr();
339
340  private:
341   QString          myIWName;       // Installation Wizard's name
342   QString          myVersion;      // version info
343   QString          myCaption;      // application name
344   QString          myCopyright;    // copyright info 
345   QString          myLicense;      // license info
346   QString          myTargetPath;   // target directory path
347   QString          myTmpPath;      // temporary directory path
348   
349   HelpWindow*      helpWindow;     // help window
350   QProcess*        shellProcess;   // shell process (install script)
351   QProcess*        diskSpaceProc;  // shell process (to get available disk space script)
352   QProcess*        modifyLaProc;   // shell process (to modify SALOME *.la files script)
353   QProcess*        checkFLibProc;  // shell process (to check Fortran libraries script)
354   MapProducts      productsMap;    // products info (name, dependancies, disk space )
355   MapXmlFiles      extraProducts;  // additional products to be installed
356   QStringList      toInstall;      // list of products being installed
357   QStringList      notInstall;     // list of products being not installed
358   QStringList      prodSequence;   // specified list of products being installed
359   MapAttrStates    woGuiModules;   // map of SALOME modules names, that can support installation without GUI mode
360   InstallationType installType;    // type of the installation
361   QString          curPlatform;    // current operating system
362   QString          refPlatform;    // referenced operating system (selected by user). It is defined, 
363                                    //   if current OS is not determined or not supported only
364   MapXmlFiles      platformsMap;   // supported operating systems and corresponding XML files
365   QString          xmlFileName;    // xml file
366   QString          binPath;        // binaries path
367   QString          srcPath;        // sources path
368   QString          oneProdDirName; // name of the single directory for binaries of prerequisites
369   QString          commonPlatform; // platform with universal binaries
370   QStringList      singleBinPlts;  // list of platforms for that the special binary packages are exist
371   bool             moreMode;       // advanced mode flag
372   QWidget*         previousPage;   // previous page
373   QString          tmpCreated;     // created temporary directory
374   bool             stateChanged;   // flag: whether installation type or platform was changed
375   bool             exitConfirmed;  // flag: "Exit confirmed"
376   bool             rmSrcPrevState; // flag: status of "Remove SRC & TMP files" is changed ?
377   // Widgets
378   // --> introduction page
379   QWidget*         introPage;      // page itself
380   QLabel*          logoLab;        // logo pixmap
381   QLabel*          versionLab;     // version info
382   QLabel*          copyrightLab;   // copyright info
383   QLabel*          licenseLab;     // license info
384   QLabel*          info;           // program info
385   // --> installation types page
386   QWidget*         typePage;       // page itself
387   QButtonGroup*    buttonGrp;      // group of the available installation types radio-buttons
388   QRadioButton*    binBtn;         // install binaries button
389   QRadioButton*    srcBtn;         // install sources button
390   QRadioButton*    srcCompileBtn;  // install sources and compile button
391   QCheckBox*       removeSrcBtn;   // <Remove sources & tmp files> checkbox
392   bool             forceSrc;       // Force all products to be compiled from sources
393   // --> installation platform page
394   QWidget*         platformsPage;  // page itself
395   QButtonGroup*    platBtnGrp;     // group of platforms for selection
396   QString          warnMsg;        // warning message
397   QLabel*          warnLab;        // warning label
398   QLabel*          warnLab3;       // additional warning label
399   // --> installation directories page
400   QWidget*         dirPage;        // page itself
401   QLineEdit*       targetFolder;   // target directory for installing of products
402   QPushButton*     targetBtn;      // browse target directory button
403   QLineEdit*       tempFolder;     // directory for the temporary files: /tmp by default
404   QPushButton*     tempBtn;        // browse temp directory button
405   // --> products page
406   QWidget*         productsPage;   // page itself
407   ProductsView*    modulesView;    // modules list view
408   QMyCheckBox*     installGuiBtn;  // <Installation with GUI> checkbox
409   ProductsView*    prereqsView;    // prerequisites list view
410   QMyCheckBox*     oneModDirBtn;   // <Install SALOME modules to a single directory> checkbox
411   QMyCheckBox*     oneProdDirBtn;  // <Install prerequisites to a single directory> checkbox
412   QPushButton*     moreBtn;        // <Show/Hide prerequisites> button
413   QTextBrowser*    productInfo;    // products info box
414   QLabel*          requiredSize;   // <Total disk space required> label
415   QLabel*          requiredTemp;   // <Space required for temporary files> label
416   QLabel*          availableSize;  // <Available disk space> label
417   bool             singleDir;      // Force all SALOME modules to be installed into single directory
418   // --> prestart page
419   QWidget*         prestartPage;   // page itself
420   QTextEdit*       choices;        // choice text view
421   // --> progress page
422   QWidget*         progressPage;   // page itself
423   QSplitter*       splitter;       // splitter window
424   InstallInfo*     installInfo;    // information about running installation scripts
425   QLabel*          parametersLab;  // answer field's label
426   QLineEdit*       passedParams;   // user can pass data to running script
427   QTextEdit*       installProgress;// contains information about progress of installing selected products
428   ProgressView*    progressView;   // displays information about progress of installing selected products
429   QLabel*          statusLab;      // displays currently performed action
430   // --> finish page
431   QWidget*         readmePage;     // page itself
432   QTextEdit*       readme;         // Readme information window
433   ButtonList       buttons;        // operation buttons
434
435   ProcessThread*   myThread;       // validation thread
436   bool             hasErrors;      // flag: if there were any errors or warnings during the installation
437 };
438
439 #endif