Salome HOME
Merge from V5_1_main 14/05/2010
[modules/visu.git] / src / VISUGUI / VisuGUI_StreamLinesDlg.cxx
index e5bf1e2c78ca28738ef4bfe8847ca39a9b3fd5c2..5fa078a0e3c6ae36c7fd324bb12e5a4fc6e75831 100644 (file)
@@ -1,30 +1,51 @@
-//  VISU VISUGUI : GUI of VISU component
+//  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
 //
-//  Copyright (C) 2003  CEA/DEN, EDF R&D
+//  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 //
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License.
 //
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
 //
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
 //  File   : VisuGUI_StreamLinesDlg.cxx
 //  Author : Vitaly SMETANNIKOV
 //  Module : VISU
-
+//
 #include "VisuGUI_StreamLinesDlg.h"
 
 #include "VisuGUI.h"
 #include "VisuGUI_Tools.h"
+#include "VisuGUI_InputPane.h"
 
 #include "VISU_Mesh_i.hh"
 #include "VISU_Gen_i.hh"
 #include "VISU_StreamLines_i.hh"
+#include "VISU_ColoredPrs3dFactory.hh"
 #include "VISU_StreamLinesPL.hxx"
 #include "VISU_Actor.h"
 
+#include <SalomeApp_DoubleSpinBox.h>
 #include "SalomeApp_Application.h"
+#include "LightApp_Application.h"
 #include "LightApp_SelectionMgr.h"
 
 #include "SVTK_ViewWindow.h"
 
 #include "SUIT_Desktop.h"
+#include "SUIT_Session.h"
 #include "SUIT_ResourceMgr.h"
 #include "SUIT_MessageBox.h"
 
 
 #include <SALOMEDSClient_SObject.hxx>
 
-#include <limits.h>
-#include <qlayout.h>
-#include <qgroupbox.h>
-#include <qcolordialog.h>
-#include <qtabwidget.h>
+#include <QtxColorButton.h>
+
+#include <limits>
+
+#include <QLayout>
+#include <QLabel>
+#include <QCheckBox>
+#include <QComboBox>
+#include <QGroupBox>
+#include <QColorDialog>
+#include <QTabWidget>
+#include <QPushButton>
+#include <QLabel>
+#include <QStringList>
+#include <QKeyEvent>
+#include <QFrame>
 
-using namespace std;
 
 VisuGUI_StreamLinesDlg::VisuGUI_StreamLinesDlg (SalomeApp_Module* theModule)
