Skip to content
Snippets Groups Projects
Commit 949b618d authored by tobiglaser's avatar tobiglaser
Browse files

added Reset Button to Chart Menu + some refactoring

parent 099c2e7f
No related branches found
No related tags found
No related merge requests found
......@@ -2,61 +2,64 @@
#include "cute.h"
#include <QAction.h>
#include <QCheckBox>
#include <QDialog>
#include <QDialogButtonBox>
#include <QLabel>
#include <QLogValueAxis>
#include <QVBoxLayout>
#include <QValueAxis>
#include <qaction.h>
#include <string>
ChartMenu::ChartMenu(std::vector<QWidget*>& graphingWidgets, QWidget* parent) : QMenu(parent)
{
cv = graphingWidgets;
this->graphingWidgets = graphingWidgets;
for (size_t i = 0; i < cv.size(); ++i)
for (size_t i = 0; i < graphingWidgets.size(); ++i)
{
QString name = "Plot ";
name += std::to_string(i).c_str();
QAction* checkboxAction = new QAction(name, this);
vis.push_back(checkboxAction);
QAction* menuCheck = new QAction(name, this);
titles.push_back(name);
visMenu.push_back(menuCheck);
menuCheck->setCheckable(true);
menuCheck->setChecked(!cv[i]->isHidden());
checkboxAction->setCheckable(true); // Make it checkable
checkboxAction->setChecked(!cv[i]->isHidden());
QtCharts::QChartView* chartView = dynamic_cast<QtCharts::QChartView*>(cv[i]);
if (!chartView)
{
addAction(checkboxAction);
connect(checkboxAction, &QAction::triggered, this, &ChartMenu::onOptionSelected);
}
else
{
QString name = "Plot ";
name += std::to_string(i).c_str();
addAction(menuCheck);
QMenu* scaleMenu = new QMenu(name);
menuCheck->setMenu(scaleMenu);
QAction* menuAction = new QAction(name, this);
menuActions.push_back(menuAction);
menuAction->setCheckable(true);
menuAction->setChecked(!graphingWidgets[i]->isHidden());
addAction(menuAction);
scaleMenu->addAction(checkboxAction);
connect(checkboxAction, &QAction::triggered, this, &ChartMenu::onOptionSelected);
scaleMenu->addSeparator();
QMenu* menu = new QMenu(name);
menuAction->setMenu(menu);
QAction* visibilityAction = new QAction(name, this);
visibilityAction->setCheckable(true); // Make it checkable
visibilityAction->setChecked(!graphingWidgets[i]->isHidden());
visibiliyActions.push_back(visibilityAction);
menu->addAction(visibilityAction);
connect(visibilityAction, &QAction::triggered, this, &ChartMenu::onVisibility);
QAction* resetAction = new QAction("Reset", this);
menu->addAction(resetAction);
resetActions.push_back(resetAction);
connect(resetAction, &QAction::triggered, this, &ChartMenu::onReset);
QtCharts::QChartView* chartView = dynamic_cast<QtCharts::QChartView*>(graphingWidgets[i]);
if (chartView)
{
menu->addSeparator();
QAction* xlinAction = new QAction("X - linear");
xlinAction->setCheckable(true);
scaleMenu->addAction(xlinAction);
menu->addAction(xlinAction);
QAction* xlogAction = new QAction("X - logarithmic");
xlogAction->setCheckable(true);
scaleMenu->addAction(xlogAction);
scaleMenu->addSeparator();
menu->addAction(xlogAction);
menu->addSeparator();
QAction* ylinAction = new QAction("Y - linear");
ylinAction->setCheckable(true);
scaleMenu->addAction(ylinAction);
menu->addAction(ylinAction);
QAction* ylogAction = new QAction("Y - logarithmic");
ylogAction->setCheckable(true);
scaleMenu->addAction(ylogAction);
menu->addAction(ylogAction);
scaleBundles.push_back({xlinAction, xlogAction, ylinAction, ylogAction, chartView});
connect(xlinAction, &QAction::triggered, this, &ChartMenu::onScale);
connect(xlogAction, &QAction::triggered, this, &ChartMenu::onScale);
......@@ -71,12 +74,12 @@ ChartMenu::ChartMenu(std::vector<QWidget*>& graphingWidgets, QWidget* parent) :
void ChartMenu::onShow()
{
for (size_t i = 0; i < cv.size(); ++i)
for (size_t i = 0; i < graphingWidgets.size(); ++i)
{
vis[i]->setChecked(!cv[i]->isHidden());
vis[i]->setText(titles[i]);
visMenu[i]->setChecked(!cv[i]->isHidden());
visMenu[i]->setText(titles[i]);
visibiliyActions[i]->setChecked(!graphingWidgets[i]->isHidden());
visibiliyActions[i]->setText(graphingWidgets[i]->isHidden() ? "show" : "hide");
menuActions[i]->setChecked(!graphingWidgets[i]->isHidden());
menuActions[i]->setText(titles[i]);
}
for (auto&& sB : scaleBundles)
......@@ -116,16 +119,44 @@ void ChartMenu::onShow()
}
}
void ChartMenu::onOptionSelected()
void ChartMenu::onVisibility()
{
QAction* senderAction = qobject_cast<QAction*>(sender());
if (senderAction)
{
for (size_t i = 0; i < visibiliyActions.size(); ++i)
{
if (senderAction == visibiliyActions[i])
{
graphingWidgets[i]->setHidden(!senderAction->isChecked());
}
}
}
}
void ChartMenu::onReset()
{
QAction* senderAction = qobject_cast<QAction*>(sender());
if (senderAction)
{
for (size_t i = 0; i < vis.size(); ++i)
for (size_t i = 0; i < resetActions.size(); ++i)
{
if (senderAction == vis[i])
if (senderAction == resetActions[i])
{
cv[i]->setHidden(!senderAction->isChecked());
QDialog dialog;
dialog.setWindowTitle("Confirm Reset");
dialog.setWindowFlags(Qt::Dialog | Qt::WindowTitleHint | Qt::WindowCloseButtonHint);
QVBoxLayout layout(&dialog);
QLabel label("Reset " + titles[i] + '?');
layout.addWidget(&label);
QDialogButtonBox buttonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
layout.addWidget(&buttonBox);
QObject::connect(&buttonBox, &QDialogButtonBox::accepted, &dialog, &QDialog::accept);
QObject::connect(&buttonBox, &QDialogButtonBox::rejected, &dialog, &QDialog::reject);
// modal execution
int result = dialog.exec();
if (result == QDialog::Accepted)
emit s_resetPlot(i);
}
}
}
......@@ -182,9 +213,9 @@ void ChartMenu::onScale()
}
}
int plotIndex = -1;
for (size_t i = 0; i < cv.size(); ++i)
for (size_t i = 0; i < graphingWidgets.size(); ++i)
{
if (cv[i] == bundle.chartView)
if (graphingWidgets[i] == bundle.chartView)
plotIndex = i;
}
int newX = oldXlin ? cute::Scale::linear : cute::Scale::logarithmic;
......
......@@ -21,9 +21,10 @@ private:
};
private:
std::vector<QWidget*> cv;
std::vector<QAction*> vis;
std::vector<QAction*> visMenu;
std::vector<QWidget*> graphingWidgets;
std::vector<QAction*> visibiliyActions;
std::vector<QAction*> resetActions;
std::vector<QAction*> menuActions;
int chartTheme;
std::vector<scaleBundle> scaleBundles;
......@@ -36,14 +37,16 @@ public:
private slots:
void onShow();
void onScale();
void onReset();
public slots:
void onOptionSelected();
void onVisibility();
void chartThemeChanged(int themeNumber);
void titleChanged(int plot, const QString& title);
signals:
void s_setPlotScale(int plot, int x, int y);
void s_resetPlot(int plot);
};
......
......@@ -49,6 +49,7 @@ void Control::makeConnections()
connect(w->configPanel, &ConfigPanel::lockButtonClicked, this, &Control::onLockButton);
connect(w, &MainWindow::saveProblem, this, &Control::saveProblem);
connect(w->cm, &ChartMenu::s_setPlotScale, this, &Control::setPlotScale);
connect(w->cm, &ChartMenu::s_resetPlot, this, &Control::resetPlot);
connect(cc, &CuteControl::s_verbosityChanged, w, &MainWindow::changeVerbosity);
connect(w->configPanel->verbosityBox,
QOverload<int>::of(&QComboBox::currentIndexChanged),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment