-module(ephraim_gui). -behaviour(gen_event). -export([start/0, stop/0]). -export([init/1, handle_event/2, handle_call/2, handle_info/2, terminate/2, code_change/3]). start() -> gen_event:add_handler(ephraim_event_man, ?MODULE, []). stop() -> gen_event:delete_handler(ephraim_event_man, ?MODULE, []). -spec init(term()) -> ok. init(_Args) -> Port = open_port({spawn_executable, "ephraim-gtk"}, [binary, nouse_stdio, {packet, 4}]), {ok, Port}. handle_event({view_update, Msg}, Port) -> Port ! {self(), {command, term_to_binary(Msg)}}, {ok, Port}; handle_event(_Event, Port) -> {ok, Port}. handle_call(_Msg, Port) -> {noreply, Port}. handle_info({Port, {data, Data}}, Port) -> Msg = binary_to_term(Data), case Msg of stop -> init:stop(), remove_handler; _ -> ephraim:notify({view_request, Msg}), {ok, Port} end; handle_info(_Msg, Port) -> {ok, Port}. terminate(_Reason, _Port) -> ok. code_change(_OldVersion, Port, _Extra) -> {ok, Port}.