Salome HOME
Rollback wrong integration
[tools/install.git] / src / SALOME_InstallWizard.hxx
index fb4f295fcaca02345bc93ccad35eb25bd481769f..551e43c20fb513246462b9a7483854f758b5796b 100644 (file)
@@ -1,30 +1,17 @@
-//  File      : SALOME_InstallWizard.h
+//  File      : SALOME_InstallWizard.hxx
 //  Created   : Thu Dec 18 12:01:00 2002
 //  Author    : Vadim SANDLER
-//  Project   : SALOME Professional
-//  Module    : InstallWizard
-//  Copyright : 2003 CEA/DEN, EDF R&D
-//  $Header$ 
+//  Project   : SALOME
+//  Module    : Installation Wizard
+//  Copyright : 2004-2005 CEA
 
-#include <qlineedit.h>
-#include <qpushbutton.h>
-#include <qradiobutton.h>
-#include <qwidget.h>
-#include <qlistview.h> 
-#include <qlabel.h>
-#include <qtextedit.h> 
-#include <qprocess.h> 
-#include <qlineedit.h> 
-#include <qcheckbox.h>
-#include <qheader.h>
-#include <qsplitter.h>
+#ifndef __SALOME_InstallWizard
+#define __SALOME_InstallWizard
+
+#include "InstallWizard.h"
 
 #include <qmap.h>
 #include <qstringlist.h> 
-#include <qxml.h>
-
-#include "InstallWizard.h"
-#include "helpwindow.h"
 
 /*! 
   Class Dependancies : Products info
@@ -42,22 +29,41 @@ class Dependancies
   // default constructor, necessary for map
   Dependancies() {}
   // constructor
-  Dependancies( const QString& name, const QStringList& depend, const long Binsize,  const long Sourcessize, const long tempsize )
-    : smbName( name ), dependsOn( depend ), sizeSourcesTotal( Sourcessize ), sizeBinaryTotal( Binsize ), sizeTemp( tempsize ) {}
+  Dependancies( const QString&     name, 
+                const QStringList& depend, 
+                const long         Binsize,  
+                const long         Sourcessize, 
+                const long         tempsize, 
+                const QString&     def = QString::null,
+                const QString&     descr = QString::null,
+                const QString&     ctx = QString::null,
+                bool               pickup = false )
+    : smbName( name ), 
+      dependsOn( depend ), 
+      sizeSourcesTotal( Sourcessize ), 
+      sizeBinaryTotal( Binsize ), 
+      sizeTemp( tempsize ),
+      defaultMode( def ),
+      description( descr ),
+      context( ctx ),
+      pickupEnv( pickup ) {}
 
   // 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         { 
-    if (sources) 
-      return sizeSourcesTotal;
-    else
-      return sizeBinaryTotal;
-  }
+  long        getSize(bool sources = false) const { return ( sources ? sizeSourcesTotal : sizeBinaryTotal ); }
   // gets temporary disk space required
-  long        getTempSize() const     { return sizeTemp;  }
+  long        getTempSize() const     { return sizeTemp;   }
+  // gets product's description
+  QString     getDescription() const  { return description; }
+  // gets product's context
+  QString     getContext() const      { return context; }
+  // gets default mode
+  QString     getDefault() const      { return defaultMode; }
+  // returns true if this product needs to pick-up environment
+  bool        pickUpEnvironment()     { return pickupEnv; }
 
  private:
   QString     smbName;          // symbolic name
@@ -65,11 +71,30 @@ class Dependancies
   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)
+  bool        pickupEnv;        // "Pick-up environment" flag
 };
-typedef QMap<QCheckListItem*, Dependancies> MapProducts;
 
-class MyListView;
+class QLineEdit;
+class QPushButton;
+class QListViewItem;
+class QCheckListItem;
+class QLabel;
+class QTextEdit;
+class QTextBrowser;
+class QProcess;
+class QCheckBox;
+class QSplitter;
+class QMyCheckBox;
+class QProcessThread;
+class ProductsView;
 class ProgressView;
+class HelpWindow;
+
+typedef QMap<QCheckListItem*, Dependancies> MapProducts;
+
 /*!
   Class SALOME_InstallWizard : Installation Wizard's main window
 */
