Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 82 additions & 0 deletions editor/styling/dark.qss
Original file line number Diff line number Diff line change
Expand Up @@ -426,6 +426,88 @@ QTableWidget::item:selected {
color: #FFFFFF;
}

#panelToolbar {
background-color: #222526;
border: none;
}

#panelAddButton {
background-color: #2C3235;
border-color: #414A4F;
padding: 4px 10px;
min-height: 22px;
font-weight: 600;
}

#panelMoreButton,
#browserRevealButton,
#browserNavigationButton {
background-color: transparent;
border-color: transparent;
padding: 4px;
min-width: 24px;
min-height: 22px;
}

#panelMoreButton:hover,
#browserRevealButton:hover,
#browserNavigationButton:hover {
background-color: #30373A;
border-color: #424B50;
}

#contentPathField {
background-color: #191D1F;
border-color: #30373B;
color: #AEB8BE;
padding: 4px 8px;
min-height: 22px;
}

#contentSearchField {
padding: 4px 8px;
min-height: 22px;
}

QTreeView#hierarchyTree {
background-color: #1B1F20;
border: none;
border-radius: 4px;
padding: 3px;
show-decoration-selected: 1;
}

QTreeView#hierarchyTree::item {
min-height: 23px;
padding: 3px 5px;
}

QListView#contentGrid {
background-color: #1B1F20;
border: none;
border-radius: 4px;
padding: 8px;
}

QListView#contentGrid::item {
min-height: 88px;
padding: 6px;
margin: 2px;
border: 1px solid transparent;
border-radius: 7px;
}

QListView#contentGrid::item:hover {
background-color: #272E31;
border-color: #353F44;
}

QListView#contentGrid::item:selected {
background-color: #284E73;
border-color: #579FE3;
color: #FFFFFF;
}

