lib/wx.ex

defmodule :wx do
  def batch(fun), do: fun.()
  def set_env(_wx_env), do: :ok
  def get_env(), do: :ok
  # credo:disable-for-next-line
  def getObjectType(obj), do: Keyword.get(obj, :type)

  def new(_args \\ nil) do
    case Process.whereis(Bridge) do
      nil ->
        {:ok, pid} = GenServer.start(Bridge, [], name: Bridge)
        pid

      pid ->
        pid
    end
  end

  def subscribe_events() do
    GenServer.call(Bridge, {:subscribe_events, self()})
  end

  def null(), do: :null
end

require Bridge
Bridge.generate_bridge_calls(:wxLocale, [:getSystemLanguage, :getCanonicalName])
Bridge.generate_bridge_calls(:wxMenuItem, [:getId, :check, :setText])

Bridge.generate_bridge_calls(:wxMenu, [
  :appendSeparator,
  :append,
  :enable,
  :delete,
  :getMenuItems,
  :setTitle
])

Bridge.generate_bridge_calls(:wxMenuBar, [
  :remove,
  :append,
  :replace,
  :getMenuCount,
  :oSXGetAppleMenu
])

Bridge.generate_bridge_calls(:wxWebView, [
  :isBackendAvailable,
  :enableContextMenu,
  :isContextMenuEnabled,
  :isShownOnScreen,
  :loadURL,
  :reload
])

Bridge.generate_bridge_calls(:wxHtmlWindow, [:setPage])
Bridge.generate_bridge_calls(:wxTaskBarIcon, [:removeIcon, :setIcon, :popupMenu])

Bridge.generate_bridge_calls(:wxNotificationMessage, [
  :useTaskBarIcon,
  :setTitle,
  :setMessage,
  :show
])

Bridge.generate_bridge_calls(:wxFrame, [
  :raise,
  :getSizer,
  :setSizer,
  :clear,
  :refresh,
  :centerOnScreen,
  :show,
  :isShown,
  :iconize,
  :isIconized,
  :setIcon,
  :setMinSize,
  :setMenuBar,
  :hide,
  :setTitle
])

Bridge.generate_bridge_calls(:wxWindow, [
  :centerOnScreen,
  :clear,
  :getSizer,
  :hide,
  :iconize,
  :isIconized,
  :isShown,
  :raise,
  :refresh,
  :setFocus,
  :setIcon,
  :setMenuBar,
  :setSizer,
  :setTitle,
  :show
])

Bridge.generate_bridge_calls(:wxTopLevelWindow, [
  :centerOnScreen,
  :clear,
  :getSizer,
  :hide,
  :iconize,
  :isActive,
  :isIconized,
  :isShown,
  :raise,
  :refresh,
  :setFocus,
  :setIcon,
  :setMenuBar,
  :setSizer,
  :setTitle,
  :show
])

Bridge.generate_bridge_calls(:wxButton, [
  :show,
  :setLabel,
  :setFocus,
  :setDefault,
  :isEnabled,
  :hide,
  :enable,
  :disable
])

Bridge.generate_bridge_calls(:wxBoxSizer, [
  :layout,
  :show,
  :hide,
  :clear,
  :add,
  :fit,
  :setMinSize,
  :setSizeHints
])

Bridge.generate_bridge_calls(:wxSizer, [
  :layout,
  :show,
  :hide,
  :clear,
  :add,
  :fit,
  :setMinSize,
  :setSizeHints
])

Bridge.generate_bridge_calls(:wxSizerItem, [:setBorder, :getBorder])
Bridge.generate_bridge_calls(:wxSizerFlags, [:proportion, :expand, :border])
Bridge.generate_bridge_calls(:wxMessageDialog, [])
Bridge.generate_bridge_calls(:wxGauge, [:pulse, :setValue])
Bridge.generate_bridge_calls(:wxFileDialog, [:getReturnCode, :getPath])
Bridge.generate_bridge_calls(:wxDirDialog, [:getReturnCode, :getPath])

Bridge.generate_bridge_calls(:wxDialog, [
  :showModal,
  :setSizer,
  :setAutoLayout,
  :setAffirmativeId,
  :centre
])

Bridge.generate_bridge_calls(:wx_misc, [:launchDefaultBrowser, :getOsDescription])

Bridge.generate_bridge_calls(:wxStaticText, [
  :show,
  :setLabel,
  :getLabel,
  :setForegroundColour,
  :hide
])

Bridge.generate_bridge_calls(:wxTextCtrl, [:setValue, :getValue, :enable])
Bridge.generate_bridge_calls(:wxStdDialogButtonSizer, [:realize, :addButton])
Bridge.generate_bridge_calls(:wxCloseEvent, [:canVeto, :veto])
Bridge.generate_bridge_calls(:wxArtProvider, [:getIcon, :getBitmap])