@@ -89,11 +114,40 @@ class SALOME_InstallWizard: public InstallWizard
   // set dependancies
   void setDependancies( QCheckListItem* item, Dependancies dep);
 
+  // process validation event (<val> is validation code)
+  void processValidateEvent( const int val, void* data );
+
  public slots:
   // polishing of the widget
   void polish();
+  
+  // set version
+  void setVersion( const QString& version ) { myVersion = version; }
+  // set caption
+  void setCaption( const QString& caption ) { myCaption = caption; updateCaption(); }
+  // set copyright
+  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; }
+
+  // get version
+  QString getVersion() { return myVersion; }
+  // get caption
+  QString getCaption() { return myCaption; }
+  // get copyright
+  QString getCopyright() { return myCopyright; }
+  // get license
+  QString getLicense() { return myLicense; }
+  // get OS
+  QString getOS() { return myOS; }
+  // get InstallWizard's name
+  QString getIWName() { return myIWName; }
 
  protected:
+  // updates caption according to the current page number
+  void updateCaption();
   // close event handler
   void closeEvent( QCloseEvent* ce );
   // creates introduction page
@@ -112,20 +166,20 @@ class SALOME_InstallWizard: public InstallWizard
   void showChoiceInfo();
   // validates page when <Next> button is clicked
   bool acceptData( const QString& ); 
-  // calculates disk space required for the installation
-  void checkSize( long* totSize = 0, long* tempSize = 0 );
-  // checks directories validity
-  void checkDirs();
+  // 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 )
-  void setProductOn( QCheckListItem* item, int install = 1 );
+  void setPrerequisites( QCheckListItem* item );
   // runs installation script
   void launchScript(); 
   // searches product listview item with given symbolic name 
   QCheckListItem* findItem( const QString& sName );
   // sets progress state to Aborted
   void abort();
-  // clears and removes temporary directory
-  void clean();
+  // clears and (optionally) removes temporary directory
+  void clean(bool rmDir = false);
 
  protected slots:
   // reject slot
@@ -153,10 +207,10 @@ class SALOME_InstallWizard: public InstallWizard
   // kills installation process and quits application
   void onCancel();
   // called when selection is changed in the products list view
-  void onSelectionChanged( QListViewItem* );
+  void onSelectionChanged();
   // called when user checks/unchecks any product item
   void onItemToggled( QCheckListItem* );
-  // <Select Sources>, <Select Binaries>, <Unselect All> buttons slot
+  // <SALOME sources>, <SALOME binaries>, <Unselect All> buttons slot
   void onProdBtn();
   // <More...> button slot
   void onMoreBtn();
@@ -172,6 +226,13 @@ class SALOME_InstallWizard: public InstallWizard
   void readFromStderr();
 
  private:
+  QString       myIWName;       // Installation Wizard's name
+  QString       myVersion;      // version info
+  QString       myCaption;      // application name
+  QString       myCopyright;    // copyright info 
+  QString       myLicense;      // license info
+  QString       myOS;           // operation system
+  
   HelpWindow*   helpWindow;     // help window
   QProcess*     shellProcess;   // shell process (install script)
   MapProducts   productsMap;    // products info (name, dependancies, disk space )
@@ -184,7 +245,7 @@ class SALOME_InstallWizard: public InstallWizard
   // Widgets
   // --> introduction page
   QWidget*      introPage;      // page itself
-  QLabel*       logoLab;        // SALOME PRO logo
+  QLabel*       logoLab;        // logo pixmap
   QLabel*       versionLab;     // vesrsion info
   QLabel*       copyrightLab;   // copyright info
   QLabel*       licenseLab;     // license info
@@ -199,11 +260,11 @@ class SALOME_InstallWizard: public InstallWizard
   QLabel*       requiredTemp;   // <Space required for temporary files> label
   QPushButton*  moreBtn;        // <More...> button
   QWidget*      moreBox;        // container for the <More...> mode widgets
-  MyListView*   productsView;   // products list view
+  ProductsView* productsView;   // products list view
   QTextBrowser* productsInfo;   // products info box
   QCheckBox*    prerequisites;  // <Auto check prerequisites products> checkbox
