/* 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(); }