X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_ListModel.cxx;h=b112dd34a5c3d2261b47df452e377369f3654e54;hb=d6e19029f8b41f295db878e9aecf451c2edda4af;hp=bfda69d93709223f5370cecc760ecefe35a1ab40;hpb=2904bb5e64e69d27c643e66e3dd727c5110ec275;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_ListModel.cxx b/src/HYDROGUI/HYDROGUI_ListModel.cxx index bfda69d9..b112dd34 100644 --- a/src/HYDROGUI/HYDROGUI_ListModel.cxx +++ b/src/HYDROGUI/HYDROGUI_ListModel.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 @@ -37,7 +33,7 @@ const QString OBJ_LIST_MIME_TYPE = "application/hydro.objects.list"; @param theParent the parent object */ HYDROGUI_ListModel::HYDROGUI_ListModel( QObject* theParent ) - : QAbstractListModel( theParent ) + : QAbstractListModel( theParent ), myIsDecorationEnabled( true ) { // Get resource manager SUIT_ResourceMgr* aResMgr = 0; @@ -48,7 +44,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 { @@ -89,8 +85,8 @@ QVariant HYDROGUI_ListModel::data( const QModelIndex &theIndex, int theRole ) co case Qt::DecorationRole: { - if( aColumn==0 && aRow >=0 && aRow < myObjects.count() ) - { + if( myIsDecorationEnabled && + aColumn==0 && aRow >=0 && aRow < myObjects.count() ) { bool isVisible = isObjectVisible( aRow ); if( isVisible ) return myEye; @@ -152,6 +148,36 @@ HYDROGUI_ListModel::ObjectList HYDROGUI_ListModel::getObjects() const return anObjects; } +/** + Add the object to the end of the list. + @param theObjects the pair (object; visibility) +*/ +void HYDROGUI_ListModel::addObject( const Object2Visible& theObject ) +{ + myObjects << theObject; + + reset(); +} + +/** + Remove the object from the list. + @param theObjectName the name of the object to remove +*/ +void HYDROGUI_ListModel::removeObjectByName( const QString& theObjectName ) +{ + Object2Visible anItem; + foreach( anItem, myObjects ) { + if ( anItem.first->GetName() == theObjectName ) { + break; + } + } + + myObjects.removeAll(anItem); + + reset(); +} + + /** Check if the object is visible. @param theIndex the object index @@ -171,8 +197,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 +232,7 @@ QMimeData* HYDROGUI_ListModel::mimeData( const QModelIndexList& theIndexes ) con QByteArray anEncodedData; QDataStream aStream( &anEncodedData, QIODevice::WriteOnly ); - QList anIdsList = getIds( theIndexes ); + QList anIdsList = getIds( theIndexes, true ); foreach( int anId, anIdsList ) aStream << anId; @@ -226,7 +252,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 +263,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 +275,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 +292,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 HYDROGUI_ListModel::getIds( const QModelIndexList& theIndexes, bool theIsToSort ) const +QList HYDROGUI_ListModel::getIds( const QModelIndexList& theIndexes, + bool theIsToSort ) const { QList anIds; foreach( const QModelIndex& anIndex, theIndexes ) { @@ -288,7 +316,7 @@ QList 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() ) { @@ -344,6 +372,7 @@ bool HYDROGUI_ListModel::move( const int theItem, const OpType theType, if ( aDestinationIndex >= 0 && aDestinationIndex < myObjects.count() ) { int aDestinationRow = isInsertBefore ? aDestinationIndex : aDestinationIndex + 1; if ( beginMoveRows( QModelIndex(), theItem, theItem, QModelIndex(), aDestinationRow ) ) { + myPrevObjects = myObjects; myObjects.move( theItem, aDestinationIndex ); endMoveRows(); aRes = true; @@ -362,7 +391,7 @@ bool HYDROGUI_ListModel::move( const int theItem, const OpType theType, @return true in case of success */ bool HYDROGUI_ListModel::move( const QList& theItems, const OpType theType, - bool theIsVisibleOnly, const int theDropItem ) + bool theIsVisibleOnly, const int theDropItem ) { bool aRes = true; @@ -437,11 +466,13 @@ bool HYDROGUI_ListModel::move( const QList& theItems, const OpType theType, @return true if drag and drop allowed */ bool HYDROGUI_ListModel::isDragAndDropAllowed( const QList& 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; @@ -449,3 +480,18 @@ bool HYDROGUI_ListModel::isDragAndDropAllowed( const QList& theItems, return isAllowed; } + +/** + Enable/disable decoration (eye icon). + @param theIsToEnable if true - the decoration will be enabled +*/ +void HYDROGUI_ListModel::setDecorationEnabled( const bool theIsToEnable ) +{ + myIsDecorationEnabled = theIsToEnable; +} + +void HYDROGUI_ListModel::undoLastMove() +{ + myObjects = myPrevObjects; + reset(); +}