MNE-CPP  0.1.9
A Framework for Electrophysiology
multiview.cpp
Go to the documentation of this file.
1 //=============================================================================================================
34 //=============================================================================================================
35 // INCLUDES
36 //=============================================================================================================
37 
38 #include "multiview.h"
39 #include "multiviewwindow.h"
40 #include "rtfiffrawview.h"
41 #include "averagelayoutview.h"
42 #include "butterflyview.h"
43 
44 //=============================================================================================================
45 // Qt INCLUDES
46 //=============================================================================================================
47 
48 #include <QHBoxLayout>
49 #include <QDebug>
50 #include <QSettings>
51 
52 //=============================================================================================================
53 // USED NAMESPACES
54 //=============================================================================================================
55 
56 using namespace DISPLIB;
57 
58 //=============================================================================================================
59 // DEFINE MEMBER METHODS
60 //=============================================================================================================
61 
62 MultiView::MultiView(const QString& sSettingsPath,
63  QWidget *parent,
64  Qt::WindowFlags flags)
65 : QMainWindow(parent, flags)
66 {
67  m_sSettingsPath = sSettingsPath;
68  this->setDockNestingEnabled(true);
69  if(QWidget* pCentralWidget = this->centralWidget()) {
70  pCentralWidget->hide();
71  }
72 }
73 
74 //=============================================================================================================
75 
77 {
78 }
79 
80 //=============================================================================================================
81 
83  const QString& sName)
84 {
85  MultiViewWindow* pDockWidget = new MultiViewWindow(this);
86  pDockWidget->setObjectName(sName);
87  pDockWidget->setWindowTitle(sName);
88  pDockWidget->setWidget(pWidget);
89 
90  // Disable floating and editable dock widgets, since the wasm QDockWidget version is buggy
91  #ifdef WASMBUILD
92  pDockWidget->setFeatures(QDockWidget::DockWidgetClosable);
93  #endif
94 
95  if(pWidget->layout() && pDockWidget->layout()){
96  pWidget->layout()->setContentsMargins(0,0,0,0);
97  pDockWidget->layout()->setContentsMargins(0,0,0,0);
98  }
99 
100  this->addDockWidget(Qt::DockWidgetArea::TopDockWidgetArea, pDockWidget);
101 
102  connect(pDockWidget, &MultiViewWindow::dockLocationChanged, [=]() {
103  emit dockLocationChanged(pWidget);
104  });
105 
106  return pDockWidget;
107 }
108 
109 //=============================================================================================================
110 
112  const QString& sName)
113 {
114  MultiViewWindow* pDockWidget = new MultiViewWindow(this);
115  pDockWidget->setObjectName(sName);
116  pDockWidget->setWindowTitle(sName);
117  pDockWidget->setWidget(pWidget);
118 
119  pWidget->setParent(pDockWidget);
120 
121  // Disable floating and editable dock widgets, since the wasm QDockWidget version is buggy
122  #ifdef WASMBUILD
123  pDockWidget->setFeatures(QDockWidget::DockWidgetClosable);
124  #endif
125 
126  if(pWidget->layout() && pDockWidget->layout()){
127  pWidget->layout()->setContentsMargins(0,0,0,0);
128  pDockWidget->layout()->setContentsMargins(0,0,0,0);
129  }
130 
131  if(m_lDockWidgets.isEmpty()) {
132  this->addDockWidget(Qt::DockWidgetArea::BottomDockWidgetArea, pDockWidget);
133  }
134 
135  for(int i = 0; i < m_lDockWidgets.size(); ++i) {
136  this->tabifyDockWidget(m_lDockWidgets.at(i), pDockWidget);
137  }
138 
139  m_lDockWidgets.append(pDockWidget);
140 
141  connect(pDockWidget, &MultiViewWindow::dockLocationChanged, [=]() {
142  emit dockLocationChanged(pWidget);
143  });
144 
145  return pDockWidget;
146 }
147 
148 //=============================================================================================================
149 
151 {
152  if(m_sSettingsPath.isEmpty()) {
153  qWarning() << "[MultiView::saveSettings] Settings path not set for main window. Cannot save central widget state.";
154  return;
155  }
156 
157  QSettings settings("MNECPP");
158 
159  settings.beginGroup(m_sSettingsPath + QString("/MultiView"));
160  settings.setValue("geometry", saveGeometry());
161  settings.setValue("state", saveState());
162  settings.endGroup();
163 }
164 
165 //=============================================================================================================
166 
168 {
169  if(m_sSettingsPath.isEmpty()) {
170  qWarning() << "[MultiView::loadSettings] Settings path not set for main window. Cannot load central widget state.";
171  return;
172  }
173 
174  QSettings settings("MNECPP");
175 
176  settings.beginGroup(m_sSettingsPath + QString("/MultiView"));
177  restoreGeometry(settings.value("geometry").toByteArray());
178  restoreState(settings.value("state").toByteArray());
179  settings.endGroup();
180 }
DISPLIB::MultiView::MultiView
MultiView(const QString &sSettingsPath="", QWidget *parent=Q_NULLPTR, Qt::WindowFlags flags=Qt::Widget)
Definition: multiview.cpp:62
multiview.h
MultiView class declaration.
DISPLIB::MultiView::~MultiView
~MultiView()
Definition: multiview.cpp:76
DISPLIB::MultiView::addWidgetBottom
MultiViewWindow * addWidgetBottom(QWidget *pWidget, const QString &sName)
Definition: multiview.cpp:111
DISPLIB::MultiViewWindow
The MultiViewWindow class provides sub windows as QDockWidgets.
Definition: multiviewwindow.h:71
DISPLIB::MultiView::saveSettings
void saveSettings()
Definition: multiview.cpp:150
averagelayoutview.h
Declaration of the AverageLayoutView Class.
multiviewwindow.h
MultiViewWindow class declaration.
rtfiffrawview.h
Declaration of the RtFiffRawView Class.
DISPLIB::MultiView::loadSettings
void loadSettings()
Definition: multiview.cpp:167
butterflyview.h
Declaration of the ButterflyView class.
DISPLIB::MultiView::addWidgetTop
MultiViewWindow * addWidgetTop(QWidget *pWidget, const QString &sName)
Definition: multiview.cpp:82