From 5c0c4f4b2dc14d9153177314c044176b51d46f55 Mon Sep 17 00:00:00 2001 From: Brendan Coles Date: Tue, 5 Jan 2021 14:03:12 +0000 Subject: [PATCH] Playground: Support opening gml file by path as command line argument --- Base/home/anon/.config/LaunchServer.ini | 1 + Base/usr/share/man/man1/Playground.md | 4 ++-- DevTools/Playground/main.cpp | 20 ++++++++++++++++++-- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/Base/home/anon/.config/LaunchServer.ini b/Base/home/anon/.config/LaunchServer.ini index 2947b9e773..ddafda7c8d 100644 --- a/Base/home/anon/.config/LaunchServer.ini +++ b/Base/home/anon/.config/LaunchServer.ini @@ -12,6 +12,7 @@ wav=/bin/SoundPlayer txt=/bin/TextEditor font=/bin/FontEditor sheets=/bin/Spreadsheet +gml=/bin/Playground *=/bin/TextEditor [Protocol] diff --git a/Base/usr/share/man/man1/Playground.md b/Base/usr/share/man/man1/Playground.md index aedcc8a66c..fb933dfb42 100644 --- a/Base/usr/share/man/man1/Playground.md +++ b/Base/usr/share/man/man1/Playground.md @@ -5,7 +5,7 @@ Playground - GUI Markup Language (GML) editor ## Synopsis ```**sh -$ Playground +$ Playground [file] ``` ## Description @@ -20,7 +20,7 @@ window, allowing rapid prototyping and development of application GUIs. ## Examples ```sh -$ Playground +$ Playground /home/anon/example.gml ``` ## See also diff --git a/DevTools/Playground/main.cpp b/DevTools/Playground/main.cpp index 6f9786bf1a..4e586964c8 100644 --- a/DevTools/Playground/main.cpp +++ b/DevTools/Playground/main.cpp @@ -26,6 +26,7 @@ #include #include +#include #include #include #include @@ -250,6 +251,11 @@ int main(int argc, char** argv) return 1; } + const char* path = nullptr; + Core::ArgsParser args_parser; + args_parser.add_positional_argument(path, "GML file to edit", "file", Core::ArgsParser::Required::No); + args_parser.parse(argc, argv); + auto app_icon = GUI::Icon::default_icon("app-playground"); auto window = GUI::Window::construct(); window->set_title("GML Playground"); @@ -265,14 +271,24 @@ int main(int argc, char** argv) editor.set_autocomplete_provider(make()); editor.set_should_autocomplete_automatically(true); editor.set_automatic_indentation_enabled(true); - editor.set_text(R"~~~(@GUI::Widget { + + if (String(path).is_empty()) { + editor.set_text(R"~~~(@GUI::Widget { layout: @GUI::VerticalBoxLayout { } // Now add some widgets! } )~~~"); - editor.set_cursor(4, 28); // after "...widgets!" + editor.set_cursor(4, 28); // after "...widgets!" + } else { + auto file = Core::File::construct(path); + if (!file->open(Core::IODevice::ReadOnly)) { + GUI::MessageBox::show(window, String::formatted("Opening \"{}\" failed: {}", path, strerror(errno)), "Error", GUI::MessageBox::Type::Error); + return 1; + } + editor.set_text(file->read_all()); + } editor.on_change = [&] { preview.remove_all_children();