Salome HOME
Final version of "Profile interpolation".
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_OrderedListWidget.cxx
index 671102d0d141b165bb680101bf3192a1b8aa2d19..e80016777237a9ec341a12f93b39290ca6a1fe7b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2013  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2015  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
@@ -6,7 +6,7 @@
 // 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
@@ -29,7 +29,7 @@
 
 #include <QLayout>
 #include <QListView>
-#include <QToolButton>
+#include <QPushButton>
 #include <QSignalMapper>
 #include <QSortFilterProxyModel>
 
 /**
   Constructor.
   @param theParent the parent widget
+  @param theIconSize the icon size for arrow buttons
 */
-HYDROGUI_OrderedListWidget::HYDROGUI_OrderedListWidget( QWidget* theParent )
+HYDROGUI_OrderedListWidget::HYDROGUI_OrderedListWidget( QWidget* theParent, int theArrowIconSize )
 : QWidget( theParent )
 {
   // Main layout
   QHBoxLayout* aMainLayout = new QHBoxLayout( this );
+  aMainLayout->setMargin( 0 );
   aMainLayout->setSpacing( 5 );
 
   // List view
@@ -66,18 +68,22 @@ HYDROGUI_OrderedListWidget::HYDROGUI_OrderedListWidget( QWidget* theParent )
 
   // Buttons top, up, down, bottom
   SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
-  myTop = new QToolButton;
+  myTop = new QPushButton( this );
   myTop->setIcon( aResMgr->loadPixmap( "HYDRO", tr( "ARROW_TOP_ICO" ) ) );
-  myTop->setIconSize( QSize( 32, 32 ) );
-  myUp = new QToolButton;
+  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() );
-  myDown = new QToolButton;
+  myUp->setToolTip( tr( "UP_TLT" ) );
+  myDown = new QPushButton( this );
   myDown->setIcon( aResMgr->loadPixmap( "HYDRO", tr( "ARROW_DOWN_ICO" ) ) );
   myDown->setIconSize( myTop->iconSize() );
-  myBottom = new QToolButton;
+  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
@@ -108,6 +114,7 @@ HYDROGUI_OrderedListWidget::HYDROGUI_OrderedListWidget( QWidget* theParent )
 
   // Initialize
   setHiddenObjectsShown( true );