-     : QDialog(VISU::GetDesktop(theModule), "VisuGUI_StreamLinesDlg", false,
-               WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu),
-       myVisuGUI(theModule)
+  : VisuGUI_ScalarBarBaseDlg(theModule),
+    myVisuGUI(theModule)
 {
-  myPrs = NULL;
-  setCaption(tr("DLG_TITLE"));
+  setWindowTitle(tr("DLG_TITLE"));
   setSizeGripEnabled(TRUE);
 
   QVBoxLayout* aBoxLayout = new QVBoxLayout(this);
   aBoxLayout->setSpacing( 6 );
   aBoxLayout->setMargin( 11 );
 
-  QTabWidget* aTabBox = new QTabWidget(this);
+  myTabBox = new QTabWidget(this);
 
   QFrame* aTopBox = new QFrame(this);
-  aTopBox->setMargin( 11 );
+  //aTopBox->setMargin( 11 );
   QGridLayout* TopLayout = new QGridLayout( aTopBox );
   TopLayout->setAlignment( Qt::AlignTop );
   TopLayout->setSpacing( 8 );
@@ -64,26 +93,30 @@ VisuGUI_StreamLinesDlg::VisuGUI_StreamLinesDlg (SalomeApp_Module* theModule)
 
   // Source box
   QGroupBox* aSourceBox = new QGroupBox (tr("SOURCE_GRP"), aTopBox);
-  aSourceBox->setColumnLayout(0, Qt::Vertical);
-  QGridLayout* aSrcLayout = new QGridLayout( aSourceBox->layout() );
+  //aSourceBox->setColumnLayout(0, Qt::Vertical);
+  QGridLayout* aSrcLayout = new QGridLayout( aSourceBox );
   aSrcLayout->setSpacing( 6 );
-  aSrcLayout->setMargin( 0 );
+  aSrcLayout->setMargin( 11 );
 
   QLabel* aTypeLbl = new QLabel( tr( "LBL_SOURCE_TYPE" ), aSourceBox);
   aSrcLayout->addWidget(aTypeLbl, 0, 0);
 
   myUseSrcCombo = new QComboBox(aSourceBox);
-  const char* aChoise[] = { "None", "Entity", "Family", "Group", "Presentation", 0 };
-  myUseSrcCombo->insertStrList(aChoise);
+  QStringList aChoise;
+  aChoise.append( "None" );
+  aChoise.append( "Entity" );
+  aChoise.append( "Family" );
+  aChoise.append( "Group" );
+  aChoise.append( "Presentation" );
+  myUseSrcCombo->addItems(aChoise);
   aSrcLayout->addWidget(myUseSrcCombo, 0, 1);
 
   mySrcCombo = new QComboBox(aSourceBox);
-  mySrcCombo->setEnabled((myUseSrcCombo->currentItem() == 0));
+  mySrcCombo->setEnabled((myUseSrcCombo->currentIndex() == 0));
 
   connect(myUseSrcCombo, SIGNAL(activated(int)), this, SLOT(onSourceTypeChange(int)));
 
-  // Find All prs obj
-  //SUIT_Study* aActiveStudy = VISU::(myVisuGUI);
+  // Find all fields and time stamps on it
   _PTR(Study) aActiveStudy = VISU::GetCStudy(VISU::GetAppStudy(myVisuGUI));
   LightApp_SelectionMgr* aSel = VISU::GetSelectionMgr(myVisuGUI);
   SALOME_ListIO selected;
@@ -92,103 +125,136 @@ VisuGUI_StreamLinesDlg::VisuGUI_StreamLinesDlg (SalomeApp_Module* theModule)
     Handle(SALOME_InteractiveObject) aIO = selected.First();
     if (aIO->hasEntry()) {
       _PTR(SObject) aSObject = aActiveStudy->FindObjectID(aIO->getEntry());
+      VISU::VISUType aType = VISU::Storable::SObject2Type(aSObject);
+      switch (aType) {
+      case VISU::TTIMESTAMP: {
+        aSObject = aSObject->GetFather();
+        aSObject = aSObject->GetFather();
+        break;
+      }
+      case VISU::TFIELD: {
+        _PTR(SObject) newSObject;
+        if(aSObject->ReferencedObject(newSObject)) aSObject = newSObject;
+        aSObject = aSObject->GetFather();
+        break;
+      }
+      case VISU::TANIMATION: {
+        _PTR(ChildIterator) aTmpIter = aActiveStudy->NewChildIterator(aSObject);
+        for (aTmpIter->InitEx(true); aTmpIter->More(); aTmpIter->Next()) {
+          _PTR(SObject) aTmpChildSObj = aTmpIter->Value();
+          _PTR(SObject) newSObject;
+          if(aTmpChildSObj->ReferencedObject(newSObject)){
+            aSObject = newSObject;
+            aSObject->GetFather();
+            break;
+          }
+        }
+        break;
+      }}
+      
       aSObject = aSObject->GetFather();
       aSObject = aSObject->GetFather();
-      aSObject = aSObject->GetFather();
-      aSObject = aSObject->GetFather();
+
       mySelectionObj = aSObject;
       CORBA::Object_var anObject = VISU::ClientSObjectToObject(mySelectionObj);
-      VISU::Result_var aResult;
       if (CORBA::is_nil(anObject)) {
-       mySelectionObj = mySelectionObj->GetFather();
+        mySelectionObj = mySelectionObj->GetFather();
+      }
+    }
+  }
+
+  if (mySelectionObj) {
+    _PTR(ChildIterator) aIter = aActiveStudy->NewChildIterator(mySelectionObj);
+
+    for (aIter->InitEx(true); aIter->More(); aIter->Next()) {
+      _PTR(SObject) aChildSObj = aIter->Value();
+      CORBA::Object_var aChildObject = VISU::ClientSObjectToObject(aChildSObj);
+
+      if (!CORBA::is_nil(aChildObject)) {
+        VISU::Prs3d_var aPrsObj = VISU::Prs3d::_narrow(aChildObject);
+        if (!CORBA::is_nil(aPrsObj)) { // if this is a Prs object
+          if ((aPrsObj->GetType() != VISU::TSTREAMLINES) &&
+              (aPrsObj->GetType() != VISU::TMESH)) {
+            _PTR(GenericAttribute) anAttr;
+            if (aChildSObj->FindAttribute(anAttr, "AttributeName")) {
+              _PTR(AttributeName) aName (anAttr);
+              myPrsLst += QString(aName->Value().c_str());
+              myPrsList.append(aPrsObj);
+              continue;
+            }
+          }
+        }
       }
-      _PTR(ChildIterator) aIter = aActiveStudy->NewChildIterator(mySelectionObj);
-
-      for (aIter->InitEx(true); aIter->More(); aIter->Next()) {
-       _PTR(SObject) aChildSObj = aIter->Value();
-       CORBA::Object_var aChildObject = VISU::ClientSObjectToObject(aChildSObj);
-
-       if (!CORBA::is_nil(aChildObject)) {
-         VISU::Prs3d_var aPrsObj = VISU::Prs3d::_narrow(aChildObject);
-         if (!CORBA::is_nil(aPrsObj)) { // if this is a Prs object
-           if ((aPrsObj->GetType() != VISU::TSTREAMLINES) &&
-               (aPrsObj->GetType() != VISU::TMESH)) {
-             _PTR(GenericAttribute) anAttr;
-             if (aChildSObj->FindAttribute(anAttr, "AttributeName")) {
-               _PTR(AttributeName) aName (anAttr);
-               myPrsLst += QString(aName->Value().c_str());
-               myPrsList.append(aPrsObj);
-               continue;
-             }
-           }
-         }
-       }
-       // else { // This is not a Prs object
-       _PTR(GenericAttribute) anAttr;
-       if (aChildSObj->FindAttribute(anAttr, "AttributeComment")) {
-         _PTR(AttributeComment) aComment (anAttr);
-         string aComm = aComment->Value();
-         QString strIn (aComm.c_str());
-         VISU::Storable::TRestoringMap aMap;
-         VISU::Storable::StrToMap(strIn,aMap);
-         bool isExist;
-         VISU::VISUType aType = (VISU::VISUType)VISU::Storable::FindValue(aMap,"myType",&isExist).toInt();
-         if (isExist) {
-           if ((aType == VISU::TFAMILY) || (aType == VISU::TGROUP) || (aType == VISU::TENTITY)) {
-             _PTR(GenericAttribute) aNameAttr;
-             if (aChildSObj->FindAttribute(aNameAttr, "AttributeName")) {
-               _PTR(AttributeName) aName (aNameAttr);
-               VISU::Prs3d_var aPrsObj = VISU::Prs3d::_narrow(aChildObject);
-               switch (aType) {
-               case VISU::TFAMILY:
-                 myFamilisLst += QString(aName->Value().c_str());
-                 myFamilyList.append(aPrsObj);
-                 break;
-               case VISU::TGROUP:
-                 myGroupsLst += QString(aName->Value().c_str());
-                 myGroupList.append(aPrsObj);
-                 break;
-               case VISU::TENTITY:
-                 myEntitiesLst += QString(aName->Value().c_str());
-                 myEntityList.append(aPrsObj);
-                 break;
-               }
-             }
-           }
-         }
-       }
+
+      VISU::VISUType aType = VISU::Storable::SObject2Type(aChildSObj);
+      if ((aType == VISU::TFAMILY) || (aType == VISU::TGROUP) || (aType == VISU::TENTITY)) {
+        _PTR(GenericAttribute) aNameAttr;
+        if (aChildSObj->FindAttribute(aNameAttr, "AttributeName")) {
+          _PTR(AttributeName) aName (aNameAttr);
+          VISU::Prs3d_var aPrsObj = VISU::Prs3d::_narrow(aChildObject);
+          switch (aType) {
+          case VISU::TFAMILY:
+            myFamilisLst += QString(aName->Value().c_str());
+            myFamilyList.append(aPrsObj);
+            break;
+          case VISU::TGROUP:
+            myGroupsLst += QString(aName->Value().c_str());
+            myGroupList.append(aPrsObj);
+            break;
+          case VISU::TENTITY:
+            myEntitiesLst += QString(aName->Value().c_str());
+            myEntityList.append(aPrsObj);
+            break;
+          }
+        }
       }
     }
   }
 
   //  connect(myUseSrcChk, SIGNAL(toggled(bool)), mySrcCombo, SLOT(setEnabled(bool)));
-  aSrcLayout->addMultiCellWidget(mySrcCombo, 1, 1, 0, 1);
+  aSrcLayout->addWidget(mySrcCombo, 1, 0, 1, 2);
 
   QLabel* aPercentLbl = new QLabel (tr("LBL_USED_POINTS"), aSourceBox);
   aSrcLayout->addWidget(aPercentLbl, 2, 0);
 
-  myPntPercent = new QtxDblSpinBox( 0, 1, 0.1, aSourceBox );
+  myPntPercent = new SalomeApp_DoubleSpinBox( aSourceBox );
+  VISU::initSpinBox( myPntPercent, 0., 1., .1, "parametric_precision" );
   aSrcLayout->addWidget(myPntPercent, 2, 1);
 
-  TopLayout->addMultiCellWidget(aSourceBox, 0, 0, 0, 1);
+  TopLayout->addWidget(aSourceBox, 0, 0, 1, 2);
 
   QLabel* aStepLenLbl = new QLabel (tr("LBL_STEP_LENGTH"), aTopBox);
   TopLayout->addWidget(aStepLenLbl, 1, 0);
-  myStepLen = new QtxDblSpinBox( DBL_MIN, DBL_MAX, 0.1, aTopBox );
+  myStepLen = new SalomeApp_DoubleSpinBox( aTopBox );
+  VISU::initSpinBox( myStepLen,
+                     std::numeric_limits<double>::min(), 
+                     std::numeric_limits<double>::max(),
+                     .1, 
+                     "parametrc_precision" );  
   myStepLen->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
   TopLayout->addWidget(myStepLen, 1, 1);
   connect(myStepLen, SIGNAL(valueChanged(double)), this, SLOT(StepLengthChanged(double)));
 
   QLabel* aIntegStepLenLbl = new QLabel (tr("LBL_INTEGRATION_STEP"), aTopBox);
   TopLayout->addWidget(aIntegStepLenLbl, 2, 0);
-  myIntegStepLen = new QtxDblSpinBox( DBL_MIN, DBL_MAX, 0.1, aTopBox );
+  myIntegStepLen = new SalomeApp_DoubleSpinBox( aTopBox );
+  VISU::initSpinBox( myIntegStepLen,
+                     std::numeric_limits<double>::min(), 
+                     std::numeric_limits<double>::max(), 
+                     .1, 
+                     "parametrc_precision" ); 
   myIntegStepLen->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
   TopLayout->addWidget(myIntegStepLen, 2, 1);
   connect(myIntegStepLen, SIGNAL(valueChanged(double)), this, SLOT(IntegrationStepChanged(double)));
 
   QLabel* aPropagationLbl = new QLabel (tr("LBL_PROPAGATION_TIME"), aTopBox);
   TopLayout->addWidget(aPropagationLbl, 3, 0);
-  myPropTime = new QtxDblSpinBox( DBL_MIN, DBL_MAX, 1, aTopBox );
+  myPropTime = new SalomeApp_DoubleSpinBox( aTopBox );
+  VISU::initSpinBox( myPropTime,
+                     std::numeric_limits<double>::min(), 
+                     std::numeric_limits<double>::max(), 
+                     .1, 
+                     "parametrc_precision" );
   myPropTime->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
   TopLayout->addWidget(myPropTime, 3, 1);
   connect(myPropTime, SIGNAL(valueChanged(double)), this, SLOT(PropagationTimeChanged(double)));
@@ -196,98 +262,109 @@ VisuGUI_StreamLinesDlg::VisuGUI_StreamLinesDlg (SalomeApp_Module* theModule)
   QLabel* aDirLbl = new QLabel (tr("LBL_DIRECTION"),aTopBox);
   TopLayout->addWidget(aDirLbl, 4, 0);
   myDirCombo = new QComboBox(aTopBox);
-  myDirCombo->insertItem("Forward");
-  myDirCombo->insertItem("Backward");
-  myDirCombo->insertItem("Both");
+  myDirCombo->addItem("Forward");
+  myDirCombo->addItem("Backward");
+  myDirCombo->addItem("Both");
   TopLayout->addWidget(myDirCombo, 4, 1);
 
-  myUseScalar = new QCheckBox (tr("MAGNITUDE_COLORING_CHK"), aTopBox, "UseMagn");
+  myUseScalar = new QCheckBox (tr("MAGNITUDE_COLORING_CHK"), aTopBox);
   connect( myUseScalar, SIGNAL( clicked() ), this, SLOT( enableSetColor() ) );
   TopLayout->addWidget(myUseScalar, 5, 0);
 
-  SelColor = new QPushButton (tr("USE_COLOR_BTN"), aTopBox, "SelColor");
-  connect( SelColor,     SIGNAL( clicked() ), this, SLOT( setVColor() ) );
+  SelColor = new QtxColorButton( aTopBox );
+  SelColor->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
+  //connect( SelColor,     SIGNAL( clicked() ), this, SLOT( setVColor() ) );
   TopLayout->addWidget( SelColor, 5, 1);
 
-  aTabBox->addTab(aTopBox, "Stream Lines");
-  myScalarPane = new VisuGUI_ScalarBarPane(this, false);
-  myScalarPane->setMargin( 5 );
-  aTabBox->addTab(myScalarPane, "Scalar Bar");
+  myTabBox->addTab(aTopBox, "Stream Lines");
+  myInputPane = new VisuGUI_InputPane(VISU::TSTREAMLINES, theModule, this);
+  myTabBox->addTab(GetScalarPane(), "Scalar Bar");
+  myTabBox->addTab(myInputPane, "Input");
 
-  aBoxLayout->addWidget(aTabBox);
+  aBoxLayout->addWidget(myTabBox);
 
-  QGroupBox* aGroupButtons = new QGroupBox( this, "GroupButtons" );
-  aGroupButtons->setColumnLayout(0, Qt::Vertical );
-  aGroupButtons->layout()->setSpacing( 0 );
-  aGroupButtons->layout()->setMargin( 0 );
+  QGroupBox* aGroupButtons = new QGroupBox( this );
+  //aGroupButtons->setColumnLayout(0, Qt::Vertical );
+  //aGroupButtons->layout()->setSpacing( 0 );
+  //aGroupButtons->layout()->setMargin( 0 );
 
-  QGridLayout* aGroupButtonsLayout = new QGridLayout( aGroupButtons->layout() );
+  QGridLayout* aGroupButtonsLayout = new QGridLayout( aGroupButtons );
   aGroupButtonsLayout->setAlignment( Qt::AlignTop );
   aGroupButtonsLayout->setSpacing( 6 );
   aGroupButtonsLayout->setMargin( 11 );
 
-  QPushButton* aOkBtn = new QPushButton( tr( "&OK" ), aGroupButtons, "buttonOk" );
+  QPushButton* aOkBtn = new QPushButton( tr( "BUT_OK" ), aGroupButtons );
   aOkBtn->setAutoDefault( TRUE );
   aOkBtn->setDefault( TRUE );
   aGroupButtonsLayout->addWidget( aOkBtn, 0, 0 );
   aGroupButtonsLayout->addItem( new QSpacerItem( 5, 5, QSizePolicy::Expanding, QSizePolicy::Minimum ), 0, 1 );
 
-  QPushButton* aCancelBtn = new QPushButton( tr( "&Cancel" ) , aGroupButtons, "buttonCancel" );
+  QPushButton* aCancelBtn = new QPushButton( tr( "BUT_CANCEL" ) , aGroupButtons );
   aCancelBtn->setAutoDefault( TRUE );
   aGroupButtonsLayout->addWidget( aCancelBtn, 0, 2 );
+
+  QPushButton* aHelpBtn = new QPushButton( tr( "BUT_HELP" ) , aGroupButtons );
+  aHelpBtn->setAutoDefault( TRUE );
+  aGroupButtonsLayout->addWidget( aHelpBtn, 0, 3 );
+
   connect( aOkBtn,     SIGNAL( clicked() ), this, SLOT( accept() ) );
   connect( aCancelBtn, SIGNAL( clicked() ), this, SLOT( reject() ) );
+  connect( aHelpBtn,   SIGNAL( clicked() ), this, SLOT( onHelp() ) );
 
   aBoxLayout->addWidget(aGroupButtons);
 
   enableSetColor();
 }
 
