Skip to content

Commit 5fd2939

Browse files
committed
Improved icon view for Tabbed/SubWindow MDI window modes
1 parent 4538a91 commit 5fd2939

File tree

3 files changed

+39
-34
lines changed

3 files changed

+39
-34
lines changed

src/core/gui/core_windowmanager.cpp

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -231,10 +231,41 @@ void mbCoreWindowManager::setViewMode(QMdiArea::ViewMode viewMode)
231231
if (m_area->viewMode() != viewMode)
232232
{
233233
m_area->setViewMode(viewMode);
234+
QIcon icon = (viewMode == QMdiArea::TabbedView) ? QIcon() : m_area->windowIcon();
235+
Q_FOREACH(QMdiSubWindow *sw, m_hashWindows)
236+
sw->setWindowIcon(icon);
234237
Q_EMIT viewModeChanged(viewMode);
235238
}
236239
}
237240

241+
QMdiSubWindow *mbCoreWindowManager::subWindowAdd(QWidget *ui)
242+
{
243+
QMdiSubWindow* sw = new QMdiSubWindow(m_area);
244+
//sw->setWindowIcon(QIcon());
245+
//sw->setAttribute(Qt::WA_DeleteOnClose, false);
246+
sw->setWidget(ui);
247+
sw->setWindowFlag(Qt::CustomizeWindowHint, false);
248+
QIcon icon = (viewMode() == QMdiArea::TabbedView) ? QIcon() : m_area->windowIcon();
249+
sw->setWindowIcon(icon);
250+
m_hashWindows.insert(ui, sw);
251+
m_area->addSubWindow(sw);
252+
sw->show();
253+
return sw;
254+
}
255+
256+
QMdiSubWindow *mbCoreWindowManager::subWindowRemove(QWidget *ui)
257+
{
258+
QMdiSubWindow* sw = m_hashWindows.value(ui, nullptr);
259+
if (sw)
260+
{
261+
m_hashWindows.remove(ui);
262+
m_area->removeSubWindow(sw);
263+
sw->setWidget(nullptr);
264+
ui->setParent(nullptr);
265+
}
266+
return sw;
267+
}
268+
238269
bool mbCoreWindowManager::restoreWindowStateInner(mbCoreBinaryReader &reader)
239270
{
240271
QString nameWithPrefix;
@@ -264,29 +295,19 @@ void mbCoreWindowManager::setProject(mbCoreProject *p)
264295

265296
void mbCoreWindowManager::dataViewUiAdd(mbCoreDataViewUi *ui)
266297
{
267-
QMdiSubWindow* sw = new QMdiSubWindow(m_area);
268-
sw->setWidget(ui);
269-
//sw->setAttribute(Qt::WA_DeleteOnClose, false);
270-
sw->setWindowFlag(Qt::CustomizeWindowHint, false);
298+
QMdiSubWindow* sw = subWindowAdd(ui);
271299
m_dataViews.append(sw);
272-
m_hashWindows.insert(ui, sw);
273300
connect(ui, &mbCoreDataViewUi::nameChanged, sw, &QWidget::setWindowTitle);
274301
sw->setWindowTitle(ui->name());
275-
m_area->addSubWindow(sw);
276-
sw->show();
277302
}
278303

279304
void mbCoreWindowManager::dataViewUiRemove(mbCoreDataViewUi *ui)
280305
{
281306
ui->disconnect(this);
282-
QMdiSubWindow* sw = m_hashWindows.value(ui, nullptr);
307+
QMdiSubWindow* sw = subWindowRemove(ui);
283308
if (sw)
284309
{
285310
m_dataViews.removeOne(sw);
286-
m_hashWindows.remove(ui);
287-
m_area->removeSubWindow(sw);
288-
sw->setWidget(nullptr);
289-
ui->setParent(nullptr);
290311
delete sw;
291312
}
292313
}

src/core/gui/core_windowmanager.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,8 @@ public Q_SLOTS:
9191

9292
protected:
9393
void setViewMode(QMdiArea::ViewMode viewMode);
94+
QMdiSubWindow *subWindowAdd(QWidget *ui);
95+
QMdiSubWindow *subWindowRemove(QWidget *ui);
9496
void saveWindowStateInner(mbCoreBinaryWriter &writer, const QString &nameWithPrefix, const QWidget *w);
9597
bool restoreWindowStateInner(mbCoreBinaryReader &reader);
9698

src/server/gui/server_windowmanager.cpp

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -236,57 +236,39 @@ void mbServerWindowManager::actionWindowCloseAll()
236236

237237
void mbServerWindowManager::deviceUiAdd(mbServerDeviceUi *ui)
238238
{
239-
QMdiSubWindow* sw = new QMdiSubWindow(m_area);
240-
sw->setWidget(ui);
241-
//sw->setAttribute(Qt::WA_DeleteOnClose, false);
239+
QMdiSubWindow* sw = subWindowAdd(ui);
242240
m_devices.append(sw);
243-
m_hashWindows.insert(ui, sw);
244241
connect(ui, &mbServerDeviceUi::nameChanged, sw, &QWidget::setWindowTitle);
245242
sw->setWindowTitle(ui->name());
246-
m_area->addSubWindow(sw);
247-
sw->show();
248243
}
249244

250245
void mbServerWindowManager::deviceUiRemove(mbServerDeviceUi *ui)
251246
{
252247
ui->disconnect(this);
253-
QMdiSubWindow* sw = m_hashWindows.value(ui, nullptr);
248+
QMdiSubWindow* sw = subWindowRemove(ui);
254249
if (sw)
255250
{
256251
m_devices.removeOne(sw);
257-
m_hashWindows.remove(ui);
258-
m_area->removeSubWindow(sw);
259-
sw->setWidget(nullptr);
260-
ui->setParent(nullptr);
261252
delete sw;
262253
}
263254
}
264255

265256
void mbServerWindowManager::scriptEditorAdd(mbServerBaseScriptEditor *ui)
266257
{
267-
QMdiSubWindow* sw = new QMdiSubWindow(m_area);
268-
sw->setWidget(ui);
269-
//sw->setAttribute(Qt::WA_DeleteOnClose, false);
258+
QMdiSubWindow* sw = subWindowAdd(ui);
270259
m_scriptEditors.append(sw);
271-
m_hashWindows.insert(ui, sw);
272260
connect(ui, &mbServerBaseScriptEditor::nameChanged, sw, &QWidget::setWindowTitle);
273261
sw->setWindowTitle(ui->name());
274262
sw->installEventFilter(this);
275-
m_area->addSubWindow(sw);
276-
sw->show();
277263
}
278264

279265
void mbServerWindowManager::scriptEditorRemove(mbServerBaseScriptEditor *ui)
280266
{
281267
ui->disconnect(this);
282-
QMdiSubWindow* sw = m_hashWindows.value(ui, nullptr);
268+
QMdiSubWindow* sw = subWindowRemove(ui);
283269
if (sw)
284270
{
285271
m_scriptEditors.removeOne(sw);
286-
m_hashWindows.remove(ui);
287-
m_area->removeSubWindow(sw);
288-
//sw->setWidget(nullptr);
289-
//ui->setParent(nullptr);
290272
sw->deleteLater();
291273
}
292274
}

0 commit comments

Comments
 (0)