BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
SessionDecorationModel.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file GUI/coregui/Models/SessionDecorationModel.cpp
6 //! @brief Defines class SessionDecorationModel
7 //!
8 //! @homepage http://www.bornagainproject.org
9 //! @license GNU General Public License v3 or higher (see COPYING)
10 //! @copyright Forschungszentrum Jülich GmbH 2018
11 //! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************************************
14 
20 #include <QColor>
21 #include <QIcon>
22 #include <QPixmap>
23 
24 namespace {
25 
26 struct IconCatalog {
27  QIcon gisasIcon;
28  QIcon offspecIcon;
29  QIcon specularIcon;
30  QIcon depthIcon;
31 
32  IconCatalog()
33  {
34  gisasIcon.addPixmap(QPixmap(":/images/gisas_instrument.svg"), QIcon::Selected);
35  gisasIcon.addPixmap(QPixmap(":/images/gisas_instrument_shaded.svg"), QIcon::Normal);
36  offspecIcon.addPixmap(QPixmap(":/images/offspec_instrument.svg"), QIcon::Selected);
37  offspecIcon.addPixmap(QPixmap(":/images/offspec_instrument_shaded.svg"), QIcon::Normal);
38  specularIcon.addPixmap(QPixmap(":/images/specular_instrument.svg"), QIcon::Selected);
39  specularIcon.addPixmap(QPixmap(":/images/specular_instrument_shaded.svg"), QIcon::Normal);
40  depthIcon.addPixmap(QPixmap(":/images/depth_instrument.svg"), QIcon::Selected);
41  depthIcon.addPixmap(QPixmap(":/images/depth_instrument_shaded.svg"), QIcon::Normal);
42  }
43 };
44 
45 IconCatalog& iconCatalog()
46 {
47  static IconCatalog result;
48  return result;
49 }
50 
51 QIcon materialIcon(const QColor& color)
52 {
53  QIcon result;
54  QPixmap pixmap(10, 10);
55  pixmap.fill(color);
56  result.addPixmap(pixmap);
57  return result;
58 }
59 
60 QIcon itemIcon(const SessionItem* item)
61 {
62  if (item->is<GISASInstrumentItem>())
63  return iconCatalog().gisasIcon;
64 
65  if (item->is<OffSpecularInstrumentItem>())
66  return iconCatalog().offspecIcon;
67 
68  if (item->is<SpecularInstrumentItem>())
69  return iconCatalog().specularIcon;
70 
71  if (item->is<DepthProbeInstrumentItem>())
72  return iconCatalog().depthIcon;
73 
74  if (item->modelType() == "Material") {
75  auto materialItem = dynamic_cast<const MaterialItem*>(item);
76  return materialIcon(materialItem->color());
77  }
78 
79  return QIcon();
80 }
81 
82 } // namespace
83 
85  : QIdentityProxyModel(parent), m_model(nullptr)
86 {
87  setSessionModel(model);
88 }
89 
91 {
92  QIdentityProxyModel::setSourceModel(model);
93  m_model = model;
94 }
95 
96 QVariant SessionDecorationModel::data(const QModelIndex& index, int role) const
97 {
98  if (role == Qt::DecorationRole) {
99  QVariant result = createIcon(index);
100  if (result.isValid())
101  return result;
102  }
103 
104  if (role == Qt::ForegroundRole) {
105  QVariant result = textColor(index);
106  if (result.isValid())
107  return result;
108  }
109 
110  return QIdentityProxyModel::data(index, role);
111 }
112 
113 QVariant SessionDecorationModel::createIcon(const QModelIndex& index) const
114 {
115  if (SessionItem* item = m_model->itemForIndex(index))
116  return QVariant(itemIcon(item));
117 
118  return QVariant();
119 }
120 
121 //! Returns text color. Disabled SessionItem's will appear in gray.
122 
123 QVariant SessionDecorationModel::textColor(const QModelIndex& index) const
124 {
125  QVariant result;
126 
127  if (SessionItem* item = m_model->itemForIndex(index)) {
128  if (item->isEnabled() == false)
129  return QColor(Qt::gray);
130  }
131 
132  return result;
133 }
Defines DepthProbeInstrumentItem class.
Defines InstrumentItems classes.
Defines class MaterialItem.
Defines class SessionDecorationModel.
Defines class SessionModel.
QVariant textColor(const QModelIndex &index) const
Returns text color. Disabled SessionItem's will appear in gray.
void setSessionModel(SessionModel *model)
SessionDecorationModel(QObject *parent, SessionModel *model=nullptr)
QVariant data(const QModelIndex &index, int role) const
QVariant createIcon(const QModelIndex &index) const
bool is() const
Definition: SessionItem.h:175
bool isEnabled() const
QString modelType() const
Get model type.
SessionItem * itemForIndex(const QModelIndex &index) const
QVariant DecorationRole(const SessionItem &item)
Returns tooltip for given item.
QVariant ForegroundRole(const SessionItem &item)
Returns text color for given item.