-// 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
@param theParent the parent object
*/
HYDROGUI_ListModel::HYDROGUI_ListModel( QObject* theParent )
- : QAbstractListModel( theParent )
+ : QAbstractListModel( theParent ), myIsDecorationEnabled( true )
{
// Get resource manager
SUIT_ResourceMgr* aResMgr = 0;
// 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 {
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;
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
/**
*/
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 )
{
QByteArray anEncodedData;
QDataStream aStream( &anEncodedData, QIODevice::WriteOnly );
- QList<int> anIdsList = getIds( theIndexes );
+ QList<int> anIdsList = getIds( theIndexes, true );
foreach( int anId, anIdsList )
aStream << anId;
/**
*/
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;
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 );
aStream >> anId;
anIdsList << anId;
}
- qSort( anIdsList ); // TODO should be moved?
+
move( anIdsList, DragAndDrop, false, aDropItemId ); //TODO set visibility?
return true;
}
@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 ) {
@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() ) {
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;
@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;
@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;
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();
+}