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

Drop of ParameterItem to empty tree, cleanup in FitParameterWidget

parent c2dc3592
No related branches found
No related tags found
No related merge requests found
...@@ -27,24 +27,15 @@ ...@@ -27,24 +27,15 @@
void FitModelHelper::createFitParameter(FitParameterContainerItem *container, ParameterItem *parameterItem) void FitModelHelper::createFitParameter(FitParameterContainerItem *container, ParameterItem *parameterItem)
{ {
Q_ASSERT(container); Q_ASSERT(container);
Q_ASSERT(parameterItem);
removeFromFitParameters(container, parameterItem);
SessionItem *fitPar = container->model()->insertNewItem(Constants::FitParameterType, container->index()); SessionItem *fitPar = container->model()->insertNewItem(Constants::FitParameterType, container->index());
fitPar->setDisplayName(QStringLiteral("par")); fitPar->setDisplayName(QStringLiteral("par"));
Q_ASSERT(fitPar); SessionItem *link = fitPar->model()->insertNewItem(Constants::FitParameterLinkType, fitPar->index());
fitPar->setItemValue(FitParameterItem::P_START_VALUE, parameterItem->value());
// SessionItem *link = fitPar->model()->insertNewItem(Constants::FitParameterLinkType, fitPar->index()); link->setItemValue(FitParameterLinkItem::P_LINK, getParameterItemPath(parameterItem));
// Q_ASSERT(link);
// link->setItemValue(FitParameterLinkItem::P_LINK, "xxx");
// SessionItem *link2 = fitPar->model()->insertNewItem(Constants::FitParameterLinkType, fitPar->index());
// link2->setItemValue(FitParameterLinkItem::P_LINK, "yyy");
if(parameterItem) {
fitPar->setItemValue(FitParameterItem::P_START_VALUE, parameterItem->value());
SessionItem *link = fitPar->model()->insertNewItem(Constants::FitParameterLinkType, fitPar->index());
link->setItemValue(FitParameterLinkItem::P_LINK, getParameterItemPath(parameterItem));
}
} }
//! Removes link to given parameterItem from fit parameters //! Removes link to given parameterItem from fit parameters
......
...@@ -32,11 +32,13 @@ class JobItem; ...@@ -32,11 +32,13 @@ class JobItem;
class BA_CORE_API_ FitModelHelper : public SessionModel class BA_CORE_API_ FitModelHelper : public SessionModel
{ {
public: public:
static void createFitParameter(FitParameterContainerItem *container, ParameterItem *parameterItem);
static void createFitParameter(FitParameterContainerItem *container, ParameterItem *parameterItem = 0);
static void removeFromFitParameters(FitParameterContainerItem *container, ParameterItem *parameterItem); static void removeFromFitParameters(FitParameterContainerItem *container, ParameterItem *parameterItem);
static void addToFitParameter(FitParameterContainerItem *container, ParameterItem *parameterItem, const QString &fitParName); static void addToFitParameter(FitParameterContainerItem *container, ParameterItem *parameterItem, const QString &fitParName);
static FitParameterItem *getFitParameterItem(FitParameterContainerItem *container, ParameterItem *parameterItem); static FitParameterItem *getFitParameterItem(FitParameterContainerItem *container, ParameterItem *parameterItem);
static QStringList getFitParameterNames(FitParameterContainerItem *container); static QStringList getFitParameterNames(FitParameterContainerItem *container);
static QString getParameterItemPath(ParameterItem *parameterItem); static QString getParameterItemPath(ParameterItem *parameterItem);
static ParameterItem *getParameterItem(FitParameterContainerItem *container, const QString &link); static ParameterItem *getParameterItem(FitParameterContainerItem *container, const QString &link);
......
...@@ -26,12 +26,11 @@ ...@@ -26,12 +26,11 @@
#include <QDebug> #include <QDebug>
FitParameterAbsModel::FitParameterAbsModel(FitParameterContainerItem *fitParContainer, QObject *parent) FitParameterAbsModel::FitParameterAbsModel(FitParameterContainerItem *fitParContainer, QObject *parent)
: QAbstractItemModel(parent) : QAbstractItemModel(parent)
, m_root_item(fitParContainer) , m_root_item(fitParContainer)
{ {
m_columnNames.insert(PAR_NAME, "Name"); m_columnNames.insert(PAR_NAME, QStringLiteral("Name"));
m_columnNames.insert(PAR_TYPE, FitParameterItem::P_TYPE); m_columnNames.insert(PAR_TYPE, FitParameterItem::P_TYPE);
m_columnNames.insert(PAR_MIN, FitParameterItem::P_MIN); m_columnNames.insert(PAR_MIN, FitParameterItem::P_MIN);
m_columnNames.insert(PAR_MAX, FitParameterItem::P_MAX); m_columnNames.insert(PAR_MAX, FitParameterItem::P_MAX);
...@@ -44,7 +43,6 @@ FitParameterAbsModel::FitParameterAbsModel(FitParameterContainerItem *fitParCont ...@@ -44,7 +43,6 @@ FitParameterAbsModel::FitParameterAbsModel(FitParameterContainerItem *fitParCont
Q_ASSERT(parent == m_root_item); Q_ASSERT(parent == m_root_item);
m_root_item = 0; m_root_item = 0;
}); });
} }
Qt::ItemFlags FitParameterAbsModel::flags(const QModelIndex &index) const Qt::ItemFlags FitParameterAbsModel::flags(const QModelIndex &index) const
...@@ -53,29 +51,17 @@ Qt::ItemFlags FitParameterAbsModel::flags(const QModelIndex &index) const ...@@ -53,29 +51,17 @@ Qt::ItemFlags FitParameterAbsModel::flags(const QModelIndex &index) const
Qt::ItemFlags returnVal = Qt::ItemIsEnabled | Qt::ItemIsSelectable; Qt::ItemFlags returnVal = Qt::ItemIsEnabled | Qt::ItemIsSelectable;
if(SessionItem *item = itemForIndex(index)) { if(SessionItem *item = itemForIndex(index)) {
// if(item->isEnabled()) returnVal |= Qt::ItemIsEnabled;
if(item->isEditable()) returnVal |= Qt::ItemIsEditable; if(item->isEditable()) returnVal |= Qt::ItemIsEditable;
if(item->parent()->modelType() == Constants::FitParameterLinkType && index.column() == 0) { if(item->parent()->modelType() == Constants::FitParameterLinkType && index.column() == 0) {
returnVal |= Qt::ItemIsDragEnabled; returnVal |= Qt::ItemIsDragEnabled;
} }
if(item->modelType() == Constants::FitParameterType) { if(item->modelType() == Constants::FitParameterType || item->modelType() == Constants::FitParameterContainerType) {
returnVal |= Qt::ItemIsDropEnabled; returnVal |= Qt::ItemIsDropEnabled;
} }
} }
return returnVal; return returnVal;
// Qt::ItemFlags returnVal = Qt::ItemIsEnabled | Qt::ItemIsSelectable;
// if (index.isValid() && index.parent() == QModelIndex()) {
// if (index.column() == 0)
// returnVal |= Qt::ItemIsDropEnabled;
// else
// returnVal |= Qt::ItemIsEditable;
// } else if (!index.isValid()) {
// returnVal |= Qt::ItemIsDropEnabled;
// }
// return returnVal;
} }
QModelIndex FitParameterAbsModel::index(int row, int column, const QModelIndex &parent) const QModelIndex FitParameterAbsModel::index(int row, int column, const QModelIndex &parent) const
...@@ -243,19 +229,16 @@ bool FitParameterAbsModel::canDropMimeData(const QMimeData *data, Qt::DropAction ...@@ -243,19 +229,16 @@ bool FitParameterAbsModel::canDropMimeData(const QMimeData *data, Qt::DropAction
// if (column > 0) // if (column > 0)
// return false; // return false;
QString link = QString::fromLatin1(data->data(SessionXML::LinkMimeType)).split("#")[0]; QString link = QString::fromLatin1(data->data(SessionXML::LinkMimeType)).split("#")[0];
qDebug() << "FitParameterAbsModel::canDropMimeData" << "row:" << row << "column:" << column << "parent:" << parent << link; qDebug() << "FitParameterAbsModel::canDropMimeData" << "row:" << row << "column:" << column << "parent:" << parent << link << action;
if(parent.isValid()) { bool drop_is_possible(false);
qDebug() << "!!! true"; if(parent.isValid()) drop_is_possible = true;
return true; if(!parent.isValid() && row==-1 && column == -1) drop_is_possible = true;
} qDebug() << " FitParameterAbsModel::canDropMimeData" << drop_is_possible;
return false;
// QString link = QString::fromLatin1(data->data(ObsoleteFitParameterWidget::MIME_TYPE)).split("#")[0];
// QModelIndex cur = itemForLink(link);
// return !cur.isValid();
return drop_is_possible;
} }
bool FitParameterAbsModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) bool FitParameterAbsModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent)
...@@ -275,6 +258,11 @@ bool FitParameterAbsModel::dropMimeData(const QMimeData *data, Qt::DropAction ac ...@@ -275,6 +258,11 @@ bool FitParameterAbsModel::dropMimeData(const QMimeData *data, Qt::DropAction ac
} }
} }
if(!parent.isValid()) {
ParameterItem *parItem = FitModelHelper::getParameterItem(m_root_item, QString::fromLatin1(data->data(SessionXML::LinkMimeType)));
Q_ASSERT(parItem);
FitModelHelper::createFitParameter(m_root_item, parItem);
}
return true; return true;
} }
...@@ -330,7 +318,9 @@ void FitParameterAbsModel::onSourceBeginRemoveRows(const QModelIndex &parent, in ...@@ -330,7 +318,9 @@ void FitParameterAbsModel::onSourceBeginRemoveRows(const QModelIndex &parent, in
JobModel *sourceModel = qobject_cast<JobModel *>(sender()); JobModel *sourceModel = qobject_cast<JobModel *>(sender());
Q_ASSERT(sourceModel); Q_ASSERT(sourceModel);
// Two alternative ways which seems to be working // Two alternative ways which seems to be working
// FIXME Choose one method and cleanup
// way #1 // way #1
beginResetModel(); beginResetModel();
......
...@@ -83,6 +83,14 @@ FitParameterItem::FitParameterItem() ...@@ -83,6 +83,14 @@ FitParameterItem::FitParameterItem()
onTypeChange(); onTypeChange();
} }
//! init value, min, max from given ParameterItem
//void FitParameterItem::initFromParameterItem(ParameterItem *parItem)
//{
//}
//! Enables/disables min, max properties on FitParameterItem's type //! Enables/disables min, max properties on FitParameterItem's type
void FitParameterItem::onTypeChange() void FitParameterItem::onTypeChange()
......
...@@ -18,6 +18,8 @@ ...@@ -18,6 +18,8 @@
#include "SessionItem.h" #include "SessionItem.h"
class ParameterItem;
class BA_CORE_API_ FitParameterLinkItem : public SessionItem class BA_CORE_API_ FitParameterLinkItem : public SessionItem
{ {
...@@ -38,6 +40,8 @@ public: ...@@ -38,6 +40,8 @@ public:
static const QString T_LINK; static const QString T_LINK;
explicit FitParameterItem(); explicit FitParameterItem();
// void initFromParameterItem(ParameterItem *parItem);
private: private:
void onTypeChange(); void onTypeChange();
void setLimitEnabled(const QString &name, bool enabled); void setLimitEnabled(const QString &name, bool enabled);
......
...@@ -35,6 +35,8 @@ Qt::ItemFlags ParameterTuningModel::flags(const QModelIndex &proxyIndex) const ...@@ -35,6 +35,8 @@ Qt::ItemFlags ParameterTuningModel::flags(const QModelIndex &proxyIndex) const
QModelIndex sourceIndex = toSourceIndex(proxyIndex); QModelIndex sourceIndex = toSourceIndex(proxyIndex);
if(sourceIndex.isValid()) { if(sourceIndex.isValid()) {
if (sourceIndex.column() == SessionModel::ITEM_VALUE) result |= Qt::ItemIsEditable;
const QString modelType = sourceIndex.data(SessionModel::ModelTypeRole).toString(); const QString modelType = sourceIndex.data(SessionModel::ModelTypeRole).toString();
if(modelType == Constants::ParameterType) { if(modelType == Constants::ParameterType) {
result |= Qt::ItemIsDragEnabled; result |= Qt::ItemIsDragEnabled;
......
...@@ -57,20 +57,12 @@ FitParameterWidget::FitParameterWidget(QWidget *parent) ...@@ -57,20 +57,12 @@ FitParameterWidget::FitParameterWidget(QWidget *parent)
m_treeView->setSelectionBehavior(QAbstractItemView::SelectRows); m_treeView->setSelectionBehavior(QAbstractItemView::SelectRows);
m_treeView->setContextMenuPolicy(Qt::CustomContextMenu); m_treeView->setContextMenuPolicy(Qt::CustomContextMenu);
m_treeView->setItemDelegate(m_delegate); m_treeView->setItemDelegate(m_delegate);
connect(m_treeView, SIGNAL(customContextMenuRequested(const QPoint &)),
this, SLOT(onFitParameterTreeContextMenu(const QPoint &)));
m_treeView->setDragEnabled(true); m_treeView->setDragEnabled(true);
m_treeView->setDragDropMode(QAbstractItemView::DragDrop); m_treeView->setDragDropMode(QAbstractItemView::DragDrop);
m_treeView->installEventFilter(m_keyboardFilter); m_treeView->installEventFilter(m_keyboardFilter);
} connect(m_treeView, SIGNAL(customContextMenuRequested(const QPoint &)),
this, SLOT(onFitParameterTreeContextMenu(const QPoint &)));
FitParameterWidget::~FitParameterWidget()
{
qDebug() << "FitParametersWidget::~FitParametersWidget()";
} }
void FitParameterWidget::setItem(JobItem *jobItem) void FitParameterWidget::setItem(JobItem *jobItem)
...@@ -80,46 +72,37 @@ void FitParameterWidget::setItem(JobItem *jobItem) ...@@ -80,46 +72,37 @@ void FitParameterWidget::setItem(JobItem *jobItem)
} }
else { else {
if(m_jobItem)
stop_tracking_job_item();
m_jobItem = jobItem; m_jobItem = jobItem;
if (!m_jobItem) return; if (!m_jobItem) return;
init_job_item(); init_fit_containers();
init_fit_model();
} }
} }
//! Our FitParametersWidget will provide model tuning widget with context menu. //! Sets ParameterTuningWidget to be able to provide it with context menu and steer
//! It also will take care of cross-item-selection between parameterTuningTree //! it behaviour in the course of fit settings or fit runnig
//! and fitParametersTree
void FitParameterWidget::setModelTuningWidget(ParameterTuningWidget *tuningWidget) void FitParameterWidget::setParameterTuningWidget(ParameterTuningWidget *tuningWidget)
{ {
if(tuningWidget == m_tuningWidget) { if(tuningWidget == m_tuningWidget) {
return; return;
}
else { } else {
if(m_tuningWidget) { if(m_tuningWidget)
disconnect(m_tuningWidget, disconnect(m_tuningWidget, SIGNAL(itemContextMenuRequest(QPoint)),
SIGNAL(itemContextMenuRequest(QPoint)), this, SLOT(onTuningWidgetContextMenu(QPoint)));
this,
SLOT(onTuningWidgetContextMenu(QPoint)));
}
m_tuningWidget = tuningWidget; m_tuningWidget = tuningWidget;
if(!m_tuningWidget) return; if(!m_tuningWidget) return;
connect(m_tuningWidget, connect(m_tuningWidget, SIGNAL(itemContextMenuRequest(QPoint)),
SIGNAL(itemContextMenuRequest(QPoint)), this, SLOT(onTuningWidgetContextMenu(QPoint)), Qt::UniqueConnection);
this,
SLOT(onTuningWidgetContextMenu(QPoint)), Qt::UniqueConnection);
} }
} }
//! Creates context menu for ParameterTuningWidget
void FitParameterWidget::onTuningWidgetContextMenu(const QPoint &point) void FitParameterWidget::onTuningWidgetContextMenu(const QPoint &point)
{ {
QMenu menu; QMenu menu;
...@@ -128,9 +111,10 @@ void FitParameterWidget::onTuningWidgetContextMenu(const QPoint &point) ...@@ -128,9 +111,10 @@ void FitParameterWidget::onTuningWidgetContextMenu(const QPoint &point)
setActionsEnabled(true); setActionsEnabled(true);
} }
//! Creates context menu for the tree with fit parameters
void FitParameterWidget::onFitParameterTreeContextMenu(const QPoint &point) void FitParameterWidget::onFitParameterTreeContextMenu(const QPoint &point)
{ {
qDebug() << "FitParametersWidget::onFitParameterTreeContextMenu";
QMenu menu; QMenu menu;
initFitParameterTreeContextMenu(menu); initFitParameterTreeContextMenu(menu);
menu.exec(m_treeView->mapToGlobal(point+ QPoint(2, 22))); menu.exec(m_treeView->mapToGlobal(point+ QPoint(2, 22)));
...@@ -142,6 +126,8 @@ void FitParameterWidget::onTuningWidgetSelectionChanged(const QItemSelection &se ...@@ -142,6 +126,8 @@ void FitParameterWidget::onTuningWidgetSelectionChanged(const QItemSelection &se
Q_UNUSED(selection); Q_UNUSED(selection);
} }
//! Propagates selection form the tree with fit parameters to the tuning widget
void FitParameterWidget::onFitParametersSelectionChanged(const QItemSelection &selection) void FitParameterWidget::onFitParametersSelectionChanged(const QItemSelection &selection)
{ {
Q_UNUSED(selection); Q_UNUSED(selection);
...@@ -155,89 +141,62 @@ void FitParameterWidget::onFitParametersSelectionChanged(const QItemSelection &s ...@@ -155,89 +141,62 @@ void FitParameterWidget::onFitParametersSelectionChanged(const QItemSelection &s
} }
// QModelIndex index = selection.indexes().last();
// qDebug() << "XXX index" << selection.indexes() << index;
// QModelIndex newSelection = QModelIndex();
// if (index.isValid() && index.parent().isValid()) {
// SessionItem *val = m_fitParameterModel->itemForIndex(index);
//// QString link = val->getItemValue(FitParameterLinkItem::P_LINK).toString();
// qDebug() << "XXX val" << val->modelType() << val->displayName() << val->value();
//// QStandardItem *t = m_selectorModel->getItemFromPath(link);
//// newSelection = m_selectorModel->indexFromItem(t);
// }
//// connectSelectorView(false);
//// m_selectorTreeView->selectionModel()
//// ->select(newSelection, QItemSelectionModel::ClearAndSelect);
//// if (newSelection.isValid()) {
//// newSelection = newSelection.sibling(newSelection.row(), 1);
//// m_selectorTreeView->selectionModel()
//// ->select(newSelection, QItemSelectionModel::Select);
//// }
//// connectSelectorView();
} }
//! Creates fit parameters for all selected ParameterItem's in tuning widget
void FitParameterWidget::onCreateFitParAction() void FitParameterWidget::onCreateFitParAction()
{ {
foreach(ParameterItem *item, m_tuningWidget->getSelectedParameters()) { foreach(ParameterItem *item, m_tuningWidget->getSelectedParameters()) {
if(!FitModelHelper::getFitParameterItem(m_jobItem->fitParameterContainerItem(), item)) { if(!FitModelHelper::getFitParameterItem(m_jobItem->fitParameterContainerItem(), item)) {
FitModelHelper::createFitParameter(m_jobItem->fitParameterContainerItem(), item); FitModelHelper::createFitParameter(m_jobItem->fitParameterContainerItem(), item);
// m_fitParameterModel->createFitParameter(item);
// emit m_fitParameterModel->layoutChanged();
} }
} }
spanParameters();
} }
//! All ParameterItem's selected in tuned widget will be removed from link section of corresponding //! All ParameterItem's selected in tuning widget will be removed from link section of
//! fitParameterItem. //! corresponding fitParameterItem.
void FitParameterWidget::onRemoveFromFitParAction() void FitParameterWidget::onRemoveFromFitParAction()
{ {
foreach(ParameterItem *item, m_tuningWidget->getSelectedParameters()) { foreach(ParameterItem *item, m_tuningWidget->getSelectedParameters()) {
if(FitModelHelper::getFitParameterItem(m_jobItem->fitParameterContainerItem(), item)) { if(FitModelHelper::getFitParameterItem(m_jobItem->fitParameterContainerItem(), item)) {
FitModelHelper::removeFromFitParameters(m_jobItem->fitParameterContainerItem(), item); FitModelHelper::removeFromFitParameters(m_jobItem->fitParameterContainerItem(), item);
// m_fitParameterModel->removeFromFitParameters(item);
// emit m_fitParameterModel->layoutChanged();
} }
} }
} }
//! All selected FitParameterItems will be removed //! All selected FitParameterItem's of FitParameterItemLink's will be removed
void FitParameterWidget::onRemoveFitParAction() void FitParameterWidget::onRemoveFitParAction()
{ {
FitParameterContainerItem *container = m_jobItem->fitParameterContainerItem(); FitParameterContainerItem *container = m_jobItem->fitParameterContainerItem();
// retrieve both, selected FitParameterItem and FitParameterItemLink // retrieve both, selected FitParameterItem and FitParameterItemLink
QVector<FitParameterLinkItem *> linksToRemove = getSelectedFitParameterLinks(); QVector<FitParameterLinkItem *> linksToRemove = selectedFitParameterLinks();
QVector<FitParameterItem *> itemsToRemove = getSelectedFitParameters(); QVector<FitParameterItem *> itemsToRemove = selectedFitParameters();
// deleting first links
foreach(FitParameterLinkItem *item, linksToRemove) { foreach(FitParameterLinkItem *item, linksToRemove) {
container->model()->removeRow(item->index().row(), item->index().parent()); container->model()->removeRow(item->index().row(), item->index().parent());
} }
// at this point selection in the tree was already reset, but we have already our list of itemsToRemove
foreach(FitParameterItem *item, itemsToRemove) { foreach(FitParameterItem *item, itemsToRemove) {
container->model()->removeRow(item->index().row(), item->index().parent()); container->model()->removeRow(item->index().row(), item->index().parent());
} }
spanParameters();
} }
//! Add all selected parameters to fitParameter with given index //! Add all selected parameters to fitParameter with given index
void FitParameterWidget::onAddToFitParAction(int ipar) void FitParameterWidget::onAddToFitParAction(int ipar)
{ {
QStringList fitParNames = FitModelHelper::getFitParameterNames(m_jobItem->fitParameterContainerItem()); QStringList fitParNames = FitModelHelper::getFitParameterNames(m_jobItem->fitParameterContainerItem());
foreach(ParameterItem *item, m_tuningWidget->getSelectedParameters()) { foreach(ParameterItem *item, m_tuningWidget->getSelectedParameters()) {
//m_fitParameterModel->addToFitParameter(item, fitParNames.at(ipar));
FitModelHelper::addToFitParameter(m_jobItem->fitParameterContainerItem(), item, fitParNames.at(ipar)); FitModelHelper::addToFitParameter(m_jobItem->fitParameterContainerItem(), item, fitParNames.at(ipar));
// emit m_fitParameterModel->layoutChanged();
} }
spanParameters();
} }
//! Context menu reimplemented to suppress the default one //! Context menu reimplemented to suppress the default one
void FitParameterWidget::contextMenuEvent(QContextMenuEvent *event) void FitParameterWidget::contextMenuEvent(QContextMenuEvent *event)
{ {
Q_UNUSED(event); Q_UNUSED(event);
...@@ -258,25 +217,21 @@ void FitParameterWidget::init_actions() ...@@ -258,25 +217,21 @@ void FitParameterWidget::init_actions()
connect(m_signalMapper, SIGNAL(mapped(int)), this, SLOT(onAddToFitParAction(int))); connect(m_signalMapper, SIGNAL(mapped(int)), this, SLOT(onAddToFitParAction(int)));
connect(m_keyboardFilter, SIGNAL(removeItem()), this, SLOT(onRemoveFitParAction())); connect(m_keyboardFilter, SIGNAL(removeItem()), this, SLOT(onRemoveFitParAction()));
} }
//! Fills context menu for ParameterTuningWidget with content.
void FitParameterWidget::initTuningWidgetContextMenu(QMenu &menu) void FitParameterWidget::initTuningWidgetContextMenu(QMenu &menu)
{ {
Q_ASSERT(m_jobItem); m_removeFromFitParAction->setEnabled(canRemoveFromFitParameters());
m_createFitParAction->setEnabled(canCreateFitParameter());
if(isCreateFitParameterPossible()) {
m_removeFromFitParAction->setEnabled(false);
} else {
m_createFitParAction->setEnabled(false);
}
menu.addAction(m_createFitParAction); menu.addAction(m_createFitParAction);
QMenu *addToFitParMenu = menu.addMenu("Add to existing fit parameter"); QMenu *addToFitParMenu = menu.addMenu("Add to existing fit parameter");
QStringList fitParNames = FitModelHelper::getFitParameterNames(m_jobItem->fitParameterContainerItem()); QStringList fitParNames
if(fitParNames.isEmpty() || isCreateFitParameterPossible()==false) { = FitModelHelper::getFitParameterNames(m_jobItem->fitParameterContainerItem());
if(fitParNames.isEmpty() || canCreateFitParameter()==false) {
addToFitParMenu->setEnabled(false); addToFitParMenu->setEnabled(false);
} }
...@@ -291,20 +246,34 @@ void FitParameterWidget::initTuningWidgetContextMenu(QMenu &menu) ...@@ -291,20 +246,34 @@ void FitParameterWidget::initTuningWidgetContextMenu(QMenu &menu)
menu.addAction(m_removeFromFitParAction); menu.addAction(m_removeFromFitParAction);
} }
//! Fills context menu for FitParameterTree with content.
void FitParameterWidget::initFitParameterTreeContextMenu(QMenu &menu) void FitParameterWidget::initFitParameterTreeContextMenu(QMenu &menu)
{ {
menu.addAction(m_removeFitParAction); menu.addAction(m_removeFitParAction);
} }
//! stop tracking job item //! Initializes FitParameterModel and its tree.
void FitParameterWidget::stop_tracking_job_item()
void FitParameterWidget::init_fit_model()
{ {
Q_ASSERT(m_jobItem); m_treeView->setModel(0);
delete m_fitParameterModel;
m_fitParameterModel = new FitParameterAbsModel(m_jobItem->fitParameterContainerItem(),
m_jobItem->fitParameterContainerItem()->model());
m_treeView->setModel(m_fitParameterModel);
connect(m_fitParameterModel, SIGNAL(dataChanged(QModelIndex,QModelIndex,QVector<int>)),
this, SLOT(spanParameters()));
spanParameters();
connectFitParametersSelection(true);
} }
//! init job item: create fit containers if necessary, subscribes for item changing //! Adds to JobItem all fit containers, if necessary.
void FitParameterWidget::init_job_item()
void FitParameterWidget::init_fit_containers()
{ {
SessionItem *fitSuiteItem = m_jobItem->getItem(JobItem::T_FIT_SUITE); SessionItem *fitSuiteItem = m_jobItem->getItem(JobItem::T_FIT_SUITE);
if (!fitSuiteItem) { if (!fitSuiteItem) {
...@@ -319,48 +288,10 @@ void FitParameterWidget::init_job_item() ...@@ -319,48 +288,10 @@ void FitParameterWidget::init_job_item()
Constants::FitParameterContainerType, fitSuiteItem->index(), -1, Constants::FitParameterContainerType, fitSuiteItem->index(), -1,
FitSuiteItem::T_FIT_PARAMETERS); FitSuiteItem::T_FIT_PARAMETERS);
} }
// SessionItem *fitPar = parsContainerItem->model()->insertNewItem(Constants::FitParameterType,
// parsContainerItem->index());
// Q_ASSERT(fitPar);
// SessionItem *link1 = fitPar->model()->insertNewItem(Constants::FitParameterLinkType, fitPar->index());
// link1->setItemValue(FitParameterLinkItem::P_LINK, "abc1");
// SessionItem *link2 = fitPar->model()->insertNewItem(Constants::FitParameterLinkType, fitPar->index());
// link2->setItemValue(FitParameterLinkItem::P_LINK, "xyz1");
FitModelHelper::createFitParameter(m_jobItem->fitParameterContainerItem());
FitModelHelper::createFitParameter(m_jobItem->fitParameterContainerItem());
// m_fitParameterModel.reset(new FitParameterModel(parsContainerItem));
// m_fitParameterModel.reset(new FitParameterAbsModel(m_jobItem->fitParameterContainerItem()));
delete m_fitParameterModel;
m_fitParameterModel = new FitParameterAbsModel(m_jobItem->fitParameterContainerItem(), m_jobItem->fitParameterContainerItem()->model());
m_treeView->setModel(m_fitParameterModel);
connect(m_fitParameterModel, SIGNAL(dataChanged(QModelIndex,QModelIndex,QVector<int>)),
this, SLOT(spanParameters()));
// connect(m_fitParameterModel, SIGNAL(rowsInserted(QModelIndex,int,int)),
// this, SLOT(spanParameters()));
// m_fitParameterModel->createFitParameter();
spanParameters();
// FitParameterProxyModel *proxy = new FitParameterProxyModel(dynamic_cast<JobModel *>(m_jobItem->model()), parsContainerItem);
// FitParameterProxyModel *proxy = new FitParameterProxyModel(m_jobItem->fitParameterContainerItem());
// m_treeView->setModel(proxy);
// m_treeView->setRootIndex(proxy->mapFromSource(m_jobItem->fitParameterContainerItem()->index()));
// m_fitParameterAbsModel.reset(new FitParameterAbsModel(m_jobItem->fitParameterContainerItem()));
// m_treeView->setModel(m_fitParameterAbsModel.get());
connectFitParametersSelection(true);
} }
//! Make first column in FitParameterItem's link occupy whole space //! Makes first column in FitParameterItem's tree related to ParameterItem link occupy whole space.
void FitParameterWidget::spanParameters() void FitParameterWidget::spanParameters()
{ {
m_treeView->expandAll(); m_treeView->expandAll();
...@@ -375,21 +306,37 @@ void FitParameterWidget::spanParameters() ...@@ -375,21 +306,37 @@ void FitParameterWidget::spanParameters()
} }
} }
} }
}
//! Returns true if tuning widget contains selected ParameterItem's which can be used to create
//! a fit parameter (i.e. it is not linked with some fit parameter already).
bool FitParameterWidget::canCreateFitParameter()
{
QVector<ParameterItem *> selected = m_tuningWidget->getSelectedParameters();
foreach(ParameterItem *item, selected) {
if(FitModelHelper::getFitParameterItem(
m_jobItem->fitParameterContainerItem(), item) == nullptr)
return true;
}
return false;
} }
//! Returns true if it is possible to create fit parameter. There should be some ParameterItem's //! Returns true if tuning widget contains selected ParameterItem's which can be removed from
//! selected in model tuning widget and they should not be in FitParameterContainer already //! fit parameters.
bool FitParameterWidget::isCreateFitParameterPossible()
bool FitParameterWidget::canRemoveFromFitParameters()
{ {
QVector<ParameterItem *> selected = m_tuningWidget->getSelectedParameters(); QVector<ParameterItem *> selected = m_tuningWidget->getSelectedParameters();
foreach(ParameterItem *item, selected) { foreach(ParameterItem *item, selected) {
if(FitModelHelper::getFitParameterItem(m_jobItem->fitParameterContainerItem(), item) == nullptr) if(FitModelHelper::getFitParameterItem(m_jobItem->fitParameterContainerItem(), item))
return true; return true;
} }
return false; return false;
} }
//! Enables/disables all context menu actions.
void FitParameterWidget::setActionsEnabled(bool value) void FitParameterWidget::setActionsEnabled(bool value)
{ {
m_createFitParAction->setEnabled(value); m_createFitParAction->setEnabled(value);
...@@ -399,7 +346,7 @@ void FitParameterWidget::setActionsEnabled(bool value) ...@@ -399,7 +346,7 @@ void FitParameterWidget::setActionsEnabled(bool value)
//! Returns list of FitParameterItem's currently selected in FitParameterItem tree //! Returns list of FitParameterItem's currently selected in FitParameterItem tree
QVector<FitParameterItem *> FitParameterWidget::getSelectedFitParameters() QVector<FitParameterItem *> FitParameterWidget::selectedFitParameters()
{ {
QVector<FitParameterItem *> result; QVector<FitParameterItem *> result;
QModelIndexList indexes = m_treeView->selectionModel()->selectedIndexes(); QModelIndexList indexes = m_treeView->selectionModel()->selectedIndexes();
...@@ -416,14 +363,16 @@ QVector<FitParameterItem *> FitParameterWidget::getSelectedFitParameters() ...@@ -416,14 +363,16 @@ QVector<FitParameterItem *> FitParameterWidget::getSelectedFitParameters()
} }
//! Returns links of FitParameterLink's item selected in FitParameterItem tree //! Returns links of FitParameterLink's item selected in FitParameterItem tree
QVector<FitParameterLinkItem *> FitParameterWidget::getSelectedFitParameterLinks()
QVector<FitParameterLinkItem *> FitParameterWidget::selectedFitParameterLinks()
{ {
QVector<FitParameterLinkItem *> result; QVector<FitParameterLinkItem *> result;
QModelIndexList indexes = m_treeView->selectionModel()->selectedIndexes(); QModelIndexList indexes = m_treeView->selectionModel()->selectedIndexes();
foreach(QModelIndex index, indexes) { foreach (QModelIndex index, indexes) {
if(SessionItem *item = m_fitParameterModel->itemForIndex(index)) { if (SessionItem *item = m_fitParameterModel->itemForIndex(index)) {
if(item->parent()->modelType() == Constants::FitParameterLinkType) { if (item->parent()->modelType() == Constants::FitParameterLinkType) {
FitParameterLinkItem *fitParItem = dynamic_cast<FitParameterLinkItem *>(item->parent()); FitParameterLinkItem *fitParItem
= dynamic_cast<FitParameterLinkItem *>(item->parent());
Q_ASSERT(fitParItem); Q_ASSERT(fitParItem);
result.push_back(fitParItem); result.push_back(fitParItem);
} }
...@@ -457,6 +406,5 @@ void FitParameterWidget::connectFitParametersSelection(bool active) { ...@@ -457,6 +406,5 @@ void FitParameterWidget::connectFitParametersSelection(bool active) {
disconnect(m_treeView->selectionModel(), disconnect(m_treeView->selectionModel(),
SIGNAL(selectionChanged(QItemSelection,QItemSelection)), SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
this, SLOT(onFitParametersSelectionChanged(QItemSelection))); this, SLOT(onFitParametersSelectionChanged(QItemSelection)));
} }
} }
...@@ -44,10 +44,9 @@ class BA_CORE_API_ FitParameterWidget : public QWidget ...@@ -44,10 +44,9 @@ class BA_CORE_API_ FitParameterWidget : public QWidget
Q_OBJECT Q_OBJECT
public: public:
FitParameterWidget(QWidget *parent = 0); FitParameterWidget(QWidget *parent = 0);
~FitParameterWidget();
void setItem(JobItem *jobItem); void setItem(JobItem *jobItem);
void setModelTuningWidget(ParameterTuningWidget *tuningWidget); void setParameterTuningWidget(ParameterTuningWidget *tuningWidget);
public slots: public slots:
void onTuningWidgetContextMenu(const QPoint &point); void onTuningWidgetContextMenu(const QPoint &point);
...@@ -70,15 +69,18 @@ private: ...@@ -70,15 +69,18 @@ private:
void initTuningWidgetContextMenu(QMenu &menu); void initTuningWidgetContextMenu(QMenu &menu);
void initFitParameterTreeContextMenu(QMenu &menu); void initFitParameterTreeContextMenu(QMenu &menu);
void stop_tracking_job_item(); void init_fit_model();
void init_job_item(); void init_fit_containers();
bool isCreateFitParameterPossible();
bool canCreateFitParameter();
bool canRemoveFromFitParameters();
void setActionsEnabled(bool value); void setActionsEnabled(bool value);
void connectTuningWidgetSelection(bool active); void connectTuningWidgetSelection(bool active);
void connectFitParametersSelection(bool active); void connectFitParametersSelection(bool active);
QVector<FitParameterItem *> getSelectedFitParameters(); QVector<FitParameterItem *> selectedFitParameters();
QVector<FitParameterLinkItem *> getSelectedFitParameterLinks(); QVector<FitParameterLinkItem *> selectedFitParameterLinks();
QTreeView *m_treeView; QTreeView *m_treeView;
JobItem *m_jobItem; JobItem *m_jobItem;
......
...@@ -72,7 +72,7 @@ void FitSuiteWidget::setModelTuningWidget(ParameterTuningWidget *tuningWidget) ...@@ -72,7 +72,7 @@ void FitSuiteWidget::setModelTuningWidget(ParameterTuningWidget *tuningWidget)
{ {
Q_ASSERT(m_fitParametersWidget); Q_ASSERT(m_fitParametersWidget);
Q_ASSERT(tuningWidget); Q_ASSERT(tuningWidget);
m_fitParametersWidget->setModelTuningWidget(tuningWidget); m_fitParametersWidget->setParameterTuningWidget(tuningWidget);
} }
void FitSuiteWidget::onError(const QString &text) void FitSuiteWidget::onError(const QString &text)
......
...@@ -53,7 +53,7 @@ void TestFitWidgets::showEvent(QShowEvent *) ...@@ -53,7 +53,7 @@ void TestFitWidgets::showEvent(QShowEvent *)
m_jobItem = jobItem; m_jobItem = jobItem;
m_tuningWidget->setItem(jobItem); m_tuningWidget->setItem(jobItem);
m_fitParametersWidget->setItem(jobItem); m_fitParametersWidget->setItem(jobItem);
m_fitParametersWidget->setModelTuningWidget(m_tuningWidget); m_fitParametersWidget->setParameterTuningWidget(m_tuningWidget);
m_jobTreeView->setModel(m_mainWindow->jobModel()); m_jobTreeView->setModel(m_mainWindow->jobModel());
m_jobTreeView->setRootIndex(jobItem->fitSuiteItem()->index()); m_jobTreeView->setRootIndex(jobItem->fitSuiteItem()->index());
} }
......
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