diff --git a/src/configPanel.cpp b/src/configPanel.cpp index f9670a5a18a8dbc85ae4aefe86d3d229c1dae7ee..a78de029e004987c16d41c6199874ca612d8338c 100644 --- a/src/configPanel.cpp +++ b/src/configPanel.cpp @@ -45,9 +45,13 @@ ConfigPanel::ConfigPanel(QWidget* parent) : QDockWidget{parent} fileLine = new QLineEdit(); fileLine->setPlaceholderText("/path/to/yourFile.csv"); fileWidget->layout()->addWidget(fileLine); - fileGenerateButton = new QPushButton("Preview"); + auto fileGenerateButton = new QPushButton("Preview"); fileLayout->addWidget(fileGenerateButton); + auto fileLockButton = new QPushButton("Lock"); + fileLayout->addWidget(fileLockButton); + lockButtons.push_back(fileLockButton); fileLayout->addStretch(); + connect(fileGenerateButton, &QPushButton::clicked, this, &ConfigPanel::previewButtonClicked); connect(openButton, &QPushButton::clicked, this, &ConfigPanel::onOpenButton); randomWidget = new QWidget(); @@ -58,9 +62,13 @@ ConfigPanel::ConfigPanel(QWidget* parent) : QDockWidget{parent} randomLayout->setContentsMargins(0, 0, 0, 0); problemSizeBox = new QSpinBox(); randomLayout->addWidget(problemSizeBox); - randomGenerateButton = new QPushButton("Preview"); + auto randomGenerateButton = new QPushButton("Preview"); randomLayout->addWidget(randomGenerateButton); + auto randomLockButton = new QPushButton("Lock"); + randomLayout->addWidget(randomLockButton); + lockButtons.push_back(randomLockButton); randomLayout->addStretch(); + connect(randomGenerateButton, &QPushButton::clicked, this, &ConfigPanel::previewButtonClicked); problemSizeBox->setMinimum(1); problemSizeBox->setMaximum(INT_MAX); @@ -77,11 +85,20 @@ ConfigPanel::ConfigPanel(QWidget* parent) : QDockWidget{parent} pasteBox->setMinimumHeight(25); pasteBox->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); - pasteGenerateButton = new QPushButton("Preview"); + auto pasteGenerateButton = new QPushButton("Preview"); pasteLayout->addWidget(pasteGenerateButton); + auto pasteLockButton = new QPushButton("Lock"); + pasteLayout->addWidget(pasteLockButton); + lockButtons.push_back(pasteLockButton); pasteLayout->addStretch(); + connect(pasteGenerateButton, &QPushButton::clicked, this, &ConfigPanel::previewButtonClicked); stackedWidget->setCurrentWidget(pasteWidget); + + for (auto &&button : lockButtons) + { + connect(button, &QPushButton::clicked, this, lockButtonClicked); + } } void ConfigPanel::setRunning(bool running) @@ -100,18 +117,26 @@ void ConfigPanel::setRunning(bool running) void ConfigPanel::setGenLocked() { - randomGenerateButton->setEnabled(false); - randomGenerateButton->setText("Generated"); - fileGenerateButton->setEnabled(false); - fileGenerateButton->setText("Generated"); + for (auto &&button : lockButtons) + { + button->setText("Unlock"); + } + problemSizeBox->setDisabled(true); + fileLine->setDisabled(true); + openButton->setDisabled(true); + pasteBox->setDisabled(true); } void ConfigPanel::setGenUnlocked() { - randomGenerateButton->setEnabled(true); - randomGenerateButton->setText("Generate"); - fileGenerateButton->setEnabled(true); - fileGenerateButton->setText("Generate"); + for (auto &&button : lockButtons) + { + button->setText("Lock"); + } + problemSizeBox->setDisabled(false); + fileLine->setDisabled(false); + openButton->setDisabled(false); + pasteBox->setDisabled(false); } void ConfigPanel::onOpenButton() diff --git a/src/configPanel.h b/src/configPanel.h index 05cefdf9c8847c164bafd6d8e8277225c9eeca7e..c8e3513cce99c7427b7df8af55455bf714470ee0 100644 --- a/src/configPanel.h +++ b/src/configPanel.h @@ -14,12 +14,12 @@ class ConfigPanel : public QDockWidget { Q_OBJECT +private: + std::vector<QPushButton*> lockButtons; + public: QPushButton* runButton; QPushButton* openButton; - QPushButton* randomGenerateButton; - QPushButton* fileGenerateButton; - QPushButton* pasteGenerateButton; QLineEdit* fileLine; QPlainTextEdit* pasteBox; QComboBox* algoBox; @@ -40,6 +40,10 @@ public slots: void setRunning(bool running); void setGenLocked(); void setGenUnlocked(); + +signals: + void previewButtonClicked(); + void lockButtonClicked(); }; #endif // CONFIGPANEL_H diff --git a/src/control.cpp b/src/control.cpp index 92bdd58d3e80612b584c681adfec70e7798a6a42..d58979ef1b079ce7dac1fb4d4c69d22ac29b1f58 100644 --- a/src/control.cpp +++ b/src/control.cpp @@ -45,11 +45,8 @@ void Control::makeConnections() connect(cc, &CuteControl::s_undo, this, &Control::undo); connect(this, &Control::endThread, cc, &CuteControl::end); connect(w->configPanel->runButton, &QPushButton::clicked, this, &Control::onRunButton); - connect(w->configPanel->fileGenerateButton, &QPushButton::clicked, this, &Control::onGenerateButton); - connect(w->configPanel->randomGenerateButton, &QPushButton::clicked, this, &Control::onGenerateButton); - connect(w->configPanel->pasteGenerateButton, &QPushButton::clicked, this, &Control::onGenerateButton); - connect(w->configPanel->fileLine, &QLineEdit::textChanged, this, &Control::onProblemSettingChanged); - connect(w->configPanel->problemSizeBox, &QSpinBox::textChanged, this, &Control::onProblemSettingChanged); + connect(w->configPanel, &ConfigPanel::previewButtonClicked, this, &Control::onPreviewButton); + 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(cc, &CuteControl::s_verbosityChanged, w, &MainWindow::changeVerbosity); @@ -306,17 +303,29 @@ void Control::generateProblem() } } -void Control::onGenerateButton() +void Control::onPreviewButton() { - generateProblem(); - problemRetained = true; - w->configPanel->setGenLocked(); + if (!threadRunning) + { + resetPlot(0); + CuteControl::get().plotPoints(getProblem(), 0, {}); + } } -void Control::onProblemSettingChanged([[maybe_unused]] const QString& text) +void Control::onLockButton() { - problemRetained = false; - w->configPanel->setGenUnlocked(); + if (problemRetained) + { + problemRetained = false; + w->configPanel->setGenUnlocked(); + } + else + { + if (problem.empty()) + generateProblem(); + problemRetained = true; + w->configPanel->setGenLocked(); + } } void Control::plotXYSeries(QtCharts::QXYSeries* s, int plot, bool onTop, bool legend, QString tooltip) @@ -578,6 +587,8 @@ void Control::redrawOnTopSeries(int plot) { for (auto s : onTopSeries[plot]) { + QtCharts::QLegendMarker* legendMarker = w->charts[plot]->legend()->markers(s)[0]; + bool legendVisible = legendMarker->isVisible(); w->charts[plot]->removeSeries(s); w->charts[plot]->addSeries(s); auto axes = w->charts[plot]->axes(); @@ -585,6 +596,8 @@ void Control::redrawOnTopSeries(int plot) { s->attachAxis(axis); } + legendMarker = w->charts[plot]->legend()->markers(s)[0]; + legendMarker->setVisible(legendVisible); }; } diff --git a/src/control.h b/src/control.h index e28da5baead22c6da91595a49b612f42522fc38a..d191db4ec99e364852fd69a6d604b6c007187f21 100644 --- a/src/control.h +++ b/src/control.h @@ -56,10 +56,10 @@ public slots: void setAxisTitles(int plot, QString x, QString y); void setAxisVisible(int plot, bool x, bool y); void onRunButton(); - void onGenerateButton(); + void onPreviewButton(); void setProblemSize(int n); void setProblemFile(QString path); - void onProblemSettingChanged(const QString& text); + void onLockButton(); void plotXYSeries(QtCharts::QXYSeries* s, int plot, bool onTop, bool legend, QString tooltip = ""); void plotBarSeries(QtCharts::QBarSeries* series, int plot, bool onTop, bool legend); void highlightValue(float value, int plot, QColor c);