aboutsummaryrefslogtreecommitdiffstats
path: root/lib/tv/src/tv_poll_dialog.erl
diff options
context:
space:
mode:
Diffstat (limited to 'lib/tv/src/tv_poll_dialog.erl')
-rw-r--r--lib/tv/src/tv_poll_dialog.erl357
1 files changed, 357 insertions, 0 deletions
diff --git a/lib/tv/src/tv_poll_dialog.erl b/lib/tv/src/tv_poll_dialog.erl
new file mode 100644
index 0000000000..8d41251266
--- /dev/null
+++ b/lib/tv/src/tv_poll_dialog.erl
@@ -0,0 +1,357 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%%*********************************************************************
+%%%
+%%% Description: Code for the "set poll interval" dialog with the user.
+%%%
+%%%*********************************************************************
+
+-module(tv_poll_dialog).
+
+
+
+-export([start/1, init/2]).
+
+
+
+-include("tv_int_msg.hrl").
+
+
+
+-define(WINDOW_WIDTH, 305).
+-define(WINDOW_HEIGHT, 185).
+
+-define(DEFAULT_BG_COLOR, {217, 217, 217}).
+
+
+
+
+
+
+%%%*********************************************************************
+%%% EXTERNAL FUNCTIONS
+%%%*********************************************************************
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+start(Pos) ->
+ Pid = self(),
+ ProcPid = spawn_link(?MODULE, init, [Pid, Pos]),
+ receive_answer(ProcPid).
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+init(Pid, Pos) ->
+ process_flag(trap_exit, true),
+ {ScalePos, ScaleRange, Poll, Color} = case Pos of
+ infinity ->
+ {0, {20, 20}, false, {255, 255, 255}};
+ _Other ->
+ {Pos, {20, 300}, true, {0, 0, 0}}
+ end,
+ S = gs:start(),
+ Win = gs:window(S, [{width, ?WINDOW_WIDTH},
+ {height, ?WINDOW_HEIGHT},
+ {bg, ?DEFAULT_BG_COLOR},
+ {title, "[TV] Set Poll Interval"},
+ {configure, true},
+ {destroy, true}
+ ]),
+
+ NoPollBtn = gs:radiobutton(Win, [{height, 30},
+ {width, 143},
+ {x, 10},
+ {y, 10},
+ {bg, ?DEFAULT_BG_COLOR},
+ {fg, {0, 0, 0}},
+ {value, no_poll},
+ {label, {text, "Manual Polling"}},
+ {select, not(Poll)}
+ ]),
+
+ PollBtn = gs:radiobutton(Win, [{height, 30},
+ {width, 163},
+ {x, 10},
+ {y, 60},
+ {bg, ?DEFAULT_BG_COLOR},
+ {fg, {0, 0, 0}},
+ {value, poll},
+ {label, {text, "Automatic Polling"}},
+ {select, Poll}
+ ]),
+
+ Lbl = gs:label(Win, [{label, {text, "Poll Interval (seconds):"}},
+ {align, center},
+ {bg, ?DEFAULT_BG_COLOR},
+ {fg, Color},
+ {width, 183},
+ {height, 30},
+ {x, 10},
+ {y, 100}
+ ]),
+
+ Scale = gs:scale(Win, [{bg, ?DEFAULT_BG_COLOR},
+ {fg, Color},
+ {orient, horizontal},
+ {range, ScaleRange},
+ {pos, ScalePos},
+ {width, 285},
+ {height, 50},
+ {x, 10},
+ {y, 130}
+ ]),
+
+ OkBtn = gs:button(Win, [{label, {text, "OK"}},
+ {bg, ?DEFAULT_BG_COLOR},
+ {fg, {0, 0, 0}},
+ {align, center},
+ {width, 60},
+ {height, 30},
+ {x, 230},
+ {y, 10}
+ ]),
+
+ CancelBtn = gs:button(Win, [{label, {text, "Cancel"}},
+ {bg, ?DEFAULT_BG_COLOR},
+ {fg, {0, 0, 0}},
+ {align, center},
+ {width, 60},
+ {height, 30},
+ {x, 230},
+ {y, 60}
+ ]),
+
+ gs:config(Win, {map, true}),
+ browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn, CancelBtn, Poll, Pos).
+
+
+
+
+
+
+
+%%%*********************************************************************
+%%% INTERNAL FUNCTIONS
+%%%*********************************************************************
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+receive_answer(ProcPid) ->
+ receive_answer(ProcPid, undefined, undefined, undefined, undefined).
+
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+receive_answer(ProcPid, DataReqMsg, WinConfMsg, MarkedRowMsg, SubsetMsg) ->
+ receive Msg ->
+ case Msg of
+
+ {browser, ProcPid, cancel} ->
+ PcPid = self(),
+ PcPid ! DataReqMsg,
+ PcPid ! WinConfMsg,
+ PcPid ! MarkedRowMsg,
+ PcPid ! SubsetMsg,
+ cancel;
+
+ {browser, ProcPid, {true, PollInterval}} ->
+ PcPid = self(),
+ PcPid ! DataReqMsg,
+ PcPid ! WinConfMsg,
+ PcPid ! MarkedRowMsg,
+ PcPid ! SubsetMsg,
+ PollInterval;
+
+ {browser, ProcPid, {false, _Pollinterval}} ->
+ PcPid = self(),
+ PcPid ! DataReqMsg,
+ PcPid ! WinConfMsg,
+ PcPid ! MarkedRowMsg,
+ PcPid ! SubsetMsg,
+ infinity;
+
+ #pc_data_req{} ->
+ receive_answer(ProcPid, Msg, WinConfMsg, MarkedRowMsg, SubsetMsg);
+
+ #pc_win_conf{} ->
+ receive_answer(ProcPid, DataReqMsg, Msg, MarkedRowMsg, SubsetMsg);
+
+ #pc_marked_row{} ->
+ receive_answer(ProcPid, DataReqMsg, WinConfMsg, Msg, SubsetMsg);
+
+ #dbs_subset{} ->
+ receive_answer(ProcPid, DataReqMsg, WinConfMsg, MarkedRowMsg, Msg);
+
+ #pc_menu_msg{data = exit_button} ->
+ self() ! Msg,
+ cancel;
+
+ #pc_set_sorting_mode{sender = Sender} ->
+ Sender ! #pd_ignore{sender = self()},
+ ProcPid ! raise_and_beep,
+ receive_answer(ProcPid, DataReqMsg, WinConfMsg, MarkedRowMsg, SubsetMsg);
+
+ {'EXIT', _Sender, _Reason} ->
+ self() ! Msg,
+ cancel;
+
+ _Other ->
+ ProcPid ! raise_and_beep,
+ receive_answer(ProcPid, DataReqMsg, WinConfMsg, MarkedRowMsg, SubsetMsg)
+ end
+ end.
+
+
+
+
+
+
+
+
+%%======================================================================
+%% Function:
+%%
+%% Return Value:
+%%
+%% Description:
+%%
+%% Parameters:
+%%======================================================================
+
+
+browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn, CancelBtn, Poll, Pos) ->
+ receive
+ {gs, Scale, click, _, [NewPos | _]} ->
+ browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn,
+ CancelBtn, Poll, NewPos);
+
+ {gs, NoPollBtn, click, _, _} ->
+ gs:config(Lbl, [{fg, {255, 255, 255}}]),
+ gs:config(Scale, [{fg, {255, 255, 255}}, {pos, 0}, {range, {20, 20}}]),
+ receive
+ {gs, Scale, click, _, _} ->
+ done
+ after 500 ->
+ done
+ end,
+ browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn,
+ CancelBtn, false, Pos);
+
+ {gs, PollBtn, click, _, _} ->
+ gs:config(Lbl, [{fg, {0, 0, 0}}]),
+ gs:config(Scale, [{fg, {0, 0, 0}}, {pos, Pos}, {range, {20, 300}}]),
+ receive
+ {gs, Scale, click, _, _} ->
+ done
+ after 500 ->
+ done
+ end,
+ browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn,
+ CancelBtn, true, Pos);
+
+ {gs, OkBtn, click, _, _} ->
+ Pid ! {browser, self(), {Poll, Pos}};
+
+ {gs, CancelBtn, click, _, _} ->
+ Pid ! {browser, self(), cancel};
+
+ {gs, _, destroy, _, _} ->
+ Pid ! {browser, self(), cancel};
+
+
+ {gs, Win, configure, _, _} ->
+ gs:config(Win, [{width, ?WINDOW_WIDTH},
+ {height, ?WINDOW_HEIGHT}
+ ]),
+ browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn,
+ CancelBtn, Poll, Pos);
+
+
+ raise_and_beep ->
+ gs:config(Win, [raise,
+ beep]),
+ browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn,
+ CancelBtn, Poll, Pos);
+
+
+ {'EXIT', _Sender, _Reason} ->
+ Pid ! {browser, self(), cancel};
+
+
+ _Other ->
+ io:format("Poll dialog received message ~w ~n", [_Other]),
+ browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn,
+ CancelBtn, Poll, Pos)
+
+ end.
+