Salome HOME
refs #430: incorrect coordinates in dump polyline
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_ListModel.cxx
index bfda69d93709223f5370cecc760ecefe35a1ab40..24e3fe8f4c556081ea468174a5aeadf2f3864541 100644 (file)
@@ -48,7 +48,7 @@ HYDROGUI_ListModel::HYDROGUI_ListModel( QObject* theParent )
 
   // Define eye icon and empty icon
   myEmpty = QPixmap( 16, 16 );
-  myEmpty.fill( Qt::white );
+  myEmpty.fill( Qt::transparent );
   if ( aResMgr ) {
     myEye = aResMgr->loadPixmap( "HYDRO", tr( "EYE_ICO" ) );
   } else {
@@ -171,8 +171,8 @@ bool HYDROGUI_ListModel::isObjectVisible( int theIndex ) const
 /**
 */
 QVariant HYDROGUI_ListModel::headerData( int theSection,
-                                            Qt::Orientation theOrientation,
-                                            int theRole ) const
+                                         Qt::Orientation theOrientation,
+                                         int theRole ) const
 {
   if( theOrientation==Qt::Horizontal && theRole==Qt::DisplayRole )
   {
@@ -206,7 +206,7 @@ QMimeData* HYDROGUI_ListModel::mimeData( const QModelIndexList& theIndexes ) con
   QByteArray anEncodedData;
   QDataStream aStream( &anEncodedData, QIODevice::WriteOnly );
 
-  QList<int> anIdsList = getIds( theIndexes );
+  QList<int> anIdsList = getIds( theIndexes, true );
   foreach( int anId, anIdsList )
     aStream << anId;
 
@@ -226,7 +226,7 @@ QStringList HYDROGUI_ListModel::mimeTypes() const
 /**
 */
 bool HYDROGUI_ListModel::dropMimeData( const QMimeData* theData, Qt::DropAction theAction,
-                                          int theRow, int theColumn, const QModelIndex& theParent )
+                                       int theRow, int theColumn, const QModelIndex& theParent )
 {
   if( theAction == Qt::IgnoreAction)
     return true;
@@ -237,7 +237,8 @@ bool HYDROGUI_ListModel::dropMimeData( const QMimeData* theData, Qt::DropAction
   if( theColumn > 0 )
     return false;
 
-  int aDropItemId = theParent.row();
+  // TODO: to disable drop between items use: int aDropItemId = theParent.row();
+  int aDropItemId = theParent.isValid() ? theParent.row() : theRow;
 
   QByteArray anEncodedData = theData->data( OBJ_LIST_MIME_TYPE );
   QDataStream aStream( &anEncodedData, QIODevice::ReadOnly );
@@ -248,7 +249,7 @@ bool HYDROGUI_ListModel::dropMimeData( const QMimeData* theData, Qt::DropAction
     aStream >> anId;
     anIdsList << anId;
   }
-  qSort( anIdsList ); // TODO should be moved?
+
   move( anIdsList, DragAndDrop, false, aDropItemId ); //TODO set visibility?
   return true;
 }
@@ -265,7 +266,8 @@ Qt::DropActions HYDROGUI_ListModel::supportedDropActions() const
   @param theIsToSort defines if the list of ids should be sorted in ascending order
   @return the list of ids
 */
-QList<int> HYDROGUI_ListModel::getIds( const QModelIndexList& theIndexes, bool theIsToSort ) const
+QList<int> HYDROGUI_ListModel::getIds( const QModelIndexList& theIndexes, 
+                                       bool theIsToSort ) const
 {
   QList<int> anIds;
   foreach( const QModelIndex& anIndex, theIndexes ) {
@@ -288,7 +290,7 @@ QList<int> HYDROGUI_ListModel::getIds( const QModelIndexList& theIndexes, bool t
   @return true in case of success
 */
 bool HYDROGUI_ListModel::move( const int theItem, const OpType theType,
-                                  bool theIsVisibleOnly, const int theDropItem )
+                               bool theIsVisibleOnly, const int theDropItem )
 {
   bool aRes = false;
   if ( theItem < 0 || theItem >= myObjects.count() ) {
@@ -362,7 +364,7 @@ bool HYDROGUI_ListModel::move( const int theItem, const OpType theType,
   @return true in case of success
 */
 bool HYDROGUI_ListModel::move( const QList<int>& theItems, const OpType theType, 
-                                  bool theIsVisibleOnly, const int theDropItem )
+                               bool theIsVisibleOnly, const int theDropItem )
 {
   bool aRes = true;
 
@@ -437,11 +439,13 @@ bool HYDROGUI_ListModel::move( const QList<int>& theItems, const OpType theType,
   @return true if drag and drop allowed
 */
 bool HYDROGUI_ListModel::isDragAndDropAllowed( const QList<int>& theItems, 
-                                                  const int theDropItem ) const
+                                               const int theDropItem ) const
 {
   bool isAllowed = false;
 
-  if ( theDropItem >= 0 && theDropItem < myObjects.count() &&
+  if ( theDropItem >= 0 && 
+       // TODO: to disable drop between items use: theDropItem < myObjects.count()
+       theDropItem <= myObjects.count() &&
        !theItems.empty() && theItems.count() < myObjects.count() &&
        !theItems.contains( theDropItem )) {
     isAllowed = true;