+  setVisibilityIconShown( true );
 }
 
 /**
@@ -145,6 +152,30 @@ QList<Handle(HYDROData_Entity)> HYDROGUI_OrderedListWidget::getObjects() const
   return anObjects;
 }
 
+/**
+  Add the object to the end of the list.
+  @param theObjects the pair (object; visibility)
+*/
+void HYDROGUI_OrderedListWidget::addObject( const HYDROGUI_ListModel::Object2Visible& theObject )
+{
+  HYDROGUI_ListModel* aModel = getSourceModel();
+  if( aModel ) {
+    aModel->addObject(theObject);
+  }
+}
+
+/**
+  Remove the object from the list.
+  @param theObjectName the name of the object to remove
+*/
+void HYDROGUI_OrderedListWidget::removeObjectByName( const QString& theObjectName )
+{
+  HYDROGUI_ListModel* aModel = getSourceModel();
+  if( aModel ) {
+    aModel->removeObjectByName(theObjectName);
+  }
+}
+
 /**
   Set whether the hidden objects are presented in the list.
   @param theIsToShow if true - the hidden objects will be shown in the list
@@ -158,6 +189,18 @@ void HYDROGUI_OrderedListWidget::setHiddenObjectsShown( const bool theIsToShow )
   aFilterModel->setFilterRegExp( anExpr );
 }
 
+/**
+  Set whether the visibility icon (eye icon) are presented in the list.
+  @param theIsToShow if true - the eye icon will be shown in the list
+*/
+void HYDROGUI_OrderedListWidget::setVisibilityIconShown( const bool theIsToShow )
+{
+  HYDROGUI_ListModel* aModel = getSourceModel();
+  if( aModel ) {
+    aModel->setDecorationEnabled( theIsToShow );
+  }
+}
+
 /**
   Get entries of the selected objects.
   @return the list of entries
@@ -219,12 +262,56 @@ void HYDROGUI_OrderedListWidget::setSelectedEntries( const QStringList& theEntri
   }
 }
 
+/**
+  Get names of the selected objects.
+  @return the list of names
+*/
+QStringList HYDROGUI_OrderedListWidget::getSelectedNames() const
+{
+  QStringList aNames;
+
+  QSortFilterProxyModel* aFilterModel = 
+    dynamic_cast<QSortFilterProxyModel*>( myList->model() );
+  if ( aFilterModel ) {
+    HYDROGUI_ListModel* aSourceModel = 
+      dynamic_cast<HYDROGUI_ListModel*>( aFilterModel->sourceModel() );
+    if ( aSourceModel ) {
+      QModelIndexList aSelectedIndexes = myList->selectionModel()->selectedIndexes();
+      foreach ( const QModelIndex& anIndex, aSelectedIndexes ) {
+        QModelIndex aSourceIndex = aFilterModel->mapToSource( anIndex );
+        QString anEntry = aSourceModel->data( aSourceIndex, Qt::DisplayRole ).toString();
+        aNames << anEntry;
+      }
+    }
+  }
+
+  return aNames;
+}
+
+/**
+  Get names of all objects.
+  @return the list of names
+*/
+QStringList HYDROGUI_OrderedListWidget::getAllNames() const
+{
+  QStringList aNames;
+
+
+  foreach ( const Handle(HYDROData_Entity)& anObject, getObjects() ) {
+    aNames << anObject->GetName();
+  }
+
+  return aNames;
+}
+
 /**
   Slot called on top, up, down and bottom button click.
   @param theType the move operation type
 */
 void HYDROGUI_OrderedListWidget::onMove( int theType )
 {
+  bool isMoved = false;
+
   QSortFilterProxyModel* aFilterModel = dynamic_cast<QSortFilterProxyModel*>( myList->model() );
   if( aFilterModel ) {
     HYDROGUI_ListModel* aModel = dynamic_cast<HYDROGUI_ListModel*>( aFilterModel->sourceModel() );
@@ -235,10 +322,14 @@ void HYDROGUI_OrderedListWidget::onMove( int theType )
         aSelectedSourceIndexes << aFilterModel->mapToSource( anIndex );
       }
       QList<int> aSelectedIds = aModel->getIds( aSelectedSourceIndexes );
-      aModel->move( aSelectedIds, ( HYDROGUI_ListModel::OpType )theType, 
-                    !myIsHiddenObjectsShown );      
+      isMoved = aModel->move( aSelectedIds, ( HYDROGUI_ListModel::OpType )theType, 
+                              !myIsHiddenObjectsShown );
     }
   }
+
+  if ( isMoved ) {
+    emit orderChanged();
+  }
 }
 
 /**
@@ -255,4 +346,20 @@ HYDROGUI_ListModel* HYDROGUI_OrderedListWidget::getSourceModel() const
   }
 
   return aSourceModel;
+}
+
+/**
+  Enable/disable ordering (i.e. enable/disable arrow buttons and drag and drop).
+  @param theIsToEnable if true - ordering will bw enabled
+*/
+void HYDROGUI_OrderedListWidget::setOrderingEnabled( const bool theIsToEnable )
+{
+  // enable/disable arrow buttons
+  myTop->setEnabled( theIsToEnable );
+  myUp->setEnabled( theIsToEnable );
+  myDown->setEnabled( theIsToEnable );
+  myBottom->setEnabled( theIsToEnable );
+
+  // enable/disable drag and drop
+  myList->setDragEnabled( theIsToEnable );
 }
\ No newline at end of file