Skip to content
Snippets Groups Projects
Commit 93067f85 authored by Pospelov, Gennady's avatar Pospelov, Gennady
Browse files

Experimenting with proxy model

parent ef404064
No related branches found
No related tags found
No related merge requests found
......@@ -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());
}
......@@ -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;
};
......
......@@ -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);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment