From 93067f85087a884ab40fde5f8f1eca7f9a3edd37 Mon Sep 17 00:00:00 2001 From: Gennady Pospelov <g.pospelov@fz-juelich.de> Date: Mon, 9 May 2016 16:58:22 +0200 Subject: [PATCH] Experimenting with proxy model --- GUI/coregui/Models/FitParameterProxyModel.cpp | 63 ++++++++++++++++--- GUI/coregui/Models/FitParameterProxyModel.h | 14 ++++- .../Views/FitWidgets/FitParametersWidget.cpp | 3 +- 3 files changed, 69 insertions(+), 11 deletions(-) diff --git a/GUI/coregui/Models/FitParameterProxyModel.cpp b/GUI/coregui/Models/FitParameterProxyModel.cpp index 51cd8ba18a0..9cd1405c6ec 100644 --- a/GUI/coregui/Models/FitParameterProxyModel.cpp +++ b/GUI/coregui/Models/FitParameterProxyModel.cpp @@ -16,14 +16,26 @@ #include "FitParameterProxyModel.h" #include "SessionItem.h" +#include "FitParameterItems.h" #include "JobModel.h" -FitParameterProxyModel::FitParameterProxyModel(JobModel *jobModel, QObject *parent) +//FitParameterProxyModel::FitParameterProxyModel(JobModel *jobModel, FitParameterContainerItem *fitParContainer, QObject *parent) +// : QAbstractProxyModel(parent) +// , m_jobModel(jobModel) +// , m_parContainer(fitParContainer) +//{ +// Q_ASSERT(m_jobModel); +// Q_ASSERT(m_parContainer); +// setSourceModel(m_jobModel); +//} + +FitParameterProxyModel::FitParameterProxyModel(FitParameterContainerItem *fitParContainer, QObject *parent) : QAbstractProxyModel(parent) - , m_jobModel(jobModel) + , m_parContainer(fitParContainer) { - Q_ASSERT(m_jobModel); - setSourceModel(m_jobModel); + Q_ASSERT(m_parContainer); + setSourceModel(fitParContainer->model()); + } QModelIndex FitParameterProxyModel::index(int row, int column, const QModelIndex &parent) const @@ -69,6 +81,21 @@ int FitParameterProxyModel::rowCount(const QModelIndex &parent) const { Q_ASSERT(parent.isValid() ? parent.model() == this : true); return sourceModel()->rowCount(mapToSource(parent)); + + if(!parent.isValid()) { + return m_parContainer->rowCount(); + } + +// QModelIndex sourceIndex = mapToSource(parent); + if (SessionItem *item = this->itemForIndex(parent)) { + if(item->modelType() == Constants::FitParameterContainerType || + item->modelType() == Constants::FitParameterType ) { + return item->rowCount(); + } + } + + return 0; +// return sourceModel()->rowCount(mapToSource(parent)); } int FitParameterProxyModel::columnCount(const QModelIndex &parent) const @@ -85,11 +112,23 @@ QModelIndex FitParameterProxyModel::mapToSource(const QModelIndex &proxyIndex) c // return QModelIndex(proxyIndex.row(), proxyIndex.column(), proxyIndex.internalPointer(), sourceModel()); // return sourceModel()->createIndex(proxyIndex.row(), proxyIndex.column(), proxyIndex.internalPointer()); - if (SessionItem *item = this->itemForIndex(proxyIndex)) - return item->index(); - + if (SessionItem *item = this->itemForIndex(proxyIndex)) { + QModelIndex sourceParent; + if(item->parent()) sourceParent = item->parent()->index(); + return jobModel()->index(proxyIndex.row(), proxyIndex.column(), sourceParent); +// return item->index(); + } return QModelIndex(); +// if(proxyIndex.isValid()) { +// const QModelIndex sourceIndex = mapToSource(proxyIndex); +// const QModelIndex sourceParent = sourceIndex.parent(); + +// return m_jobModel->index(proxyIndex.row(), proxyIndex.column(), sourceParent); +// } + +// return QModelIndex(); + } QModelIndex FitParameterProxyModel::mapFromSource(const QModelIndex &sourceIndex) const @@ -97,6 +136,11 @@ QModelIndex FitParameterProxyModel::mapFromSource(const QModelIndex &sourceIndex if (!sourceModel() || !sourceIndex.isValid()) return QModelIndex(); +// if (SessionItem *item = m_jobModel->itemForIndex(sourceIndex)) { + +// } + + Q_ASSERT(sourceIndex.model() == sourceModel()); return createIndex(sourceIndex.row(), sourceIndex.column(), sourceIndex.internalPointer()); } @@ -109,3 +153,8 @@ SessionItem *FitParameterProxyModel::itemForIndex(const QModelIndex &index) cons } return 0; } + +JobModel *FitParameterProxyModel::jobModel() const +{ + return dynamic_cast<JobModel *>(m_parContainer->model()); +} diff --git a/GUI/coregui/Models/FitParameterProxyModel.h b/GUI/coregui/Models/FitParameterProxyModel.h index 4801047b44d..751dc58d324 100644 --- a/GUI/coregui/Models/FitParameterProxyModel.h +++ b/GUI/coregui/Models/FitParameterProxyModel.h @@ -20,8 +20,11 @@ #include "WinDllMacros.h" #include <QAbstractProxyModel> -class SessionItem; +//class SessionItem; +//class JobModel; class JobModel; +class FitParameterContainerItem; +class SessionItem; //! The FitParameterProxyModel adopt original JobModel to show items from FitParameterContainer //! in 5 column tree view. @@ -31,7 +34,8 @@ class BA_CORE_API_ FitParameterProxyModel : public QAbstractProxyModel Q_OBJECT public: - explicit FitParameterProxyModel(JobModel *jobModel, QObject *parent = 0); +// explicit FitParameterProxyModel(JobModel *jobModel, FitParameterContainerItem *fitParContainer, QObject *parent = 0); + explicit FitParameterProxyModel(FitParameterContainerItem *fitParContainer, QObject *parent = 0); QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; QModelIndex parent(const QModelIndex &child) const; @@ -44,7 +48,11 @@ public: SessionItem *itemForIndex(const QModelIndex &index) const; private: - JobModel *m_jobModel; + JobModel *jobModel() const; + +// JobModel *m_jobModel; + FitParameterContainerItem *m_parContainer; +// JobItem *m_jobItem; }; diff --git a/GUI/coregui/Views/FitWidgets/FitParametersWidget.cpp b/GUI/coregui/Views/FitWidgets/FitParametersWidget.cpp index db505f99aad..101dc912928 100644 --- a/GUI/coregui/Views/FitWidgets/FitParametersWidget.cpp +++ b/GUI/coregui/Views/FitWidgets/FitParametersWidget.cpp @@ -252,7 +252,8 @@ void FitParametersWidget::init_job_item() m_fitParameterModel->createFitParameter(); spanParameters(); - FitParameterProxyModel *proxy = new FitParameterProxyModel(dynamic_cast<JobModel *>(m_jobItem->model())); +// FitParameterProxyModel *proxy = new FitParameterProxyModel(dynamic_cast<JobModel *>(m_jobItem->model()), parsContainerItem); + FitParameterProxyModel *proxy = new FitParameterProxyModel(m_jobItem->fitParameterContainerItem()); m_treeView->setModel(proxy); -- GitLab