X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_ProfileDlg.cxx;h=c6c49c1c682b4101a07831af174d1efbc134bb1f;hb=7bb8da28edc30835dbef7be9b5790dfe925b1bf4;hp=611e888f23d5589dbecef5ea1ba69e4f91fc435b;hpb=8c36538920c44b66924b596a8d2c8a10bab9b7e5;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_ProfileDlg.cxx b/src/HYDROGUI/HYDROGUI_ProfileDlg.cxx index 611e888f..c6c49c1c 100644 --- a/src/HYDROGUI/HYDROGUI_ProfileDlg.cxx +++ b/src/HYDROGUI/HYDROGUI_ProfileDlg.cxx @@ -1,12 +1,8 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// +// Copyright (C) 2014-2015 EDF-R&D // 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. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -22,19 +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 -#include +#ifndef TEST_MODE +#include +#endif +#include #include #include @@ -43,105 +48,150 @@ #include #include #include - -HYDROGUI_ProfileDlg::HYDROGUI_ProfileDlg( HYDROGUI_Module* theModule, const QString& theTitle ) -: HYDROGUI_InputPanel( theModule, theTitle ), myName(NULL) +#include +#include +#include +#include +#include + +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 | CurveCreator_Widget::DisableClosedSection; - myEditorWidget = new CurveCreator_Widget( this, NULL, anActionFlags ); - addWidget( myEditorWidget, 3 ); + QStringList aCoordTitles; + aCoordTitles << tr( "U_TITLE" ) << tr( "Z_TITLE" ); + myEditorWidget = new CurveCreator_Widget( this, NULL, anActionFlags, aCoordTitles ); + 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 ); anAddElementLayout->setSpacing( 5 ); - myViewManager = new OCCViewer_ViewManager( theModule->getApp()->activeStudy(), 0 ); - OCCViewer_Viewer* aViewer = new OCCViewer_Viewer( true ); - - SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr(); - aViewer->setBackground( OCCViewer_ViewFrame::TOP_LEFT, - aResMgr->backgroundValue( "OCCViewer", "xz_background", aViewer->background(OCCViewer_ViewFrame::TOP_LEFT) ) ); - aViewer->setBackground( OCCViewer_ViewFrame::TOP_RIGHT, - aResMgr->backgroundValue( "OCCViewer", "yz_background", aViewer->background(OCCViewer_ViewFrame::TOP_RIGHT) ) ); - aViewer->setBackground( OCCViewer_ViewFrame::BOTTOM_LEFT, - aResMgr->backgroundValue( "OCCViewer", "xy_background", aViewer->background(OCCViewer_ViewFrame::BOTTOM_LEFT) ) ); - aViewer->setBackground( OCCViewer_ViewFrame::BOTTOM_RIGHT, - aResMgr->backgroundValue( "OCCViewer", "background", aViewer->background(OCCViewer_ViewFrame::MAIN_VIEW) ) ); - - aViewer->setTrihedronSize( aResMgr->doubleValue( "3DViewer", "trihedron_size", aViewer->trihedronSize() ), - aResMgr->booleanValue( "3DViewer", "relative_size", aViewer->trihedronRelative() )); - aViewer->setInteractionStyle( aResMgr->integerValue( "3DViewer", "navigation_mode", aViewer->interactionStyle() ) ); - aViewer->setZoomingStyle( aResMgr->integerValue( "3DViewer", "zooming_mode", aViewer->zoomingStyle() ) ); - aViewer->enablePreselection( aResMgr->booleanValue( "OCCViewer", "enable_preselection", aViewer->isPreselectionEnabled() ) ); - aViewer->enableSelection( aResMgr->booleanValue( "OCCViewer", "enable_selection", aViewer->isSelectionEnabled() ) ); - - myViewManager->setViewModel( aViewer );// custom view model, which extends SALOME_View interface - SUIT_ViewWindow* aViewWin = myViewManager->createViewWindow(); - addWidget( aViewWin, 4 ); - myEditorWidget->setOCCViewer( aViewer ); + myEditorWidget->setOCCViewer( viewer() ); 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*) ) ); - - myAddElementBox->hide(); - - // Coordinates - connect( myViewManager, SIGNAL( mouseMove( SUIT_ViewWindow*, QMouseEvent* ) ), - this, SLOT( onMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) ); - if ( aViewWin ) { - OCCViewer_ViewFrame* aViewFrame = dynamic_cast( aViewWin ); - if ( aViewFrame && aViewFrame->getViewPort() ) { - aViewFrame->getViewPort()->installEventFilter( this ); - } + 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(); - myCoordLabel = new QLabel( this ); - QHBoxLayout* aCoordLayout = new QHBoxLayout(); - aCoordLayout->addWidget( myCoordLabel ); - aCoordLayout->addStretch(); - - addLayout( aCoordLayout ); + 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() { - delete myViewManager; +#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(); } -Handle(AIS_InteractiveContext) HYDROGUI_ProfileDlg::getAISContext() +void HYDROGUI_ProfileDlg::setProfileName( const QString& theName ) { - OCCViewer_Viewer* aViewer = (OCCViewer_Viewer*)myViewManager->getViewModel(); - return aViewer ? aViewer->getAISContext() : 0; + if (myIsEdit) + return; + myName->setText(theName); } -void HYDROGUI_ProfileDlg::setProfileName( const QString& theName ) +void HYDROGUI_ProfileDlg::eraseProfile( int index ) { - myName->setText(theName); + myProfileNames->takeItem(index); + if (myProfileNames->count() == 1) + myRemProfBtn->setEnabled(false); } -QString HYDROGUI_ProfileDlg::getProfileName() const +void HYDROGUI_ProfileDlg::addProfileName( const QString& theName, const QColor& theColor ) { - return myName->text(); + 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 +{ + 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 ) @@ -154,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 */ @@ -198,27 +258,120 @@ void HYDROGUI_ProfileDlg::processFinishedSubOperation( QWidget* theWidget ) myAddElementBox->hide(); } -void HYDROGUI_ProfileDlg::onMouseMove( SUIT_ViewWindow* theViewWindow, QMouseEvent* theEvent ) +void HYDROGUI_ProfileDlg::ProfileNameChanged(QString text) { - OCCViewer_ViewWindow* anOCCViewWindow = - dynamic_cast(theViewWindow); - if ( anOCCViewWindow && anOCCViewWindow->getViewPort() ) { - gp_Pnt aPnt = CurveCreator_Utils::ConvertClickToPoint( - theEvent->x(), theEvent->y(), anOCCViewWindow->getViewPort()->getView() ); + myCurrentName = text; +} - // Show the coordinates - QString aX = HYDROGUI_Tool::GetCoordinateString( aPnt.X() ); - QString anY = HYDROGUI_Tool::GetCoordinateString( aPnt.Y() ); - myCoordLabel->setText( tr("COORDINATES_INFO").arg( aX ).arg( anY ) ); +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(); } -bool HYDROGUI_ProfileDlg::eventFilter( QObject* theObj, QEvent* theEvent ) +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) { - if ( theObj->inherits( "OCCViewer_ViewPort" ) && - theEvent->type() == QEvent::Leave ) { - myCoordLabel->clear(); + 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; +}*/ - return HYDROGUI_InputPanel::eventFilter( theObj, theEvent ); -} \ No newline at end of file +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; +}