111 lines
2.1 KiB
C++
111 lines
2.1 KiB
C++
#include "MainWindow.hpp"
|
|
|
|
#include "Screen.hpp"
|
|
|
|
MainWindow* MainWindow::instance = nullptr;
|
|
|
|
MainWindow* MainWindow::Instance()
|
|
{
|
|
if (instance == nullptr)
|
|
{
|
|
instance = new MainWindow();
|
|
instance->Setup();
|
|
}
|
|
|
|
return instance;
|
|
}
|
|
|
|
MainWindow::MainWindow() :
|
|
QMainWindow(Q_NULLPTR), activePlanet(nullptr)
|
|
{
|
|
}
|
|
|
|
void MainWindow::Setup()
|
|
{
|
|
ui.setupUi(this);
|
|
ClosePlanetDialog();
|
|
}
|
|
|
|
void MainWindow::OpenPlanetDialog(Planet* planet)
|
|
{
|
|
activePlanet = nullptr;
|
|
|
|
ui.config->Enable();
|
|
ui.config->SetTitle(planet->name);
|
|
ui.config->SetRadius(planet->radius);
|
|
ui.config->SetMass(planet->mass);
|
|
ui.config->SetColor(planet->GetColor());
|
|
ui.config->SetX(planet->position.rx());
|
|
ui.config->SetY(planet->position.ry());
|
|
|
|
activePlanet = planet;
|
|
}
|
|
|
|
void MainWindow::ClosePlanetDialog()
|
|
{
|
|
activePlanet = nullptr;
|
|
|
|
ui.config->SetTitle("No planet selected");
|
|
ui.config->Disable();
|
|
ui.config->SetColor(QColor(0, 0, 0, 0));
|
|
ui.config->SetRadius(0.f);
|
|
ui.config->SetMass(0.f);
|
|
ui.config->SetX(0.f);
|
|
ui.config->SetY(0.f);
|
|
}
|
|
|
|
void MainWindow::UpdatePlanetPositionInDialog(const QPointF& position)
|
|
{
|
|
ui.config->SetX(position.x());
|
|
ui.config->SetY(position.y());
|
|
}
|
|
|
|
void MainWindow::OnNameChanged(const QString& name)
|
|
{
|
|
if (activePlanet != nullptr)
|
|
activePlanet->name = name;
|
|
}
|
|
|
|
void MainWindow::OnRadiusChanged(double radius)
|
|
{
|
|
if(activePlanet != nullptr)
|
|
activePlanet->radius = radius;
|
|
}
|
|
|
|
void MainWindow::OnMassChanged(double mass)
|
|
{
|
|
if (activePlanet != nullptr)
|
|
activePlanet->mass = mass;
|
|
}
|
|
|
|
void MainWindow::OnColourChanged(const QColor& color)
|
|
{
|
|
if (activePlanet != nullptr)
|
|
activePlanet->SetColor(color);
|
|
}
|
|
|
|
void MainWindow::OnXChanged(double x)
|
|
{
|
|
if (activePlanet != nullptr)
|
|
activePlanet->position.rx() = x;
|
|
}
|
|
|
|
void MainWindow::OnYChanged(double y)
|
|
{
|
|
if (activePlanet != nullptr)
|
|
activePlanet->position.ry() = y;
|
|
}
|
|
|
|
void MainWindow::OnDelete()
|
|
{
|
|
ui.screen->DeletePlanet(activePlanet);
|
|
ClosePlanetDialog();
|
|
}
|
|
|
|
void MainWindow::OnToggle()
|
|
{
|
|
isSimulating = !isSimulating;
|
|
ui.config->SetButtonLabel((isSimulating) ? "Stop Simulation" : "Start Simulation");
|
|
ui.screen->simulate = isSimulating;
|
|
}
|