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