diff options
Diffstat (limited to 'src/core/ephraim_gui.erl')
-rw-r--r-- | src/core/ephraim_gui.erl | 62 |
1 files changed, 38 insertions, 24 deletions
diff --git a/src/core/ephraim_gui.erl b/src/core/ephraim_gui.erl index b049da3..92ab521 100644 --- a/src/core/ephraim_gui.erl +++ b/src/core/ephraim_gui.erl @@ -1,29 +1,43 @@ -module(ephraim_gui). --compile([debug_info, export_all]). +-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]). --spec init() -> ok. -init() -> - %{jid,JID} = ephraim_config:get(jid), +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}]), - ephraim ! {register_ui, self()}, - loop(Port), - ephraim ! {unregister_ui, self()}. + {ok, Port}. + +handle_event({view_update, Msg}, Port) -> + Port ! {self(), {command, term_to_binary(Msg)}}, + {ok, Port}; + +handle_event(_Event, Port) -> + {ok, Port}. --spec loop(port()) -> ok. -loop(Port) -> - receive +handle_call(_Msg, Port) -> + {noreply, Port}. + +handle_info({Port, {data, Data}}, Port) -> + Msg = binary_to_term(Data), + case Msg of stop -> - ok; - {Port, {data, Data}} -> - Msg = binary_to_term(Data), - case Msg of - stop -> - ok; - _ -> - ephraim ! Msg, - loop(Port) - end; - Msg -> - Port ! {self(), {command, term_to_binary(Msg)}}, - loop(Port) - end. + init:stop(), + remove_handler; + _ -> + ephraim:notify({view_event, Msg}), + {ok, Port} + end; + +handle_info(_Msg, Port) -> + {ok, Port}. + +terminate(_Reason, _Port) -> + ok. +code_change(_OldVersion, Port, _Extra) -> + {ok, Port}. |