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

Fixes in LayerView to update color if material has changed

parent cf58dac5
No related branches found
No related tags found
No related merge requests found
......@@ -58,9 +58,6 @@ void SampleModel::onMaterialModelChanged(const QModelIndex &first, const QModelI
void SampleModel::exploreForMaterials(const QModelIndex &parentIndex)
{
qDebug() << "SampleModel::exploreForMaterials";
if (!parentIndex.isValid()) {
qDebug() << "Dumping model";
}
......@@ -74,8 +71,11 @@ void SampleModel::exploreForMaterials(const QModelIndex &parentIndex)
MaterialProperty material_property
= item->getRegisteredProperty(LayerItem::P_MATERIAL).value<MaterialProperty>();
if (material_property.getIdentifier() == m_material_identifier) {
item->setRegisteredProperty(LayerItem::P_MATERIAL,
material_property.getVariant());
// item->setRegisteredProperty(LayerItem::P_MATERIAL,
// material_property.getVariant());
// MaterialProperty of the layer corresponds to the material which just has been changed
// To trigger color change in ILayerView we have to trigger propertyChanged
emit item->propertyChanged(LayerItem::P_MATERIAL);
}
}
} else {
......
......@@ -25,7 +25,6 @@
#include <QGraphicsSceneMouseEvent>
#include <QDebug>
QLineF MultiLayerCandidate::getInterfaceToScene()
{
Q_ASSERT(multilayer);
......@@ -33,34 +32,32 @@ QLineF MultiLayerCandidate::getInterfaceToScene()
return QLineF(multilayer->mapToScene(line.p1()), multilayer->mapToScene(line.p2()));
}
bool MultiLayerCandidate::operator< (const MultiLayerCandidate& cmp) const
bool MultiLayerCandidate::operator<(const MultiLayerCandidate &cmp) const
{
return cmp.distance < distance;
return cmp.distance < distance;
}
ILayerView::ILayerView(QGraphicsItem *parent)
: ConnectableView(parent)
ILayerView::ILayerView(QGraphicsItem *parent) : ConnectableView(parent)
{
setFlag(QGraphicsItem::ItemIsMovable, true);
setFlag(QGraphicsItem::ItemIsSelectable, true);
setFlag(QGraphicsItem::ItemSendsGeometryChanges);
}
//! Propagates change of 'Thickness' dynamic property to screen thickness of ILayerView.
void ILayerView::onPropertyChange(const QString &propertyName)
{
Q_ASSERT(m_item);
if(propertyName == LayerItem::P_THICKNESS) {
m_rect.setHeight(DesignerHelper::nanometerToScreen(m_item->getRegisteredProperty(LayerItem::P_THICKNESS).toDouble()));
if (propertyName == LayerItem::P_THICKNESS) {
m_rect.setHeight(DesignerHelper::nanometerToScreen(
m_item->getRegisteredProperty(LayerItem::P_THICKNESS).toDouble()));
setPortCoordinates();
update();
emit heightChanged();
}else if(propertyName == "Material") {
qDebug() << " ------------- > ILayerView::onPropertyChange Material";
MaterialProperty mp = getParameterizedItem()->property("Material").value<MaterialProperty>();
} else if (propertyName == LayerItem::P_MATERIAL) {
//qDebug() << " ------------- > ILayerView::onPropertyChange Material";
MaterialProperty mp
= getParameterizedItem()->property("Material").value<MaterialProperty>();
setColor(mp.getColor());
update();
} else {
......@@ -68,20 +65,16 @@ void ILayerView::onPropertyChange(const QString &propertyName)
}
}
void ILayerView::setParameterizedItem(ParameterizedItem *item)
{
QVariant v = item->property(LayerItem::P_MATERIAL.toUtf8().constData());
if(v.isValid()) {
if (v.isValid()) {
MaterialProperty mp = v.value<MaterialProperty>();
setColor(mp.getColor());
}
ConnectableView::setParameterizedItem(item);
}
//! Detects movement of the ILayerView and sends possible drop areas to GraphicsScene
//! for visualization.
QVariant ILayerView::itemChange(GraphicsItemChange change, const QVariant &value)
......@@ -89,36 +82,34 @@ QVariant ILayerView::itemChange(GraphicsItemChange change, const QVariant &value
if (change == ItemPositionChange && scene()) {
MultiLayerCandidate multilayerCandidate = getMultiLayerCandidate();
if(multilayerCandidate) {
if (multilayerCandidate) {
DesignerScene *designerScene = dynamic_cast<DesignerScene *>(scene());
designerScene->setLayerInterfaceLine(multilayerCandidate.getInterfaceToScene());
}
}
return QGraphicsItem::itemChange(change, value);
}
void ILayerView::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
if(event->button() == Qt::LeftButton) {
if (event->button() == Qt::LeftButton) {
m_drag_start_position = pos();
}
QGraphicsItem::mousePressEvent(event);
}
//! Detects possible MultiLayerView's to drop given ILayerView and propagate
//! request to SessionModel.
void ILayerView::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
qDebug() << "ILayerView::mouseReleaseEvent() this:" << this << getParameterizedItem()->itemName() << " parentItem: " << parentItem();
qDebug() << "ILayerView::mouseReleaseEvent() this:" << this
<< getParameterizedItem()->itemName() << " parentItem: " << parentItem();
DesignerScene *designerScene = dynamic_cast<DesignerScene *>(scene());
Q_ASSERT(designerScene);
designerScene->setLayerInterfaceLine(); // removing drop area hint from the scene
if(QLineF(m_drag_start_position, pos()).length() == 0) {
if (QLineF(m_drag_start_position, pos()).length() == 0) {
QGraphicsItem::mouseReleaseEvent(event);
return;
}
......@@ -127,10 +118,11 @@ void ILayerView::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
MultiLayerView *requested_parent = candidate.multilayer;
int requested_row = candidate.row;
qDebug() << "ILayerView::mouseReleaseEvent() requested_parent:" << requested_parent << " requested_row:" << requested_row;
// qDebug() << "ILayerView::mouseReleaseEvent() requested_parent:" << requested_parent
// << " requested_row:" << requested_row;
// Simple move of lonely layer across the scene: let it be.
if(requested_parent == 0 && parentItem() == 0) {
if (requested_parent == 0 && parentItem() == 0) {
qDebug() << "ILayerView::mouseReleaseEvent() simple move of lonely layer";
QGraphicsItem::mouseReleaseEvent(event);
return;
......@@ -138,7 +130,7 @@ void ILayerView::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
// Layer was moved on top of MultiLayer but not in the right drop area:
// returning layer back to starting position.
if(requested_parent && requested_row == -1) {
if (requested_parent && requested_row == -1) {
qDebug() << "1.1 Layer->MultiLayer, wrong drop area.";
setPos(m_drag_start_position);
QGraphicsItem::mouseReleaseEvent(event);
......@@ -148,7 +140,8 @@ void ILayerView::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
SampleModel *model = designerScene->getSampleModel();
// Layer was moved only slightly, to the same row of his own MultiLayer: returning back.
if(requested_parent == parentItem() && requested_row == model->indexOfItem(getParameterizedItem()).row()) {
if (requested_parent == parentItem()
&& requested_row == model->indexOfItem(getParameterizedItem()).row()) {
qDebug() << "1.2 Layer->MultiLayer (same), same drop area";
setPos(m_drag_start_position);
QGraphicsItem::mouseReleaseEvent(event);
......@@ -157,9 +150,9 @@ void ILayerView::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
// Layer was moved from MultiLayer it belongs to, to an empty place of
// the scene: changing ownership.
if(parentItem() && !requested_parent) {
if (parentItem() && !requested_parent) {
qDebug() << "1.3 Layer->Scene";
setPos( mapToScene(event->pos()) - event->pos());
setPos(mapToScene(event->pos()) - event->pos());
model->moveParameterizedItem(this->getParameterizedItem(), 0);
QGraphicsItem::mouseReleaseEvent(event);
return;
......@@ -167,9 +160,10 @@ void ILayerView::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
// Layer was moved either from one MultiLayer to another, or is moved inside
// one multilayer: changing ownership or row within same ownership.
if(requested_parent) {
if (requested_parent) {
qDebug() << "1.4 ILayerView->MultiLayer";
model->moveParameterizedItem(this->getParameterizedItem(), requested_parent->getParameterizedItem(), requested_row);
model->moveParameterizedItem(this->getParameterizedItem(),
requested_parent->getParameterizedItem(), requested_row);
QGraphicsItem::mouseReleaseEvent(event);
return;
}
......@@ -178,7 +172,6 @@ void ILayerView::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
throw GUIHelpers::Error(tr("LayerView::mouseReleaseEvent() -> Loggic error."));
}
//! Finds candidate (another MultiLayer) into which we will move our ILayerView.
//!
//! To become the candidate, the bounding rectangles of MultiLayerView and given
......@@ -187,19 +180,16 @@ void ILayerView::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
//! to the distance between drop area and ILayerVIew center
MultiLayerCandidate ILayerView::getMultiLayerCandidate()
{
//qDebug() << "ILayerView::getMultiLayerCandidate()";
// qDebug() << "ILayerView::getMultiLayerCandidate()";
QVector<MultiLayerCandidate > candidates;
QVector<MultiLayerCandidate> candidates;
QRectF layerRect = mapRectToScene(boundingRect());
foreach(QGraphicsItem *item, scene()->items()) {
if(item->type() == DesignerHelper::MULTILAYER
&& item != this
&& !childItems().contains(item)
)
{
foreach (QGraphicsItem *item, scene()->items()) {
if (item->type() == DesignerHelper::MULTILAYER && item != this
&& !childItems().contains(item)) {
MultiLayerView *multilayer = qgraphicsitem_cast<MultiLayerView *>(item);
if(multilayer->mapRectToScene(multilayer->boundingRect()).intersects(layerRect)) {
if (multilayer->mapRectToScene(multilayer->boundingRect()).intersects(layerRect)) {
MultiLayerCandidate candidate;
// calculate row number to drop ILayerView and distance to the nearest droping area
......@@ -216,14 +206,14 @@ MultiLayerCandidate ILayerView::getMultiLayerCandidate()
}
// sorting MultiLayerView candidates to find one whose drop area is closer
if(candidates.size()) {
if (candidates.size()) {
qSort(candidates.begin(), candidates.end());
//foreach(MultiLayerCandidate candidate, candidates) {
// qDebug() << "ILayerView::getMultiLayerCandidate() -> " << candidate.multilayer << candidate.distance << candidate.row;
// foreach(MultiLayerCandidate candidate, candidates) {
// qDebug() << "ILayerView::getMultiLayerCandidate() -> " << candidate.multilayer <<
// candidate.distance << candidate.row;
//}
return candidates.back();
}
return MultiLayerCandidate();
}
......@@ -14,6 +14,7 @@
// ************************************************************************** //
#include "LayerView.h"
#include "LayerItem.h"
#include "ParticleLayoutView.h"
#include "ParameterizedItem.h"
#include "MaterialProperty.h"
......@@ -70,4 +71,3 @@ void LayerView::addView(IView *childView, int /* row */)
//{
// return QGraphicsItem::itemChange(change, value);
//}
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