Salome HOME
lot 10 - warnings for DTM - untested
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_ProfileDlg.cxx
index 239645b4c00491401ca5db19036c2cd8835e68d4..a60b631053fca3ec3325d9614d23dd4a9cf0e63f 100644 (file)
@@ -29,6 +29,7 @@
 #include <CurveCreator_ICurve.hxx>
 #include <CurveCreator_Utils.hxx>
 #include <HYDROGUI_CurveCreatorProfile.h>
+#include <HYDROData_Tool.h>
 #include <CurveCreator_Displayer.hxx>
 
 #include <OCCViewer_ViewPort3d.h>
 #include <QListWidget>
 #include <QPushButton>
 #include <SUIT_MessageBox.h>
+#include <QColorDialog>
 
 const QString splitter_key = "HYDROGUI_ProfileDlg::splitter";
 
 HYDROGUI_ProfileDlg::HYDROGUI_ProfileDlg( HYDROGUI_Module* theModule, const QString& theTitle, 
-  bool theSingleProfileMode )
-: HYDROGUI_ViewerDlg( theModule, theTitle, true ),
+  bool theIsEdit )
+: HYDROGUI_ViewerDlg( theModule, theTitle, true, false ),
   myName( NULL ), myProfileNames (NULL), myProfilesPointer (NULL),
