Skip to content
Snippets Groups Projects
Select Git revision
  • eeb839891f3ca11be64f138dc1d1f01db9284781
  • main default protected
2 results

navbar.jsx

Blame
  • 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);
    }