Developing file operation dialogs.

This commit is contained in:
2025-07-08 21:50:41 -05:00
parent 5d404ea079
commit 932af3e3ce
7 changed files with 127 additions and 68 deletions

View File

@@ -79,6 +79,10 @@ JUI::Window* EditorApp::CreateAppInfoDialogWindow(JUI::Widget* parent)
return window;
}
Layer * EditorApp::GetLayer(int index) const {
return loaded_level->layers[index];
}
Vector2i EditorApp::IndexToCell(int index, int width)
{
int x = index % width;
@@ -208,6 +212,9 @@ void EditorApp::SaveCurrentLevel() const
layer->Save();
}
// save current timestamp to level file.
loaded_level->last_edit_timestamp = std::format("{:%d-%m-%Y %H:%M:%OS}", std::chrono::system_clock::now());
auto data = loaded_level->Serialize();
write_file_contents("level.json", json::deparse(data));
@@ -317,7 +324,6 @@ void EditorApp::CreateTestLevel() {
data_ready = true;
SaveCurrentLevel();
}
@@ -352,7 +358,6 @@ JUI::Window* EditorApp::CreateTilesetViewerWindow(JUI::Widget* parent)
auto* grid_overlay_tex = new JGL::Texture(*grid_overlay->GetTexture());
auto* overlay = new JUI::Image(wind->Content());
overlay->Content(grid_overlay_tex);
overlay->ZIndex(2);
@@ -476,6 +481,67 @@ void EditorApp::BindConsoleCallbacks()
};
}
void EditorApp::CreateTopbarWidgets() {
// Topbar Creation
topbar = new JUI::UtilityBar(scene);
topbar_stats = new JUI::Text(topbar);
topbar_stats->HorizontalTextAlign(JUI::TextAlign::H::Right);
topbar_stats->TextColor(Colors::Black);
auto* file = topbar->AddSubmenu("File");
file->Font(JGL::Fonts::Jupiteroid);
auto* new_map = file->AddButton("New Map", [this] () mutable {
nmd->Open();
});
file->AddButton("Open", [this]() mutable {
if (file_dialog) {
//file_dialog->Close();
//file_dialog->Parent(nullptr);
//delete file_dialog;
}
file_dialog = new JUI::FileDialogWindow(scene, ".");
});
file->AddButton("Save", [this]{SaveCurrentLevel();});
file->AddButton("Save As");
file->AddSeparator(2_px);
file->AddButton("About", [this]{app_info_dialog->Toggle(); });
file->AddButton("Preferences");
auto* edit = topbar->AddSubmenu("Edit");
edit->AddButton("Undo");
edit->AddButton("Redo");
edit->AddButton("Copy");
edit->AddSeparator(2_px);
edit->AddButton("Paste");
edit->AddButton("Cut Selection");
auto* view = topbar->AddSubmenu("View");
view->AddButton("Zoom In");
view->AddButton("Zoom Out");
view->AddSeparator(2_px);
view->AddButton("Toggle Grid", [this]{ToggleGrid();});
view->AddButton("Set Background Color", [this]{bg_color_tool_window->Toggle();});
view->AddSeparator(2_px);
view->AddButton("Console", [this]()mutable { console->Toggle();});
view->AddButton("Tileset Viewer", [this]()mutable { tileset_view->Toggle();});
auto* level = topbar->AddSubmenu("Level");
auto* layer = topbar->AddSubmenu("Layer");
layer->AddButton("New");
layer->AddButton("Open from File");
layer->AddButton("Duplicate Selected");
layer->AddButton("Delete Selected");
layer->AddButton("Edit Selected");
layer->AddButton("Export Layer");
}
void EditorApp::CreateWidgets()
{
scene = new JUI::Scene();
@@ -510,55 +576,7 @@ void EditorApp::CreateWidgets()
layer_view = new LayerView(scene);
layer_view->Close();
topbar = new JUI::UtilityBar(scene);
topbar_stats = new JUI::Text(topbar);
topbar_stats->HorizontalTextAlign(JUI::TextAlign::H::Left);
topbar_stats->TextColor(Colors::Black);
auto* file = topbar->AddSubmenu("File");
file->Font(JGL::Fonts::Jupiteroid);
auto* new_map = file->AddButton("New Map", [this] () mutable {
nmd->Open();
});
file->AddButton("Open");
file->AddButton("Save", [this]{SaveCurrentLevel();});
file->AddButton("Save As");
file->AddSeparator(2_px);
file->AddButton("About", [this]{app_info_dialog->Toggle(); });
file->AddButton("Preferences");
auto* edit = topbar->AddSubmenu("Edit");
edit->AddButton("Undo");
edit->AddButton("Redo");
edit->AddButton("Copy");
edit->AddSeparator(2_px);
edit->AddButton("Paste");
edit->AddButton("Cut Selection");
auto* view = topbar->AddSubmenu("View");
view->AddButton("Zoom In");
view->AddButton("Zoom Out");
view->AddSeparator(2_px);
view->AddButton("Toggle Grid", [this]{ToggleGrid();});
view->AddButton("Set Background Color", [this]{bg_color_tool_window->Toggle();});
view->AddSeparator(2_px);
view->AddButton("Console", [this]()mutable { console->Toggle();});
view->AddButton("Tileset Viewer", [this]()mutable { tileset_view->Toggle();});
auto* level = topbar->AddSubmenu("Level");
auto* layer = topbar->AddSubmenu("Layer");
layer->AddButton("New");
layer->AddButton("Open from File");
layer->AddButton("Duplicate Selected");
layer->AddButton("Delete Selected");
layer->AddButton("Edit Selected");
layer->AddButton("Export Layer");
CreateTopbarWidgets();
bg_color_tool_window = new JUI::Window(scene);
@@ -1057,8 +1075,12 @@ void EditorApp::OnKeyDown(const KeyDownEvent& e)
void EditorApp::OnKeyUp(const KeyUpEvent& e)
{
if (scene->ObserveKeyInput(e.key, false)) return;
if (e.key == Keys::T)
if (e.key == Keys::T && tileset_view) {
tileset_view->Toggle();
}
}

View File

@@ -10,7 +10,6 @@ Layer::Layer(int rows, int cols, int cell_width, int cell_height): cells(nullptr
this->cell_width = cell_width;
this->cell_height = cell_height;
this->visible = true;
}
Layer::Layer(const json::value& json)