diff --git a/tools/leveleditor/include/mainwindow.h b/tools/leveleditor/include/mainwindow.h index 668e698..73635a7 100644 --- a/tools/leveleditor/include/mainwindow.h +++ b/tools/leveleditor/include/mainwindow.h @@ -1,10 +1,19 @@ #pragma once #include +#include struct Context; +class ToolWindowManager; class MainWindow : public QMainWindow { public: MainWindow(Context& context); + +private: + void addSceneView(); + + Context& context; + ToolWindowManager* manager = nullptr; + QVulkanInstance* instance = nullptr; }; diff --git a/tools/leveleditor/src/mainwindow.cpp b/tools/leveleditor/src/mainwindow.cpp index 58369c3..c2b26c6 100644 --- a/tools/leveleditor/src/mainwindow.cpp +++ b/tools/leveleditor/src/mainwindow.cpp @@ -10,7 +10,7 @@ #include "renderwindow.h" #include "renderer.h" -MainWindow::MainWindow(Context& context) { +MainWindow::MainWindow(Context& context) : context(context) { setWindowTitle("Level Editor"); resize(1280, 720); @@ -36,6 +36,8 @@ MainWindow::MainWindow(Context& context) { openRecentAction->setIcon(QIcon::fromTheme("document-open-recent")); fileMenu->addAction(openRecentAction); + fileMenu->addSeparator(); + QAction* saveAction = new QAction("Save"); saveAction->setIcon(QIcon::fromTheme("document-save")); saveAction->setShortcut(QKeySequence("CTRL+S")); @@ -77,15 +79,45 @@ MainWindow::MainWindow(Context& context) { editMenu->addAction(userPreferenes); } + QMenu* windowMenu = new QMenu("Window"); + mainMenuBar->addMenu(windowMenu); + + // window + { + QAction* newWindowAction = new QAction("New Window"); + connect(newWindowAction, &QAction::triggered, [&context] { + MainWindow* window = new MainWindow(context); + window->show(); + }); + newWindowAction->setIcon(QIcon::fromTheme("window-new")); + windowMenu->addAction(newWindowAction); + + QMenu* newViewMenu = new QMenu("New View"); + newViewMenu->setIcon(QIcon::fromTheme("folder-new")); + windowMenu->addMenu(newViewMenu); + + QAction* addSceneView = new QAction("Scene View"); + connect(addSceneView, &QAction::triggered, this, &MainWindow::addSceneView); + addSceneView->setIcon(QIcon::fromTheme("view-fullscreen")); + newViewMenu->addAction(addSceneView); + } + mainMenuBar->addSeparator(); QMenu* helpMenu = new QMenu("Help"); mainMenuBar->addMenu(helpMenu); - QVulkanInstance* instance = new QVulkanInstance(); + instance = new QVulkanInstance(); instance->setVkInstance(context.renderer->getInstance()); instance->create(); + manager = new ToolWindowManager(); + setCentralWidget(manager); + + addSceneView(); +} + +void MainWindow::addSceneView() { RendererWindow* window = new RendererWindow(context); window->setVulkanInstance(instance); @@ -93,8 +125,6 @@ MainWindow::MainWindow(Context& context) { wrapper->setWindowIcon(QIcon::fromTheme("view-fullscreen")); wrapper->setWindowTitle("Scene View"); - ToolWindowManager* manager = new ToolWindowManager(); - setCentralWidget(manager); - manager->addToolWindow(wrapper, ToolWindowManager::AreaReference(ToolWindowManager::EmptySpace)); } +