tv_pg.erl
来自「OTP是开放电信平台的简称」· ERL 代码 · 共 431 行
ERL
431 行
%% ``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 via the world wide web 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.%% %% The Initial Developer of the Original Code is Ericsson Utvecklings AB.%% Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings%% AB. All Rights Reserved.''%% %% $Id$%%-module(tv_pg).-export([pg/1]).-include("tv_int_def.hrl").-include("tv_pg_int_def.hrl").-include("tv_pd_int_msg.hrl").%%%*********************************************************************%%% EXTERNAL FUNCTIONS%%%*********************************************************************%%======================================================================%% Function: pg.%%%% Return Value: None.%%%% Description: Process controlling the grid part of the display.%%%% Parameters: None.%%======================================================================pg(ParentPid) -> process_flag(trap_exit, true), ProcVars = #process_variables{parent_pid = ParentPid}, loop(ProcVars).%%%********************************************************************%%% INTERNAL FUNCTIONS%%%********************************************************************%%======================================================================%% Function: loop.%%%% Return Value: None.%%%% Description: Eternal (well, almost) loop, receiving messages and %% handling them.%%%% Parameters: %%======================================================================loop(ProcVars) -> receive Msg -> case Msg of #pg_data{} -> GridId = mark_busy(ProcVars), NewProcVars = update_grid_data(Msg, ProcVars), mark_nonbusy(GridId), loop(NewProcVars); #pg_list_info{lists_as_strings=ListAsStr} -> NewProcVars = tv_pg_gridfcns:handle_list_info(ListAsStr, ProcVars), loop(NewProcVars); #pg_horizontal_scroll{} -> GridId = mark_busy(ProcVars), NewProcVars = scroll_grid_horizontally(Msg, ProcVars), mark_nonbusy(GridId), loop(NewProcVars); #pg_remove_marks{} -> GridId = mark_busy(ProcVars), NewProcVars = tv_pg_gridfcns:remove_marks(ProcVars), mark_nonbusy(GridId), loop(NewProcVars); #pg_col_marked{} -> GridId = mark_busy(ProcVars), NewProcVars = mark_grid_col(Msg, ProcVars), mark_nonbusy(GridId), loop(NewProcVars); #pg_row_marked{} -> GridId = mark_busy(ProcVars), NewProcVars = mark_grid_row(Msg, ProcVars), mark_nonbusy(GridId), loop(NewProcVars); #pg_resize_grid_col{} -> GridId = mark_busy(ProcVars), NewProcVars = resize_grid_column(Msg, ProcVars), mark_nonbusy(GridId), loop(NewProcVars); #pg_resize_grid{} -> GridId = mark_busy(ProcVars), NewProcVars = resize_grid(Msg, ProcVars), mark_nonbusy(GridId), loop(NewProcVars); #pg_init_grid{} -> GridId = mark_busy(ProcVars), NewProcVars = init_grid(Msg, ProcVars), mark_nonbusy(GridId), PdPid = ProcVars#process_variables.parent_pid, PdPid ! #pg_ready{sender = self()}, loop(NewProcVars); {gs, Id, Event, Data, Args} -> GridId = mark_busy(ProcVars), NewProcVars = gs_messages({Id, Event, Data, Args}, ProcVars), mark_nonbusy(GridId), loop(NewProcVars); {'EXIT', Pid, Reason} -> ParentPid = ProcVars#process_variables.parent_pid, exit_signals({Pid, Reason}, ParentPid, ProcVars), loop(ProcVars); _Other -> loop(ProcVars) end end.%%======================================================================%% Function: %%%% Return Value: %%%% Description: %%%% Parameters: %%======================================================================exit_signals(ExitInfo, ParentPid, _ProcVars) -> case ExitInfo of {ParentPid, _Reason} -> exit(normal); _Other -> done end.%%======================================================================%% Function: %%%% Return Value: %%%% Description: %%%% Parameters: %%======================================================================gs_messages(Msg, ProcVars) -> case Msg of {Id, buttonpress, {gridcell, RealCol, RealRow, _FrameId}, [1 | _]} -> NewProcVars = tv_pg_gridfcns:mark_cell_and_notify(Id, RealCol, RealRow, ProcVars), NewProcVars; _OtherMessage -> ProcVars end. %%======================================================================%% Function: %%%% Return Value: %%%% Description: %%%% Parameters: %%======================================================================init_grid(Msg, ProcVars) -> #pg_init_grid{parent_id = ParentId, width = Width, height = Height, xpos = Xpos, ypos = Ypos, nof_rows = NofRows, row_height = RowHeight} = Msg, tv_pg_gridfcns:init_grid(ParentId, Width, Height, Xpos, Ypos, NofRows, RowHeight, ProcVars). %%======================================================================%% Function: %%%% Return Value: %%%% Description: %%%% Parameters: %%======================================================================resize_grid(Msg, ProcVars) -> #pg_resize_grid{width = Width, height = Height} = Msg, tv_pg_gridfcns:resize_grid(Width, Height, ProcVars). %%======================================================================%% Function: %%%% Return Value: %%%% Description: %%%% Parameters: %%======================================================================resize_grid_column(Msg, ProcVars) -> #pg_resize_grid_col{real_col_no = RealCol, virtual_col_no = VirtualCol, xdiff = Xdiff} = Msg, tv_pg_gridfcns:resize_grid_column(RealCol, VirtualCol, Xdiff, ProcVars).%%======================================================================%% Function: %%%% Return Value: %%%% Description: %%%% Parameters: %%======================================================================scroll_grid_horizontally(Msg, ProcVars) -> FirstColShown = ?COMM_FUNC_FILE:max(1, Msg#pg_horizontal_scroll.leftmost_virtual_col), tv_pg_gridfcns:scroll_grid_horizontally(FirstColShown, ProcVars).%%======================================================================%% Function: %%%% Return Value: %%%% Description: %%%% Parameters: %%======================================================================update_grid_data(Msg, ProcVars) -> #pg_data{data = Data, first_row_shown = FirstRowShown} = Msg, tv_pg_gridfcns:update_grid_data(Data, FirstRowShown, ProcVars).%%======================================================================%% Function: %%%% Return Value: %%%% Description: %%%% Parameters: %%======================================================================mark_grid_col(Msg, ProcVars) -> #pg_col_marked{virtual_col = VirtualCol} = Msg, tv_pg_gridfcns:mark_col(VirtualCol, ProcVars).%%======================================================================%% Function: %%%% Return Value: %%%% Description: %%%% Parameters: %%======================================================================mark_grid_row(Msg, ProcVars) -> #pg_row_marked{virtual_row = VirtualRow} = Msg, tv_pg_gridfcns:mark_row(VirtualRow, ProcVars).%%======================================================================%% Function: %%%% Return Value: %%%% Description: %%%% Parameters: %%======================================================================mark_busy(ProcVars) -> GridP = ProcVars#process_variables.grid_params, GridId = GridP#grid_params.fg_frame, gs:config(GridId, [{cursor, busy}]), GridId. %%======================================================================%% Function: %%%% Return Value: %%%% Description: %%%% Parameters: %%======================================================================mark_nonbusy(GridId) -> gs:config(GridId, [{cursor, arrow}]).
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?