# HG changeset patch # User Hasan Yavuz ÖZDERYA # Date 2017-10-27 07:33:02 # Node ID 90cee575170fb8de160e9a6a0e15f0ab930a8d23 # Parent 557e95e17a97afde9019bef7c85e5b79ce1ef110 moved 'view' menu to a separate class diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -134,6 +134,7 @@ add_executable(${PROGRAM_NAME} WIN32 src/framedreader.cpp src/framedreadersettings.cpp src/plotmanager.cpp + src/plotmenu.cpp src/barplot.cpp src/barchart.cpp src/barscaledraw.cpp diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -70,7 +70,7 @@ MainWindow::MainWindow(QWidget *parent) { ui->setupUi(this); - plotMan = new PlotManager(ui->plotArea, channelMan.infoModel()); + plotMan = new PlotManager(ui->plotArea, &plotMenu, channelMan.infoModel()); ui->tabWidget->insertTab(0, &portControl, "Port"); ui->tabWidget->insertTab(1, &dataFormatPanel, "Data Format"); @@ -83,8 +83,8 @@ MainWindow::MainWindow(QWidget *parent) addToolBar(recordPanel.toolbar()); ui->plotToolBar->addAction(snapshotMan.takeSnapshotAction()); - ui->menuBar->insertMenu(ui->menuHelp->menuAction(), snapshotMan.menu()); - ui->menuBar->insertMenu(ui->menuHelp->menuAction(), commandPanel.menu()); + menuBar()->insertMenu(ui->menuHelp->menuAction(), snapshotMan.menu()); + menuBar()->insertMenu(ui->menuHelp->menuAction(), commandPanel.menu()); connect(&commandPanel, &CommandPanel::focusRequested, [this]() { @@ -98,14 +98,9 @@ MainWindow::MainWindow(QWidget *parent) setupAboutDialog(); // init view menu - for (auto a : plotMan->menuActions()) - { - ui->menuView->addAction(a); - } - - ui->menuView->addSeparator(); - - QMenu* tbMenu = ui->menuView->addMenu("Toolbars"); + ui->menuBar->insertMenu(ui->menuSecondary->menuAction(), &plotMenu); + plotMenu.addSeparator(); + QMenu* tbMenu = plotMenu.addMenu("Toolbars"); tbMenu->addAction(ui->plotToolBar->toggleViewAction()); tbMenu->addAction(portControl.toolBar()->toggleViewAction()); @@ -548,7 +543,7 @@ void MainWindow::onExportCsv() PlotViewSettings MainWindow::viewSettings() const { - return plotMan->viewSettings(); + return plotMenu.viewSettings(); } void MainWindow::messageHandler(QtMsgType type, @@ -599,7 +594,7 @@ void MainWindow::saveAllSettings(QSettin dataFormatPanel.saveSettings(settings); channelMan.saveSettings(settings); plotControlPanel.saveSettings(settings); - plotMan->saveSettings(settings); + plotMenu.saveSettings(settings); commandPanel.saveSettings(settings); recordPanel.saveSettings(settings); updateCheckDialog.saveSettings(settings); @@ -612,7 +607,7 @@ void MainWindow::loadAllSettings(QSettin dataFormatPanel.loadSettings(settings); channelMan.loadSettings(settings); plotControlPanel.loadSettings(settings); - plotMan->loadSettings(settings); + plotMenu.loadSettings(settings); commandPanel.loadSettings(settings); recordPanel.loadSettings(settings); updateCheckDialog.loadSettings(settings); diff --git a/src/mainwindow.h b/src/mainwindow.h --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -44,6 +44,7 @@ #include "channelmanager.h" #include "snapshotmanager.h" #include "plotmanager.h" +#include "plotmenu.h" #include "datarecorder.h" #include "updatecheckdialog.h" @@ -87,6 +88,7 @@ private: DataFormatPanel dataFormatPanel; RecordPanel recordPanel; PlotControlPanel plotControlPanel; + PlotMenu plotMenu; UpdateCheckDialog updateCheckDialog; /// Returns true if demo is running diff --git a/src/mainwindow.ui b/src/mainwindow.ui --- a/src/mainwindow.ui +++ b/src/mainwindow.ui @@ -101,7 +101,7 @@ 0 0 653 - 23 + 24 @@ -123,11 +123,6 @@ - - - &View - - Secondary @@ -138,7 +133,6 @@ - diff --git a/src/plotmanager.cpp b/src/plotmanager.cpp --- a/src/plotmanager.cpp +++ b/src/plotmanager.cpp @@ -18,7 +18,6 @@ */ #include -#include #include #include #include "qwt_symbol.h" @@ -28,17 +27,12 @@ #include "utils.h" #include "setting_defines.h" -PlotManager::PlotManager(QWidget* plotArea, ChannelInfoModel* infoModel, QObject *parent) : - QObject(parent), - _plotArea(plotArea), - showGridAction("&Grid", this), - showMinorGridAction("&Minor Grid", this), - unzoomAction("&Unzoom", this), - darkBackgroundAction("&Dark Background", this), - showLegendAction("&Legend", this), - showMultiAction("Multi &Plot", this), - setSymbolsAction("Symbols", this) +PlotManager::PlotManager(QWidget* plotArea, PlotMenu* menu, + ChannelInfoModel* infoModel, QObject* parent) : + QObject(parent) { + _menu = menu; + _plotArea = plotArea; _autoScaled = true; _yMin = 0; _yMax = 1; @@ -56,78 +50,28 @@ PlotManager::PlotManager(QWidget* plotAr setupLayout(isMulti); addPlotWidget(); - // initialize menu actions - showGridAction.setToolTip("Show Grid"); - showMinorGridAction.setToolTip("Show Minor Grid"); - unzoomAction.setToolTip("Unzoom the Plot"); - darkBackgroundAction.setToolTip("Enable Dark Plot Background"); - showLegendAction.setToolTip("Display the Legend on Plot"); - showMultiAction.setToolTip("Display All Channels Separately"); - setSymbolsAction.setToolTip("Show/Hide symbols"); - - showGridAction.setShortcut(QKeySequence("G")); - showMinorGridAction.setShortcut(QKeySequence("M")); - - showGridAction.setCheckable(true); - showMinorGridAction.setCheckable(true); - darkBackgroundAction.setCheckable(true); - showLegendAction.setCheckable(true); - showMultiAction.setCheckable(true); - - showGridAction.setChecked(false); - showMinorGridAction.setChecked(false); - darkBackgroundAction.setChecked(false); - showLegendAction.setChecked(true); - showMultiAction.setChecked(false); - - showMinorGridAction.setEnabled(false); + // connect to menu + connect(menu, &PlotMenu::symbolShowChanged, this, &PlotManager:: setSymbols); - // setup symbols menu - setSymbolsAutoAct = setSymbolsMenu.addAction("Show When Zoomed"); - setSymbolsAutoAct->setCheckable(true); - setSymbolsAutoAct->setChecked(true); - connect(setSymbolsAutoAct, SELECT::OVERLOAD_OF(&QAction::triggered), - [this](bool checked) - { - if (checked) setSymbols(Plot::ShowSymbolsAuto); - }); - setSymbolsShowAct = setSymbolsMenu.addAction("Always Show"); - setSymbolsShowAct->setCheckable(true); - connect(setSymbolsShowAct, SELECT::OVERLOAD_OF(&QAction::triggered), - [this](bool checked) - { - if (checked) setSymbols(Plot::ShowSymbolsShow); - }); - setSymbolsHideAct = setSymbolsMenu.addAction("Always Hide"); - setSymbolsHideAct->setCheckable(true); - connect(setSymbolsHideAct, SELECT::OVERLOAD_OF(&QAction::triggered), - [this](bool checked) - { - if (checked) setSymbols(Plot::ShowSymbolsHide); - }); - setSymbolsAction.setMenu(&setSymbolsMenu); + connect(&menu->showGridAction, SELECT::OVERLOAD_OF(&QAction::toggled), + this, &PlotManager::showGrid); + connect(&menu->showMinorGridAction, SELECT::OVERLOAD_OF(&QAction::toggled), + this, &PlotManager::showMinorGrid); + connect(&menu->darkBackgroundAction, SELECT::OVERLOAD_OF(&QAction::toggled), + this, &PlotManager::darkBackground); + connect(&menu->showLegendAction, SELECT::OVERLOAD_OF(&QAction::toggled), + this, &PlotManager::showLegend); + connect(&menu->showMultiAction, SELECT::OVERLOAD_OF(&QAction::toggled), + this, &PlotManager::setMulti); + connect(&menu->unzoomAction, &QAction::triggered, + this, &PlotManager::unzoom); - // add symbol actions to same group so that they appear as radio buttons - auto group = new QActionGroup(this); - group->addAction(setSymbolsAutoAct); - group->addAction(setSymbolsShowAct); - group->addAction(setSymbolsHideAct); - - connect(&showGridAction, SELECT::OVERLOAD_OF(&QAction::triggered), - this, &PlotManager::showGrid); - connect(&showGridAction, SELECT::OVERLOAD_OF(&QAction::triggered), - &showMinorGridAction, &QAction::setEnabled); - connect(&showMinorGridAction, SELECT::OVERLOAD_OF(&QAction::triggered), - this, &PlotManager::showMinorGrid); - connect(&unzoomAction, &QAction::triggered, this, &PlotManager::unzoom); - connect(&darkBackgroundAction, SELECT::OVERLOAD_OF(&QAction::triggered), - this, &PlotManager::darkBackground); - connect(&showLegendAction, SELECT::OVERLOAD_OF(&QAction::triggered), - this, &PlotManager::showLegend); - connect(&showLegendAction, SELECT::OVERLOAD_OF(&QAction::triggered), - this, &PlotManager::showLegend); - connect(&showMultiAction, SELECT::OVERLOAD_OF(&QAction::triggered), - this, &PlotManager::setMulti); + // initial settings from menu actions + showGrid(menu->showGridAction.isChecked()); + showMinorGrid(menu->showMinorGridAction.isChecked()); + darkBackground(menu->darkBackgroundAction.isChecked()); + showLegend(menu->showLegendAction.isChecked()); + setMulti(menu->showMultiAction.isChecked()); // connect to channel info model if (_infoModel != NULL) // TODO: remove when snapshots have infomodel @@ -308,14 +252,15 @@ Plot* PlotManager::addPlotWidget() plotWidgets.append(plot); layout->addWidget(plot); - plot->darkBackground(darkBackgroundAction.isChecked()); - plot->showGrid(showGridAction.isChecked()); - plot->showMinorGrid(showMinorGridAction.isChecked()); - plot->showLegend(showLegendAction.isChecked()); + plot->darkBackground(_menu->darkBackgroundAction.isChecked()); + plot->showGrid(_menu->showGridAction.isChecked()); + plot->showMinorGrid(_menu->showMinorGridAction.isChecked()); + plot->showLegend(_menu->showLegendAction.isChecked()); + plot->setSymbols(_menu->showSymbols()); + plot->showDemoIndicator(isDemoShown); plot->setYAxis(_autoScaled, _yMin, _yMax); plot->setNumOfSamples(_numOfSamples); - plot->setSymbols(showSymbols); plot->setPlotWidth(_plotWidth); if (_xAxisAsIndex) @@ -419,19 +364,6 @@ void PlotManager::replot() } } -QList PlotManager::menuActions() -{ - QList actions; - actions << &showGridAction; - actions << &showMinorGridAction; - actions << &unzoomAction; - actions << &darkBackgroundAction; - actions << &showLegendAction; - actions << &showMultiAction; - actions << &setSymbolsAction; - return actions; -} - void PlotManager::showGrid(bool show) { for (auto plot : plotWidgets) @@ -530,7 +462,7 @@ void PlotManager::flashSnapshotOverlay() { for (auto plot : plotWidgets) { - plot->flashSnapshotOverlay(darkBackgroundAction.isChecked()); + plot->flashSnapshotOverlay(_menu->darkBackgroundAction.isChecked()); } } @@ -552,115 +484,3 @@ void PlotManager::setPlotWidth(double wi plot->setPlotWidth(width); } } - -PlotViewSettings PlotManager::viewSettings() const -{ - return PlotViewSettings( - { - showGridAction.isChecked(), - showMinorGridAction.isChecked(), - darkBackgroundAction.isChecked(), - showLegendAction.isChecked(), - showMultiAction.isChecked(), - showSymbols - }); -} - -void PlotManager::setViewSettings(const PlotViewSettings& settings) -{ - showGridAction.setChecked(settings.showGrid); - showGrid(settings.showGrid); - showMinorGridAction.setChecked(settings.showMinorGrid); - showMinorGrid(settings.showMinorGrid); - darkBackgroundAction.setChecked(settings.darkBackground); - darkBackground(settings.darkBackground); - showLegendAction.setChecked(settings.showLegend); - showLegend(settings.showLegend); - showMultiAction.setChecked(settings.showMulti); - setMulti(settings.showMulti); - - setSymbols(settings.showSymbols); - if (showSymbols == Plot::ShowSymbolsAuto) - { - setSymbolsAutoAct->setChecked(true); - } - else if (showSymbols == Plot::ShowSymbolsShow) - { - setSymbolsShowAct->setChecked(true); - } - else - { - setSymbolsHideAct->setChecked(true); - } -} - -void PlotManager::saveSettings(QSettings* settings) -{ - settings->beginGroup(SettingGroup_Plot); - settings->setValue(SG_Plot_DarkBackground, darkBackgroundAction.isChecked()); - settings->setValue(SG_Plot_Grid, showGridAction.isChecked()); - settings->setValue(SG_Plot_MinorGrid, showMinorGridAction.isChecked()); - settings->setValue(SG_Plot_Legend, showLegendAction.isChecked()); - settings->setValue(SG_Plot_MultiPlot, showMultiAction.isChecked()); - - QString showSymbolsStr; - if (showSymbols == Plot::ShowSymbolsAuto) - { - showSymbolsStr = "auto"; - } - else if (showSymbols == Plot::ShowSymbolsShow) - { - showSymbolsStr = "show"; - } - else - { - showSymbolsStr = "hide"; - } - settings->setValue(SG_Plot_Symbols, showSymbolsStr); - - settings->endGroup(); -} - -void PlotManager::loadSettings(QSettings* settings) -{ - settings->beginGroup(SettingGroup_Plot); - darkBackgroundAction.setChecked( - settings->value(SG_Plot_DarkBackground, darkBackgroundAction.isChecked()).toBool()); - darkBackground(darkBackgroundAction.isChecked()); - showGridAction.setChecked( - settings->value(SG_Plot_Grid, showGridAction.isChecked()).toBool()); - showGrid(showGridAction.isChecked()); - showMinorGridAction.setChecked( - settings->value(SG_Plot_MinorGrid, showMinorGridAction.isChecked()).toBool()); - showMinorGridAction.setEnabled(showGridAction.isChecked()); - showMinorGrid(showMinorGridAction.isChecked()); - showLegendAction.setChecked( - settings->value(SG_Plot_Legend, showLegendAction.isChecked()).toBool()); - showLegend(showLegendAction.isChecked()); - showMultiAction.setChecked( - settings->value(SG_Plot_MultiPlot, showMultiAction.isChecked()).toBool()); - setMulti(showMultiAction.isChecked()); - - QString showSymbolsStr = settings->value(SG_Plot_Symbols, QString()).toString(); - if (showSymbolsStr == "auto") - { - setSymbols(Plot::ShowSymbolsAuto); - setSymbolsAutoAct->setChecked(true); - } - else if (showSymbolsStr == "show") - { - setSymbols(Plot::ShowSymbolsShow); - setSymbolsShowAct->setChecked(true); - } - else if (showSymbolsStr == "hide") - { - setSymbols(Plot::ShowSymbolsHide); - setSymbolsHideAct->setChecked(true); - } - else - { - qCritical() << "Invalid symbol setting:" << showSymbolsStr; - } - - settings->endGroup(); -} diff --git a/src/plotmanager.h b/src/plotmanager.h --- a/src/plotmanager.h +++ b/src/plotmanager.h @@ -26,30 +26,22 @@ #include #include #include -#include #include #include #include "plot.h" #include "framebufferseries.h" #include "channelinfomodel.h" - -struct PlotViewSettings -{ - bool showGrid; - bool showMinorGrid; - bool darkBackground; - bool showLegend; - bool showMulti; - Plot::ShowSymbols showSymbols; -}; +#include "plotmenu.h" class PlotManager : public QObject { Q_OBJECT public: - explicit PlotManager(QWidget* plotArea, ChannelInfoModel* infoModel = NULL, QObject *parent = 0); + explicit PlotManager(QWidget* plotArea, PlotMenu* menu, + ChannelInfoModel* infoModel = NULL, + QObject *parent = 0); ~PlotManager(); /// Add a new curve with title and buffer. A color is /// automatically chosen for curve. @@ -62,16 +54,8 @@ public: void removeCurves(unsigned number); /// Returns current number of curves known by plot manager unsigned numOfCurves(); - /// Returns the list of actions to be inserted into the `View` menu - QList menuActions(); - /// Returns current status of menu actions - PlotViewSettings viewSettings() const; /// Set the current state of view void setViewSettings(const PlotViewSettings& settings); - /// Stores plot settings into a `QSettings`. - void saveSettings(QSettings* settings); - /// Loads plot settings from a `QSettings`. - void loadSettings(QSettings* settings); public slots: /// Enable/Disable multiple plot display @@ -94,6 +78,7 @@ public slots: private: bool isMulti; QWidget* _plotArea; + PlotMenu* _menu; QVBoxLayout* layout; ///< layout of the `plotArea` QScrollArea* scrollArea; QList curves; @@ -111,19 +96,7 @@ private: double _plotWidth; Plot::ShowSymbols showSymbols; - // menu actions - QAction showGridAction; - QAction showMinorGridAction; - QAction unzoomAction; - QAction darkBackgroundAction; - QAction showLegendAction; - QAction showMultiAction; - QAction setSymbolsAction; - QMenu setSymbolsMenu; - QAction* setSymbolsAutoAct; - QAction* setSymbolsShowAct; - QAction* setSymbolsHideAct; - + /// Setups the layout for multi or single plot void setupLayout(bool multiPlot); /// Inserts a new plot widget to the current layout. Plot* addPlotWidget(); @@ -131,7 +104,6 @@ private: Plot* plotWidget(unsigned curveIndex); /// Common part of overloaded `addCurve` functions void _addCurve(QwtPlotCurve* curve); - void setSymbols(Plot::ShowSymbols shown); /// Check and make sure "no visible channels" text is shown void checkNoVisChannels(); @@ -141,6 +113,7 @@ private slots: void showLegend(bool show = true); void unzoom(); void darkBackground(bool enabled = true); + void setSymbols(Plot::ShowSymbols shown); void onChannelInfoChanged(const QModelIndex & topLeft, const QModelIndex & bottomRight, diff --git a/src/plotmenu.cpp b/src/plotmenu.cpp new file mode 100644 --- /dev/null +++ b/src/plotmenu.cpp @@ -0,0 +1,224 @@ +/* + Copyright © 2017 Hasan Yavuz Özderya + + This file is part of serialplot. + + serialplot is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + serialplot is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with serialplot. If not, see . +*/ + +#include "plotmenu.h" +#include "setting_defines.h" +#include "utils.h" + +PlotMenu::PlotMenu(QWidget* parent) : + QMenu(tr("&View"), parent), + showGridAction("&Grid", this), + showMinorGridAction("&Minor Grid", this), + unzoomAction("&Unzoom", this), + darkBackgroundAction("&Dark Background", this), + showLegendAction("&Legend", this), + showMultiAction("Multi &Plot", this), + setSymbolsAction("&Symbols", this), + setSymbolsAutoAct("Show When &Zoomed", this), + setSymbolsShowAct("Always &Show", this), + setSymbolsHideAct("Always &Hide", this) +{ + showGridAction.setToolTip("Show Grid"); + showMinorGridAction.setToolTip("Show Minor Grid"); + unzoomAction.setToolTip("Unzoom the Plot"); + darkBackgroundAction.setToolTip("Enable Dark Plot Background"); + showLegendAction.setToolTip("Display the Legend on Plot"); + showMultiAction.setToolTip("Display All Channels Separately"); + setSymbolsAction.setToolTip("Show/Hide symbols"); + + showGridAction.setShortcut(QKeySequence("G")); + showMinorGridAction.setShortcut(QKeySequence("M")); + + showGridAction.setCheckable(true); + showMinorGridAction.setCheckable(true); + darkBackgroundAction.setCheckable(true); + showLegendAction.setCheckable(true); + showMultiAction.setCheckable(true); + + showGridAction.setChecked(false); + showMinorGridAction.setChecked(false); + darkBackgroundAction.setChecked(false); + showLegendAction.setChecked(true); + showMultiAction.setChecked(false); + + // minor grid is only enabled when _major_ grid is enabled + showMinorGridAction.setEnabled(false); + connect(&showGridAction, SELECT::OVERLOAD_OF(&QAction::triggered), + &showMinorGridAction, &QAction::setEnabled); + + // setup set symbols menu + setSymbolsMenu.addAction(&setSymbolsAutoAct); + setSymbolsAutoAct.setCheckable(true); + setSymbolsAutoAct.setChecked(true); + connect(&setSymbolsAutoAct, SELECT::OVERLOAD_OF(&QAction::triggered), + [this](bool checked) + { + if (checked) emit symbolShowChanged(Plot::ShowSymbolsAuto); + }); + + setSymbolsMenu.addAction(&setSymbolsShowAct); + setSymbolsShowAct.setCheckable(true); + connect(&setSymbolsShowAct, SELECT::OVERLOAD_OF(&QAction::triggered), + [this](bool checked) + { + if (checked) symbolShowChanged(Plot::ShowSymbolsShow); + }); + + setSymbolsMenu.addAction(&setSymbolsHideAct); + setSymbolsHideAct.setCheckable(true); + connect(&setSymbolsHideAct, SELECT::OVERLOAD_OF(&QAction::triggered), + [this](bool checked) + { + if (checked) symbolShowChanged(Plot::ShowSymbolsHide); + }); + + // add symbol actions to same group so that they appear as radio buttons + auto group = new QActionGroup(this); + group->addAction(&setSymbolsAutoAct); + group->addAction(&setSymbolsShowAct); + group->addAction(&setSymbolsHideAct); + + setSymbolsAction.setMenu(&setSymbolsMenu); + + // add all actions to create this menu + addAction(&showGridAction); + addAction(&showMinorGridAction); + addAction(&unzoomAction); + addAction(&darkBackgroundAction); + addAction(&showLegendAction); + addAction(&showMultiAction); + addAction(&setSymbolsAction); +} + +PlotMenu::PlotMenu(PlotViewSettings s, QWidget* parent) : + PlotMenu(parent) +{ + showGridAction.setChecked(s.showGrid); + showMinorGridAction.setChecked(s.showMinorGrid); + darkBackgroundAction.setChecked(s.darkBackground); + showLegendAction.setChecked(s.showLegend); + showMultiAction.setChecked(s.showMulti); + switch (s.showSymbols) + { + case Plot::ShowSymbolsAuto: + setSymbolsAutoAct.setChecked(true); + break; + case Plot::ShowSymbolsShow: + setSymbolsShowAct.setChecked(true); + break; + case Plot::ShowSymbolsHide: + setSymbolsHideAct.setChecked(true); + break; + } +} + +PlotViewSettings PlotMenu::viewSettings() const +{ + return PlotViewSettings( + { + showGridAction.isChecked(), + showMinorGridAction.isChecked(), + darkBackgroundAction.isChecked(), + showLegendAction.isChecked(), + showMultiAction.isChecked(), + showSymbols() + }); +} + +Plot::ShowSymbols PlotMenu::showSymbols() const +{ + if (setSymbolsAutoAct.isChecked()) + { + return Plot::ShowSymbolsAuto; + } + else if (setSymbolsShowAct.isChecked()) + { + return Plot::ShowSymbolsShow; + } + else // setSymbolsHideAct.isChecked() + { + return Plot::ShowSymbolsHide; + } +} + +void PlotMenu::saveSettings(QSettings* settings) +{ + settings->beginGroup(SettingGroup_Plot); + settings->setValue(SG_Plot_DarkBackground, darkBackgroundAction.isChecked()); + settings->setValue(SG_Plot_Grid, showGridAction.isChecked()); + settings->setValue(SG_Plot_MinorGrid, showMinorGridAction.isChecked()); + settings->setValue(SG_Plot_Legend, showLegendAction.isChecked()); + settings->setValue(SG_Plot_MultiPlot, showMultiAction.isChecked()); + + QString showSymbolsStr; + if (showSymbols() == Plot::ShowSymbolsAuto) + { + showSymbolsStr = "auto"; + } + else if (showSymbols() == Plot::ShowSymbolsShow) + { + showSymbolsStr = "show"; + } + else + { + showSymbolsStr = "hide"; + } + settings->setValue(SG_Plot_Symbols, showSymbolsStr); + + settings->endGroup(); +} + +void PlotMenu::loadSettings(QSettings* settings) +{ + settings->beginGroup(SettingGroup_Plot); + darkBackgroundAction.setChecked( + settings->value(SG_Plot_DarkBackground, darkBackgroundAction.isChecked()).toBool()); + showGridAction.setChecked( + settings->value(SG_Plot_Grid, showGridAction.isChecked()).toBool()); + showMinorGridAction.setChecked( + settings->value(SG_Plot_MinorGrid, showMinorGridAction.isChecked()).toBool()); + showMinorGridAction.setEnabled(showGridAction.isChecked()); + showLegendAction.setChecked( + settings->value(SG_Plot_Legend, showLegendAction.isChecked()).toBool()); + showMultiAction.setChecked( + settings->value(SG_Plot_MultiPlot, showMultiAction.isChecked()).toBool()); + + QString showSymbolsStr = settings->value(SG_Plot_Symbols, QString()).toString(); + if (showSymbolsStr == "auto") + { + // setSymbols(Plot::ShowSymbolsAuto); + setSymbolsAutoAct.setChecked(true); + } + else if (showSymbolsStr == "show") + { + // setSymbols(Plot::ShowSymbolsShow); + setSymbolsShowAct.setChecked(true); + } + else if (showSymbolsStr == "hide") + { + // setSymbols(Plot::ShowSymbolsHide); + setSymbolsHideAct.setChecked(true); + } + else + { + qCritical() << "Invalid symbol setting:" << showSymbolsStr; + } + + settings->endGroup(); +} diff --git a/src/plotmenu.h b/src/plotmenu.h new file mode 100644 --- /dev/null +++ b/src/plotmenu.h @@ -0,0 +1,73 @@ +/* + Copyright © 2017 Hasan Yavuz Özderya + + This file is part of serialplot. + + serialplot is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + serialplot is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with serialplot. If not, see . +*/ + +#ifndef PLOTMENU_H +#define PLOTMENU_H + +#include +#include +#include + +#include "plot.h" + +/// Used to quickly transfer view options between different menus +struct PlotViewSettings +{ + bool showGrid; + bool showMinorGrid; + bool darkBackground; + bool showLegend; + bool showMulti; + Plot::ShowSymbols showSymbols; +}; + +class PlotMenu : public QMenu +{ + Q_OBJECT + +public: + PlotMenu(QWidget* parent = 0); + PlotMenu(PlotViewSettings s, QWidget* parent = 0); + + QAction showGridAction; + QAction showMinorGridAction; + QAction unzoomAction; + QAction darkBackgroundAction; + QAction showLegendAction; + QAction showMultiAction; + QAction setSymbolsAction; + QMenu setSymbolsMenu; + QAction setSymbolsAutoAct; + QAction setSymbolsShowAct; + QAction setSymbolsHideAct; + + /// Returns a bundle of current view settings (menu selections) + PlotViewSettings viewSettings() const; + /// Selected "show symbol" option + Plot::ShowSymbols showSymbols() const; + /// Stores plot settings into a `QSettings`. + void saveSettings(QSettings* settings); + /// Loads plot settings from a `QSettings`. + void loadSettings(QSettings* settings); + +signals: + void symbolShowChanged(Plot::ShowSymbols shown); +}; + +#endif // PLOTMENU_H diff --git a/src/snapshotview.cpp b/src/snapshotview.cpp --- a/src/snapshotview.cpp +++ b/src/snapshotview.cpp @@ -23,14 +23,14 @@ SnapshotView::SnapshotView(MainWindow* parent, Snapshot* snapshot) : QMainWindow(parent), ui(new Ui::SnapshotView), - renameDialog(this) + renameDialog(this), + plotMenu(parent->viewSettings()) { _snapshot = snapshot; ui->setupUi(this); - plotMan = new PlotManager(ui->plotArea, snapshot->infoModel(), this); - plotMan->setViewSettings(parent->viewSettings()); + plotMan = new PlotManager(ui->plotArea, &plotMenu, snapshot->infoModel(), this); ui->menuSnapshot->insertAction(ui->actionClose, snapshot->deleteAction()); this->setWindowTitle(snapshot->displayName()); @@ -53,11 +53,8 @@ SnapshotView::SnapshotView(MainWindow* p connect(ui->actionSave, &QAction::triggered, this, &SnapshotView::save); - // add 'View' menu items - for (auto a : plotMan->menuActions()) - { - ui->menuView->addAction(a); - } + // add "View" menu + menuBar()->insertMenu(NULL, &plotMenu); } SnapshotView::~SnapshotView() diff --git a/src/snapshotview.h b/src/snapshotview.h --- a/src/snapshotview.h +++ b/src/snapshotview.h @@ -31,6 +31,7 @@ #include "mainwindow.h" #include "plotmanager.h" +#include "plotmenu.h" #include "snapshot.h" namespace Ui { @@ -54,6 +55,7 @@ private: Snapshot* _snapshot; QInputDialog renameDialog; PlotManager* plotMan; + PlotMenu plotMenu; void closeEvent(QCloseEvent *event); diff --git a/src/snapshotview.ui b/src/snapshotview.ui --- a/src/snapshotview.ui +++ b/src/snapshotview.ui @@ -26,7 +26,7 @@ 0 0 544 - 25 + 24 @@ -37,13 +37,7 @@ - - - &View - - -