Skip to main content

src/demo.gleam

import gleam/io
import gleam/int
import minigui

pub fn main() {
  io.println("Starting minigui demo…")

  case minigui.start() {
    Error(e) -> io.println("Error starting: " <> start_error_to_string(e))
    Ok(gui) -> {
      let _ = minigui.create_window(gui, "MiniGUI demo")
      let _ = minigui.set_label(gui, "Hello from minigui")
      let _ = minigui.set_text(gui, "Type here…")
      let _ = minigui.add_button(gui, 1, "Click")

      io.println("Calling minigui.run(). Close the window to finish.")

      let _ =
        minigui.run(gui, fn(ev) {
          case ev {
            minigui.ButtonClicked(id) ->
              io.println("Event: ButtonClicked(" <> int.to_string(id) <> ")")

            minigui.TextChanged(text) ->
              io.println("Event: TextChanged(" <> text <> ")")

            minigui.KeyDown(key) ->
              io.println("Event: KeyDown(" <> int.to_string(key) <> ")")

            minigui.Log(msg) ->
              io.println("LOG: " <> msg)

            minigui.PortError(msg) ->
              io.println("ERROR: " <> msg)

            minigui.Closed ->
              io.println("Event: Closed")
          }
        })

      Nil
    }
  }
}

fn start_error_to_string(e: minigui.StartError) -> String {
  case e {
    minigui.EnsurePortFailed(msg) -> msg
    minigui.OpenPortFailed(msg) -> msg
    minigui.HandshakeFailed(msg) -> msg
  }
}