-  QPushButton*  selectSrcBtn;   // <Select Sources> button - NOT USED CURRENTLY
-  QPushButton*  selectBinBtn;   // <Select Binaries> button - NOT USED CURRENTLY
+  QMyCheckBox*  selectSrcBtn;   // <SALOME sources> check box 
+  QMyCheckBox*  selectBinBtn;   // <SALOME binaries> check box 
   QPushButton*  unselectBtn;    // <Unselect All> button
   // --> prestart page
   QWidget*      prestartPage;   // page itself
@@ -220,333 +281,8 @@ class SALOME_InstallWizard: public InstallWizard
   QWidget*      readmePage;     // page itself
   QTextEdit*    readme;         // Readme information window
   QPushButton*  runSalomeBtn;   // <Launch Salome> buttnon
-};
-
-/*! 
-  Class MyListView : Products list view
-*/
-class MyListView : public QListView 
-{
-  Q_OBJECT
-  
-  // Class MyListViewItem: to define custom products list view item
-  class MyListViewItem : public QCheckListItem 
-  {
-  public:
-    // constructor
-    MyListViewItem( MyListView* parent, const QString& text, Type tt ) : QCheckListItem( parent, text, tt ) {}
-    // other constructor
-    MyListViewItem( QCheckListItem* parent, const QString& text, Type tt ) : QCheckListItem( parent, text, tt ) {}
-  protected:
-    // called when users switches item on/off
-    void stateChange( bool on ) {
-      QCheckListItem::stateChange( on );
-      ((MyListView*)listView())->itemActivated( (QCheckListItem*)this );
-    }
-  };
-
-public:
-  // constructor
-  MyListView( QWidget* parent ) : QListView( parent )
-  {
-    setRootIsDecorated( false );
-    addColumn( "Products" );
-    addColumn( "Version" );
-    setResizeMode( LastColumn );
-    setSorting( -1, false );
-  }
-  // adds product item(s) into the list
-  QCheckListItem* addItem( const QString& name, 
-                          const QString& version, 
-                          const QString& install, 
-                          const QStringList& supported, 
-                          const QString& script )
-  {
-    QCheckListItem* item = 0;
-    QListViewItem* lItem = this->firstChild();
-    while( lItem && lItem->nextSibling() )
-      lItem = lItem->nextSibling();
-
-    if ( install.isNull() || install.isEmpty() ) {
-      item = new MyListViewItem( this, name, QCheckListItem::CheckBox );
-      item->setText( 1, version );
-      item->setText( 2, script );
-      item->moveItem( lItem );
-    } else {
-      item = new MyListViewItem( this, name, QCheckListItem::Controller );
-      item->setText( 1, version );
-      item->setText( 2, script );
-
-      QCheckListItem* subitem  = 0;
-      subitem = new MyListViewItem( item, tr( "not install" ), QCheckListItem::RadioButton );
-      subitem->setOn( true );
-      QCheckListItem* previtem = subitem;
-      subitem->moveItem( previtem );
-      for ( int i = 0; i < (int)supported.count(); i++ ) {
-       subitem = new MyListViewItem( item, supported[ i ], QCheckListItem::RadioButton );
-       if ( supported[i] == install )
-         subitem->setOn( true );
-       subitem->moveItem( previtem );
-       previtem = subitem;
-      }
-      item->moveItem( lItem );
-      item->setOpen( true );
-    }
-    return item;
-  }
-  // event filter - prevents collapsing/expanding of items
-  bool eventFilter( QObject* o, QEvent* e )
-  {
-    if ( o == viewport() && e->type() == QEvent::MouseButtonDblClick )
-      return true;
-    return QListView::eventFilter(o, e);
-  }
-  // emits signal when checkbox or radiobutton is switched
-  void itemActivated( QCheckListItem* item ) {
-    emit itemToggled( item );
-  }
-  // returns true if "install binaries" is on for the item
-  bool isBinaries( QCheckListItem* item )
-  {
-    if ( item->childCount() > 0 ) {
-      // not SALOME sources, binaries or docs
-      QCheckListItem* subItem = (QCheckListItem*)(item->firstChild());
-      while( subItem ) {
-        if ( subItem->isOn() )
-          return subItem->text() == tr( "install binaries" );
-        subItem = (QCheckListItem*)(subItem->nextSibling());
-      }
-    }
-    // for SALOME sources, binaries and docs return false
-    return false;
-  }
-  // returns true if "install sources" is on for the item
-  bool isSources( QCheckListItem* item )
-  {
-    if ( item->childCount() > 0 ) {
-      // not SALOME sources, binaries or docs item
-      QCheckListItem* subItem = (QCheckListItem*)(item->firstChild());
-      while( subItem ) {
-        if ( subItem->isOn() )
-          return subItem->text() == tr( "install sources" );
-        subItem = (QCheckListItem*)(subItem->nextSibling());
-      }
-    }
-    else {
-      // for SALOME sources, binaries or docs item return true if checked
-      return item->isOn();
-    }
-    return false;
-  }
-  // returns true if "use native" is on for the item
-  bool isNative( QCheckListItem* item )
-  {
-    if ( item->childCount() > 0 ) {
-      // not SALOME sources, binaries or docs item
-      QCheckListItem* subItem = (QCheckListItem*)(item->firstChild());
-      while( subItem ) {
-        if ( subItem->isOn() )
-          return subItem->text() == tr( "use native" );
-        subItem = (QCheckListItem*)(subItem->nextSibling());
-      }
-    }
-    return false;
-  }
-  // returns true if "not install" is on for the item
-  bool isNone(  QCheckListItem* item )
-  {
-    return !isBinaries( item ) && !isSources( item ) && !isNative( item );
-  }
-  // sets "install binaries" on for the item; if "binaries" item is absent, set "install sources" on if it is present 
-  void setBinaries( QCheckListItem* item ) {
-    if ( item->childCount() > 0 ) {
-      // not SALOME sources, binaries or docs item
-      QCheckListItem* subItem = (QCheckListItem*)(item->firstChild());
-      QCheckListItem* srcItem = 0;
-      QCheckListItem* nativeItem = 0;
-      while( subItem ) {
-        if ( subItem->text() == tr( "install sources" ) )
-          srcItem = subItem;
-        if ( subItem->text() == tr( "use native" ) )
-          nativeItem = subItem;
-        if ( subItem->text() == tr( "install binaries" ) ) {
-          subItem->setOn( true );
-          return;
-        }
-        subItem = (QCheckListItem*)(subItem->nextSibling());
-      }
-      if ( srcItem )
-        srcItem->setOn( true );
-      if ( nativeItem )
-        nativeItem->setOn( true );
-    }
-    else {
-      // for SALOME sources, binaries and docs items set true
-      item->setOn( true );
-    }
-  }
-  // sets "install sources" on for the item; if "sources" item is absent, set "install binaries" on if it is present 
-  void setSources( QCheckListItem* item )  {
-    if ( item->childCount() > 0 ) {
-      // not SALOME sources, binaries or docs item
-      QCheckListItem* subItem = (QCheckListItem*)(item->firstChild());
-      QCheckListItem* binItem = 0;
-      while( subItem ) {
-        if ( subItem->text() == tr( "install binaries" ) )
-          binItem = binItem;
-        if ( subItem->text() == tr( "install sources" ) ) {
-          subItem->setOn( true );
-          return;
-        }
-        subItem = (QCheckListItem*)(subItem->nextSibling());
-      }
-      if ( binItem )
-        binItem->setOn( true );
-    }
-    else {
-      // for SALOME sources, binaries and docs items set true
-      item->setOn( true );
-    }
-  }
-  // sets "use native" on for the item; if "sources" item is absent, set "install binaries" on if it is present 
-  void setNative( QCheckListItem* item )  {
-    if ( item->childCount() > 0 ) {
-      // not SALOME sources, binaries or docs item
-      QCheckListItem* subItem = (QCheckListItem*)(item->firstChild());
-      QCheckListItem* binItem = 0;
-      while( subItem ) {
-        if ( subItem->text() == tr( "install binaries" ) )
-          binItem = binItem;
-        if ( subItem->text() == tr( "use native" ) ) {
-          subItem->setOn( true );
-          return;
-        }
-        subItem = (QCheckListItem*)(subItem->nextSibling());
-      }
-      if ( binItem )
-        binItem->setOn( true );
-    }
-    else {
-      // for SALOME sources, binaries and docs items set true
-      item->setOn( true );
-    }
-  }
-  // sets "not install" on for the item
-  void setNone( QCheckListItem* item )  {
-    if ( item->childCount() > 0 ) {
-      // not SALOME sources, binaries or docs item
-      QCheckListItem* subItem = (QCheckListItem*)(item->firstChild());
-      while( subItem ) {
-        if ( subItem->text() == tr( "not install" ) ) {
-          subItem->setOn( true );
-          return;
-        }
-        subItem = (QCheckListItem*)(subItem->nextSibling());
-      }
-    }
-    else {
-      // for SALOME sources, binaries and docs items set false
-      item->setOn( false );
-    }
-  }
-signals:
-  // emitted when checkbox or radiobutton is switched
-  void itemToggled( QCheckListItem* item );
-};
 
-/*!
-  Class ProgressViewItem: Progress list view item
-*/
-enum Status { Waiting, Processing, Completed, Aborted };
-class ProgressView;
-class ProgressViewItem : public QListViewItem
-{
-public:
-  // constructor
-  ProgressViewItem( ProgressView* parent, 
-                   QString       productName, 
-                   const QString installType, 
-                   const QString scriptName, 
-                   Status        status = Waiting );
-  
-  // sets product status
-  void    setStatus( Status status );
-  // gets product status
-  Status  getStatus()  const { return myStatus; }
-  // gets product name
-  QString getProduct() const { return text( 0 ); }
-  // gets product script
-  QString getScript()   const { return myScript; }
-  // gets type of the installation: 'binaries', 'source', 'native' or 'not install'
-  QString getInstallType() const { return text( 1 ); }
-
-protected:
-  // paints cell of the item
-  void paintCell( QPainter* painter, const QColorGroup& cg, int column, int width, int align );
-
-private:
-  Status  myStatus;       // status
-  QString myScript;       // alias
-};
-
-/*!
-  Class ProgressView: Progress list view
-*/
-class ProgressView : public QListView
-{
-public:
-  // constructor
-  ProgressView( QWidget* parent );
-
-  // sets/gets status colors
-  void    setColors( QColor wColor, QColor pColor, QColor cColor );
-  QColor  getWaitingColor()     { return myWaitingColor;    }
-  QColor  getProcessingColor()  { return myProcessingColor; }
-  QColor  getCompletedColor()   { return myCompletedColor;  }
-
-  // adds product item
-  void    addProduct( const QString smbName, const QString type, const QString product );
-  // finds the first item with given status
-  QString findStatus( Status status );
-  // sets new status for the product item
-  void    setStatus( const QString product, Status status );
-  // scrolls the view to make item visible if necessary
-  void    ensureVisible( const QString product );
-  // gets the product script
-  QString getScript( const QString product );
-
-protected:
-  // finds the item by the product name
-  ProgressViewItem* findItem( const QString product );
-
-private:
-  QColor myWaitingColor;     // 'Waiting' color
-  QColor myProcessingColor;  // 'Processing' color
-  QColor myCompletedColor;   // 'Completed' color
+  QProcessThread* myThread;     // validation thread
 };
 
-/*!
-  Class StructureParser: parses xml-description file and populates the list of the products
-*/
-class StructureParser: public QXmlDefaultHandler
-{
-public:
-  // constructor
-  StructureParser();
-  // begins parsing of the xml dom-element
-  bool startElement( const QString&, const QString&, const QString& ,
-                    const QXmlAttributes& );
-  // finishes parsing of the xml dom-element of the xml dom-element
-  bool endElement( const QString&, const QString&, const QString& );
-  // set control widgets
-  void setListView ( MyListView* view );
-  void setWizard   ( SALOME_InstallWizard* wiz );
-  void setTargetDir( QLineEdit* dir );
-  void setTempDir  ( QLineEdit* dir );
-
-private:
-  MyListView*           tree;      // products list view
-  SALOME_InstallWizard* wizard;    // Salome Pro installation wizard's main window
-  QLineEdit*            targetdir; // target directory widget
-  QLineEdit*            tempdir;   // temp directory widget
-};
+#endif