QHeaderView {
background-color: #252A2C;
border: none;
Expand Down
136 changes: 76 additions & 60 deletions editor/views/editor/editor.cpp
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
/*
* editor.cpp
* As part of the Atlas project
* Created by Max Van den Eynde in 2026
* --------------------------------------
* Description: Editor view and window
* Copyright (c) 2026 Max Van den Eynde
*/
* editor.cpp
* As part of the Atlas project
* Created by Max Van den Eynde in 2026
* --------------------------------------
* Description: Editor view and window
* Copyright (c) 2026 Max Van den Eynde
*/

#include <editor/views/editorWindow.h>

#include <editor/project/projectStore.h>

#include <QAction>
#include <QMenuBar>
#include <QStyle>
#include <QSettings>
Expand All @@ -23,7 +24,7 @@
#include "editor/views/inspectorView.h"
#include "editor/views/viewport.h"

EditorWindow::EditorWindow(const QString& projectFile, QWidget* parent)
EditorWindow::EditorWindow(const QString &projectFile, QWidget *parent)
: QMainWindow(parent), projectFile(projectFile) {
setupWindow();
setupMenus();
Expand All @@ -40,76 +41,91 @@ void EditorWindow::setupWindow() {
resize(1280, 720);
menuBar()->setNativeMenuBar(false);

ads::CDockManager::setConfigFlag(ads::CDockManager::OpaqueSplitterResize, true);
ads::CDockManager::setConfigFlag(ads::CDockManager::FocusHighlighting, true);
ads::CDockManager::setConfigFlag(ads::CDockManager::DisableStylesheet, true);
ads::CDockManager::setConfigFlag(ads::CDockManager::DockAreaHasTabsMenuButton, false);
ads::CDockManager::setConfigFlag(ads::CDockManager::DockAreaHasUndockButton, false);
ads::CDockManager::setConfigFlag(ads::CDockManager::DockAreaHasCloseButton, false);
ads::CDockManager::setConfigFlag(ads::CDockManager::OpaqueSplitterResize,
true);
ads::CDockManager::setConfigFlag(ads::CDockManager::FocusHighlighting,
true);
ads::CDockManager::setConfigFlag(ads::CDockManager::DisableStylesheet,
true);
ads::CDockManager::setConfigFlag(
ads::CDockManager::DockAreaHasTabsMenuButton, false);
ads::CDockManager::setConfigFlag(ads::CDockManager::DockAreaHasUndockButton,
false);
ads::CDockManager::setConfigFlag(ads::CDockManager::DockAreaHasCloseButton,
false);

coreManager = new ads::CDockManager(this);
setCentralWidget(coreManager);
dockManager = new EditorDockManager(coreManager);
}

void EditorWindow::setupMenus() {
auto* fileMenu = menuBar()->addMenu("File");
auto *fileMenu = menuBar()->addMenu("File");
fileMenu->addAction(style()->standardIcon(QStyle::SP_FileIcon), "New");
fileMenu->addAction(style()->standardIcon(QStyle::SP_DialogOpenButton), "Open");
fileMenu->addAction(style()->standardIcon(QStyle::SP_DialogSaveButton), "Save");
fileMenu->addAction(style()->standardIcon(QStyle::SP_DialogOpenButton),
"Open");
auto *saveAction = fileMenu->addAction(
style()->standardIcon(QStyle::SP_DialogSaveButton), "Save Scene");
connect(saveAction, &QAction::triggered, this, [this] {
if (viewportPanel != nullptr) {
viewportPanel->saveRuntimeScene();
}
});
fileMenu->addSeparator();
fileMenu->addAction(style()->standardIcon(QStyle::SP_DialogCloseButton), "Quit", this, &QWidget::close);
fileMenu->addAction(style()->standardIcon(QStyle::SP_DialogCloseButton),
"Quit", this, &QWidget::close);

auto* editMenu = menuBar()->addMenu("Edit");
auto *editMenu = menuBar()->addMenu("Edit");
editMenu->addAction(style()->standardIcon(QStyle::SP_ArrowBack), "Undo");
editMenu->addAction(style()->standardIcon(QStyle::SP_ArrowForward), "Redo");
editMenu->addSeparator();
editMenu->addAction("Preferences");

auto* viewMenu = menuBar()->addMenu("View");
viewMenu->addAction(style()->standardIcon(QStyle::SP_FileDialogDetailedView), "Reset Layout");
auto *viewMenu = menuBar()->addMenu("View");
viewMenu->addAction(
style()->standardIcon(QStyle::SP_FileDialogDetailedView),
"Reset Layout");

auto* windowMenu = menuBar()->addMenu("Window");
windowMenu->addAction(style()->standardIcon(QStyle::SP_TitleBarNormalButton), "Minimize");
windowMenu->addAction(style()->standardIcon(QStyle::SP_TitleBarMaxButton), "Zoom");
auto *windowMenu = menuBar()->addMenu("Window");
windowMenu->addAction(
style()->standardIcon(QStyle::SP_TitleBarNormalButton), "Minimize");
windowMenu->addAction(style()->standardIcon(QStyle::SP_TitleBarMaxButton),
"Zoom");

auto* helpMenu = menuBar()->addMenu("Help");
helpMenu->addAction(style()->standardIcon(QStyle::SP_MessageBoxQuestion), "About Atlas");
auto *helpMenu = menuBar()->addMenu("Help");
helpMenu->addAction(style()->standardIcon(QStyle::SP_MessageBoxQuestion),
"About Atlas");
}

void EditorWindow::setupDocks() {
dockManager->addPanel({
.id = "viewport",
.title = "Viewport",
.widget = new ViewportPanel(projectFile),
.area = EditorDockArea::Center,
.icon = style()->standardIcon(QStyle::SP_DirOpenIcon)
});

dockManager->addPanel({
.id = "hierarchy",
.title = "Hierarchy Panel",
.widget = new HierarchyPanel(),
.area = EditorDockArea::Left,
.icon = style()->standardIcon(QStyle::SP_DirOpenIcon)
});

dockManager->addPanel({
.id = "inspector",
.title = "Inspector",
.widget = new InspectorPanel(),
.area = EditorDockArea::Right,
.icon = style()->standardIcon(QStyle::SP_DirOpenIcon)
});


dockManager->addPanel({
.id = "fileExplorer",
.title = "Content Browser",
.widget = new ContentBrowserPanel(),
.area = EditorDockArea::Bottom,
.icon = style()->standardIcon(QStyle::SP_DirOpenIcon)
});
viewportPanel = new ViewportPanel(projectFile);
dockManager->addPanel(
{.id = "viewport",
.title = "Viewport",
.widget = viewportPanel,
.area = EditorDockArea::Center,
.icon = style()->standardIcon(QStyle::SP_DirOpenIcon)});

dockManager->addPanel(
{.id = "hierarchy",
.title = "Hierarchy Panel",
.widget = new HierarchyPanel(viewportPanel),
.area = EditorDockArea::Left,
.icon = style()->standardIcon(QStyle::SP_DirOpenIcon)});

dockManager->addPanel(
{.id = "inspector",
.title = "Inspector",
.widget = new InspectorPanel(),
.area = EditorDockArea::Right,
.icon = style()->standardIcon(QStyle::SP_DirOpenIcon)});

dockManager->addPanel(
{.id = "fileExplorer",
.title = "Content Browser",
.widget = new ContentBrowserPanel(projectFile),
.area = EditorDockArea::Bottom,
.icon = style()->standardIcon(QStyle::SP_DirOpenIcon)});
}

void EditorWindow::saveLayout() {
Expand All @@ -134,14 +150,14 @@ void EditorWindow::restoreLayout() {
}
}

void EditorWindow::closeEvent(QCloseEvent* event) {
void EditorWindow::closeEvent(QCloseEvent *event) {
if (closing) {
event->accept();
return;
}
closing = true;
saveLayout();
for (auto* viewport : findChildren<ViewportPanel*>()) {
for (auto *viewport : findChildren<ViewportPanel *>()) {
viewport->shutdownRuntime();
}
delete dockManager;
Expand Down
Loading
Loading