diff options
Diffstat (limited to 'lib/tv/src/tv_poll_dialog.erl')
-rw-r--r-- | lib/tv/src/tv_poll_dialog.erl | 357 |
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. + |