v2.0.0
Loading...
Searching...
No Matches
quickcontrolview.cpp
Go to the documentation of this file.
1//=============================================================================================================
16
17//=============================================================================================================
18// INCLUDES
19//=============================================================================================================
20
21#include "ui_quickcontrolview.h"
22
23#include "quickcontrolview.h"
24
25//=============================================================================================================
26// QT INCLUDES
27//=============================================================================================================
28
29#include <QGroupBox>
30#include <QTabWidget>
31#include <QSettings>
32#include <QApplication>
33#include <QScreen>
34#include <QDebug>
35
36//=============================================================================================================
37// USED NAMESPACES
38//=============================================================================================================
39
40using namespace DISPLIB;
41
42//=============================================================================================================
43// DEFINE MEMBER METHODS
44//=============================================================================================================
45
46QuickControlView::QuickControlView(const QString& sSettingsPath,
47 const QString& name,
48 Qt::WindowFlags flags,
49 QWidget* parent,
50 bool bDraggable)
51: DraggableFramelessWidget(parent, flags, false, bDraggable, true)
52, m_sName(name)
53, m_pUi(std::make_unique<Ui::QuickControlViewWidget>())
54{
55 m_sSettingsPath = sSettingsPath;
56 m_pUi->setupUi(this);
57 m_pUi->m_pTabWidget->setTabBarAutoHide(true);
58 m_pUi->m_pTabWidget->setMovable(true);
59 m_pUi->m_pTabWidget->setTabPosition(QTabWidget::West);
60 this->setWindowTitle("Quick Control");
61
62 if (!(windowFlags() & Qt::CustomizeWindowHint)) {
63 m_pUi->m_pushButton_close->hide();
64 }
65
66 //Init opacity slider
67 connect(m_pUi->m_horizontalSlider_opacity, &QSlider::valueChanged,
69
70 //Init and connect close button
71 connect(m_pUi->m_pushButton_close, static_cast<void (QPushButton::*)(bool)>(&QPushButton::clicked),
72 this, &QuickControlView::hide);
73
74 this->adjustSize();
75
77}
78
79//=============================================================================================================
80
85
86//=============================================================================================================
87
89{
90 while (m_pUi->m_pTabWidget->count() != 0) {
91 QWidget* pTabWidget = m_pUi->m_pTabWidget->widget(m_pUi->m_pTabWidget->count() - 1);
92 m_pUi->m_pTabWidget->removeTab(m_pUi->m_pTabWidget->count() - 1);
93 delete pTabWidget;
94 }
95}
96
97//=============================================================================================================
98
99QVBoxLayout* QuickControlView::findTabWidgetLayout(const QString& sTabName)
100{
101 QVBoxLayout* pTabWidgetLayout = nullptr;
102
103 if (QWidget* pTabWidget = m_pUi->m_pTabWidget->findChild<QWidget*>(sTabName + "TabWidget")) {
104 // Tab widget already exisits. Get the grid layout and return it.
105 pTabWidgetLayout = qobject_cast<QVBoxLayout*>(pTabWidget->layout());
106 } else {
107 // Tab widget does not exist yet. Create it and return grid lyout.
108 pTabWidget = new QWidget();
109 pTabWidget->setObjectName(sTabName + "TabWidget");
110 pTabWidgetLayout = new QVBoxLayout();
111 pTabWidgetLayout->setContentsMargins(4, 2, 4, 4);
112 pTabWidget->setLayout(pTabWidgetLayout);
113 m_pUi->m_pTabWidget->insertTab(0, pTabWidget, sTabName);
114 }
115
116 return pTabWidgetLayout;
117}
118
119//=============================================================================================================
120
121void QuickControlView::addWidgets(const QList<QWidget*>& lWidgets,
122 const QString& sTabName,
123 bool bAddToEnd)
124{
125 for (int i = 0; i < lWidgets.size(); ++i) {
126 QString sObjectName = lWidgets.at(i)->objectName();
127
128 if (sObjectName.contains("widget_", Qt::CaseInsensitive)) {
129 this->addWidget(lWidgets.at(i), sTabName, bAddToEnd);
130 }
131
132 if (sObjectName.contains("group_", Qt::CaseInsensitive)) {
133 if (sObjectName.contains("group_tab_", Qt::CaseInsensitive)) {
134 sObjectName.remove("group_tab_");
135 QStringList sList = sObjectName.split("_");
136
137 if (sList.size() >= 2) {
138 this->addGroupBoxWithTabs(lWidgets.at(i), sList.at(0), sList.at(1), sTabName, bAddToEnd);
139 } else {
140 this->addGroupBoxWithTabs(lWidgets.at(i), "", sObjectName, sTabName, bAddToEnd);
141 }
142 } else {
143 sObjectName.remove("group_");
144 this->addGroupBox(lWidgets.at(i), sObjectName, sTabName, bAddToEnd);
145 }
146 }
147 }
148}
149
150//=============================================================================================================
151
152void QuickControlView::addWidget(QWidget* pWidget,
153 const QString& sTabName,
154 bool bAddToEnd)
155{
156 if (QVBoxLayout* pTabWidgetLayout = findTabWidgetLayout(sTabName)) {
157 int iPos = bAddToEnd ? -1 : 0;
158 pTabWidgetLayout->insertWidget(iPos,
159 pWidget,
160 0);
161 }
162}
163
164//=============================================================================================================
165
166void QuickControlView::addGroupBox(QWidget* pWidget,
167 const QString& sGroupBoxName,
168 const QString& sTabName,
169 bool bAddToEnd)
170{
171 if (QVBoxLayout* pTabWidgetLayout = findTabWidgetLayout(sTabName)) {
172 int iPos = bAddToEnd ? -1 : 0;
173 QGroupBox* pGroupBox = new QGroupBox(sGroupBoxName);
174 pGroupBox->setObjectName(sGroupBoxName);
175
176 QVBoxLayout* pVBox = new QVBoxLayout;
177
178 pVBox->setContentsMargins(0, 0, 0, 0);
179 pVBox->addWidget(pWidget);
180 pGroupBox->setLayout(pVBox);
181
182 pTabWidgetLayout->insertWidget(iPos,
183 pGroupBox,
184 0);
185 }
186}
187
188//=============================================================================================================
189
191 const QString& sGroupBoxName,
192 const QString& sTabNameGroupBox,
193 const QString& sTabName,
194 bool bAddToEnd)
195{
196 if (QVBoxLayout* pTabWidgetLayout = findTabWidgetLayout(sTabName)) {
197 QGroupBox* pGroupBox = pTabWidgetLayout->parentWidget()->findChild<QGroupBox*>(sGroupBoxName);
198
199 if (!pGroupBox) {
200 int iPos = bAddToEnd ? -1 : 0;
201 pGroupBox = new QGroupBox(sGroupBoxName);
202 pGroupBox->setObjectName(sGroupBoxName);
203
204 pTabWidgetLayout->insertWidget(iPos,
205 pGroupBox,
206 0);
207
208 QVBoxLayout* pVBox = new QVBoxLayout;
209 QTabWidget* pTabWidget = new QTabWidget;
210 pTabWidget->setTabBarAutoHide(false);
211 pTabWidget->setMovable(true);
212 pTabWidget->setObjectName(sGroupBoxName + "TabWidget");
213
214 pTabWidget->addTab(pWidget, sTabNameGroupBox);
215 pVBox->setContentsMargins(4, 2, 4, 4);
216 pVBox->addWidget(pTabWidget);
217 pGroupBox->setLayout(pVBox);
218 } else {
219 QTabWidget* pTabWidget = pGroupBox->findChild<QTabWidget*>(sGroupBoxName + "TabWidget");
220
221 if (pTabWidget) {
222 pTabWidget->addTab(pWidget, sTabNameGroupBox);
223 }
224 }
225 }
226}
227
228//=============================================================================================================
229
231{
232 m_pUi->m_horizontalSlider_opacity->setValue(opactiy);
233
234 onOpacityChange(opactiy);
235}
236
237//=============================================================================================================
238
240{
241 return m_pUi->m_horizontalSlider_opacity->value();
242}
243
244//=============================================================================================================
245
247{
248 m_pUi->m_pushButton_close->setVisible(bVisibility);
249 m_pUi->m_horizontalSlider_opacity->setVisible(bVisibility);
250 m_pUi->m_label_opacity->setVisible(bVisibility);
251}
252
253//=============================================================================================================
254
256{
257 if (m_sSettingsPath.isEmpty()) {
258 return;
259 }
260
261 QSettings settings("MNECPP");
262
263 settings.setValue(m_sSettingsPath + QString("/QuickControlView/ViewOpacity"), getOpacityValue());
264 settings.setValue(m_sSettingsPath + QString("/QuickControlView/ViewPos"), this->pos());
265}
266
267//=============================================================================================================
268
270{
271 if (m_sSettingsPath.isEmpty()) {
272 return;
273 }
274
275 QSettings settings("MNECPP");
276
277 setOpacityValue(settings.value(m_sSettingsPath + QString("/QuickControlView/ViewOpacity"), 100).toInt());
278
279 QPoint pos = settings.value(m_sSettingsPath + QString("/QuickControlView/ViewPos"), QPoint(100, 100)).toPoint();
280
281 QRect screenRect = QApplication::primaryScreen()->geometry();
282 if (!screenRect.contains(pos) && QGuiApplication::screens().size() == 1) {
283 move(QPoint(100, 100));
284 } else {
285 move(pos);
286 }
287}
288
289//=============================================================================================================
290
292{
293 if (value <= 0) {
294 this->setWindowOpacity(1);
295 } else {
296 this->setWindowOpacity(1 / (100.0 / value));
297 }
298}
Floating frameless container hosting the modular Quick-Control settings tabs.
2-D display widgets and visualisation helpers (charts, topography, colour maps).
DraggableFramelessWidget(QWidget *parent=0, Qt::WindowFlags flags=Qt::Window, bool bRoundEdges=false, bool bDraggable=true, bool bFrameless=true)
void addWidget(QWidget *pWidget, const QString &sTabName, bool bAddToEnd=false)
void addWidgets(const QList< QWidget * > &lWidgets, const QString &sTabName, bool bAddToEnd=false)
QuickControlView(const QString &sSettingsPath="", const QString &name="", Qt::WindowFlags flags=Qt::Window|Qt::WindowStaysOnTopHint, QWidget *parent=nullptr, bool bDraggable=true)
QVBoxLayout * findTabWidgetLayout(const QString &sTabName)
void addGroupBoxWithTabs(QWidget *pWidget, const QString &sGroupBoxName, const QString &sTabNameGroupBox, const QString &sTabName, bool bAddToEnd=false)
void onOpacityChange(qint32 value)
void setOpacityValue(int opactiy)
void addGroupBox(QWidget *pWidget, const QString &sGroupBoxName, const QString &sTabName, bool bAddToEnd=false)
void setVisiblityHideOpacityClose(bool bVisibility)