+VisuGUI_StreamLinesDlg::~VisuGUI_StreamLinesDlg()
+{}
 
-
-void VisuGUI_StreamLinesDlg::initFromPrsObject (VISU::StreamLines_i* thePrs)
+void VisuGUI_StreamLinesDlg::initFromPrsObject ( VISU::ColoredPrs3d_i* thePrs,
+                                                 bool theInit )
 {
-  myScalarPane->initFromPrsObject(thePrs);
+  if( theInit )
+    myPrsCopy = VISU::TSameAsFactory<VISU::TSTREAMLINES>().Create(thePrs, VISU::ColoredPrs3d_i::EDoNotPublish);
+
+  VisuGUI_ScalarBarBaseDlg::initFromPrsObject(myPrsCopy, theInit);
 
-  myPrs = thePrs;
   static int aNbOfSteps = 30;
-  VISU_StreamLinesPL* aStreamLinesPL = thePrs->GetStreamLinesPL();
+  VISU_StreamLinesPL* aStreamLinesPL = myPrsCopy->GetSpecificPL();
   float aMin, aMax;
   aMin = aStreamLinesPL->GetMinPropagationTime();
   aMax = aStreamLinesPL->GetMaxPropagationTime();
   myPropTime->setRange(aMin,aMax);
   myPropTime->setValue(aStreamLinesPL->GetPropagationTime());
-  myPropTime->setLineStep((aMax-aMin)/aNbOfSteps);
+  myPropTime->setSingleStep((aMax-aMin)/aNbOfSteps);
 
   aMin = aStreamLinesPL->GetMinStepLength();
   aMax = aStreamLinesPL->GetMaxStepLength();
   myStepLen->setRange(aMin,aMax);
   myStepLen->setValue(aStreamLinesPL->GetStepLength());
-  myStepLen->setLineStep((aMax-aMin)/aNbOfSteps);
+  myStepLen->setSingleStep((aMax-aMin)/aNbOfSteps);
 
   aMin = aStreamLinesPL->GetMinIntegrationStep();
   aMax = aStreamLinesPL->GetMaxIntegrationStep();
   myIntegStepLen->setRange(aMin,aMax);
   myIntegStepLen->setValue(aStreamLinesPL->GetIntegrationStep());
-  myIntegStepLen->setLineStep((aMax-aMin)/aNbOfSteps);
+  myIntegStepLen->setSingleStep((aMax-aMin)/aNbOfSteps);
 
-  switch (thePrs->GetDirection()) {
+  switch (myPrsCopy->GetDirection()) {
   case VISU::StreamLines::FORWARD:
-    myDirCombo->setCurrentItem(0);
+    myDirCombo->setCurrentIndex(0);
     break;
   case VISU::StreamLines::BACKWARD:
-    myDirCombo->setCurrentItem(1);
+    myDirCombo->setCurrentIndex(1);
     break;
   case VISU::StreamLines::BOTH:
-    myDirCombo->setCurrentItem(2);
+    myDirCombo->setCurrentIndex(2);
   }
-  myUseScalar->setChecked(thePrs->IsColored());
-  myPntPercent->setValue(thePrs->GetUsedPoints());
+  myUseScalar->setChecked(myPrsCopy->IsColored());
+  myPntPercent->setValue(myPrsCopy->GetUsedPoints());
 
   mySrcCombo->setEnabled(false);
-  QString aSrcEntry = thePrs->GetSourceEntry();
+  QString aSrcEntry = myPrsCopy->GetSourceEntry();
 
-  SALOMEDS::Color anOldColor = thePrs->GetColor();
+  SALOMEDS::Color anOldColor = myPrsCopy->GetColor();
   QColor aColor = QColor(int(255*anOldColor.R),int(255*anOldColor.G),int(255*anOldColor.B));
   setColor(aColor);
   enableSetColor();
@@ -296,12 +373,12 @@ void VisuGUI_StreamLinesDlg::initFromPrsObject (VISU::StreamLines_i* thePrs)
     for (int i = 0; i < PRSLIST.count(); i++) { \
       VISU::Prs3d_i* aPrs = dynamic_cast<VISU::Prs3d_i*>(VISU::GetServant(PRSLIST[i]).in()); \
       if (aPrs == NULL) continue; \
-      if (aSrcEntry == aPrs->GetEntry()) { \
+      if (aSrcEntry == aPrs->GetEntry().c_str()) { \
         onSourceTypeChange(PRSNUM); \
-       myUseSrcCombo->setCurrentItem(PRSNUM); \
-       mySrcCombo->setEnabled(true); \
-       mySrcCombo->setCurrentItem(i); \
-       return; \
+        myUseSrcCombo->setCurrentIndex(PRSNUM); \
+        mySrcCombo->setEnabled(true); \
+        mySrcCombo->setCurrentIndex(i); \
+        return; \
       } \
     }
 
@@ -312,23 +389,35 @@ void VisuGUI_StreamLinesDlg::initFromPrsObject (VISU::StreamLines_i* thePrs)
     INITPRS(myPrsList, 4);
   }
 #undef INITPRS
+
+  if( !theInit )
+    return;
+
+  myInputPane->initFromPrsObject( myPrsCopy );
+  myTabBox->setCurrentIndex( 0 );
+
 }
 
-int VisuGUI_StreamLinesDlg::storeToPrsObject (VISU::StreamLines_i* thePrs)
+int VisuGUI_StreamLinesDlg::storeToPrsObject (VISU::ColoredPrs3d_i* thePrs)
 {
-  bool isAccepted = myScalarPane->storeToPrsObject(thePrs);
-  if (isAccepted) {
-    thePrs->ShowColored(myUseScalar->isChecked());
-    if (!thePrs->IsColored()) {
+  if(!myInputPane->check() || !GetScalarPane()->check())
+    return 0;
+  
+  int anIsOk = myInputPane->storeToPrsObject( myPrsCopy );
+  anIsOk &= GetScalarPane()->storeToPrsObject( myPrsCopy );
+  
+  if (anIsOk) {
+    myPrsCopy->ShowColored(myUseScalar->isChecked());
+    if (!myPrsCopy->IsColored()) {
       SALOMEDS::Color aColor;
-      aColor.R = myColor.red()/255.;
-      aColor.G = myColor.green()/255.;
-      aColor.B = myColor.blue()/255.;
-      thePrs->SetColor(aColor);
+      aColor.R = SelColor->color().red()/255.;
+      aColor.G = SelColor->color().green()/255.;
+      aColor.B = SelColor->color().blue()/255.;
+      myPrsCopy->SetColor(aColor);
     }
 
     VISU::StreamLines::Direction aDirection = VISU::StreamLines::BOTH;
-    switch (myDirCombo->currentItem()) {
+    switch (myDirCombo->currentIndex()) {
     case 0:
       aDirection = VISU::StreamLines::FORWARD;
       break;
@@ -340,47 +429,46 @@ int VisuGUI_StreamLinesDlg::storeToPrsObject (VISU::StreamLines_i* thePrs)
     }
 
     VISU::Prs3d_var aPrs;
-    int aSrcSelection = myUseSrcCombo->currentItem();
-    int aSrcItem = (mySrcCombo->count() > 0)? mySrcCombo->currentItem() : -1;
+    int aSrcSelection = myUseSrcCombo->currentIndex();
+    int aSrcItem = (mySrcCombo->count() > 0)? mySrcCombo->currentIndex() : -1;
     if ((aSrcSelection > 0) && (aSrcItem > -1)) {
       VISU::VISUType aType;
       QString aName;
       switch (aSrcSelection) {
       case 1: // Entity
-       aPrs = myEntityList[aSrcItem];
-       aType = VISU::TENTITY;
-       aName = myEntitiesLst[aSrcItem];
-       break;
+        aPrs = myEntityList[aSrcItem];
+        aType = VISU::TENTITY;
+        aName = myEntitiesLst[aSrcItem];
+        break;
       case 2: // Family
-       aPrs = myFamilyList[aSrcItem];
-       aType = VISU::TFAMILY;
-       aName = myFamilisLst[aSrcItem];
-       break;
+        aPrs = myFamilyList[aSrcItem];
+        aType = VISU::TFAMILY;
+        aName = myFamilisLst[aSrcItem];
+        break;
       case 3: // Group
-       aPrs = myGroupList[aSrcItem];
-       aType = VISU::TGROUP;
-       aName = myGroupsLst[aSrcItem];
-       break;
+        aPrs = myGroupList[aSrcItem];
+        aType = VISU::TGROUP;
+        aName = myGroupsLst[aSrcItem];
+        break;
       case 4: // Presentation
-       aPrs = myPrsList[aSrcItem];
-       break;
+        aPrs = myPrsList[aSrcItem];
+        break;
       }
       if (CORBA::is_nil(aPrs) && aSrcSelection != 4) {
-       aPrs = createMesh(aType, aName);
+        aPrs = createMesh(aType, aName);
       }
     }
-    isAccepted = thePrs->SetParams(myIntegStepLen->value(),
-                                  myPropTime->value(),
-                                  myStepLen->value(),
-                                  aPrs,
-                                  myPntPercent->value(),
-                                  aDirection);
+    anIsOk &= myPrsCopy->SetParams(myIntegStepLen->value(),
+                                   myPropTime->value(),
+                                   myStepLen->value(),
+                                   aPrs,
+                                   myPntPercent->value(),
+                                   aDirection);
   }
-  //if (!isAccepted)
-  //  SUIT_MessageBox::warn1(VisuGUI::application()->desktop(), tr("WRN_VISU"),
-  //                         tr("ERR_CANT_BUILD_PRESENTATION"),
-  //                         tr("BUT_OK"));
-  return isAccepted;
+
+  VISU::TSameAsFactory<VISU::TSTREAMLINES>().Copy(myPrsCopy, thePrs);
+
+  return anIsOk;
 }
 
 /*!
@@ -388,20 +476,23 @@ int VisuGUI_StreamLinesDlg::storeToPrsObject (VISU::StreamLines_i* thePrs)
 */
 void VisuGUI_StreamLinesDlg::setColor( QColor color )
 {
-  myColor = color;
-  SelColor->setPaletteBackgroundColor(myColor);
+  /*Color = color;
+  QPalette aPal = SelColor->palette();
+  aPal.setColor( SelColor->backgroundRole(), myColor );
+  SelColor->setPalette( aPal );*/
+  SelColor->setColor( color );
 }
 
 
 /*!
   Called when "Select Color" buttonx clicked
 */
-void VisuGUI_StreamLinesDlg::setVColor()
+/*void VisuGUI_StreamLinesDlg::setVColor()
 {
   QColor cnew = QColorDialog::getColor( myColor, this );
   if ( cnew.isValid() )
     setColor( cnew );
-}
+}*/
 
 
 /*!
@@ -428,7 +519,7 @@ void VisuGUI_StreamLinesDlg::IntegrationStepChanged(double theValue) {
 }
 
 void VisuGUI_StreamLinesDlg::PropagationTimeChanged(double theValue) {
-  myStepLen->setMaxValue(theValue);
+  myStepLen->setMaximum(theValue);
 }
 
 void VisuGUI_StreamLinesDlg::onSourceTypeChange(int theIndex) {
@@ -441,16 +532,16 @@ void VisuGUI_StreamLinesDlg::onSourceTypeChange(int theIndex) {
 
   switch(theIndex) {
   case 1: // Entity
-    mySrcCombo->insertStringList(myEntitiesLst);
+    mySrcCombo->addItems(myEntitiesLst);
     return;
   case 2: // Family
-    mySrcCombo->insertStringList(myFamilisLst);
+    mySrcCombo->addItems(myFamilisLst);
     return;
   case 3: // Group
-    mySrcCombo->insertStringList(myGroupsLst);
+    mySrcCombo->addItems(myGroupsLst);
     return;
   case 4: // Presentation
-    mySrcCombo->insertStringList(myPrsLst);
+    mySrcCombo->addItems(myPrsLst);
     return;
   }
 }
@@ -459,87 +550,19 @@ void VisuGUI_StreamLinesDlg::onSourceTypeChange(int theIndex) {
 VISU::Mesh_ptr VisuGUI_StreamLinesDlg::createMesh (VISU::VISUType theType, QString theName)
 {
   return VISU::Mesh::_nil();
-/*
-  CORBA::Object_var anObject = VISU::ClientSObjectToObject(mySelectionObj);
-  VISU::Result_var aResult;
-  if (!CORBA::is_nil(anObject)) {
-    aResult = VISU::Result::_narrow(anObject);
-  }
-  if (CORBA::is_nil(aResult)) {
-    SUIT_MessageBox::warn1(VisuGUI::application()->desktop(), tr("VISU_WARNING"),
-                           tr("WRN_NO_AVAILABLE_DATA"),
-                           tr("BUT_OK"));
-    return VISU::Mesh::_nil();
-  }
-  SALOMEDSClient_ChildIterator* aIter = VisuGUI::GetStudyDocument()->NewChildIterator( mySelectionObj );
-  VISU::Storable::TRestoringMap aMap;
-
-  for (aIter->InitEx(true); aIter->More(); aIter->Next() ) {
-    SALOMEDSClient_SObject* aChildSObj = aIter->Value();
-    SALOMEDSClient_GenericAttribute* anAttr;
-    if (aChildSObj->FindAttribute(anAttr, "AttributeComment")) {
-      SALOMEDSClient_AttributeComment* aComment = dynamic_cast<SALOMEDSClient_AttributeComment*>( anAttr );
-      CORBA::String_var aComm = aComment->Value().c_str();
-      QString strIn(aComm.in());
-      aMap.clear();
-      VISU::Storable::StrToMap(strIn,aMap);
-      bool isExist;
-      VISU::VISUType aType = (VISU::VISUType)VISU::Storable::FindValue(aMap,"myType",&isExist).toInt();
-      if (isExist) {
-       if (aType != theType) continue;
-
-       SALOMEDSClient_GenericAttribute* aNameAttr;
-       if ( aChildSObj->FindAttribute(aNameAttr, "AttributeName") ) {
-         SALOMEDSClient_AttributeName* aName = dynamic_cast<SALOMEDSClient_AttributeName*>(aNameAttr);
-         if (QString(aName->Value()) == theName) break; //use current map
-       }
-      }
-    }
-  }
-  VISU::Mesh_var aMesh;
-  QString aMeshName = VISU::Storable::FindValue(aMap,"myMeshName");
-  switch (theType) {
-  case VISU::TFAMILY:
-    {
-      VISU::Entity anEntity = (VISU::Entity)VISU::Storable::FindValue(aMap,"myEntityId").toInt();
-      aMesh = VisuGUI::GetVisuGen()->FamilyMeshOnEntity(aResult,aMeshName.latin1(),anEntity,theName.latin1());
-    }
-    break;
-  case VISU::TGROUP:
-    {
-      aMesh = VisuGUI::GetVisuGen()->GroupMesh(aResult,aMeshName.latin1(), theName.latin1());
-    }
-    break;
-  case VISU::TENTITY:
-    {
-      VISU::Entity anEntity = (VISU::Entity)VISU::Storable::FindValue(aMap,"myId").toInt();
-      aMesh = VisuGUI::GetVisuGen()->MeshOnEntity(aResult,aMeshName.latin1(),anEntity);
-    }
-    break;
-  }
-  if(!CORBA::is_nil(aMesh)){ // Create Actor
-    VISU::Mesh_i* pPresent = dynamic_cast<VISU::Mesh_i*>(VISU::GetServant(aMesh).in());
-    if(SVTK_ViewWindow* vf = VISU::GetViewWindow()){
-      try{
-       pPresent->SetPresentationType(VISU::POINT);
-       VISU_Actor *anActor = pPresent->CreateActor();
-       vf->AddActor(anActor);
-      }catch(...){
-       SUIT_MessageBox::warn1 ( VisuGUI::application()->desktop(), tr("VISU_WARNING"),
-                               tr("ERR_CANT_CREATE_ACTOR"),
-                               tr("BUT_OK") );
-      }
-    }
-  } else {
-    SUIT_MessageBox::warn1(VisuGUI::application()->desktop(), tr("VISU_WARNING"),
-                           tr("ERR_CANT_BUILD_PRESENTATION"),
-                           tr("BUT_OK"));
-  }
-  return aMesh._retn();
-*/
 }
 
-void VisuGUI_StreamLinesDlg::accept() {
-  if (myScalarPane->check())
-    QDialog::accept();
+void VisuGUI_StreamLinesDlg::accept()
+{
+  VisuGUI_ScalarBarBaseDlg::accept();
+}
+
+void VisuGUI_StreamLinesDlg::reject()
+{
+  VisuGUI_ScalarBarBaseDlg::reject();
+}
+
+QString VisuGUI_StreamLinesDlg::GetContextHelpFilePath()
+{
+  return "stream_lines_page.html";
 }