BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
StyleUtils.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file GUI/coregui/utils/StyleUtils.cpp
6 //! @brief DefinesStyleUtils namespace
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"
20 #include <QApplication>
21 #include <QBoxLayout>
22 #include <QDialog>
23 #include <QTreeView>
24 
25 namespace {
26 Utils::DetailsWidget* createEmptyDetailsWidget(const QString& name, bool expanded);
27 QSize FindSizeOfLetterM(const QWidget* widget);
28 
29 QSize DefaultSizeOfLetterM()
30 {
31  QWidget widget;
32  return FindSizeOfLetterM(&widget);
33 }
34 } // namespace
35 
36 void StyleUtils::setPropertyStyle(QTreeView* tree)
37 {
38  ASSERT(tree);
39  tree->setStyleSheet(StyleUtils::propertyTreeStyle());
40  tree->setAlternatingRowColors(true);
41 }
42 
44 {
45  QString result;
46 
47  // lines arount cell content
48  result += "QTreeView::item {"
49  " border-bottom: 1px solid #c7c8c9; "
50  " border-right: 1px solid #c7c8c9;}"
51  "QTreeView::branch {border-bottom: 1px solid #c7c8c9;}";
52 
53  // styling of branch to restore open/closed signs eliminated by previous styling
54  result += "QTreeView::branch:has-children:!has-siblings:closed,"
55  "QTreeView::branch:closed:has-children:has-siblings {"
56  "padding:2px 2px 2px 2px;border-image: none;"
57  "image: url(:/images/caret-right.svg);}"
58  "QTreeView::branch:open:has-children:!has-siblings,"
59  "QTreeView::branch:open:has-children:has-siblings {"
60  "padding:2px 2px 2px 2px;border-image: none; image: url(:/images/caret-down.svg);"
61  "}";
62 
63  // background of selected rows restored
64  result += "QTreeView::item:selected{background:#3daee9;}";
65 
66  return result;
67 }
68 
69 QFont StyleUtils::sectionFont(bool bold)
70 {
71  QFont result;
72  result.setPointSize(DesignerHelper::getSectionFontSize());
73  result.setBold(bold);
74 
75  return result;
76 }
77 
78 QFont StyleUtils::labelFont(bool bold)
79 {
80  QFont result;
81  result.setPointSize(DesignerHelper::getLabelFontSize());
82  result.setBold(bold);
83 
84  return result;
85 }
86 
87 void StyleUtils::setResizable(QDialog* dialog)
88 {
90  dialog->setWindowFlags(Qt::WindowCloseButtonHint | Qt::CustomizeWindowHint
91  | Qt::WindowMinimizeButtonHint | Qt::WindowMaximizeButtonHint
92  | Qt::Window);
93  }
94 }
95 
96 QWidget* StyleUtils::createDetailsWidget(QWidget* content, const QString& name, bool expanded)
97 {
98  auto result = createEmptyDetailsWidget(name, expanded);
99  result->setWidget(content);
100  return result;
101 }
102 
103 QWidget* StyleUtils::createDetailsWidget(QLayout* layout, const QString& name, bool expanded)
104 {
105  auto placeholder = new QWidget();
106  placeholder->setLayout(layout);
107  return createDetailsWidget(placeholder, name, expanded);
108 }
109 
110 QSize StyleUtils::SizeOfLetterM(const QWidget* widget)
111 {
112  static QSize default_size = DefaultSizeOfLetterM();
113  return widget ? FindSizeOfLetterM(widget) : default_size;
114 }
115 
117 {
118  return QApplication::font().pointSize();
119 }
120 
122 {
123  return SizeOfLetterM().width() * 16;
124 }
125 
126 namespace {
127 
128 Utils::DetailsWidget* createEmptyDetailsWidget(const QString& name, bool expanded)
129 {
130  auto result = new Utils::DetailsWidget;
131  result->setSummaryText(name);
132  result->setSummaryFontBold(true);
133  if (expanded)
134  result->setState(Utils::DetailsWidget::Expanded);
135  return result;
136 }
137 
138 //! Calculates size of letter `M` for current system font settings.
139 
140 QSize FindSizeOfLetterM(const QWidget* widget)
141 {
142  QFontMetrics fontMetric(widget->font());
143 #if QT_VERSION >= QT_VERSION_CHECK(5, 11, 0)
144  auto em = fontMetric.horizontalAdvance('M');
145 #else
146  auto em = fontMetric.width('M');
147 #endif
148  auto fontAscent = fontMetric.ascent();
149 
150  return QSize(em, fontAscent);
151 }
152 
153 } // namespace
Defines the macro ASSERT.
#define ASSERT(condition)
Definition: Assert.h:31
Defines class DesignerHelper.
DefinesStyleUtils namespace.
static int getLabelFontSize()
static int getSectionFontSize()
static bool isMacHost()
Definition: hostosinfo.h:69
void setSummaryText(const QString &text)
Defines Utils namespace.
QString const & name(EShape k)
Definition: particles.cpp:21
QSize SizeOfLetterM(const QWidget *widget=nullptr)
Returns size of largest letter of default system font.
Definition: StyleUtils.cpp:110
int SystemPointSize()
Returns size in points of default system font.
Definition: StyleUtils.cpp:116
QWidget * createDetailsWidget(QWidget *content, const QString &name, bool expanded=true)
Creates details widget holding user content inside.
Definition: StyleUtils.cpp:96
QFont labelFont(bool bold=false)
Returns font for labels.
Definition: StyleUtils.cpp:78
int PropertyPanelWidth()
Returns typical width of the vertical property panel.
Definition: StyleUtils.cpp:121
QString propertyTreeStyle()
Returns string representing the style of QTreeView intended for property editor.
Definition: StyleUtils.cpp:43
void setResizable(QDialog *dialog)
Make modal dialog resizable.
Definition: StyleUtils.cpp:87
void setPropertyStyle(QTreeView *tree)
Sets style for the tree to use in property editors.
Definition: StyleUtils.cpp:36
QFont sectionFont(bool bold=false)
Returns font for sections.
Definition: StyleUtils.cpp:69