Commit 45c0176d065edd9ba7e2834e4d9768037f81c676
Committed by
David Gräff
1 parent
3fd7e443
Save / load layout of docking windows and toolbars into new [window] section of .ini file
Showing
5 changed files
with
63 additions
and
328 deletions
openhantek/src/dockwindows.cpp
| @@ -35,6 +35,19 @@ | @@ -35,6 +35,19 @@ | ||
| 35 | #include "settings.h" | 35 | #include "settings.h" |
| 36 | #include "sispinbox.h" | 36 | #include "sispinbox.h" |
| 37 | 37 | ||
| 38 | +namespace { | ||
| 39 | + | ||
| 40 | +void SetupDockWidget(QDockWidget *dockWindow, QWidget *dockWidget, QLayout *layout) { | ||
| 41 | + dockWindow->setObjectName(dockWindow->windowTitle()); | ||
| 42 | + dockWindow->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); | ||
| 43 | + dockWidget->setLayout(layout); | ||
| 44 | + dockWidget->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed, | ||
| 45 | + QSizePolicy::DefaultType)); | ||
| 46 | + dockWindow->setWidget(dockWidget); | ||
| 47 | +} | ||
| 48 | + | ||
| 49 | +} | ||
| 50 | + | ||
| 38 | //////////////////////////////////////////////////////////////////////////////// | 51 | //////////////////////////////////////////////////////////////////////////////// |
| 39 | // class HorizontalDock | 52 | // class HorizontalDock |
| 40 | /// \brief Initializes the horizontal axis docking window. | 53 | /// \brief Initializes the horizontal axis docking window. |
| @@ -90,11 +103,8 @@ HorizontalDock::HorizontalDock(DsoSettings *settings, QWidget *parent, | @@ -90,11 +103,8 @@ HorizontalDock::HorizontalDock(DsoSettings *settings, QWidget *parent, | ||
| 90 | this->dockLayout->addWidget(this->formatLabel, 4, 0); | 103 | this->dockLayout->addWidget(this->formatLabel, 4, 0); |
| 91 | this->dockLayout->addWidget(this->formatComboBox, 4, 1); | 104 | this->dockLayout->addWidget(this->formatComboBox, 4, 1); |
| 92 | 105 | ||
| 93 | - this->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); | ||
| 94 | - | ||
| 95 | this->dockWidget = new QWidget(); | 106 | this->dockWidget = new QWidget(); |
| 96 | - this->dockWidget->setLayout(this->dockLayout); | ||
| 97 | - this->setWidget(this->dockWidget); | 107 | + SetupDockWidget(this, dockWidget, dockLayout); |
| 98 | 108 | ||
| 99 | // Connect signals and slots | 109 | // Connect signals and slots |
| 100 | connect(this->samplerateSiSpinBox, SIGNAL(valueChanged(double)), this, | 110 | connect(this->samplerateSiSpinBox, SIGNAL(valueChanged(double)), this, |
| @@ -337,11 +347,8 @@ TriggerDock::TriggerDock(DsoSettings *settings, | @@ -337,11 +347,8 @@ TriggerDock::TriggerDock(DsoSettings *settings, | ||
| 337 | this->dockLayout->addWidget(this->slopeLabel, 2, 0); | 347 | this->dockLayout->addWidget(this->slopeLabel, 2, 0); |
| 338 | this->dockLayout->addWidget(this->slopeComboBox, 2, 1); | 348 | this->dockLayout->addWidget(this->slopeComboBox, 2, 1); |
| 339 | 349 | ||
| 340 | - this->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); | ||
| 341 | - | ||
| 342 | this->dockWidget = new QWidget(); | 350 | this->dockWidget = new QWidget(); |
| 343 | - this->dockWidget->setLayout(this->dockLayout); | ||
| 344 | - this->setWidget(this->dockWidget); | 351 | + SetupDockWidget(this, dockWidget, dockLayout); |
| 345 | 352 | ||
| 346 | // Connect signals and slots | 353 | // Connect signals and slots |
| 347 | connect(this->modeComboBox, SIGNAL(currentIndexChanged(int)), this, | 354 | connect(this->modeComboBox, SIGNAL(currentIndexChanged(int)), this, |
| @@ -479,11 +486,8 @@ SpectrumDock::SpectrumDock(DsoSettings *settings, QWidget *parent, | @@ -479,11 +486,8 @@ SpectrumDock::SpectrumDock(DsoSettings *settings, QWidget *parent, | ||
| 479 | this->dockLayout->addWidget(this->magnitudeComboBox[channel], channel, 1); | 486 | this->dockLayout->addWidget(this->magnitudeComboBox[channel], channel, 1); |
| 480 | } | 487 | } |
| 481 | 488 | ||
| 482 | - this->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); | ||
| 483 | - | ||
| 484 | this->dockWidget = new QWidget(); | 489 | this->dockWidget = new QWidget(); |
| 485 | - this->dockWidget->setLayout(this->dockLayout); | ||
| 486 | - this->setWidget(this->dockWidget); | 490 | + SetupDockWidget(this, dockWidget, dockLayout); |
| 487 | 491 | ||
| 488 | // Connect signals and slots | 492 | // Connect signals and slots |
| 489 | for (int channel = 0; channel < this->settings->scope.voltage.count(); | 493 | for (int channel = 0; channel < this->settings->scope.voltage.count(); |
| @@ -630,11 +634,8 @@ VoltageDock::VoltageDock(DsoSettings *settings, QWidget *parent, | @@ -630,11 +634,8 @@ VoltageDock::VoltageDock(DsoSettings *settings, QWidget *parent, | ||
| 630 | 1); | 634 | 1); |
| 631 | } | 635 | } |
| 632 | 636 | ||
| 633 | - this->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); | ||
| 634 | - | ||
| 635 | this->dockWidget = new QWidget(); | 637 | this->dockWidget = new QWidget(); |
| 636 | - this->dockWidget->setLayout(this->dockLayout); | ||
| 637 | - this->setWidget(this->dockWidget); | 638 | + SetupDockWidget(this, dockWidget, dockLayout); |
| 638 | 639 | ||
| 639 | // Connect signals and slots | 640 | // Connect signals and slots |
| 640 | for (int channel = 0; channel < this->settings->scope.voltage.count(); | 641 | for (int channel = 0; channel < this->settings->scope.voltage.count(); |
openhantek/src/openhantek.cpp
| @@ -88,10 +88,6 @@ OpenHantekMainWindow::OpenHantekMainWindow(QWidget *parent, | @@ -88,10 +88,6 @@ OpenHantekMainWindow::OpenHantekMainWindow(QWidget *parent, | ||
| 88 | // Apply the settings after the gui is initialized | 88 | // Apply the settings after the gui is initialized |
| 89 | this->applySettings(); | 89 | this->applySettings(); |
| 90 | 90 | ||
| 91 | - // Update stored window size and position | ||
| 92 | - this->settings->options.window.position = this->pos(); | ||
| 93 | - this->settings->options.window.size = this->size(); | ||
| 94 | - | ||
| 95 | // Connect all signals | 91 | // Connect all signals |
| 96 | this->connectSignals(); | 92 | this->connectSignals(); |
| 97 | 93 | ||
| @@ -233,10 +229,22 @@ void OpenHantekMainWindow::createMenus() { | @@ -233,10 +229,22 @@ void OpenHantekMainWindow::createMenus() { | ||
| 233 | this->helpMenu->addAction(this->aboutQtAction); | 229 | this->helpMenu->addAction(this->aboutQtAction); |
| 234 | } | 230 | } |
| 235 | 231 | ||
| 232 | +namespace { | ||
| 233 | + | ||
| 234 | +QToolBar* CreateToolBar(const QString& title) { | ||
| 235 | + QToolBar* newObj = new QToolBar(title); | ||
| 236 | + newObj->setObjectName(title); | ||
| 237 | + newObj->setAllowedAreas(Qt::TopToolBarArea | Qt::LeftToolBarArea); | ||
| 238 | + return newObj; | ||
| 239 | +} | ||
| 240 | + | ||
| 241 | +} | ||
| 242 | + | ||
| 236 | /// \brief Create the toolbars and their buttons. | 243 | /// \brief Create the toolbars and their buttons. |
| 237 | void OpenHantekMainWindow::createToolBars() { | 244 | void OpenHantekMainWindow::createToolBars() { |
| 238 | - this->fileToolBar = new QToolBar(tr("File")); | ||
| 239 | - this->fileToolBar->setAllowedAreas(Qt::TopToolBarArea); | 245 | + |
| 246 | + // File | ||
| 247 | + this->fileToolBar = CreateToolBar(tr("File")); | ||
| 240 | this->fileToolBar->addAction(this->openAction); | 248 | this->fileToolBar->addAction(this->openAction); |
| 241 | this->fileToolBar->addAction(this->saveAction); | 249 | this->fileToolBar->addAction(this->saveAction); |
| 242 | this->fileToolBar->addAction(this->saveAsAction); | 250 | this->fileToolBar->addAction(this->saveAsAction); |
| @@ -244,10 +252,12 @@ void OpenHantekMainWindow::createToolBars() { | @@ -244,10 +252,12 @@ void OpenHantekMainWindow::createToolBars() { | ||
| 244 | this->fileToolBar->addAction(this->printAction); | 252 | this->fileToolBar->addAction(this->printAction); |
| 245 | this->fileToolBar->addAction(this->exportAsAction); | 253 | this->fileToolBar->addAction(this->exportAsAction); |
| 246 | 254 | ||
| 247 | - this->oscilloscopeToolBar = new QToolBar(tr("Oscilloscope")); | 255 | + // Oscilloscope |
| 256 | + this->oscilloscopeToolBar = CreateToolBar(tr("Oscilloscope")); | ||
| 248 | this->oscilloscopeToolBar->addAction(this->startStopAction); | 257 | this->oscilloscopeToolBar->addAction(this->startStopAction); |
| 249 | 258 | ||
| 250 | - this->viewToolBar = new QToolBar(tr("View")); | 259 | + // View |
| 260 | + this->viewToolBar = CreateToolBar(tr("View")); | ||
| 251 | this->viewToolBar->addAction(this->digitalPhosphorAction); | 261 | this->viewToolBar->addAction(this->digitalPhosphorAction); |
| 252 | this->viewToolBar->addAction(this->zoomAction); | 262 | this->viewToolBar->addAction(this->zoomAction); |
| 253 | } | 263 | } |
| @@ -427,22 +437,6 @@ int OpenHantekMainWindow::writeSettings(const QString &fileName) { | @@ -427,22 +437,6 @@ int OpenHantekMainWindow::writeSettings(const QString &fileName) { | ||
| 427 | return this->settings->save(fileName); | 437 | return this->settings->save(fileName); |
| 428 | } | 438 | } |
| 429 | 439 | ||
| 430 | -/// \brief Called everytime the window is moved. | ||
| 431 | -/// \param event The move event, it isn't used here though. | ||
| 432 | -void OpenHantekMainWindow::moveEvent(QMoveEvent *event) { | ||
| 433 | - Q_UNUSED(event); | ||
| 434 | - | ||
| 435 | - this->settings->options.window.position = this->pos(); | ||
| 436 | -} | ||
| 437 | - | ||
| 438 | -/// \brief Called everytime the window is resized. | ||
| 439 | -/// \param event The resize event, it isn't used here though. | ||
| 440 | -void OpenHantekMainWindow::resizeEvent(QResizeEvent *event) { | ||
| 441 | - Q_UNUSED(event); | ||
| 442 | - | ||
| 443 | - this->settings->options.window.size = this->size(); | ||
| 444 | -} | ||
| 445 | - | ||
| 446 | /// \brief Open a configuration file. | 440 | /// \brief Open a configuration file. |
| 447 | /// \return 0 on success, 1 on user abort, negative on error. | 441 | /// \return 0 on success, 1 on user abort, negative on error. |
| 448 | int OpenHantekMainWindow::open() { | 442 | int OpenHantekMainWindow::open() { |
| @@ -546,143 +540,24 @@ void OpenHantekMainWindow::about() { | @@ -546,143 +540,24 @@ void OpenHantekMainWindow::about() { | ||
| 546 | 540 | ||
| 547 | /// \brief The settings have changed. | 541 | /// \brief The settings have changed. |
| 548 | void OpenHantekMainWindow::applySettings() { | 542 | void OpenHantekMainWindow::applySettings() { |
| 549 | - // Main window | ||
| 550 | - if (!this->settings->options.window.position.isNull()) | ||
| 551 | - this->move(this->settings->options.window.position); | ||
| 552 | - if (!this->settings->options.window.size.isNull()) | ||
| 553 | - this->resize(this->settings->options.window.size); | ||
| 554 | - | ||
| 555 | - // Docking windows | ||
| 556 | - QList<QDockWidget *> docks; | ||
| 557 | - docks.append(this->horizontalDock); | ||
| 558 | - docks.append(this->triggerDock); | ||
| 559 | - docks.append(this->voltageDock); | ||
| 560 | - docks.append(this->spectrumDock); | ||
| 561 | - | ||
| 562 | - QList<DsoSettingsOptionsWindowPanel *> dockSettings; | ||
| 563 | - dockSettings.append(&(this->settings->options.window.dock.horizontal)); | ||
| 564 | - dockSettings.append(&(this->settings->options.window.dock.trigger)); | ||
| 565 | - dockSettings.append(&(this->settings->options.window.dock.voltage)); | ||
| 566 | - dockSettings.append(&(this->settings->options.window.dock.spectrum)); | ||
| 567 | - | ||
| 568 | - QList<int> dockedWindows[2]; // Docks docked on the sides of the main window | ||
| 569 | - | ||
| 570 | - for (int dockId = 0; dockId < docks.size(); ++dockId) { | ||
| 571 | - docks[dockId]->setVisible(dockSettings[dockId]->visible); | ||
| 572 | - docks[dockId]->setFloating(dockSettings[dockId]->floating); | ||
| 573 | - if (!dockSettings[dockId]->position.isNull()) { | ||
| 574 | - if (dockSettings[dockId]->floating) { | ||
| 575 | - this->addDockWidget(Qt::RightDockWidgetArea, docks[dockId]); | ||
| 576 | - docks[dockId]->move(dockSettings[dockId]->position); | ||
| 577 | - } else { | ||
| 578 | - // Check in which order the docking windows where placed | ||
| 579 | - int side = (dockSettings[dockId]->position.x() < | ||
| 580 | - this->settings->options.window.size.width() / 2) | ||
| 581 | - ? 0 | ||
| 582 | - : 1; | ||
| 583 | - int index = 0; | ||
| 584 | - while (index < dockedWindows[side].size() && | ||
| 585 | - dockSettings[dockedWindows[side][index]]->position.y() <= | ||
| 586 | - dockSettings[dockId]->position.y()) | ||
| 587 | - ++index; | ||
| 588 | - dockedWindows[side].insert(index, dockId); | ||
| 589 | - } | ||
| 590 | - } else { | ||
| 591 | - this->addDockWidget(Qt::RightDockWidgetArea, docks[dockId]); | ||
| 592 | - } | ||
| 593 | - } | 543 | + addDockWidget(Qt::RightDockWidgetArea, horizontalDock); |
| 544 | + addDockWidget(Qt::RightDockWidgetArea, triggerDock); | ||
| 545 | + addDockWidget(Qt::RightDockWidgetArea, voltageDock); | ||
| 546 | + addDockWidget(Qt::RightDockWidgetArea, spectrumDock); | ||
| 594 | 547 | ||
| 595 | - // Put the docked docking windows into the main window | ||
| 596 | - for (int position = 0; position < dockedWindows[0].size(); ++position) | ||
| 597 | - this->addDockWidget(Qt::LeftDockWidgetArea, | ||
| 598 | - docks[dockedWindows[0][position]]); | ||
| 599 | - for (int position = 0; position < dockedWindows[1].size(); ++position) | ||
| 600 | - this->addDockWidget(Qt::RightDockWidgetArea, | ||
| 601 | - docks[dockedWindows[1][position]]); | ||
| 602 | - | ||
| 603 | - // Toolbars | ||
| 604 | - QList<QToolBar *> toolbars; | ||
| 605 | - toolbars.append(this->fileToolBar); | ||
| 606 | - toolbars.append(this->oscilloscopeToolBar); | ||
| 607 | - toolbars.append(this->viewToolBar); | ||
| 608 | - | ||
| 609 | - QList<DsoSettingsOptionsWindowPanel *> toolbarSettings; | ||
| 610 | - toolbarSettings.append(&(this->settings->options.window.toolbar.file)); | ||
| 611 | - toolbarSettings.append( | ||
| 612 | - &(this->settings->options.window.toolbar.oscilloscope)); | ||
| 613 | - toolbarSettings.append(&(this->settings->options.window.toolbar.view)); | ||
| 614 | - | ||
| 615 | - QList<int> dockedToolbars; // Docks docked on the sides of the main window | ||
| 616 | - | ||
| 617 | - for (int toolbarId = 0; toolbarId < toolbars.size(); ++toolbarId) { | ||
| 618 | - toolbars[toolbarId]->setVisible(toolbarSettings[toolbarId]->visible); | ||
| 619 | - toolbars[toolbarId]->setWindowFlags(Qt::Tool); | ||
| 620 | - if (!toolbarSettings[toolbarId]->position.isNull() && | ||
| 621 | - !toolbarSettings[toolbarId]->floating) { | ||
| 622 | - /*if(toolbarSettings[toolbarId]->floating) { | ||
| 623 | - toolbars[toolbarId]->move(toolbarSettings[toolbarId]->position); | ||
| 624 | - } | ||
| 625 | - else*/ { | ||
| 626 | - // Check in which order the toolbars where placed | ||
| 627 | - int index = 0; | ||
| 628 | - while (index < dockedToolbars.size() && | ||
| 629 | - toolbarSettings[dockedToolbars[index]]->position.x() <= | ||
| 630 | - toolbarSettings[toolbarId]->position.x()) | ||
| 631 | - ++index; | ||
| 632 | - dockedToolbars.insert(index, toolbarId); | ||
| 633 | - } | ||
| 634 | - } else { | ||
| 635 | - this->addToolBar(toolbars[toolbarId]); | ||
| 636 | - } | ||
| 637 | - } | 548 | + addToolBar(fileToolBar); |
| 549 | + addToolBar(oscilloscopeToolBar); | ||
| 550 | + addToolBar(viewToolBar); | ||
| 638 | 551 | ||
| 639 | - // Put the docked toolbars into the main window | ||
| 640 | - for (int position = 0; position < dockedToolbars.size(); ++position) | ||
| 641 | - this->addToolBar(toolbars[dockedToolbars[position]]); | 552 | + restoreGeometry(settings->mainWindowGeometry); |
| 553 | + restoreState(settings->mainWindowState); | ||
| 642 | } | 554 | } |
| 643 | 555 | ||
| 644 | /// \brief Update the window layout in the settings. | 556 | /// \brief Update the window layout in the settings. |
| 645 | void OpenHantekMainWindow::updateSettings() { | 557 | void OpenHantekMainWindow::updateSettings() { |
| 646 | // Main window | 558 | // Main window |
| 647 | - this->settings->options.window.position = this->pos(); | ||
| 648 | - this->settings->options.window.size = this->size(); | ||
| 649 | - | ||
| 650 | - // Docking windows | ||
| 651 | - QList<QDockWidget *> docks; | ||
| 652 | - docks.append(this->horizontalDock); | ||
| 653 | - docks.append(this->spectrumDock); | ||
| 654 | - docks.append(this->triggerDock); | ||
| 655 | - docks.append(this->voltageDock); | ||
| 656 | - | ||
| 657 | - QList<DsoSettingsOptionsWindowPanel *> dockSettings; | ||
| 658 | - dockSettings.append(&(this->settings->options.window.dock.horizontal)); | ||
| 659 | - dockSettings.append(&(this->settings->options.window.dock.spectrum)); | ||
| 660 | - dockSettings.append(&(this->settings->options.window.dock.trigger)); | ||
| 661 | - dockSettings.append(&(this->settings->options.window.dock.voltage)); | ||
| 662 | - | ||
| 663 | - for (int dockId = 0; dockId < docks.size(); ++dockId) { | ||
| 664 | - dockSettings[dockId]->floating = docks[dockId]->isFloating(); | ||
| 665 | - dockSettings[dockId]->position = docks[dockId]->pos(); | ||
| 666 | - dockSettings[dockId]->visible = docks[dockId]->isVisible(); | ||
| 667 | - } | ||
| 668 | - | ||
| 669 | - // Toolbars | ||
| 670 | - QList<QToolBar *> toolbars; | ||
| 671 | - toolbars.append(this->fileToolBar); | ||
| 672 | - toolbars.append(this->oscilloscopeToolBar); | ||
| 673 | - toolbars.append(this->viewToolBar); | ||
| 674 | - | ||
| 675 | - QList<DsoSettingsOptionsWindowPanel *> toolbarSettings; | ||
| 676 | - toolbarSettings.append(&(this->settings->options.window.toolbar.file)); | ||
| 677 | - toolbarSettings.append( | ||
| 678 | - &(this->settings->options.window.toolbar.oscilloscope)); | ||
| 679 | - toolbarSettings.append(&(this->settings->options.window.toolbar.view)); | ||
| 680 | - | ||
| 681 | - for (int toolbarId = 0; toolbarId < toolbars.size(); ++toolbarId) { | ||
| 682 | - toolbarSettings[toolbarId]->floating = toolbars[toolbarId]->isFloating(); | ||
| 683 | - toolbarSettings[toolbarId]->position = toolbars[toolbarId]->pos(); | ||
| 684 | - toolbarSettings[toolbarId]->visible = toolbars[toolbarId]->isVisible(); | ||
| 685 | - } | 559 | + settings->mainWindowGeometry = saveGeometry(); |
| 560 | + settings->mainWindowState = saveState(); | ||
| 686 | } | 561 | } |
| 687 | 562 | ||
| 688 | /// \brief The oscilloscope changed the record time. | 563 | /// \brief The oscilloscope changed the record time. |
openhantek/src/openhantek.h
| @@ -70,10 +70,6 @@ private: | @@ -70,10 +70,6 @@ private: | ||
| 70 | int readSettings(const QString &fileName = QString()); | 70 | int readSettings(const QString &fileName = QString()); |
| 71 | int writeSettings(const QString &fileName = QString()); | 71 | int writeSettings(const QString &fileName = QString()); |
| 72 | 72 | ||
| 73 | - // Window translation events | ||
| 74 | - void moveEvent(QMoveEvent *event); | ||
| 75 | - void resizeEvent(QResizeEvent *event); | ||
| 76 | - | ||
| 77 | // Actions | 73 | // Actions |
| 78 | QAction *newAction, *openAction, *saveAction, *saveAsAction; | 74 | QAction *newAction, *openAction, *saveAction, *saveAsAction; |
| 79 | QAction *printAction, *exportAsAction; | 75 | QAction *printAction, *exportAsAction; |
openhantek/src/settings.cpp
| @@ -36,24 +36,6 @@ DsoSettings::DsoSettings(QWidget *parent) : QObject(parent) { | @@ -36,24 +36,6 @@ DsoSettings::DsoSettings(QWidget *parent) : QObject(parent) { | ||
| 36 | // Options | 36 | // Options |
| 37 | this->options.alwaysSave = true; | 37 | this->options.alwaysSave = true; |
| 38 | this->options.imageSize = QSize(640, 480); | 38 | this->options.imageSize = QSize(640, 480); |
| 39 | - // Main window | ||
| 40 | - this->options.window.position = QPoint(); | ||
| 41 | - this->options.window.size = QSize(800, 600); | ||
| 42 | - // Docking windows and toolbars | ||
| 43 | - QList<DsoSettingsOptionsWindowPanel *> panels; | ||
| 44 | - panels.append(&(this->options.window.dock.horizontal)); | ||
| 45 | - panels.append(&(this->options.window.dock.spectrum)); | ||
| 46 | - panels.append(&(this->options.window.dock.trigger)); | ||
| 47 | - panels.append(&(this->options.window.dock.voltage)); | ||
| 48 | - panels.append(&(this->options.window.toolbar.file)); | ||
| 49 | - panels.append(&(this->options.window.toolbar.oscilloscope)); | ||
| 50 | - panels.append(&(this->options.window.toolbar.view)); | ||
| 51 | - for (int panelId = 0; panelId < panels.size(); ++panelId) { | ||
| 52 | - panels[panelId]->floating = false; | ||
| 53 | - panels[panelId]->position = QPoint(); | ||
| 54 | - panels[panelId]->visible = true; | ||
| 55 | - } | ||
| 56 | - | ||
| 57 | // Oscilloscope settings | 39 | // Oscilloscope settings |
| 58 | // Horizontal axis | 40 | // Horizontal axis |
| 59 | this->scope.horizontal.format = Dso::GRAPHFORMAT_TY; | 41 | this->scope.horizontal.format = Dso::GRAPHFORMAT_TY; |
| @@ -213,68 +195,17 @@ int DsoSettings::load(const QString &fileName) { | @@ -213,68 +195,17 @@ int DsoSettings::load(const QString &fileName) { | ||
| 213 | if (settingsLoader->status() != QSettings::NoError) | 195 | if (settingsLoader->status() != QSettings::NoError) |
| 214 | return -settingsLoader->status(); | 196 | return -settingsLoader->status(); |
| 215 | 197 | ||
| 216 | - // Main window layout and other general options | ||
| 217 | - settingsLoader->beginGroup("options"); | ||
| 218 | - settingsLoader->beginGroup("window"); | ||
| 219 | - // Docking windows and toolbars | ||
| 220 | - settingsLoader->beginGroup("docks"); | ||
| 221 | - QList<DsoSettingsOptionsWindowPanel *> docks; | ||
| 222 | - docks.append(&(this->options.window.dock.horizontal)); | ||
| 223 | - docks.append(&(this->options.window.dock.spectrum)); | ||
| 224 | - docks.append(&(this->options.window.dock.trigger)); | ||
| 225 | - docks.append(&(this->options.window.dock.voltage)); | ||
| 226 | - QStringList dockNames; | ||
| 227 | - dockNames << "horizontal" | ||
| 228 | - << "spectrum" | ||
| 229 | - << "trigger" | ||
| 230 | - << "voltage"; | ||
| 231 | - for (int dockId = 0; dockId < docks.size(); ++dockId) { | ||
| 232 | - settingsLoader->beginGroup(dockNames[dockId]); | ||
| 233 | - if (settingsLoader->contains("floating")) | ||
| 234 | - docks[dockId]->floating = settingsLoader->value("floating").toBool(); | ||
| 235 | - if (settingsLoader->contains("position")) | ||
| 236 | - docks[dockId]->position = settingsLoader->value("position").toPoint(); | ||
| 237 | - if (settingsLoader->contains("visible")) | ||
| 238 | - docks[dockId]->visible = settingsLoader->value("visible").toBool(); | ||
| 239 | - settingsLoader->endGroup(); | ||
| 240 | - } | ||
| 241 | - settingsLoader->endGroup(); | ||
| 242 | - settingsLoader->beginGroup("toolbars"); | ||
| 243 | - QList<DsoSettingsOptionsWindowPanel *> toolbars; | ||
| 244 | - toolbars.append(&(this->options.window.toolbar.file)); | ||
| 245 | - toolbars.append(&(this->options.window.toolbar.oscilloscope)); | ||
| 246 | - toolbars.append(&(this->options.window.toolbar.view)); | ||
| 247 | - QStringList toolbarNames; | ||
| 248 | - toolbarNames << "file" | ||
| 249 | - << "oscilloscope" | ||
| 250 | - << "view"; | ||
| 251 | - for (int toolbarId = 0; toolbarId < toolbars.size(); ++toolbarId) { | ||
| 252 | - settingsLoader->beginGroup(toolbarNames[toolbarId]); | ||
| 253 | - if (settingsLoader->contains("floating")) | ||
| 254 | - toolbars[toolbarId]->floating = | ||
| 255 | - settingsLoader->value("floating").toBool(); | ||
| 256 | - if (settingsLoader->contains("position")) | ||
| 257 | - toolbars[toolbarId]->position = | ||
| 258 | - settingsLoader->value("position").toPoint(); | ||
| 259 | - if (settingsLoader->contains("visible")) | ||
| 260 | - toolbars[toolbarId]->visible = settingsLoader->value("visible").toBool(); | ||
| 261 | - settingsLoader->endGroup(); | ||
| 262 | - } | ||
| 263 | - settingsLoader->endGroup(); | ||
| 264 | - // Main window | ||
| 265 | - if (settingsLoader->contains("pos")) | ||
| 266 | - this->options.window.position = settingsLoader->value("pos").toPoint(); | ||
| 267 | - if (settingsLoader->contains("size")) | ||
| 268 | - this->options.window.size = settingsLoader->value("size").toSize(); | ||
| 269 | - settingsLoader->endGroup(); | ||
| 270 | // General options | 198 | // General options |
| 199 | + settingsLoader->beginGroup("options"); | ||
| 271 | if (settingsLoader->contains("alwaysSave")) | 200 | if (settingsLoader->contains("alwaysSave")) |
| 272 | this->options.alwaysSave = settingsLoader->value("alwaysSave").toBool(); | 201 | this->options.alwaysSave = settingsLoader->value("alwaysSave").toBool(); |
| 273 | if (settingsLoader->contains("imageSize")) | 202 | if (settingsLoader->contains("imageSize")) |
| 274 | this->options.imageSize = settingsLoader->value("imageSize").toSize(); | 203 | this->options.imageSize = settingsLoader->value("imageSize").toSize(); |
| 204 | + // If the window/* keys were found in this group, remove them from settings | ||
| 205 | + settingsLoader->remove("window"); | ||
| 275 | settingsLoader->endGroup(); | 206 | settingsLoader->endGroup(); |
| 276 | 207 | ||
| 277 | - // Oszilloskope settings | 208 | + // Oscilloscope settings |
| 278 | settingsLoader->beginGroup("scope"); | 209 | settingsLoader->beginGroup("scope"); |
| 279 | // Horizontal axis | 210 | // Horizontal axis |
| 280 | settingsLoader->beginGroup("horizontal"); | 211 | settingsLoader->beginGroup("horizontal"); |
| @@ -419,6 +350,11 @@ int DsoSettings::load(const QString &fileName) { | @@ -419,6 +350,11 @@ int DsoSettings::load(const QString &fileName) { | ||
| 419 | (Dso::InterpolationMode)settingsLoader->value("zoom").toBool(); | 350 | (Dso::InterpolationMode)settingsLoader->value("zoom").toBool(); |
| 420 | settingsLoader->endGroup(); | 351 | settingsLoader->endGroup(); |
| 421 | 352 | ||
| 353 | + settingsLoader->beginGroup("window"); | ||
| 354 | + mainWindowGeometry = settingsLoader->value("geometry").toByteArray(); | ||
| 355 | + mainWindowState = settingsLoader->value("state").toByteArray(); | ||
| 356 | + settingsLoader->endGroup(); | ||
| 357 | + | ||
| 422 | delete settingsLoader; | 358 | delete settingsLoader; |
| 423 | 359 | ||
| 424 | return 0; | 360 | return 0; |
| @@ -441,48 +377,6 @@ int DsoSettings::save(const QString &fileName) { | @@ -441,48 +377,6 @@ int DsoSettings::save(const QString &fileName) { | ||
| 441 | if (complete) { | 377 | if (complete) { |
| 442 | // Main window layout and other general options | 378 | // Main window layout and other general options |
| 443 | settingsSaver->beginGroup("options"); | 379 | settingsSaver->beginGroup("options"); |
| 444 | - settingsSaver->beginGroup("window"); | ||
| 445 | - // Docking windows and toolbars | ||
| 446 | - settingsSaver->beginGroup("docks"); | ||
| 447 | - QList<DsoSettingsOptionsWindowPanel *> docks; | ||
| 448 | - docks.append(&(this->options.window.dock.horizontal)); | ||
| 449 | - docks.append(&(this->options.window.dock.spectrum)); | ||
| 450 | - docks.append(&(this->options.window.dock.trigger)); | ||
| 451 | - docks.append(&(this->options.window.dock.voltage)); | ||
| 452 | - QStringList dockNames; | ||
| 453 | - dockNames << "horizontal" | ||
| 454 | - << "spectrum" | ||
| 455 | - << "trigger" | ||
| 456 | - << "voltage"; | ||
| 457 | - for (int dockId = 0; dockId < docks.size(); ++dockId) { | ||
| 458 | - settingsSaver->beginGroup(dockNames[dockId]); | ||
| 459 | - settingsSaver->setValue("floating", docks[dockId]->floating); | ||
| 460 | - settingsSaver->setValue("position", docks[dockId]->position); | ||
| 461 | - settingsSaver->setValue("visible", docks[dockId]->visible); | ||
| 462 | - settingsSaver->endGroup(); | ||
| 463 | - } | ||
| 464 | - settingsSaver->endGroup(); | ||
| 465 | - settingsSaver->beginGroup("toolbars"); | ||
| 466 | - QList<DsoSettingsOptionsWindowPanel *> toolbars; | ||
| 467 | - toolbars.append(&(this->options.window.toolbar.file)); | ||
| 468 | - toolbars.append(&(this->options.window.toolbar.oscilloscope)); | ||
| 469 | - toolbars.append(&(this->options.window.toolbar.view)); | ||
| 470 | - QStringList toolbarNames; | ||
| 471 | - toolbarNames << "file" | ||
| 472 | - << "oscilloscope" | ||
| 473 | - << "view"; | ||
| 474 | - for (int toolbarId = 0; toolbarId < toolbars.size(); ++toolbarId) { | ||
| 475 | - settingsSaver->beginGroup(toolbarNames[toolbarId]); | ||
| 476 | - settingsSaver->setValue("floating", toolbars[toolbarId]->floating); | ||
| 477 | - settingsSaver->setValue("position", toolbars[toolbarId]->position); | ||
| 478 | - settingsSaver->setValue("visible", toolbars[toolbarId]->visible); | ||
| 479 | - settingsSaver->endGroup(); | ||
| 480 | - } | ||
| 481 | - settingsSaver->endGroup(); | ||
| 482 | - // Main window | ||
| 483 | - settingsSaver->setValue("pos", this->options.window.position); | ||
| 484 | - settingsSaver->setValue("size", this->options.window.size); | ||
| 485 | - settingsSaver->endGroup(); | ||
| 486 | settingsSaver->setValue("alwaysSave", this->options.alwaysSave); | 380 | settingsSaver->setValue("alwaysSave", this->options.alwaysSave); |
| 487 | settingsSaver->setValue("imageSize", this->options.imageSize); | 381 | settingsSaver->setValue("imageSize", this->options.imageSize); |
| 488 | settingsSaver->endGroup(); | 382 | settingsSaver->endGroup(); |
| @@ -576,6 +470,11 @@ int DsoSettings::save(const QString &fileName) { | @@ -576,6 +470,11 @@ int DsoSettings::save(const QString &fileName) { | ||
| 576 | settingsSaver->setValue("zoom", this->view.zoom); | 470 | settingsSaver->setValue("zoom", this->view.zoom); |
| 577 | settingsSaver->endGroup(); | 471 | settingsSaver->endGroup(); |
| 578 | 472 | ||
| 473 | + settingsSaver->beginGroup("window"); | ||
| 474 | + settingsSaver->setValue("geometry", mainWindowGeometry); | ||
| 475 | + settingsSaver->setValue("state", mainWindowState); | ||
| 476 | + settingsSaver->endGroup(); | ||
| 477 | + | ||
| 579 | delete settingsSaver; | 478 | delete settingsSaver; |
| 580 | 479 | ||
| 581 | return 0; | 480 | return 0; |
openhantek/src/settings.h
| @@ -35,50 +35,11 @@ | @@ -35,50 +35,11 @@ | ||
| 35 | #include "dso.h" | 35 | #include "dso.h" |
| 36 | 36 | ||
| 37 | //////////////////////////////////////////////////////////////////////////////// | 37 | //////////////////////////////////////////////////////////////////////////////// |
| 38 | -/// \struct DsoSettingsOptionsWindowPanel settings.h | ||
| 39 | -/// \brief Holds the position and state of a docking window or toolbar. | ||
| 40 | -struct DsoSettingsOptionsWindowPanel { | ||
| 41 | - bool floating; ///< true, if the panel is floating | ||
| 42 | - QPoint position; ///< Position of the panel | ||
| 43 | - bool visible; ///< true, if the panel is shown | ||
| 44 | -}; | ||
| 45 | - | ||
| 46 | -//////////////////////////////////////////////////////////////////////////////// | ||
| 47 | -/// \struct DsoSettingsOptionsWindowDock settings.h | ||
| 48 | -/// \brief Holds the layout of the docking windows. | ||
| 49 | -struct DsoSettingsOptionsWindowDock { | ||
| 50 | - DsoSettingsOptionsWindowPanel horizontal; ///< "Horizontal" docking window | ||
| 51 | - DsoSettingsOptionsWindowPanel spectrum; ///< "Spectrum" docking window | ||
| 52 | - DsoSettingsOptionsWindowPanel trigger; ///< "Trigger" docking window | ||
| 53 | - DsoSettingsOptionsWindowPanel voltage; ///< "Voltage" docking window | ||
| 54 | -}; | ||
| 55 | - | ||
| 56 | -//////////////////////////////////////////////////////////////////////////////// | ||
| 57 | -/// \struct DsoSettingsOptionsWindowToolbar settings.h | ||
| 58 | -/// \brief Holds the layout of the toolbars. | ||
| 59 | -struct DsoSettingsOptionsWindowToolbar { | ||
| 60 | - DsoSettingsOptionsWindowPanel file; ///< "File" toolbar | ||
| 61 | - DsoSettingsOptionsWindowPanel oscilloscope; ///< "Oscilloscope" toolbar | ||
| 62 | - DsoSettingsOptionsWindowPanel view; ///< The "View" toolbar | ||
| 63 | -}; | ||
| 64 | - | ||
| 65 | -//////////////////////////////////////////////////////////////////////////////// | ||
| 66 | -/// \struct DsoSettingsOptionsWindow settings.h | ||
| 67 | -/// \brief Holds the layout of the main window. | ||
| 68 | -struct DsoSettingsOptionsWindow { | ||
| 69 | - QPoint position; ///< Position of the main window | ||
| 70 | - QSize size; ///< Size of the main window | ||
| 71 | - DsoSettingsOptionsWindowDock dock; ///< Docking windows | ||
| 72 | - DsoSettingsOptionsWindowToolbar toolbar; ///< Toolbars | ||
| 73 | -}; | ||
| 74 | - | ||
| 75 | -//////////////////////////////////////////////////////////////////////////////// | ||
| 76 | /// \struct DsoSettingsOptions settings.h | 38 | /// \struct DsoSettingsOptions settings.h |
| 77 | /// \brief Holds the general options of the program. | 39 | /// \brief Holds the general options of the program. |
| 78 | struct DsoSettingsOptions { | 40 | struct DsoSettingsOptions { |
| 79 | bool alwaysSave; ///< Always save the settings on exit | 41 | bool alwaysSave; ///< Always save the settings on exit |
| 80 | QSize imageSize; ///< Size of exported images in pixels | 42 | QSize imageSize; ///< Size of exported images in pixels |
| 81 | - DsoSettingsOptionsWindow window; ///< Window layout | ||
| 82 | }; | 43 | }; |
| 83 | 44 | ||
| 84 | //////////////////////////////////////////////////////////////////////////////// | 45 | //////////////////////////////////////////////////////////////////////////////// |
| @@ -195,6 +156,9 @@ public: | @@ -195,6 +156,9 @@ public: | ||
| 195 | DsoSettingsScope scope; ///< All oscilloscope related settings | 156 | DsoSettingsScope scope; ///< All oscilloscope related settings |
| 196 | DsoSettingsView view; ///< All view related settings | 157 | DsoSettingsView view; ///< All view related settings |
| 197 | 158 | ||
| 159 | + QByteArray mainWindowGeometry; ///< Geometry of the main window | ||
| 160 | + QByteArray mainWindowState; ///< State of docking windows and toolbars | ||
| 161 | + | ||
| 198 | public slots: | 162 | public slots: |
| 199 | // Saving to and loading from configuration files | 163 | // Saving to and loading from configuration files |
| 200 | int load(const QString &fileName = QString()); | 164 | int load(const QString &fileName = QString()); |