X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_ProfileDlg.cxx;h=c6c49c1c682b4101a07831af174d1efbc134bb1f;hb=7bb8da28edc30835dbef7be9b5790dfe925b1bf4;hp=1f98c732f78ce140c9f58accef36780766057d05;hpb=f0688b4c39fcc3e49c2b58a90724b9c1c84f1337;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_ProfileDlg.cxx b/src/HYDROGUI/HYDROGUI_ProfileDlg.cxx index 1f98c732..c6c49c1c 100644 --- a/src/HYDROGUI/HYDROGUI_ProfileDlg.cxx +++ b/src/HYDROGUI/HYDROGUI_ProfileDlg.cxx @@ -18,20 +18,28 @@ #include "HYDROGUI_ProfileDlg.h" -#include "HYDROGUI_Module.h" #include "HYDROGUI_Tool.h" #include "HYDROGUI_AISTrihedron.h" +#ifndef TEST_MODE +#include +#include "HYDROGUI_Tool2.h" +#endif #include #include #include +#include +#include #include #include #include #include -#include +#ifndef TEST_MODE +#include +#endif +#include #include #include @@ -40,18 +48,42 @@ #include #include #include +#include +#include +#include +#include +#include -HYDROGUI_ProfileDlg::HYDROGUI_ProfileDlg( HYDROGUI_Module* theModule, const QString& theTitle ) -: HYDROGUI_ViewerDlg( theModule, theTitle ), - myName( NULL ) +const QString splitter_key = "HYDROGUI_ProfileDlg::splitter"; + +HYDROGUI_ProfileDlg::HYDROGUI_ProfileDlg( HYDROGUI_Module* theModule, const QString& theTitle, + bool theIsEdit ) +: HYDROGUI_ViewerDlg( theModule, theTitle, true ), + myName( NULL ), myProfileNames (NULL), myProfilesPointer (NULL), + myIsEdit (theIsEdit) { - QHBoxLayout* aNameLayout = new QHBoxLayout(); + 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); - aNameLayout->addWidget(aNameLabel); - myName = new QLineEdit(this); - aNameLayout->addWidget(myName); + name_layout->addWidget(aNameLabel); + if (!theIsEdit) + { + myName = new QLineEdit(this); + name_layout->addWidget(myName); + } + else + { + myProfileNames = new QListWidget(this); + myProfileNames->setSelectionMode(QAbstractItemView::SingleSelection); + name_layout->addWidget(myProfileNames); + myAddProfBtn = new QPushButton(tr("ADD_PROFILES"), this); + myRemProfBtn = new QPushButton(tr("REMOVE_PROFILE"), this); + name_layout->addWidget(myAddProfBtn); + name_layout->addWidget(myRemProfBtn); + } - addLayout(aNameLayout); + insertWidget( name_frame, 0, 0 ); int anActionFlags = CurveCreator_Widget::DisableNewSection | CurveCreator_Widget::DisableDetectionMode | @@ -59,10 +91,10 @@ HYDROGUI_ProfileDlg::HYDROGUI_ProfileDlg( HYDROGUI_Module* theModule, const QStr QStringList aCoordTitles; aCoordTitles << tr( "U_TITLE" ) << tr( "Z_TITLE" ); myEditorWidget = new CurveCreator_Widget( this, NULL, anActionFlags, aCoordTitles ); - addWidget( myEditorWidget, 3 ); + insertWidget( myEditorWidget, 1, 1 ); myAddElementBox = new QGroupBox( tr( "ADD_ELEMENT" ), this ); - addWidget( myAddElementBox, 2 ); + insertWidget( myAddElementBox, 2, 1 ); QBoxLayout* anAddElementLayout = new QVBoxLayout( myAddElementBox ); anAddElementLayout->setMargin( 0 ); @@ -73,28 +105,93 @@ 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 (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))); + } myAddElementBox->hide(); + + QList sizes; + sizes.append( 25 ); + sizes.append( 100 ); + sizes.append( 100 ); + sizes.append( 200 ); + sizes.append( 25 ); + splitter()->setSizes( sizes ); + +#ifndef TEST_MODE + QSettings settings; + splitter()->restoreState( settings.value( splitter_key ).toByteArray() ); +#endif } HYDROGUI_ProfileDlg::~HYDROGUI_ProfileDlg() { +#ifndef TEST_MODE + QSettings settings; + settings.setValue( splitter_key, splitter()->saveState() ); +#endif } void HYDROGUI_ProfileDlg::reset() { myEditorWidget->reset(); myEditorWidget->setActionMode( CurveCreator_Widget::AdditionMode ); + viewer()->setTrihedronShown( false ); // Issue #548 + if (myProfileNames) + myProfileNames->clear(); } void HYDROGUI_ProfileDlg::setProfileName( const QString& theName ) { + if (myIsEdit) + return; myName->setText(theName); } -QString HYDROGUI_ProfileDlg::getProfileName() const +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 (!myIsEdit) + return; + myProfileNames->blockSignals(true); + myProfileNames->addItem(theName); + int count = myProfileNames->count(); + QListWidgetItem* anItem = myProfileNames->item(count - 1); + anItem->setFlags (anItem->flags () | Qt::ItemIsEditable); + QPixmap SPixmap(16, 16); + SPixmap.fill(theColor); + QIcon SIcon(SPixmap); + anItem->setIcon( SIcon ); + 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 { - return myName->text(); + QStringList aProfNames; + if (!myIsEdit) + aProfNames << myName->text(); + else + for (int i = 0; i < myProfileNames->count(); i++) + aProfNames << myProfileNames->item(i)->text(); + return aProfNames; } void HYDROGUI_ProfileDlg::setProfile( CurveCreator_ICurve* theProfile ) @@ -107,11 +204,21 @@ void HYDROGUI_ProfileDlg::setProfile( CurveCreator_ICurve* theProfile ) myEditorWidget->setSelectedSections( aSections ); } +void HYDROGUI_ProfileDlg::setProfilesPointer(std::vector* theProfilesPointer) +{ + myProfilesPointer = theProfilesPointer; +} + QList HYDROGUI_ProfileDlg::getSelectedSections() { return myEditorWidget->getSelectedSections(); } +void HYDROGUI_ProfileDlg::switchToFirstProfile() +{ + emit onProfileIndexChanged(); +} + /** * Redirect the delete action to editor widget */ @@ -151,10 +258,120 @@ void HYDROGUI_ProfileDlg::processFinishedSubOperation( QWidget* theWidget ) myAddElementBox->hide(); } +void HYDROGUI_ProfileDlg::ProfileNameChanged(QString text) +{ + myCurrentName = text; +} + +void HYDROGUI_ProfileDlg::onProfileIndexChanged() +{ + int theIndex = GetProfileSelectionIndex(); + if (theIndex > -1) + SwitchToProfile(theIndex); +} + +int HYDROGUI_ProfileDlg::GetProfileSelectionIndex() +{ + if (!myProfilesPointer) + return -1; + QModelIndexList MI = myProfileNames->selectionModel()->selectedIndexes(); + if (MI.size() != 1) + return -1; + return MI.first().row(); +} + +void HYDROGUI_ProfileDlg::BlockProfileNameSignals(bool state) +{ + myProfileNames->blockSignals(state); +} + +void HYDROGUI_ProfileDlg::SwitchToProfile(int theIndex) +{ + myEditorWidget->setCurve(NULL); + myEditorWidget->reset(); + myEditorWidget->setActionMode( CurveCreator_Widget::AdditionMode ); + myEditorWidget->setSelectedSections(QList()); + setProfile( (*myProfilesPointer)[theIndex] ); + for (int i = 0; i < myProfilesPointer->size(); i++) + { + HYDROGUI_CurveCreatorProfile* aCurve = (*myProfilesPointer)[i]; + if (i == theIndex) + { + aCurve->myLineWidth = 3; + Handle(AIS_InteractiveObject) anAISObject = aCurve->getAISObject(); + if (anAISObject) + anAISObject->SetWidth(3); + } + else + { + aCurve->myLineWidth = 1; + Handle(AIS_InteractiveObject) anAISObject = aCurve->getAISObject(); + if (anAISObject) + anAISObject->SetWidth(1); + } + } + + if( myProfilesPointer && + myProfilesPointer->size()>0 && + myProfilesPointer->at(0) && + myProfilesPointer->at(0)->getDisplayer() ) + myProfilesPointer->at(0)->getDisplayer()->Update(); +} + +void HYDROGUI_ProfileDlg::onAddBtnPressed(bool) +{ + emit AddProfiles(); +} + +void HYDROGUI_ProfileDlg::onRemoveBtnPressed(bool) +{ + int theIndex = GetProfileSelectionIndex(); + if (theIndex > -1) + emit RemoveProfile(theIndex); +} + +void HYDROGUI_ProfileDlg::onProfileNameChanged(QListWidgetItem* item) +{ + int ind = GetProfileSelectionIndex(); + if (ind > -1) + { + int count = myProfileNames->count(); + QSet 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; +} + +bool HYDROGUI_ProfileDlg::GetSingleProfileMode() const +{ + return mySingleProfileMode; +}*/ + Handle(AIS_Trihedron) HYDROGUI_ProfileDlg::trihedron() { - SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr(); - Handle(AIS_Trihedron) aTrihedron = - HYDROGUI_AISTrihedron::createTrihedron( aResMgr->doubleValue( "3DViewer", "trihedron_size", viewer()->trihedronSize() ) ); - return aTrihedron; + SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr(); + Handle(AIS_Trihedron) aTrihedron = + HYDROGUI_AISTrihedron::createTrihedron( aResMgr->doubleValue( "3DViewer", "trihedron_size", viewer()->trihedronSize() ) ); + return aTrihedron; }