Select Git revision
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
mainWindow.cpp 5.89 KiB
#include "mainWindow.h"
#include "chartMenu.h"
#include "configPanel.h"
#include <QBoxLayout>
#include <QChart>
#include <QChartView.h>
#include <QDockWidget>
#include <QFontDatabase>
#include <QLabel>
#include <QLineEdit>
#include <QMenu>
#include <QMenuBar>
#include <QProxyStyle>
#include <QSizePolicy>
#include <QSpinBox>
#include <QSplitter>
#include <QStackedWidget>
#include <QTableView>
#include <QTableWidget>
#include <QToolbar>
#include <QValueAxis>
MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent)
{
configPanel = new ConfigPanel();
addDockWidget(Qt::DockWidgetArea::TopDockWidgetArea, configPanel);
setDockOptions(DockOption::AnimatedDocks);
setDockNestingEnabled(false);
setupStatusBar();
setupCharts();
setupMenuBar();
centralWidget()->setContextMenuPolicy(Qt::CustomContextMenu);
connect(centralWidget(), &QWidget::customContextMenuRequested, this, &MainWindow::chartContextMenu);
QDockWidget* tdw = new QDockWidget("Output");
textEdit = new QTextEdit();
tdw->setWidget(textEdit);
addDockWidget(Qt::DockWidgetArea::BottomDockWidgetArea, tdw);
tdw->setAllowedAreas(Qt::DockWidgetArea::BottomDockWidgetArea
| Qt::DockWidgetArea::RightDockWidgetArea
| Qt::DockWidgetArea::LeftDockWidgetArea);
textEdit->setReadOnly(true);
QFont fixedFont = QFontDatabase::systemFont(QFontDatabase::FixedFont);
textEdit->setCurrentFont(fixedFont);
textEdit->setFontPointSize(12);
}
void MainWindow::setupMenuBar()
{
QMenuBar* menubar = new QMenuBar();
setMenuBar(menubar);
QMenu* probM = new QMenu("Problem");
menubar->addMenu(probM);
probMenuRandom = new QAction("Random", this);
probMenuRandom->setCheckable(true);
probMenuRandom->setChecked(true);
probMenuRandom->setDisabled(true);
probM->addAction(probMenuRandom);
connect(probMenuRandom, &QAction::triggered, this, &MainWindow::switchToRandom);
probMenuFile = new QAction("File", this);
probMenuFile->setCheckable(true);
probMenuFile->setChecked(false);
probM->addAction(probMenuFile);
connect(probMenuFile, &QAction::triggered, this, &MainWindow::switchToFile);
probMenuPaste = new QAction("Paste", this);
probMenuPaste->setCheckable(true);
probMenuPaste->setChecked(false);
probM->addAction(probMenuPaste);
connect(probMenuPaste, &QAction::triggered, this, &MainWindow::switchToPaste);
QAction* probSave = new QAction("Save...", this);
probM->addAction(probSave);
connect(probSave, &QAction::triggered, this, &MainWindow::saveProblem);
cm = new ChartMenu(graphingWidgets);
cm->setTitle("Charts");
menubar->addMenu(cm);
connect(cm->themeAction, &QAction::triggered, this, &MainWindow::incrementChartTheme);
}
void MainWindow::switchToFile()
{
probMenuFile->setChecked(true);
probMenuRandom->setChecked(false);
probMenuPaste->setChecked(false);
probMenuFile->setDisabled(true);
probMenuRandom->setDisabled(false);
probMenuPaste->setDisabled(false);
configPanel->stackedWidget->setCurrentWidget(configPanel->fileWidget);
}
void MainWindow::switchToRandom()
{
probMenuFile->setChecked(false);
probMenuRandom->setChecked(true);
probMenuPaste->setChecked(false);
probMenuFile->setDisabled(false);
probMenuRandom->setDisabled(true);
probMenuPaste->setDisabled(false);
configPanel->stackedWidget->setCurrentWidget(configPanel->randomWidget);
}
void MainWindow::switchToPaste()
{
probMenuFile->setChecked(false);
probMenuRandom->setChecked(false);
probMenuPaste->setChecked(true);
probMenuFile->setDisabled(false);
probMenuRandom->setDisabled(false);
probMenuPaste->setDisabled(true);
configPanel->stackedWidget->setCurrentWidget(configPanel->pasteWidget);
}
void MainWindow::setupCharts()
{
QWidget* grW = new QWidget();
setCentralWidget(grW);
QHBoxLayout* layout = new QHBoxLayout();
grW->setLayout(layout);
for (size_t i = 0; i < 3; i++)
{
QtCharts::QChartView* v = new QtCharts::QChartView();
graphingWidgets.push_back(v);
layout->addWidget(v, 1);
QtCharts::QChart* c = new QtCharts::QChart();
charts.push_back(c);
v->setChart(c);
v->setMouseTracking(true);
v->setRenderHint(QPainter::Antialiasing);
QString title = "Plot ";
title += std::to_string(i).c_str();
c->setTitle(title);
c->legend()->setVisible(true);
c->legend()->setMarkerShape(QtCharts::QLegend::MarkerShapeFromSeries);
c->setMinimumSize(300, 300);
QtCharts::QValueAxis* axisX = new QtCharts::QValueAxis();
//axisX->setTitleText("X");
c->addAxis(axisX, Qt::AlignBottom);
QtCharts::QValueAxis* axisY = new QtCharts::QValueAxis();
//axisY->setTitleText("Y");
c->addAxis(axisY, Qt::AlignLeft);
}
}
void MainWindow::addAlgorithm(const QString& name)
{
configPanel->algoBox->addItem(name);
}
void MainWindow::setupStatusBar()
{
statusBar = new QStatusBar();
setStatusBar(statusBar);
progressBar = new QProgressBar();
statusBar->addPermanentWidget(progressBar);
statusBar->showMessage("Ready...");
progressBar->setMinimum(0);
progressBar->setMaximum(100);
progressBar->setValue(0);
}
void MainWindow::changeChartTheme(int themeNumber)
{
if (themeNumber > 7 || themeNumber < 0)
{
return;
}
cm->chartThemeChanged(themeNumber);
for (QtCharts::QChart* chart : charts)
{
chart->setTheme((QtCharts::QChart::ChartTheme)themeNumber);
}
}
void MainWindow::incrementChartTheme()
{
int n = (int)charts.front()->theme();
++n;
if (n > 7)
{
n = 0;
}
changeChartTheme(n);
}
void MainWindow::chartContextMenu(const QPoint& pos)
{
cm->popup(mapToParent(pos));
}
void MainWindow::changeVerbosity(int level)
{
configPanel->verbosityBox->setCurrentIndex(level);
}