Salome HOME
lot 10 - warnings for DTM - untested
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_ProfileDlg.cxx
index d95c3e0cded3e986c1fbf4f80cd186663ec59159..a60b631053fca3ec3325d9614d23dd4a9cf0e63f 100644 (file)
 
 #include "HYDROGUI_ProfileDlg.h"
 
-#include "HYDROGUI_Module.h"
 #include "HYDROGUI_Tool.h"
 #include "HYDROGUI_AISTrihedron.h"
+#ifndef TEST_MODE
+#include <HYDROGUI_Module.h>
 #include "HYDROGUI_Tool2.h"
+#endif
 
 #include <CurveCreator_Widget.h>
 #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 <OCCViewer_Utilities.h>
 #include <OCCViewer_ViewManager.h>
 #include <OCCViewer_ViewFrame.h>
-#include <LightApp_Application.h>
 
+#ifndef TEST_MODE
+#include <LightApp_Application.h>
+#endif
+#include <SUIT_Desktop.h>
 #include <SUIT_Session.h>
 #include <SUIT_ResourceMgr.h>
 
 #include <QSettings>
 #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);
@@ -71,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);
-    //
-    myAddProfBtn = new QPushButton("Add Profile(s)", this);    
-    myRemProfBtn = new QPushButton("Remove Profile(s)", this);
-    name_layout->addWidget(myAddProfBtn);
-    name_layout->addWidget(myRemProfBtn);
+
+    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);
+    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 );
@@ -103,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( 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();
 
@@ -140,26 +154,28 @@ void HYDROGUI_ProfileDlg::reset()
   myEditorWidget->reset();
   myEditorWidget->setActionMode( CurveCreator_Widget::AdditionMode );
   viewer()->setTrihedronShown( false ); // Issue #548
-  myProfileNames->clear();
+  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 )
 {
   myProfileNames->takeItem(index);
+  if (myProfileNames->count() == 1)
+    myRemProfBtn->setEnabled(false);
 }
 
 void HYDROGUI_ProfileDlg::addProfileName( const QString& theName, const QColor& theColor )
 {
-  if (mySingleProfileMode)
+  if (!myIsEdit)
     return;
   myProfileNames->blockSignals(true);
   myProfileNames->addItem(theName);
@@ -170,16 +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++)
@@ -251,10 +271,10 @@ void HYDROGUI_ProfileDlg::processFinishedSubOperation( QWidget* theWidget )
   myAddElementBox->hide();
 }
 
-//void HYDROGUI_ProfileDlg::ProfileNameChanged(QString theNewText)
-//{
-//  myProfileNames->setItemText( myProfileNames->currentIndex(), theNewText ); //TODO???
-//}
+void HYDROGUI_ProfileDlg::ProfileNameChanged(QString text)
+{
+  myCurrentName = text;
+}
 
 void HYDROGUI_ProfileDlg::onProfileIndexChanged()
 {
@@ -303,7 +323,12 @@ void HYDROGUI_ProfileDlg::SwitchToProfile(int theIndex)
         anAISObject->SetWidth(1);
     }
   }
-  (*myProfilesPointer)[0]->getDisplayer()->Update();
+
+  if( myProfilesPointer && 
+      myProfilesPointer->size()>0 && 
+      myProfilesPointer->at(0) && 
+      myProfilesPointer->at(0)->getDisplayer() )
+    myProfilesPointer->at(0)->getDisplayer()->Update();
 }
 
 void HYDROGUI_ProfileDlg::onAddBtnPressed(bool)
@@ -318,14 +343,71 @@ 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();
-  //if (ind > -1)
-    //TODO
-  QString text = item->text();
+  if (ind > -1)
+  {
+    int count = myProfileNames->count();
+    QSet<QString> names;
+    for (int i = 0; i < count; i++)
+    {
+      QListWidgetItem* citem = myProfileNames->item(i);
+      if (item!=citem)
+        names << citem->text();
+    }
+    QString curText = item->text();
+    myProfileNames->blockSignals(true);
+    if (names.contains(curText))
+    {
+      QString mes = tr( "PROFILE_ALREADY_EXISTS" );
+      QString title = tr( "PROFILEDLG_WARNING" );
+#ifndef TEST_MODE
+      SUIT_MessageBox::warning( module()->getApp()->desktop(), title, mes );
+#endif
+      item->setText(myCurrentName);
+    }
+    myProfileNames->blockSignals(false);
+  }
 }
-
+/*
 void HYDROGUI_ProfileDlg::SetSingleProfileMode(bool SingleMode)
 {
   mySingleProfileMode = SingleMode;
@@ -334,7 +416,7 @@ void HYDROGUI_ProfileDlg::SetSingleProfileMode(bool SingleMode)
 bool HYDROGUI_ProfileDlg::GetSingleProfileMode() const
 {
   return mySingleProfileMode;
-}
+}*/
 
 Handle(AIS_Trihedron) HYDROGUI_ProfileDlg::trihedron()
 {