-  mySingleProfileMode (theSingleProfileMode)
+  myIsEdit (theIsEdit)
 {
   QFrame* name_frame = new QFrame( mainFrame() );
   QHBoxLayout* name_layout = new QHBoxLayout( name_frame );
   name_layout->setMargin( 0 );
   QLabel* aNameLabel = new QLabel(tr("PROFILE_NAME_TLT"), this);
   name_layout->addWidget(aNameLabel);
-  if (theSingleProfileMode)
+  if (!theIsEdit)
   {
     myName = new QLineEdit(this);
     name_layout->addWidget(myName);
@@ -76,21 +78,27 @@ HYDROGUI_ProfileDlg::HYDROGUI_ProfileDlg( HYDROGUI_Module* theModule, const QStr
   {
     myProfileNames = new QListWidget(this);
     myProfileNames->setSelectionMode(QAbstractItemView::SingleSelection);
-    //myProfileNames->setEditable(true);
-    //myProfileNames->setInsertPolicy(QComboBox::InsertPolicy::NoInsert);
     name_layout->addWidget(myProfileNames);
-    //
+
+    QVBoxLayout* btn_layout = new QVBoxLayout( name_frame );
+    btn_layout->setAlignment(Qt::AlignTop);
+
     myAddProfBtn = new QPushButton(tr("ADD_PROFILES"), this);    
     myRemProfBtn = new QPushButton(tr("REMOVE_PROFILE"), this);
-    name_layout->addWidget(myAddProfBtn);
-    name_layout->addWidget(myRemProfBtn);
+    mySetColorProfBtn = new QPushButton(tr("SETCOLOR_PROFILE"), this);
+    btn_layout->addWidget(myAddProfBtn);
+    btn_layout->addWidget(myRemProfBtn);
+    btn_layout->addWidget(mySetColorProfBtn);
+
+    name_layout->addLayout(btn_layout);
+
   }
 
   insertWidget( name_frame, 0, 0 );
 
   int anActionFlags = 
     CurveCreator_Widget::DisableNewSection | CurveCreator_Widget::DisableDetectionMode |
-    CurveCreator_Widget::DisableClosedSection;
+    CurveCreator_Widget::DisableClosedSection | CurveCreator_Widget::DisableSetColor;
   QStringList aCoordTitles;
   aCoordTitles << tr( "U_TITLE" ) << tr( "Z_TITLE" );
   myEditorWidget = new CurveCreator_Widget( this, NULL, anActionFlags, aCoordTitles );
@@ -108,13 +116,14 @@ HYDROGUI_ProfileDlg::HYDROGUI_ProfileDlg( HYDROGUI_Module* theModule, const QStr
   connect( myEditorWidget, SIGNAL( selectionChanged() ), this, SIGNAL( selectionChanged() ) );
   connect( myEditorWidget, SIGNAL( subOperationStarted(QWidget*, bool) ), this, SLOT( processStartedSubOperation(QWidget*, bool) ) );
   connect( myEditorWidget, SIGNAL( subOperationFinished(QWidget*) ), this, SLOT( processFinishedSubOperation(QWidget*) ) );
-  if (!mySingleProfileMode)
+  if (myIsEdit)
   {
     connect( myProfileNames, SIGNAL( currentTextChanged(QString)), SLOT(ProfileNameChanged(QString)) );
     connect( myProfileNames, SIGNAL( itemSelectionChanged()), this, SLOT( onProfileIndexChanged()));
     connect( myProfileNames, SIGNAL( itemChanged(QListWidgetItem*)), this, SLOT( onProfileNameChanged(QListWidgetItem*)));
     connect( myAddProfBtn, SIGNAL( clicked(bool)), this, SLOT( onAddBtnPressed(bool)));
     connect( myRemProfBtn, SIGNAL( clicked(bool)), this, SLOT( onRemoveBtnPressed(bool)));
+    connect( mySetColorProfBtn, SIGNAL( clicked(bool)), this, SLOT( onSetColorBtnPressed(bool)));
   }
   myAddElementBox->hide();
 
@@ -145,17 +154,16 @@ void HYDROGUI_ProfileDlg::reset()
   myEditorWidget->reset();
   myEditorWidget->setActionMode( CurveCreator_Widget::AdditionMode );
   viewer()->setTrihedronShown( false ); // Issue #548
+  viewer()->setStaticTrihedronDisplayed(false);
   if (myProfileNames)
     myProfileNames->clear();
 }
 
 void HYDROGUI_ProfileDlg::setProfileName( const QString& theName )
 {
-  if (!mySingleProfileMode)
+  if (myIsEdit)
     return;
   myName->setText(theName);
-  //myProfileNames->setItemText(theInd, theName); //should used TODO check this
-  //myName->setText(theName);
 }
 
 void HYDROGUI_ProfileDlg::eraseProfile( int index )
@@ -167,7 +175,7 @@ void HYDROGUI_ProfileDlg::eraseProfile( int index )
 
 void HYDROGUI_ProfileDlg::addProfileName( const QString& theName, const QColor& theColor )
 {
-  if (mySingleProfileMode)
+  if (!myIsEdit)
     return;
   myProfileNames->blockSignals(true);
   myProfileNames->addItem(theName);
@@ -178,18 +186,20 @@ void HYDROGUI_ProfileDlg::addProfileName( const QString& theName, const QColor&
   SPixmap.fill(theColor);
   QIcon SIcon(SPixmap);
   anItem->setIcon( SIcon );
-  //anItem->setBackground(QBrush(theColor));
   if (count == 1)
     anItem->setSelected(true);
+  if (count == 1 && myIsEdit)
+    myRemProfBtn->setEnabled(false);
   if (count > 1)
     myRemProfBtn->setEnabled(true);
+
   myProfileNames->blockSignals(false);
 }
 
 QStringList HYDROGUI_ProfileDlg::getProfileNames() const
 {
   QStringList aProfNames;
-  if (mySingleProfileMode)
+  if (!myIsEdit)
     aProfNames << myName->text();
   else
     for (int i = 0; i < myProfileNames->count(); i++)
@@ -333,6 +343,43 @@ void HYDROGUI_ProfileDlg::onRemoveBtnPressed(bool)
     emit RemoveProfile(theIndex);
 }
 
+void HYDROGUI_ProfileDlg::onSetColorBtnPressed(bool)
+{
+  int theIndex = GetProfileSelectionIndex();
+  if (theIndex < 0)
+    return;
+
+  HYDROGUI_CurveCreatorProfile* aCurve = (*myProfilesPointer)[theIndex];
+  
+  QColor aCurrentColor = HYDROData_Tool::toQtColor(/*aCurve->myCurveColor*/aCurve->getColorSection(0));
+  QColor newQCurCol = QColorDialog::getColor( aCurrentColor, this );
+  if( !newQCurCol.isValid() )
+    return;
+
+  Quantity_Color newOCCCol = HYDROData_Tool::toOccColor(newQCurCol);
+  aCurve->setColorSectionInternal(0, newOCCCol);
+  Handle(AIS_InteractiveObject) anAISObject = aCurve->getAISObject();
+  if (anAISObject)
+  {
+    //color points of shape in the same color as edges
+    Handle(Prs3d_PointAspect) anAspect = anAISObject->Attributes()->PointAspect();
+    anAspect->SetColor(newOCCCol);
+    anAISObject->Attributes()->SetPointAspect( anAspect );
+  }
+
+  QListWidgetItem* item = myProfileNames->item(theIndex);
+  QPixmap SPixmap(16, 16);
+  SPixmap.fill(newQCurCol);
+  QIcon SIcon(SPixmap);
+  item->setIcon( SIcon );
+
+  if( myProfilesPointer && 
+    myProfilesPointer->size()>0 && 
+    myProfilesPointer->at(0) && 
+    myProfilesPointer->at(0)->getDisplayer() )
+    myProfilesPointer->at(0)->getDisplayer()->Update();
+}
+
 void HYDROGUI_ProfileDlg::onProfileNameChanged(QListWidgetItem* item)
 {
   int ind = GetProfileSelectionIndex();
@@ -360,7 +407,7 @@ void HYDROGUI_ProfileDlg::onProfileNameChanged(QListWidgetItem* item)
     myProfileNames->blockSignals(false);
   }
 }
-
+/*
 void HYDROGUI_ProfileDlg::SetSingleProfileMode(bool SingleMode)
 {
   mySingleProfileMode = SingleMode;
@@ -369,7 +416,7 @@ void HYDROGUI_ProfileDlg::SetSingleProfileMode(bool SingleMode)
 bool HYDROGUI_ProfileDlg::GetSingleProfileMode() const
 {
   return mySingleProfileMode;
-}
+}*/
 
 Handle(AIS_Trihedron) HYDROGUI_ProfileDlg::trihedron()
 {