BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
tooltipdatabase.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file GUI/coregui/mainwindow/tooltipdatabase.cpp
6 //! @brief Implements class ToolTipDataBase
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 
16 #include "Base/Utils/Assert.h"
18 #include <QFile>
19 #include <QXmlStreamReader>
20 
21 namespace {
22 const QString modelTag = "ToolTipsData";
23 const QString contextTag = "context";
24 const QString categoryTag = "category";
25 const QString propertyTag = "property";
26 const QString tooltipTag = "tooltip";
27 const QString whatsthisTag = "whatsthis";
28 const QString nameAttribute = "name";
29 const QString sampleViewContext = "SampleView";
30 const QString titleProperty = "Title";
31 const QString descriptionProperty = "Description";
32 } // namespace
33 
35 QMap<QString, QString> ToolTipDataBase::m_tagToToolTip = QMap<QString, QString>();
36 
37 ToolTipDataBase::ToolTipDataBase(QObject* parent) : QObject(parent)
38 {
40  m_instance = this;
41 
42  initDataBase();
43 }
44 
46 {
47  m_instance = 0;
48 }
49 
50 QString ToolTipDataBase::widgetboxToolTip(const QString& className)
51 {
53  QString modelName(className);
54  modelName.remove("FormFactor");
55  return m_instance->this_getToolTip(sampleViewContext, modelName, titleProperty);
56 }
57 
59 {
60  QFile file(":/mainwindow/tooltips.xml");
61  if (!file.open(QIODevice::ReadOnly))
62  throw GUIHelpers::Error(file.errorString());
63 
64  QXmlStreamReader reader(&file);
65 
66  QString contextName, className, propertyName;
67  while (!reader.atEnd()) {
68  switch (reader.readNext()) {
69  case QXmlStreamReader::StartElement: {
70  const QStringRef tag = reader.name();
71  if (tag == modelTag) {
72  continue;
73  }
74  if (tag == contextTag) {
75  const QXmlStreamAttributes attributes = reader.attributes();
76  contextName = attributes.value(nameAttribute).toString();
77  continue;
78  }
79  if (tag == categoryTag) {
80  const QXmlStreamAttributes attributes = reader.attributes();
81  className = attributes.value(nameAttribute).toString();
82  continue;
83  }
84  if (tag == propertyTag) {
85  const QXmlStreamAttributes attributes = reader.attributes();
86  propertyName = attributes.value(nameAttribute).toString();
87  continue;
88  }
89  if (tag == tooltipTag) {
90  reader.readNext();
91  QString toolTip = reader.text().toString();
92  addToolTip(contextName, className, propertyName, toolTip);
93  continue;
94  }
95  break;
96  }
97  case QXmlStreamReader::EndElement: {
98  break;
99  }
100  default:
101  break;
102  }
103  }
104 
105  if (reader.hasError())
106  throw GUIHelpers::Error(reader.errorString());
107 }
108 
109 QString ToolTipDataBase::getTag(const QString& contextName, const QString& categoryName,
110  const QString& propertyName)
111 {
112  return QString("/%1/%2/%3").arg(contextName, categoryName, propertyName);
113 }
114 
115 void ToolTipDataBase::addToolTip(const QString& contextName, const QString& categoryName,
116  const QString& propertyName, const QString& tooltip)
117 {
118  if (!tooltip.isEmpty())
119  m_tagToToolTip[getTag(contextName, categoryName, propertyName)] = tooltip;
120 }
121 
122 QString ToolTipDataBase::this_getToolTip(const QString& contextName, const QString& categoryName,
123  const QString& propertyName)
124 {
125  return m_tagToToolTip[getTag(contextName, categoryName, propertyName)];
126 }
Defines the macro ASSERT.
#define ASSERT(condition)
Definition: Assert.h:31
Defines class GUIHelpers functions.
The MaterialEditor is the main class to access materials.
virtual ~ToolTipDataBase()
QString this_getToolTip(const QString &contextName, const QString &categoryName, const QString &propertyName)
static QString widgetboxToolTip(const QString &className)
static ToolTipDataBase * m_instance
QString getTag(const QString &contextName, const QString &categoryName, const QString &propertyName)
static QMap< QString, QString > m_tagToToolTip
void addToolTip(const QString &contextName, const QString &categoryName, const QString &propertyName, const QString &tooltip)
ToolTipDataBase(QObject *parent=nullptr)
Defines class ToolTipDataBase.