defmodule Guppy do
@moduledoc """
Public entry points for the Guppy runtime.
The current direction is an OTP-supervised Elixir runtime coordinating a native
GPUI bridge loaded as a NIF.
"""
alias Guppy.Server
@doc "Returns the configured native bridge module."
def native do
Application.get_env(:guppy, :native, Guppy.Native.Nif)
end
@doc "Returns true when the Guppy server process is running."
def started? do
not is_nil(server())
end
@doc "Returns the Guppy server pid, if started."
def server do
Process.whereis(Server)
end
@doc "Returns runtime state for early bring-up and tests."
def info do
Server.info(Server)
end
@doc "Pings the native bridge."
def ping(timeout \\ 5_000) do
Server.ping(Server, timeout)
end
@doc "Opens a native window owned by the calling process and renders its initial IR tree."
def open_window(ir, opts \\ [], timeout \\ 5_000)
def open_window(ir, opts, timeout) when is_list(opts) and is_integer(timeout) do
Server.open_window(Server, self(), ir, opts, timeout)
end
@doc "Renders a full IR tree into an open native window."
def render(view_id, ir, timeout \\ 5_000) do
Server.render(Server, view_id, ir, timeout)
end
@doc "Closes a previously opened native window."
def close_window(view_id, timeout \\ 5_000) do
Server.close_window(Server, view_id, timeout)
end
@doc "Activates/focuses a previously opened native window owned by the calling process."
def focus_window(view_id, timeout \\ 5_000) do
Server.focus_window(Server, view_id, timeout)
end
@doc "Replaces the application menu bar for the calling process."
def set_menus(menus, timeout \\ 5_000) do
Server.set_menus(Server, self(), menus, timeout)
end
@doc "Replaces the Dock/app-icon menu for the calling process."
def set_dock_menu(items, timeout \\ 5_000) do
Server.set_dock_menu(Server, self(), items, timeout)
end
@doc "Sets the process-owned app badge label; pass nil to clear it."
def set_app_badge(label, timeout \\ 5_000) do
Server.set_app_badge(Server, self(), label, timeout)
end
@doc "Opens a platform dialog for choosing one or more files."
def open_file_dialog(opts \\ [], timeout \\ 30_000) do
Server.open_file_dialog(Server, opts, timeout)
end
@doc "Opens a platform dialog for choosing one or more directories."
def choose_directory_dialog(opts \\ [], timeout \\ 30_000) do
Server.choose_directory_dialog(Server, opts, timeout)
end
@doc "Opens a platform dialog for choosing a save path."
def save_file_dialog(opts \\ [], timeout \\ 30_000) do
Server.save_file_dialog(Server, opts, timeout)
end
@doc "Reads text from the platform clipboard, returning `nil` when no text is available."
def read_clipboard_text(timeout \\ 5_000) do
Server.read_clipboard_text(Server, timeout)
end
@doc "Writes text to the platform clipboard."
def write_clipboard_text(text, timeout \\ 5_000) do
Server.write_clipboard_text(Server, text, timeout)
end
@doc "Returns the active theme for the current app context."
def active_theme, do: Guppy.App.theme()
@doc "Returns the active theme for an app."
def active_theme(app), do: Guppy.App.theme(app)
@doc "Returns the native-side open view count."
def native_view_count(timeout \\ 5_000) do
Server.view_count(Server, timeout)
end
@doc "Returns native build info when the NIF is loaded."
def native_build_info do
Guppy.Native.Nif.build_info()
end
@doc "Returns the native runtime status when the NIF is loaded."
def native_runtime_status do
Guppy.Native.Nif.runtime_status()
end
@doc "Returns the native GUI bootstrap status when the NIF is loaded."
def native_gui_status do
Guppy.Native.Nif.gui_status()
end
@doc "Returns native-side performance counters when the NIF is loaded."
def native_performance_counters do
Guppy.Native.Nif.performance_counters()
end
end