1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
|
// ************************************************************************** //
//
// BornAgain: simulate and fit scattering at grazing incidence
//
//! @file GUI/coregui/Views/SampleDesigner/IView.cpp
//! @brief Implements class IView
//!
//! @homepage http://www.bornagainproject.org
//! @license GNU General Public License v3 or higher (see COPYING)
//! @copyright Forschungszentrum Jülich GmbH 2018
//! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
//
// ************************************************************************** //
#include "GUI/coregui/Views/SampleDesigner/IView.h"
#include "GUI/coregui/Models/SessionGraphicsItem.h"
#include <QString>
IView::IView(QGraphicsItem* parent) : QGraphicsObject(parent), m_item(0)
{
connect(this, SIGNAL(xChanged()), this, SLOT(onChangedX()));
connect(this, SIGNAL(yChanged()), this, SLOT(onChangedY()));
}
IView::~IView()
{
if (m_item)
m_item->mapper()->unsubscribe(this);
}
void IView::setParameterizedItem(SessionItem* item)
{
ASSERT(item);
ASSERT(m_item == nullptr);
if (toolTip().isEmpty())
setToolTip(item->toolTip());
m_item = item;
setX(m_item->getItemValue(SessionGraphicsItem::P_XPOS).toReal());
setY(m_item->getItemValue(SessionGraphicsItem::P_YPOS).toReal());
m_item->mapper()->setOnPropertyChange([this](const QString& name) { onPropertyChange(name); },
this);
m_item->mapper()->setOnSiblingsChange([this]() { onSiblingsChange(); }, this);
m_item->mapper()->setOnItemDestroy([this](SessionItem*) { m_item = 0; }, this);
update_appearance();
}
void IView::addView(IView*, int) {}
void IView::onChangedX()
{
if (!m_item)
return;
m_item->setItemValue(SessionGraphicsItem::P_XPOS, x());
}
void IView::onChangedY()
{
if (!m_item)
return;
m_item->setItemValue(SessionGraphicsItem::P_YPOS, y());
}
//! updates visual appearance of the item (color, icons, size etc)
void IView::update_appearance()
{
update();
}
void IView::onPropertyChange(const QString& propertyName)
{
ASSERT(m_item);
if (propertyName == SessionGraphicsItem::P_XPOS) {
setX(m_item->getItemValue(SessionGraphicsItem::P_XPOS).toReal());
} else if (propertyName == SessionGraphicsItem::P_YPOS) {
setY(m_item->getItemValue(SessionGraphicsItem::P_YPOS).toReal());
}
}
void IView::onSiblingsChange()
{
update_appearance();
}
|