]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
refs #416: to store the open state of object browser items in the binary array
authorasl <alexander.solovyov@opencascade.com>
Fri, 15 Aug 2014 10:23:59 +0000 (14:23 +0400)
committerasl <alexander.solovyov@opencascade.com>
Fri, 15 Aug 2014 10:23:59 +0000 (14:23 +0400)
src/ObjBrowser/OB_Browser.cxx
src/ObjBrowser/OB_Browser.h

index 8211d2ed95005825c71522d02f5bb4a4e4a6157a..20634584a989b34d4ddce24e9c68cd2d00dece44 100755 (executable)
@@ -1194,3 +1194,63 @@ void OB_Browser::onDoubleClicked( QListViewItem* item )
   \fn void OB_Browser::selectionChanged();
   \brief Emitted when selection is changed in the Object Browser.
 */
+
+QByteArray OB_Browser::getOpenStates( int theColumn ) const
+{
+  QByteArray aData;
+  QDataStream aStream( &aData, QIODevice::WriteOnly );
+  MapOfOpenStates aMap;
+  const_cast<OB_Browser*>( this )->openStates( true, aMap, QModelIndex(), theColumn );
+  MapOfOpenStates::const_iterator anIt = aMap.begin(), aLast = aMap.end();
+  for( ; anIt!=aLast; anIt++ )
+  {
+    QString anEntry = anIt.key();
+    qint32 anOpenAttr = anIt.value() ? 1 : 0;
+    aStream << anEntry << anOpenAttr;
+  }
+  return aData;
+}
+
+void OB_Browser::setOpenStates( const QByteArray& theData, int theColumn )
+{
+  QByteArray* aData = const_cast<QByteArray*>( &theData );
+  QDataStream aStream( aData, QIODevice::ReadOnly );
+  MapOfOpenStates aMap;
+  while( !aStream.atEnd() )
+  {
+    QString anEntry;
+    qint32 anOpenAttr;
+    aStream >> anEntry >> anOpenAttr;
+    bool isOpen = anOpenAttr!=0;
+    aMap[anEntry] = isOpen;
+  }
+  openStates( false, aMap, QModelIndex(), theColumn );
+}
+
+void OB_Browser::openStates( bool isGet, MapOfOpenStates& theMap, const QModelIndex& theIndex, int theColumn )
+{
+  if( theIndex.isValid() )
+  {
+    QString anEntry = theIndex.sibling( theIndex.row(), theColumn ).data().toString();
+    bool isOpen;
+    if( isGet )
+    {
+      isOpen = treeView()->isExpanded( theIndex );
+      theMap[anEntry] = isOpen;
+    }
+    else
+    {
+      isOpen = theMap.contains( anEntry ) ? theMap[anEntry] : false;
+      treeView()->setExpanded( theIndex, isOpen );
+    }
+  }
+
+  const QAbstractItemModel* aModel = model();
+
+  int n = aModel->rowCount( theIndex );
+  for( int i=0; i<n; i++ )
+  {
+    QModelIndex aChild = aModel->index( i, 0, theIndex );
+    openStates( isGet, theMap, aChild, theColumn );
+  }
+}
index 2df9ff23f4344dffacfcafb7d7631774094b620c..442d9b81b22587a3d481ad7d2ba93b92737edb24 100755 (executable)
@@ -112,6 +112,12 @@ public:
 
   QtxTreeView*           treeView() const;
 
+  QByteArray             getOpenStates( int theColumn ) const;
+  void                   setOpenStates( const QByteArray&, int theColumn );
+
+  typedef QMap<QString, bool> MapOfOpenStates;
+  void                   openStates( bool isGet, MapOfOpenStates&, const QModelIndex& theIndex, int theColumn );
+
 signals:
   void                   selectionChanged();
   //void                   doubleClicked( SUIT_DataObject* );