1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 04:17:35 +00:00

Playground: Support opening gml file by path as command line argument

This commit is contained in:
Brendan Coles 2021-01-05 14:03:12 +00:00 committed by Andreas Kling
parent 7d5a369ac9
commit 5c0c4f4b2d
3 changed files with 21 additions and 4 deletions

View file

@ -12,6 +12,7 @@ wav=/bin/SoundPlayer
txt=/bin/TextEditor txt=/bin/TextEditor
font=/bin/FontEditor font=/bin/FontEditor
sheets=/bin/Spreadsheet sheets=/bin/Spreadsheet
gml=/bin/Playground
*=/bin/TextEditor *=/bin/TextEditor
[Protocol] [Protocol]

View file

@ -5,7 +5,7 @@ Playground - GUI Markup Language (GML) editor
## Synopsis ## Synopsis
```**sh ```**sh
$ Playground $ Playground [file]
``` ```
## Description ## Description
@ -20,7 +20,7 @@ window, allowing rapid prototyping and development of application GUIs.
## Examples ## Examples
```sh ```sh
$ Playground $ Playground /home/anon/example.gml
``` ```
## See also ## See also

View file

@ -26,6 +26,7 @@
#include <AK/QuickSort.h> #include <AK/QuickSort.h>
#include <AK/URL.h> #include <AK/URL.h>
#include <LibCore/ArgsParser.h>
#include <LibCore/File.h> #include <LibCore/File.h>
#include <LibCore/Property.h> #include <LibCore/Property.h>
#include <LibDesktop/Launcher.h> #include <LibDesktop/Launcher.h>
@ -250,6 +251,11 @@ int main(int argc, char** argv)
return 1; 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 app_icon = GUI::Icon::default_icon("app-playground");
auto window = GUI::Window::construct(); auto window = GUI::Window::construct();
window->set_title("GML Playground"); window->set_title("GML Playground");
@ -265,14 +271,24 @@ int main(int argc, char** argv)
editor.set_autocomplete_provider(make<GMLAutocompleteProvider>()); editor.set_autocomplete_provider(make<GMLAutocompleteProvider>());
editor.set_should_autocomplete_automatically(true); editor.set_should_autocomplete_automatically(true);
editor.set_automatic_indentation_enabled(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 { layout: @GUI::VerticalBoxLayout {
} }
// Now add some widgets! // 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 = [&] { editor.on_change = [&] {
preview.remove_all_children(); preview.remove_all_children();