MainWindow.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. // Include own headers
  2. #include "MainWindow.hpp"
  3. #include "../gui/ui_MainWindow.h"
  4. // Include dependencies
  5. #include <QFileDialog>
  6. MainWindow* globalPointer;
  7. MainWindow* MainWindow::getInstance() {
  8. return globalPointer;
  9. }
  10. MainWindow::MainWindow(QWidget* parent): QMainWindow(parent), ui(new Ui::MainWindow) {
  11. globalPointer = this;
  12. ui->setupUi(this);
  13. osgWidget = new OSGWidget(this);
  14. ui->sceneWidget->layout()->addWidget(osgWidget);
  15. noMeshWidget = new NoMeshWidget();
  16. editWidget = new EditWidget();
  17. // TODO: Add option for opening a project via double click
  18. projectStore = new ProjectStore();
  19. renderView(NoMesh);
  20. // Setup menu
  21. newAct = new QAction(tr("&New project"), this);
  22. newAct->setShortcuts(QKeySequence::New);
  23. newAct->setStatusTip(tr("Create a new file"));
  24. //connect(newAct, &QAction::triggered, this, &MainWindow::newFile);
  25. loadAct = new QAction(tr("&Load project"), this);
  26. loadAct->setShortcuts(QKeySequence::Open);
  27. loadAct->setStatusTip(tr("Load an existing project"));
  28. connect(loadAct, &QAction::triggered, this, &MainWindow::load);
  29. saveAct = new QAction(tr("&Save project"), this);
  30. saveAct->setShortcuts(QKeySequence::Save);
  31. saveAct->setStatusTip(tr("Update the project file"));
  32. connect(saveAct, &QAction::triggered, this, &MainWindow::save);
  33. saveAsAct = new QAction(tr("&Save project as"), this);
  34. saveAsAct->setStatusTip(tr("Save the project in a new file"));
  35. connect(saveAsAct, &QAction::triggered, this, &MainWindow::saveAs);
  36. closeAct = new QAction(tr("&Close project"), this);
  37. closeAct->setShortcuts(QKeySequence::Close);
  38. closeAct->setStatusTip(tr("Closing the current project"));
  39. //connect(newAct, &QAction::triggered, this, &MainWindow::newFile);
  40. fileMenu = menuBar()->addMenu(tr("&File"));
  41. fileMenu->addAction(newAct);
  42. fileMenu->addSeparator();
  43. fileMenu->addAction(loadAct);
  44. fileMenu->addSeparator();
  45. fileMenu->addAction(saveAct);
  46. fileMenu->addAction(saveAsAct);
  47. fileMenu->addSeparator();
  48. fileMenu->addAction(closeAct);
  49. }
  50. MainWindow::~MainWindow() {
  51. delete ui;
  52. delete osgWidget;
  53. }
  54. OSGWidget* MainWindow::getOsgWidget() {
  55. return osgWidget;
  56. }
  57. ProjectStore* MainWindow::getStore() {
  58. return projectStore;
  59. }
  60. EditWidget* MainWindow::getEditWiget() {
  61. return editWidget;
  62. }
  63. void MainWindow::renderView(GuiView view) {
  64. switch(view) {
  65. case NoMesh: {
  66. editWidget->setParent(nullptr);
  67. ui->controlWidget->layout()->addWidget(noMeshWidget);
  68. break;
  69. }
  70. case Edit: {
  71. noMeshWidget->setParent(nullptr);
  72. ui->controlWidget->layout()->addWidget(editWidget);
  73. break;
  74. }
  75. }
  76. }
  77. void MainWindow::load() {
  78. QString fileName = QFileDialog::getOpenFileName(this, tr("Open a TrackpointApp Project"), "", tr("TrackpointApp Projects (*.trackproj)"));
  79. std::string projectFile = fileName.toUtf8().constData();
  80. MainWindow::getInstance()->getStore()->loadProject(projectFile);
  81. }
  82. void MainWindow::save() {
  83. if (!projectStore->saveProject()) {
  84. saveAs();
  85. }
  86. }
  87. void MainWindow::saveAs() {
  88. QString fileName = QFileDialog::getSaveFileName(this, tr("Save your TrackpointApp Project"), "", tr("TrackpointApp Projects (*.trackproj)"));
  89. std::string fileString = fileName.toUtf8().constData();
  90. if (!projectStore->saveProject(fileString)) {
  91. // TODO: Show error popup
  92. }
  93. }