]> SALOME platform Git repositories - modules/hydro.git/commitdiff
Salome HOME
refs #509: Create stream - no synchronization between object browser and input panel
authormzn <mzn@opencascade.com>
Wed, 24 Jun 2015 15:48:12 +0000 (18:48 +0300)
committermzn <mzn@opencascade.com>
Wed, 24 Jun 2015 15:48:12 +0000 (18:48 +0300)
src/HYDROGUI/HYDROGUI_OrderedListWidget.cxx
src/HYDROGUI/HYDROGUI_StreamDlg.cxx
src/HYDROGUI/HYDROGUI_StreamDlg.h
src/HYDROGUI/HYDROGUI_StreamOp.cxx

index 1b551cfc17799a0f500add6305dadd8d2cd7b94e..c17903a3b67f415d202c00af34d0df081614f63a 100644 (file)
@@ -62,48 +62,53 @@ HYDROGUI_OrderedListWidget::HYDROGUI_OrderedListWidget( QWidget* theParent, int
 
   myList->setModel( aFilteredModel );
 
-  // Buttons top, up, down, bottom
-  SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
-  myTop = new QPushButton( this );
-  myTop->setIcon( aResMgr->loadPixmap( "HYDRO", tr( "ARROW_TOP_ICO" ) ) );
-  myTop->setIconSize( QSize( theArrowIconSize, theArrowIconSize ) );
-  myTop->setToolTip( tr( "TOP_TLT" ) );
-  myUp = new QPushButton( this );
-  myUp->setIcon( aResMgr->loadPixmap( "HYDRO", tr( "ARROW_UP_ICO" ) ) );
-  myUp->setIconSize( myTop->iconSize() );
-  myUp->setToolTip( tr( "UP_TLT" ) );
-  myDown = new QPushButton( this );
-  myDown->setIcon( aResMgr->loadPixmap( "HYDRO", tr( "ARROW_DOWN_ICO" ) ) );
-  myDown->setIconSize( myTop->iconSize() );
-  myDown->setToolTip( tr( "DOWN_TLT" ) );
-  myBottom = new QPushButton( this );
-  myBottom->setIcon( aResMgr->loadPixmap( "HYDRO", tr( "ARROW_BOTTOM_ICO" ) ) );
-  myBottom->setIconSize( myTop->iconSize() );
-  myBottom->setToolTip( tr( "BOTTOM_TLT" ) );
-
-  // Layout
-  // buttons
-  QVBoxLayout* aListButtonsLayout = new QVBoxLayout();
-  aListButtonsLayout->addWidget( myTop );
-  aListButtonsLayout->addWidget( myUp );
-  aListButtonsLayout->addWidget( myDown );
-  aListButtonsLayout->addWidget( myBottom );
-  aListButtonsLayout->addStretch();
-  // main
+  // Add list to the main layout
   aMainLayout->addWidget( myList );
-  aMainLayout->addLayout( aListButtonsLayout );
-
-  // Connections
-  QSignalMapper* aSignalMapper = new QSignalMapper( this );
-  aSignalMapper->setMapping( myTop, HYDROGUI_ListModel::Top );
-  aSignalMapper->setMapping( myUp, HYDROGUI_ListModel::Up );
-  aSignalMapper->setMapping( myDown, HYDROGUI_ListModel::Down );
-  aSignalMapper->setMapping( myBottom, HYDROGUI_ListModel::Bottom );
-  connect( myTop, SIGNAL( clicked() ), aSignalMapper, SLOT( map() ) );
-  connect( myUp, SIGNAL( clicked() ), aSignalMapper, SLOT( map() ) );
-  connect( myDown, SIGNAL( clicked() ), aSignalMapper, SLOT( map() ) );
-  connect( myBottom, SIGNAL( clicked() ), aSignalMapper, SLOT( map() ) );
-  connect( aSignalMapper, SIGNAL( mapped( int ) ), this, SLOT( onMove( int ) ) );
+
+  // Buttons top, up, down, bottom
+  if ( theArrowIconSize > 0 ) {
+    SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
+    myTop = new QPushButton( this );
+    myTop->setIcon( aResMgr->loadPixmap( "HYDRO", tr( "ARROW_TOP_ICO" ) ) );
+    myTop->setIconSize( QSize( theArrowIconSize, theArrowIconSize ) );
+    myTop->setToolTip( tr( "TOP_TLT" ) );
+    myUp = new QPushButton( this );
+    myUp->setIcon( aResMgr->loadPixmap( "HYDRO", tr( "ARROW_UP_ICO" ) ) );
+    myUp->setIconSize( myTop->iconSize() );
+    myUp->setToolTip( tr( "UP_TLT" ) );
+    myDown = new QPushButton( this );
+    myDown->setIcon( aResMgr->loadPixmap( "HYDRO", tr( "ARROW_DOWN_ICO" ) ) );
+    myDown->setIconSize( myTop->iconSize() );
+    myDown->setToolTip( tr( "DOWN_TLT" ) );
+    myBottom = new QPushButton( this );
+    myBottom->setIcon( aResMgr->loadPixmap( "HYDRO", tr( "ARROW_BOTTOM_ICO" ) ) );
+    myBottom->setIconSize( myTop->iconSize() );
+    myBottom->setToolTip( tr( "BOTTOM_TLT" ) );
+
+    // Add buttons to the main layout
+    QVBoxLayout* aListButtonsLayout = new QVBoxLayout();
+    aListButtonsLayout->addWidget( myTop );
+    aListButtonsLayout->addWidget( myUp );
+    aListButtonsLayout->addWidget( myDown );
+    aListButtonsLayout->addWidget( myBottom );
+    aListButtonsLayout->addStretch();
+    
+    aMainLayout->addLayout( aListButtonsLayout );
+
+    // Buttons connections
+    QSignalMapper* aSignalMapper = new QSignalMapper( this );
+    aSignalMapper->setMapping( myTop, HYDROGUI_ListModel::Top );
+    aSignalMapper->setMapping( myUp, HYDROGUI_ListModel::Up );
+    aSignalMapper->setMapping( myDown, HYDROGUI_ListModel::Down );
+    aSignalMapper->setMapping( myBottom, HYDROGUI_ListModel::Bottom );
+    connect( myTop, SIGNAL( clicked() ), aSignalMapper, SLOT( map() ) );
+    connect( myUp, SIGNAL( clicked() ), aSignalMapper, SLOT( map() ) );
+    connect( myDown, SIGNAL( clicked() ), aSignalMapper, SLOT( map() ) );
+    connect( myBottom, SIGNAL( clicked() ), aSignalMapper, SLOT( map() ) );
+    connect( aSignalMapper, SIGNAL( mapped( int ) ), this, SLOT( onMove( int ) ) );
+  } else {
+    myTop = myUp = myDown = myBottom = 0;
+  }
 
   connect ( myList->selectionModel(), SIGNAL( selectionChanged( QItemSelection, QItemSelection ) ), 
             this, SIGNAL( selectionChanged() ) );
@@ -352,10 +357,12 @@ HYDROGUI_ListModel* HYDROGUI_OrderedListWidget::getSourceModel() const
 void HYDROGUI_OrderedListWidget::setOrderingEnabled( const bool theIsToEnable )
 {
   // enable/disable arrow buttons
-  myTop->setEnabled( theIsToEnable );
-  myUp->setEnabled( theIsToEnable );
-  myDown->setEnabled( theIsToEnable );
-  myBottom->setEnabled( theIsToEnable );
+  if ( myTop && myUp && myDown && myBottom ) {
+    myTop->setEnabled( theIsToEnable );
+    myUp->setEnabled( theIsToEnable );
+    myDown->setEnabled( theIsToEnable );
+    myBottom->setEnabled( theIsToEnable );
+  }
 
   // enable/disable drag and drop
   myList->setDragEnabled( theIsToEnable );
index 8b4f7050fada1831bd6eaeec0962f11f574f2cbc..95f0750bda8f08194e944d5882ba655a72347a68 100644 (file)
 
 #include "HYDROGUI_StreamDlg.h"
 
+#include "HYDROGUI_ListSelector.h"
+#include "HYDROGUI_Module.h"
+#include "HYDROGUI_OrderedListWidget.h"
 #include "HYDROGUI_Tool.h"
 
+#include <HYDROData_Profile.h>
+
+#include <LightApp_Application.h>
+#include <LightApp_SelectionMgr.h>
+
 #include <QComboBox>
 #include <QGroupBox>
 #include <QLabel>
@@ -51,12 +59,12 @@ HYDROGUI_StreamDlg::HYDROGUI_StreamDlg( HYDROGUI_Module* theModule, const QStrin
   anAxisLayout->addWidget( new QLabel( tr( "STREAM_HYDRAULIC_AXIS" ) ) );
   anAxisLayout->addWidget( myAxes );
 
-  myProfiles = new QListWidget( aParamGroup );
-  myProfiles->setSelectionMode( QListWidget::ExtendedSelection );
-  myProfiles->setEditTriggers( QListWidget::NoEditTriggers );
-  myProfiles->setViewMode( QListWidget::ListMode );
-  myProfiles->setSortingEnabled( false );
-
+  myProfiles = new HYDROGUI_OrderedListWidget( aParamGroup, 0 );
+  myProfiles->setHiddenObjectsShown(true);
+  myProfiles->setVisibilityIconShown(false);
+  myProfiles->setContentsMargins(QMargins());
+  myProfiles->setOrderingEnabled( false );
   myAddButton = new QPushButton( aParamGroup );
   myAddButton->setText( tr("ADD") );
   myRemoveButton = new QPushButton( aParamGroup );
@@ -80,6 +88,13 @@ HYDROGUI_StreamDlg::HYDROGUI_StreamDlg( HYDROGUI_Module* theModule, const QStrin
   addWidget( aParamGroup );
   addStretch();
 
+  // Create selector
+  if ( module() ) {
+    HYDROGUI_ListSelector* aListSelector = 
+      new HYDROGUI_ListSelector( myProfiles, module()->getApp()->selectionMgr() );
+    aListSelector->setAutoBlock( true );
+  }
+
   // Connect signals and slots
   connect( myAxes, SIGNAL( currentIndexChanged( const QString & ) ), 
            this, SIGNAL( AxisChanged( const QString& ) ) );
@@ -98,7 +113,7 @@ void HYDROGUI_StreamDlg::reset()
   myObjectName->clear();
 
   myAxes->clear();
-  myProfiles->clear();
+  myProfiles->setObjects( HYDROGUI_ListModel::Object2VisibleList() );
   myAddButton->setEnabled( false );
   myRemoveButton->setEnabled( false );
 
@@ -149,13 +164,18 @@ void HYDROGUI_StreamDlg::setProfiles( const QStringList& theProfiles )
 
   myProfiles->setUpdatesEnabled( false );
   
-  myProfiles->clear();
+  HYDROGUI_ListModel::Object2VisibleList aProfiles;
   foreach ( const QString& aProfileName, theProfiles ) {
-    QListWidgetItem* aListItem = new QListWidgetItem( aProfileName, myProfiles );
-    aListItem->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable );
+    Handle(HYDROData_Profile) anObject = Handle(HYDROData_Profile)::DownCast( 
+      HYDROGUI_Tool::FindObjectByName( module(), aProfileName ) );
+    if ( !anObject.IsNull() ) {
+      aProfiles.append( HYDROGUI_ListModel::Object2Visible( anObject, true ) );
+    }
   }
 
-  myRemoveButton->setEnabled( myProfiles->count() > 0 );
+  myProfiles->setObjects( aProfiles );
+
+  myRemoveButton->setEnabled( myProfiles->getObjects().count() > 0 );
 
   myProfiles->setUpdatesEnabled( true );
 
@@ -164,15 +184,7 @@ void HYDROGUI_StreamDlg::setProfiles( const QStringList& theProfiles )
 
 void HYDROGUI_StreamDlg::onRemoveProfiles()
 {
-  QStringList aSelectedProfiles;
-
-  QList<QListWidgetItem*> aSelectedItems = myProfiles->selectedItems();
-  foreach( const QListWidgetItem* anItem, aSelectedItems ) {
-    QString aProfileName = anItem->text();
-    if ( !aProfileName.isEmpty() ) {
-      aSelectedProfiles << aProfileName;
-    }
-  }
+  QStringList aSelectedProfiles = myProfiles->getSelectedNames();
 
   emit RemoveProfiles( aSelectedProfiles );
 }
index 06ffcf1f008327845014cc69803b11ace03ef3d5..a9679f4e7b16160b30d07f3b0199bc662e21e8ad 100644 (file)
@@ -21,6 +21,8 @@
 
 #include "HYDROGUI_InputPanel.h"
 
+class HYDROGUI_OrderedListWidget;
+
 class QComboBox;
 class QGroupBox;
 class QLineEdit;
@@ -59,10 +61,10 @@ private:
   QGroupBox*                 myObjectNameGroup;
   QLineEdit*                 myObjectName;
 
-  QComboBox*                 myAxes;
-  QListWidget*               myProfiles;
-  QPushButton*               myRemoveButton;
-  QPushButton*               myAddButton;
+  QComboBox*                  myAxes;
+  HYDROGUI_OrderedListWidget* myProfiles;
+  QPushButton*                myRemoveButton;
+  QPushButton*                myAddButton;
 };
 
 #endif
index d11ea2c3f3ef669b7479e5c89a86eb8c83e9ba0d..6162acb8e391d9ae2836e8f09dc9e084886dbd42 100755 (executable)
@@ -435,20 +435,7 @@ void HYDROGUI_StreamOp::onAddProfiles()
 void HYDROGUI_StreamOp::onRemoveProfiles( const QStringList& theProfilesToRemove )
 {
   QStringList aToRemove = theProfilesToRemove;
-
-  // Take the Object Browser selection into account
-  HYDROData_SequenceOfObjects aSelectedObjects = HYDROGUI_Tool::GetSelectedObjects( module() ); 
-  for( int i = 1, n = aSelectedObjects.Length(); i <= n; i++ )
-  {
-    Handle(HYDROData_Profile) aProfile = 
-      Handle(HYDROData_Profile)::DownCast( aSelectedObjects.Value( i ) );
-    if ( aProfile.IsNull() )
-      continue;
-
-    QString aProfileName = aProfile->GetName();
-    aToRemove.append( aProfileName );
-  }
-
+  
   aToRemove.removeDuplicates();
   if ( aToRemove.isEmpty() )
     return;