BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
ParticleView Class Reference

Class representing view of Particle item. More...

Inheritance diagram for ParticleView:
[legend]
Collaboration diagram for ParticleView:
[legend]

Public Slots

virtual void onChangedX ()
 
virtual void onChangedY ()
 

Signals

void aboutToBeDeleted ()
 

Public Member Functions

 ParticleView (QGraphicsItem *parent=0)
 
virtual NodeEditorPortaddPort (const QString &name, NodeEditorPort::EPortDirection direction, NodeEditorPort::EPortType port_type)
 adds port to view More...
 
void addView (IView *childView, int row=0)
 
virtual QRectF boundingRect () const
 
void connectInputPort (ConnectableView *other, int port_number)
 connects input port with given index with output port of other view More...
 
virtual QColor getColor () const
 
int getInputPortIndex (NodeEditorPort *port)
 
QList< NodeEditorPort * > getInputPorts ()
 
virtual SessionItemgetItem ()
 
virtual QString getLabel () const
 
virtual QString getName () const
 
QList< NodeEditorPort * > getOutputPorts ()
 
virtual QRectF getRectangle () const
 
void onPropertyChange (const QString &propertyName)
 
void paint (QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
 
virtual void setColor (const QColor &color)
 
virtual void setLabel (const QString &name)
 
virtual void setName (const QString &name)
 
virtual void setParameterizedItem (SessionItem *item)
 
virtual void setRectangle (QRectF rect)
 
int type () const
 

Protected Member Functions

virtual int getNumberOfInputPorts ()
 
virtual int getNumberOfOutputPorts ()
 
virtual int getNumberOfPorts ()
 
virtual void onSiblingsChange ()
 
virtual void setPortCoordinates ()
 
void update_appearance ()
 updates visual appearance of the item (color, icons, size etc) More...
 

Protected Attributes

QColor m_color
 
QList< NodeEditorPort * > m_input_ports
 
SessionItemm_item
 
QString m_label
 
double m_label_vspace
 
QString m_name
 
QList< NodeEditorPort * > m_output_ports
 
QRectF m_rect
 
int m_roundpar
 

Private Member Functions

QString hyphenate (const QString &name) const
 
void updatePixmap ()
 
void updateToolTip ()
 

Private Attributes

QPixmap m_pixmap
 

Detailed Description

Class representing view of Particle item.

Definition at line 22 of file ParticleView.h.

Constructor & Destructor Documentation

◆ ParticleView()

ParticleView::ParticleView ( QGraphicsItem *  parent = 0)

Definition at line 26 of file ParticleView.cpp.

26  : ConnectableView(parent)
27 {
28  setName("Particle");
32  ->setToolTip("Connect to the ParticleLayout");
34  ->setToolTip("Connect particle rotation to this port, if necessary");
35  m_label_vspace = StyleUtils::SizeOfLetterM().height() * 3.0;
36 }
ConnectableView(QGraphicsItem *parent=0, QRectF rect={0, 0, 50, 50})
virtual void setColor(const QColor &color)
virtual void setRectangle(QRectF rect)
virtual NodeEditorPort * addPort(const QString &name, NodeEditorPort::EPortDirection direction, NodeEditorPort::EPortType port_type)
adds port to view
virtual void setName(const QString &name)
static QRectF getParticleBoundingRect()
static QColor getDefaultParticleColor()
QSize SizeOfLetterM(const QWidget *widget=nullptr)
Returns size of largest letter of default system font.
Definition: StyleUtils.cpp:110

References ConnectableView::addPort(), NodeEditorPort::FORM_FACTOR, DesignerHelper::getDefaultParticleColor(), DesignerHelper::getParticleBoundingRect(), NodeEditorPort::INPUT, ConnectableView::m_label_vspace, NodeEditorPort::OUTPUT, ConnectableView::setColor(), ConnectableView::setName(), ConnectableView::setRectangle(), StyleUtils::SizeOfLetterM(), and NodeEditorPort::TRANSFORMATION.

Here is the call graph for this function:

Member Function Documentation

◆ aboutToBeDeleted

void IView::aboutToBeDeleted ( )
signalinherited

◆ addPort()

NodeEditorPort * ConnectableView::addPort ( const QString &  name,
NodeEditorPort::EPortDirection  direction,
NodeEditorPort::EPortType  port_type 
)
virtualinherited

adds port to view

Definition at line 68 of file ConnectableView.cpp.

71 {
72  NodeEditorPort* port = new NodeEditorPort(this, name, direction, port_type);
73  if (direction == NodeEditorPort::INPUT) {
74  m_input_ports.append(port);
75  } else if (direction == NodeEditorPort::OUTPUT) {
76  m_output_ports.append(port);
77  } else {
78  throw GUIHelpers::Error("ConnectableView::addPort() -> Unknown port type");
79  }
81  return port;
82 }
virtual void setPortCoordinates()
QList< NodeEditorPort * > m_input_ports
QList< NodeEditorPort * > m_output_ports
QString const & name(EShape k)
Definition: particles.cpp:21

References NodeEditorPort::INPUT, ConnectableView::m_input_ports, ConnectableView::m_output_ports, RealSpace::Particles::name(), NodeEditorPort::OUTPUT, and ConnectableView::setPortCoordinates().

Referenced by InterferenceFunction1DLatticeView::InterferenceFunction1DLatticeView(), InterferenceFunction2DLatticeView::InterferenceFunction2DLatticeView(), InterferenceFunction2DParaCrystalView::InterferenceFunction2DParaCrystalView(), InterferenceFunctionFinite2DLatticeView::InterferenceFunctionFinite2DLatticeView(), InterferenceFunctionHardDiskView::InterferenceFunctionHardDiskView(), InterferenceFunctionRadialParaCrystalView::InterferenceFunctionRadialParaCrystalView(), LayerView::LayerView(), MesoCrystalView::MesoCrystalView(), ParticleCompositionView::ParticleCompositionView(), ParticleCoreShellView::ParticleCoreShellView(), ParticleDistributionView::ParticleDistributionView(), ParticleLayoutView::ParticleLayoutView(), ParticleView(), and TransformationView::TransformationView().

Here is the call graph for this function:

◆ addView()

void ParticleView::addView ( IView childView,
int  row = 0 
)
virtual

Reimplemented from IView.

Definition at line 79 of file ParticleView.cpp.

80 {
81  if (childView->type() == ViewTypes::TRANSFORMATION) {
82  connectInputPort(dynamic_cast<ConnectableView*>(childView), 0);
83  } else {
84  throw GUIHelpers::Error("ParticleView::addView() -> Error. Unknown view");
85  }
86 }
view of ISampleNode's with rectangular shape and node functionality
void connectInputPort(ConnectableView *other, int port_number)
connects input port with given index with output port of other view
int type() const
Definition: IView.h:54
@ TRANSFORMATION
Definition: ViewTypes.h:40

References ConnectableView::connectInputPort(), ViewTypes::TRANSFORMATION, and IView::type().

Here is the call graph for this function:

◆ boundingRect()

virtual QRectF ConnectableView::boundingRect ( ) const
inlinevirtualinherited

Reimplemented in MultiLayerView.

Definition at line 34 of file ConnectableView.h.

34 { return getRectangle(); }
virtual QRectF getRectangle() const

References ConnectableView::getRectangle().

Referenced by ILayerView::getMultiLayerCandidate().

Here is the call graph for this function:

◆ connectInputPort()

void ConnectableView::connectInputPort ( ConnectableView other,
int  port_number 
)
inherited

connects input port with given index with output port of other view

Definition at line 90 of file ConnectableView.cpp.

91 {
92  ASSERT(other);
93 
94  if (port_number >= m_input_ports.size())
95  throw GUIHelpers::Error("ConnectableView::connectInputPort() -> Wrong input port number");
96 
97  if (other->getOutputPorts().size() != 1)
98  throw GUIHelpers::Error("ConnectableView::connectInputPort() -> Wrong output port number");
99 
100  if (port_number < 0)
101  return;
102 
103  NodeEditorPort* input = m_input_ports.at(port_number);
104  NodeEditorPort* output = other->getOutputPorts().at(0);
105 
106  if (!input->isConnected(output)) {
107  NodeEditorConnection* conn = new NodeEditorConnection(0, scene());
108  conn->setPort2(input);
109  conn->setPort1(output);
110  conn->updatePath();
111  }
112 }
#define ASSERT(condition)
Definition: Assert.h:31
QList< NodeEditorPort * > getOutputPorts()
void setPort2(NodeEditorPort *p)
void setPort1(NodeEditorPort *p)
bool isConnected(NodeEditorPort *)

References ASSERT, ConnectableView::getOutputPorts(), NodeEditorPort::isConnected(), ConnectableView::m_input_ports, NodeEditorConnection::setPort1(), NodeEditorConnection::setPort2(), and NodeEditorConnection::updatePath().

Referenced by LayerView::addView(), MesoCrystalView::addView(), ParticleCompositionView::addView(), ParticleCoreShellView::addView(), ParticleDistributionView::addView(), ParticleLayoutView::addView(), and addView().

Here is the call graph for this function:

◆ getColor()

virtual QColor ConnectableView::getColor ( ) const
inlinevirtualinherited

Definition at line 38 of file ConnectableView.h.

38 { return m_color; }

References ConnectableView::m_color.

◆ getInputPortIndex()

int ConnectableView::getInputPortIndex ( NodeEditorPort port)
inherited

Definition at line 114 of file ConnectableView.cpp.

115 {
116  return m_input_ports.indexOf(port);
117 }

References ConnectableView::m_input_ports.

Referenced by DesignerScene::onEstablishedConnection().

◆ getInputPorts()

QList<NodeEditorPort*> ConnectableView::getInputPorts ( )
inlineinherited

Definition at line 51 of file ConnectableView.h.

51 { return m_input_ports; }

References ConnectableView::m_input_ports.

Referenced by ILayerView::updateLabel().

◆ getItem()

◆ getLabel()

virtual QString ConnectableView::getLabel ( ) const
inlinevirtualinherited

Reimplemented in ILayerView.

Definition at line 41 of file ConnectableView.h.

41 { return m_label; }

References ConnectableView::m_label.

Referenced by ConnectableView::setPortCoordinates().

◆ getName()

virtual QString ConnectableView::getName ( ) const
inlinevirtualinherited

Definition at line 37 of file ConnectableView.h.

37 { return m_name; }

References ConnectableView::m_name.

◆ getNumberOfInputPorts()

int ConnectableView::getNumberOfInputPorts ( )
protectedvirtualinherited

Definition at line 168 of file ConnectableView.cpp.

169 {
170  return m_input_ports.size();
171 }

References ConnectableView::m_input_ports.

◆ getNumberOfOutputPorts()

int ConnectableView::getNumberOfOutputPorts ( )
protectedvirtualinherited

Definition at line 163 of file ConnectableView.cpp.

164 {
165  return m_output_ports.size();
166 }

References ConnectableView::m_output_ports.

Referenced by ConnectableView::setPortCoordinates().

◆ getNumberOfPorts()

int ConnectableView::getNumberOfPorts ( )
protectedvirtualinherited

Definition at line 158 of file ConnectableView.cpp.

159 {
160  return m_input_ports.size() + m_output_ports.size();
161 }

References ConnectableView::m_input_ports, and ConnectableView::m_output_ports.

Referenced by ConnectableView::setPortCoordinates().

◆ getOutputPorts()

QList<NodeEditorPort*> ConnectableView::getOutputPorts ( )
inlineinherited

Definition at line 52 of file ConnectableView.h.

52 { return m_output_ports; }

References ConnectableView::m_output_ports.

Referenced by ConnectableView::connectInputPort().

◆ getRectangle()

virtual QRectF ConnectableView::getRectangle ( ) const
inlinevirtualinherited

◆ hyphenate()

QString ConnectableView::hyphenate ( const QString &  name) const
privateinherited

Definition at line 179 of file ConnectableView.cpp.

180 {
181  QRegExp capital_letter("[A-Z]");
182  QRegExp number("[0-9]");
183  int next_capital = capital_letter.indexIn(name, 1);
184  int next_number = number.indexIn(name, 1);
185  if (next_capital > 0 && next_capital < name.size() - 2) {
186  int first_split_index =
187  (next_number > 0 && next_number < next_capital) ? next_number : next_capital;
188  QString result = name.left(first_split_index) + QString("\n")
189  + name.right(name.size() - first_split_index);
190  return result;
191  }
192  return name;
193 }

References RealSpace::Particles::name().

Referenced by ConnectableView::update_appearance().

Here is the call graph for this function:

◆ onChangedX

void IView::onChangedX ( )
virtualslotinherited

Definition at line 55 of file IView.cpp.

56 {
57  if (!m_item)
58  return;
60 }
static const QString P_XPOS
void setItemValue(const QString &tag, const QVariant &variant)
Directly set value of item under given tag.

References IView::m_item, SessionGraphicsItem::P_XPOS, and SessionItem::setItemValue().

Referenced by IView::IView().

Here is the call graph for this function:

◆ onChangedY

void IView::onChangedY ( )
virtualslotinherited

Definition at line 62 of file IView.cpp.

63 {
64  if (!m_item)
65  return;
67 }
static const QString P_YPOS

References IView::m_item, SessionGraphicsItem::P_YPOS, and SessionItem::setItemValue().

Referenced by IView::IView().

Here is the call graph for this function:

◆ onPropertyChange()

void ParticleView::onPropertyChange ( const QString &  propertyName)
virtual

Reimplemented from IView.

Definition at line 71 of file ParticleView.cpp.

72 {
73  if (propertyName == ParticleItem::P_FORM_FACTOR)
75 
76  IView::onPropertyChange(propertyName);
77 }
virtual void onPropertyChange(const QString &propertyName)
Definition: IView.cpp:75
static const QString P_FORM_FACTOR
Definition: ParticleItem.h:25
void update_appearance()
updates visual appearance of the item (color, icons, size etc)

References IView::onPropertyChange(), ParticleItem::P_FORM_FACTOR, and update_appearance().

Here is the call graph for this function:

◆ onSiblingsChange()

void IView::onSiblingsChange ( )
protectedvirtualinherited

Definition at line 85 of file IView.cpp.

86 {
88 }
virtual void update_appearance()
updates visual appearance of the item (color, icons, size etc)
Definition: IView.cpp:70

References IView::update_appearance().

Referenced by IView::setParameterizedItem().

Here is the call graph for this function:

◆ paint()

void ParticleView::paint ( QPainter *  painter,
const QStyleOptionGraphicsItem *  option,
QWidget *  widget 
)
virtual

Reimplemented from ConnectableView.

Definition at line 38 of file ParticleView.cpp.

39 {
40  Q_UNUSED(widget);
41  painter->setRenderHint(QPainter::SmoothPixmapTransform);
42  painter->setRenderHint(QPainter::Antialiasing);
43 
44  painter->setPen(Qt::gray);
45  if (option->state & (QStyle::State_Selected | QStyle::State_HasFocus)) {
46  painter->setPen(Qt::DashLine);
47  }
48 
50  painter->drawRoundedRect(getRectangle(), m_roundpar, m_roundpar);
51 
52  if (m_label.isEmpty())
53  return;
54 
55  painter->setPen(Qt::black);
56  double width = getRectangle().width() * 0.9;
57  double yoffset = 5; // space above the label
58  // double height = m_label_vspace - yoffset;
59  double height = 20;
60  QFont serifFont("Monospace", DesignerHelper::getLabelFontSize(), QFont::Normal);
61  painter->setFont(serifFont);
62  QRectF textRect(getRectangle().x() + (getRectangle().width() - width) / 2.,
63  getRectangle().y() + yoffset, width, height);
64  painter->drawText(textRect, Qt::AlignCenter, m_label);
65 
66  QRectF target(getRectangle().width() / 2 - 16, 25, 32, 32);
67  painter->drawPixmap(target, m_pixmap, QRectF(0.0, 0.0, m_pixmap.width(), m_pixmap.height()));
68  // painter->drawImage(target, m_pixmap);
69 }
static QGradient getDecorationGradient(const QColor &color, const QRectF &rect)
static int getLabelFontSize()
QPixmap m_pixmap
Definition: ParticleView.h:43

References DesignerHelper::getDecorationGradient(), DesignerHelper::getLabelFontSize(), ConnectableView::getRectangle(), ConnectableView::m_color, ConnectableView::m_label, m_pixmap, and ConnectableView::m_roundpar.

Here is the call graph for this function:

◆ setColor()

◆ setLabel()

void ConnectableView::setLabel ( const QString &  name)
virtualinherited

Definition at line 84 of file ConnectableView.cpp.

85 {
86  m_label = name;
88 }

References ConnectableView::m_label, RealSpace::Particles::name(), and ConnectableView::setPortCoordinates().

Referenced by ConnectableView::update_appearance().

Here is the call graph for this function:

◆ setName()

◆ setParameterizedItem()

void IView::setParameterizedItem ( SessionItem item)
virtualinherited

Definition at line 31 of file IView.cpp.

32 {
33  ASSERT(item);
34  ASSERT(m_item == nullptr);
35 
36  if (toolTip().isEmpty())
37  setToolTip(item->toolTip());
38 
39  m_item = item;
42 
43  m_item->mapper()->setOnPropertyChange([this](const QString& name) { onPropertyChange(name); },
44  this);
45 
46  m_item->mapper()->setOnSiblingsChange([this]() { onSiblingsChange(); }, this);
47 
48  m_item->mapper()->setOnItemDestroy([this](SessionItem*) { m_item = 0; }, this);
49 
51 }
virtual void onSiblingsChange()
Definition: IView.cpp:85
void setOnItemDestroy(std::function< void(SessionItem *)> f, const void *caller=0)
Definition: ModelMapper.cpp:87
void setOnPropertyChange(std::function< void(QString)> f, const void *caller=0)
Definition: ModelMapper.cpp:35
void setOnSiblingsChange(std::function< void(void)> f, const void *caller=0)
Definition: ModelMapper.cpp:73
QVariant getItemValue(const QString &tag) const
Directly access value of item under given tag.
ModelMapper * mapper()
Returns the current model mapper of this item. Creates new one if necessary.
QString toolTip() const

References ASSERT, SessionItem::getItemValue(), IView::m_item, SessionItem::mapper(), RealSpace::Particles::name(), IView::onPropertyChange(), IView::onSiblingsChange(), SessionGraphicsItem::P_XPOS, SessionGraphicsItem::P_YPOS, ModelMapper::setOnItemDestroy(), ModelMapper::setOnPropertyChange(), ModelMapper::setOnSiblingsChange(), SessionItem::toolTip(), and IView::update_appearance().

Referenced by DesignerScene::addViewForItem().

Here is the call graph for this function:

◆ setPortCoordinates()

void ConnectableView::setPortCoordinates ( )
protectedvirtualinherited

Definition at line 120 of file ConnectableView.cpp.

121 {
122  if (!getNumberOfPorts())
123  return;
124 
125  // without main label ports can be placed over all rectangle vertical space
126  double hspace = getRectangle().height();
127  if (!getLabel().isEmpty())
128  hspace -= m_label_vspace;
129 
130  double nintervals =
131  getNumberOfPorts() + 2; // one spare interval for margin between input/output ports
132 
133  double dy = hspace / double(nintervals);
134  double ypos = getRectangle().height() - hspace + dy;
135 
136  if (getNumberOfPorts() == 1) {
137  // if total number of ports is 1, place it in the middle
138  ypos = getRectangle().height() - hspace + hspace / 2;
139  }
140  int nOutPorts = getNumberOfOutputPorts();
141  int nport(0);
142  for (QGraphicsItem* item : childItems()) {
143  NodeEditorPort* port = dynamic_cast<NodeEditorPort*>(item);
144  if (!port)
145  continue;
146  if (port->isOutput()) {
147  port->setPos(getRectangle().width(), ypos);
148  } else {
149  if (nport == nOutPorts && nOutPorts != 0)
150  ypos += dy; // additional margin between output and input ports
151  port->setPos(0.0, ypos);
152  }
153  ypos += dy;
154  nport++;
155  }
156 }
virtual QString getLabel() const
virtual int getNumberOfPorts()
virtual int getNumberOfOutputPorts()

References ConnectableView::getLabel(), ConnectableView::getNumberOfOutputPorts(), ConnectableView::getNumberOfPorts(), ConnectableView::getRectangle(), NodeEditorPort::isOutput(), and ConnectableView::m_label_vspace.

Referenced by ConnectableView::addPort(), ConnectableView::setLabel(), and ILayerView::updateHeight().

Here is the call graph for this function:

◆ setRectangle()

◆ type()

int ParticleView::type ( ) const
inline

Definition at line 28 of file ParticleView.h.

28 { return ViewTypes::PARTICLE; }
@ PARTICLE
Definition: ViewTypes.h:39

References ViewTypes::PARTICLE.

◆ update_appearance()

void ParticleView::update_appearance ( )
protectedvirtual

updates visual appearance of the item (color, icons, size etc)

Reimplemented from ConnectableView.

Definition at line 88 of file ParticleView.cpp.

89 {
90  updatePixmap();
91  updateToolTip();
93 }
virtual void update_appearance()
updates visual appearance of the item (color, icons, size etc)
void updateToolTip()
void updatePixmap()

References ConnectableView::update_appearance(), updatePixmap(), and updateToolTip().

Referenced by onPropertyChange().

Here is the call graph for this function:

◆ updatePixmap()

void ParticleView::updatePixmap ( )
private

Definition at line 95 of file ParticleView.cpp.

96 {
97  if (!getItem())
98  return;
99 
100  QString ff_type = getItem()->item<GroupItem>(ParticleItem::P_FORM_FACTOR)->currentType();
101  QString filename = QString(":/widgetbox/images/ff_%1_64x64.png").arg(ff_type);
102  m_pixmap = QPixmap(filename);
103 }
virtual SessionItem * getItem()
Definition: IView.h:59
T * item(const QString &tag) const
Definition: SessionItem.h:151
std::string filename(const std::string &path)
Returns path without directory part ("Foo/Bar/Doz.int.gz" -> "Doz.int.gz")

References FileSystemUtils::filename(), IView::getItem(), SessionItem::item(), m_pixmap, and ParticleItem::P_FORM_FACTOR.

Referenced by update_appearance().

Here is the call graph for this function:

◆ updateToolTip()

void ParticleView::updateToolTip ( )
private

Definition at line 105 of file ParticleView.cpp.

106 {
107  if (!getItem())
108  return;
109 
110  auto ffItem = getItem()->item<GroupItem>(ParticleItem::P_FORM_FACTOR)->currentItem();
111  setToolTip(ffItem->toolTip());
112 }

References IView::getItem(), SessionItem::item(), and ParticleItem::P_FORM_FACTOR.

Referenced by update_appearance().

Here is the call graph for this function:

Member Data Documentation

◆ m_color

QColor ConnectableView::m_color
protectedinherited

◆ m_input_ports

◆ m_item

◆ m_label

QString ConnectableView::m_label
protectedinherited

◆ m_label_vspace

◆ m_name

QString ConnectableView::m_name
protectedinherited

Definition at line 66 of file ConnectableView.h.

Referenced by ConnectableView::getName(), and ConnectableView::setName().

◆ m_output_ports

QList<NodeEditorPort*> ConnectableView::m_output_ports
protectedinherited

◆ m_pixmap

QPixmap ParticleView::m_pixmap
private

Definition at line 43 of file ParticleView.h.

Referenced by paint(), and updatePixmap().

◆ m_rect

◆ m_roundpar


The documentation for this class was generated from the following files: