diff --git a/sources/ElementsCollection/elementcollectionitem.cpp b/sources/ElementsCollection/elementcollectionitem.cpp index 210e75768..ff8bf013b 100644 --- a/sources/ElementsCollection/elementcollectionitem.cpp +++ b/sources/ElementsCollection/elementcollectionitem.cpp @@ -24,6 +24,7 @@ * @param parent : the parent item of this item */ ElementCollectionItem::ElementCollectionItem(ElementCollectionItem *parent) : + QObject(parent), m_parent_item (parent) {} @@ -52,7 +53,12 @@ void ElementCollectionItem::appendChild(ElementCollectionItem *item) { */ bool ElementCollectionItem::removeChild(int row, int count) { - if (!(0 <= row+count && row+count <= m_child_items.size())) return false; + if (!(1 <= row+count && row+count <= m_child_items.size())) return false; + + int last_ = row + (count-1); + if (last_ < row) return false; + + emit beginRemoveRows(this, row, last_); for (int i=0 ; i; * This class must be herited for specialisation. * This item is used by ElementsCollectionModel for manage the elements collection */ -class ElementCollectionItem +class ElementCollectionItem : public QObject { + Q_OBJECT + public: ElementCollectionItem(ElementCollectionItem *parent = nullptr); virtual ~ElementCollectionItem(); @@ -72,6 +74,12 @@ class ElementCollectionItem virtual bool canRemoveContent(); virtual bool removeContent(); + signals: + void beginInsertRows(ElementCollectionItem *parent, int first, int last); + void endInsertRows(); + void beginRemoveRows(ElementCollectionItem *parent, int first, int last); + void endRemoveRows(); + protected: ElementCollectionItem *m_parent_item; QList m_child_items; diff --git a/sources/ElementsCollection/elementscollectionmodel.cpp b/sources/ElementsCollection/elementscollectionmodel.cpp index 2ab213428..62a808a52 100644 --- a/sources/ElementsCollection/elementscollectionmodel.cpp +++ b/sources/ElementsCollection/elementscollectionmodel.cpp @@ -149,7 +149,7 @@ bool ElementsCollectionModel::removeRows(int row, int count, const QModelIndex & else eci = static_cast(parent.internalPointer()); - if (!(0 <= row+count && row+count <= eci->childCount())) return false; + if (!(1 <= row+count && row+count <= eci->childCount())) return false; beginRemoveRows(parent, row, (row + count -1)); bool r = eci->removeChild(row, count); @@ -205,19 +205,16 @@ bool ElementsCollectionModel::dropMimeData(const QMimeData *data, Qt::DropAction { if (!parent.isValid()) return false; - ElementLocation location(data); - if (location.isNull()) return false; - ElementCollectionItem *eci = static_cast (parent.internalPointer()); - if (!eci) return false; - if (eci->isElement()) eci = eci->parent(); + if (!eci || eci->isElement()) return false; - int i = eci->rowForInsertItem(location.fileName()); - if (i < 0) return false; + connect(eci, &ElementCollectionItem::beginInsertRows, [this, &parent](ElementCollectionItem *eci, int first, int last){ Q_UNUSED(eci); this->beginInsertRows(parent, first, last); }); + connect(eci, &ElementCollectionItem::endInsertRows, [this, &parent](){ this->endInsertRows(); }); + connect(eci, &ElementCollectionItem::beginRemoveRows, [this, &parent](ElementCollectionItem *eci, int first, int last){ Q_UNUSED(eci); this->beginRemoveRows(parent, first, last); }); + connect(eci, &ElementCollectionItem::endRemoveRows, [this, &parent](){ this->endRemoveRows(); }); - beginInsertRows(parent, i, i); bool rb = eci->dropMimeData(data, action, row, column); - endInsertRows(); + return rb; } diff --git a/sources/ElementsCollection/fileelementcollectionitem.h b/sources/ElementsCollection/fileelementcollectionitem.h index a53d2a448..0927a2fd6 100644 --- a/sources/ElementsCollection/fileelementcollectionitem.h +++ b/sources/ElementsCollection/fileelementcollectionitem.h @@ -30,6 +30,8 @@ */ class FileElementCollectionItem : public ElementCollectionItem { + Q_OBJECT + public: FileElementCollectionItem(ElementCollectionItem *parent = nullptr); ~FileElementCollectionItem(); diff --git a/sources/ElementsCollection/xmlprojectelementcollectionitem.h b/sources/ElementsCollection/xmlprojectelementcollectionitem.h index d6675fde7..41b4caee6 100644 --- a/sources/ElementsCollection/xmlprojectelementcollectionitem.h +++ b/sources/ElementsCollection/xmlprojectelementcollectionitem.h @@ -31,6 +31,8 @@ class QETProject; */ class XmlProjectElementCollectionItem : public ElementCollectionItem { + Q_OBJECT + public: XmlProjectElementCollectionItem(QETProject *project, ElementCollectionItem *parent = nullptr); private: