Skip to main content

src/demo.erl

-module(demo).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/demo.gleam").
-export([main/0]).

-file("src/demo.gleam", 46).
-spec start_error_to_string(minigui:start_error()) -> binary().
start_error_to_string(E) ->
    case E of
        {ensure_port_failed, Msg} ->
            Msg;

        {open_port_failed, Msg@1} ->
            Msg@1;

        {handshake_failed, Msg@2} ->
            Msg@2
    end.

-file("src/demo.gleam", 5).
-spec main() -> nil.
main() ->
    gleam_stdlib:println(<<"Starting minigui demo…"/utf8>>),
    case minigui:start() of
        {error, E} ->
            gleam_stdlib:println(
                <<"Error starting: "/utf8, (start_error_to_string(E))/binary>>
            );

        {ok, Gui} ->
            _ = minigui:create_window(Gui, <<"MiniGUI demo"/utf8>>),
            _ = minigui:set_label(Gui, <<"Hello from minigui"/utf8>>),
            _ = minigui:set_text(Gui, <<"Type here…"/utf8>>),
            _ = minigui:add_button(Gui, 1, <<"Click"/utf8>>),
            gleam_stdlib:println(
                <<"Calling minigui.run(). Close the window to finish."/utf8>>
            ),
            _ = minigui:run(Gui, fun(Ev) -> case Ev of
                        {button_clicked, Id} ->
                            gleam_stdlib:println(
                                <<<<"Event: ButtonClicked("/utf8,
                                        (erlang:integer_to_binary(Id))/binary>>/binary,
                                    ")"/utf8>>
                            );

                        {text_changed, Text} ->
                            gleam_stdlib:println(
                                <<<<"Event: TextChanged("/utf8, Text/binary>>/binary,
                                    ")"/utf8>>
                            );

                        {key_down, Key} ->
                            gleam_stdlib:println(
                                <<<<"Event: KeyDown("/utf8,
                                        (erlang:integer_to_binary(Key))/binary>>/binary,
                                    ")"/utf8>>
                            );

                        {log, Msg} ->
                            gleam_stdlib:println(<<"LOG: "/utf8, Msg/binary>>);

                        {port_error, Msg@1} ->
                            gleam_stdlib:println(
                                <<"ERROR: "/utf8, Msg@1/binary>>
                            );

                        closed ->
                            gleam_stdlib:println(<<"Event: Closed"/utf8>>)
                    end end),
            nil
    end.