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