diff --git a/GUI/Model/Files/DatafilesQModel.cpp b/GUI/Model/Files/DatafilesQModel.cpp index 56b24c9f5b8789946fe99c812ef537dd77158224..a50ef4717135cafc3bd983bc57b91c91c24de9e2 100644 --- a/GUI/Model/Files/DatafilesQModel.cpp +++ b/GUI/Model/Files/DatafilesQModel.cpp @@ -17,25 +17,15 @@ #include "GUI/Model/Files/DatafilesSet.h" DatafilesQModel::DatafilesQModel(QObject* parent, DatafilesSet* model) - : QAbstractItemModel(parent) + : QAbstractListModel(parent) , m_model(model) { } -bool DatafilesQModel::setData(const QModelIndex& index, const QVariant& value, int role) -{ - if (role == Qt::EditRole && index.isValid() && index.column() == 0) { - itemForIndex(index)->setDatafileItemName(value.toString()); - emit dataChanged(index, index); - return true; - } - return false; -} - void DatafilesQModel::injectDatafileItem(DatafileItem* item) { const int row = m_model->size(); - beginInsertRows(indexOfHeadline(), row, row); + beginInsertRows({}, row, row); m_model->appendDatafileItem(item); endInsertRows(); } @@ -43,7 +33,7 @@ void DatafilesQModel::injectDatafileItem(DatafileItem* item) void DatafilesQModel::removeDatafileItemAt(int row) { ASSERT(0 <= row && row < (int)m_model->size()); - beginRemoveRows(indexOfHeadline(), row, row); + beginRemoveRows({}, row, row); m_model->deleteDatafileItemAt(row); endRemoveRows(); } @@ -55,91 +45,31 @@ const DatafileItem* DatafilesQModel::topMostItem() const return nullptr; } -QModelIndex DatafilesQModel::indexOfHeadline() const -{ - return createIndex(0, 0, nullptr); -} - -QModelIndex DatafilesQModel::index(int row, int column, const QModelIndex& parent) const -{ - if (!hasIndex(row, column, parent)) - return {}; - - if (!parent.isValid()) - return createIndex(row, column, nullptr); - - if (parent == indexOfHeadline()) - return createIndex(row, column, m_model->dfileItemAt(row)); - - return {}; -} - -QModelIndex DatafilesQModel::parent(const QModelIndex& index) const -{ - if (!index.isValid()) - return {}; - - if (index.internalPointer() == nullptr) // index is headline => no parent - return {}; - - return indexOfHeadline(); -} - -int DatafilesQModel::columnCount(const QModelIndex& /*parent*/) const +int DatafilesQModel::rowCount(const QModelIndex& /*parent*/) const { - return 1; -} - -int DatafilesQModel::rowCount(const QModelIndex& parent) const -{ - if (!parent.isValid()) - return 1; - - // parent is a headline - if (parent == indexOfHeadline()) - return m_model->size(); - - return 0; + return m_model->size(); } QVariant DatafilesQModel::data(const QModelIndex& index, int role) const { - if (isHeadline(index)) + if (!index.isValid() || index.row() >= (int)m_model->size() || index.row() < 0) return {}; - auto* const item = itemForIndex(index); - - if (role == Qt::ToolTipRole) - return {}; + const auto* item = itemForIndex(index); + ASSERT(item); if (role == Qt::DisplayRole) return item->realItemName(); - if (role == Qt::EditRole) - return item->realItemName(); + if (role == Qt::ToolTipRole) + return {}; return {}; } -Qt::ItemFlags DatafilesQModel::flags(const QModelIndex& index) const -{ - if (isHeadline(index) || !index.isValid()) - return Qt::NoItemFlags; - - auto f = QAbstractItemModel::flags(index); - f |= Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDragEnabled; - - if (index.column() == 0) // col 0 contains name of the data entry - f |= Qt::ItemIsEditable; - - return f; -} - DatafileItem* DatafilesQModel::itemForIndex(const QModelIndex& index) const { - if (!index.isValid()) - return nullptr; - return reinterpret_cast<DatafileItem*>(index.internalPointer()); + return m_model->dfileItemAt(index.row()); } QModelIndex DatafilesQModel::indexForItem(const DatafileItem* item) const @@ -149,10 +79,3 @@ QModelIndex DatafilesQModel::indexForItem(const DatafileItem* item) const return createIndex(i, 0, item); return {}; } - -bool DatafilesQModel::isHeadline(const QModelIndex& index) const -{ - if (!index.isValid()) - return false; - return index.internalPointer() == nullptr; -} diff --git a/GUI/Model/Files/DatafilesQModel.h b/GUI/Model/Files/DatafilesQModel.h index 1846a00c4b43e3d32821eb3ff1fa16299cce8870..8221010ec521c278d807d205d3199d1ff9a3feef 100644 --- a/GUI/Model/Files/DatafilesQModel.h +++ b/GUI/Model/Files/DatafilesQModel.h @@ -15,36 +15,30 @@ #ifndef BORNAGAIN_GUI_MODEL_FILES_DATAFILESQMODEL_H #define BORNAGAIN_GUI_MODEL_FILES_DATAFILESQMODEL_H -#include <QAbstractItemModel> +#include <QAbstractListModel> class DatafileItem; class DatafilesSet; //! Tree representation of DatafilesSet, for use in DatafilesSelector. -class DatafilesQModel : public QAbstractItemModel { +class DatafilesQModel : public QAbstractListModel { Q_OBJECT public: explicit DatafilesQModel(QObject* parent, DatafilesSet* model); - bool setData(const QModelIndex& index, const QVariant& value, int role) override; void injectDatafileItem(DatafileItem* item); void removeDatafileItemAt(int row); - QModelIndex index(int row, int column, const QModelIndex& parent = {}) const override; - QModelIndex parent(const QModelIndex& index) const override; - int columnCount(const QModelIndex& parent = {}) const override; int rowCount(const QModelIndex& parent = {}) const override; QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; - Qt::ItemFlags flags(const QModelIndex& index) const override; - DatafileItem* itemForIndex(const QModelIndex& index) const; + + DatafileItem* itemForIndex(const QModelIndex& index) const; QModelIndex indexForItem(const DatafileItem* item) const; const DatafileItem* topMostItem() const; //!< The topmost visible item. Can be null. - bool isHeadline(const QModelIndex& index) const; + bool isHeadline(const QModelIndex&) const { return false; } private: - QModelIndex indexOfHeadline() const; - DatafilesSet* const m_model; }; diff --git a/GUI/Model/Files/DatafilesSet.h b/GUI/Model/Files/DatafilesSet.h index 4fb3a4d427afc17e1a9a52b68b95d70b9981253e..09d7a89966ee06b60ac30d0e18acc18559e5a87a 100644 --- a/GUI/Model/Files/DatafilesSet.h +++ b/GUI/Model/Files/DatafilesSet.h @@ -41,6 +41,7 @@ public: size_t size() const { return m_dfile_items.size(); } const OwningVector<DatafileItem>& dfileItems() const { return m_dfile_items; } const DatafileItem* dfileItemAt(int i) const { return m_dfile_items.at(i); } + DatafileItem* dfileItemAt(int i) { return m_dfile_items.at(i); } QStringList realItemNames() const; int currentIndex() const { return m_current_index; } void writeTo(QXmlStreamWriter* w) const;