+// ================================================================
+/*!
+ * QProcessThread
+ * Class for executing systen commands
+ */
+// ================================================================
+static QMutex myMutex(false);
+static QWaitCondition myWC;
+class QProcessThread: public QThread
+{
+ typedef QPtrList<QCheckListItem> ItemList;
+public:
+ QProcessThread( SALOME_InstallWizard* iw ) : QThread(), myWizard( iw ) { myItems.setAutoDelete( false ); }
+
+ void addCommand( QCheckListItem* item, const QString& cmd ) {
+ myItems.append( item );
+ myCommands.push_back( cmd );
+ }
+
+ bool hasCommands() const { return myCommands.count() > 0; }
+ void clearCommands() { myCommands.clear(); myItems.clear(); }
+
+ virtual void run() {
+ while ( hasCommands() ) {
+ ___MESSAGE___( "QProcessThread::run - Processing command : " << myCommands[ 0 ].latin1() );
+ int result = system( myCommands[ 0 ] ) / 256; // return code is <errno> * 256
+ ___MESSAGE___( "QProcessThread::run - Result : " << result );
+ QCheckListItem* item = myItems.first();
+ myCommands.pop_front();
+ myItems.removeFirst();
+ myMutex.lock();
+ SALOME_InstallWizard::postValidateEvent( myWizard, result, (void*)item );
+ if ( hasCommands() )
+ myWC.wait(&myMutex);
+ myMutex.unlock();
+ };
+ }
+
+private:
+ QStringList myCommands;
+ ItemList myItems;
+ SALOME_InstallWizard* myWizard;
+};
+
+// ================================================================
+/*!
+ * WarnDialog
+ * Warning dialog box
+ */
+// ================================================================
+class WarnDialog: public QDialog
+{
+ static WarnDialog* myDlg;
+ bool myCloseFlag;
+
+ WarnDialog( QWidget* parent )
+ : QDialog( parent, "WarnDialog", true, WDestructiveClose ) {
+ setCaption( tr( "Information" ) );
+ myCloseFlag = false;
+ QLabel* lab = new QLabel( tr( "Please, wait while checking native products configuration ..." ), this );
+ lab->setAlignment( AlignCenter );
+ lab->setFrameStyle( QFrame::Box | QFrame::Plain );
+ QVBoxLayout* l = new QVBoxLayout( this );
+ l->setMargin( 0 );
+ l->add( lab );
+ this->setFixedSize( lab->sizeHint().width() + 50,
+ lab->sizeHint().height() * 5 );
+ }
+ void accept() { return; }
+ void reject() { return; }
+ void closeEvent( QCloseEvent* e) { if ( !myCloseFlag ) return; QDialog::closeEvent( e ); }
+
+ ~WarnDialog() { myDlg = 0; }
+public:
+ static void showWarnDlg( QWidget* parent, bool show ) {
+ if ( show ) {
+ if ( !myDlg ) {
+ myDlg = new WarnDialog( parent );
+ QSize sh = myDlg->size();
+ myDlg->move( parent->x() + (parent->width()-sh.width())/2,
+ parent->y() + (parent->height()-sh.height())/2 );
+ myDlg->show();
+ }
+ myDlg->raise();
+ myDlg->setFocus();
+ }
+ else {
+ if ( myDlg ) {
+ myDlg->myCloseFlag = true;
+ myDlg->close();
+ }
+ }
+ }
+ static bool isWarnDlgShown() { return myDlg != 0; }
+};
+WarnDialog* WarnDialog::myDlg = 0;
+