tv_pb.erl
来自「OTP是开放电信平台的简称」· ERL 代码 · 共 688 行 · 第 1/2 页
ERL
688 行
%%======================================================================%% Function: %%%% Return Value: %%%% Description: %%%% Parameters: %%======================================================================%% Three cases: no button previously clicked, or same button clicked,%% or some other button clicked.check_marked_row(NewVirtRow, undefined, RealRow, RowMarkP) -> % No btn already pressed! {true, RowMarkP#row_mark_params{virtual_row_marked = NewVirtRow, real_row_marked = RealRow}};check_marked_row(NewVirtRow, OldVirtRow, _RealRow, RowMarkP) when NewVirtRow =:= OldVirtRow -> % The button previously pressed has been pressed again! {false, RowMarkP#row_mark_params{virtual_row_marked = undefined, real_row_marked = undefined}};check_marked_row(NewVirtRow, _OldVirtRow, RealRow, RowMarkP) -> % A new btn has been pressed! {true, RowMarkP#row_mark_params{virtual_row_marked = NewVirtRow, real_row_marked = RealRow}}.%%======================================================================%% Function: %%%% Return Value: %%%% Description: %%%% Parameters: %%======================================================================set_sort_col(Msg, ProcVars) -> #pb_set_sort_col{virtual_col = SortCol} = Msg, tv_pb_funcs:set_new_sort_col(SortCol, ProcVars). %%======================================================================%% Function: %%%% Return Value: %%%% Description: %%%% Parameters: %%======================================================================%% Three cases: no button previously clicked, or same button clicked,%% or some other button clicked.mark_col_btn(NewId, undefined, NewVirtCol, _OldVirtCol, _RealCol, _SortCol, ColMarkP) -> % No btn already pressed! gs:config(NewId, [{bg, ?COL_MARK_COLOR}, {fg, {255, 255, 255}} ]), {true, ColMarkP#col_mark_params{col_btn_id = NewId, virtual_col_marked = NewVirtCol}};mark_col_btn(NewId, _OldId, NewVirtCol, OldVirtCol, _RealCol, SortCol, ColMarkP) when NewVirtCol =:= OldVirtCol, NewVirtCol =:= SortCol -> % The button previously pressed has been pressed again! gs:config(NewId, [{bg, ?SORT_MARK_COLOR}, {fg, {0, 0, 0}} ]), {false, ColMarkP#col_mark_params{col_btn_id = undefined, virtual_col_marked = undefined}};mark_col_btn(NewId, _OldId, NewVirtCol, OldVirtCol, _RealCol, _SortCol, ColMarkP) when NewVirtCol =:= OldVirtCol -> % The button previously pressed has been pressed again! gs:config(NewId, [{bg, ?DEFAULT_BG_COLOR}, {fg, {0, 0, 0}} ]), {false, ColMarkP#col_mark_params{col_btn_id = undefined, virtual_col_marked = undefined}};mark_col_btn(NewId, OldId, NewVirtCol, _OldVirtCol, _RealCol, _SortCol, ColMarkP) -> % A new btn has been pressed! gs:config(OldId, [{bg, ?DEFAULT_BG_COLOR}, {fg, {0, 0, 0}} ]), gs:config(NewId, [{bg, ?COL_MARK_COLOR}, {fg, {255, 255, 255}} ]), {true, ColMarkP#col_mark_params{col_btn_id = NewId, virtual_col_marked = NewVirtCol}}. %%======================================================================%% Function: %%%% Return Value: %%%% Description: %%%% Parameters: %%======================================================================handle_col_resizing(RbtnId, RealCol, VirtualCol, Xpos, ProcVars) -> gs:config(RbtnId, [{motion, true}]), #process_variables{parent_pid = ParentPid, grid_frame_id = GrFrId, grid_frame_height = Height, hbtn_height = HbtnH, resbtn_width = RbtnW, cols_shown = ColsShown} = ProcVars, LineId = gs:frame(GrFrId, [{width, 1}, {height, Height - HbtnH}, {x, Xpos}, {y, HbtnH - 1}, {bg, ?DEFAULT_BG_COLOR} ]), MinColWidth = RbtnW, OldColWidth = lists:nth(RealCol, ColsShown), Xdiff = get_xdiff(RbtnId, 1, 0, LineId, Xpos, MinColWidth - OldColWidth), ParentPid ! #pb_new_colwidth{sender = self(), real_col = RealCol, virtual_col = VirtualCol, xdiff = Xdiff}, gs:config(RbtnId, [{motion, false}]), gs:destroy(LineId). %%======================================================================%% Function: %%%% Return Value: %%%% Description: %%%% Parameters: %%======================================================================get_xdiff(Id, Btn, LastXdiff, LineId, LineXpos, MinAllowedXdiff) -> receive {gs, Id, motion, {resbtn, _RealCol, _VirtCol, _OldXpos}, [NewXdiff | _T]} -> UsedXdiff = max(MinAllowedXdiff, NewXdiff), gs:config(LineId, [{x, LineXpos + UsedXdiff}]), get_xdiff(Id, Btn, UsedXdiff, LineId, LineXpos, MinAllowedXdiff); {gs, Id, buttonrelease, _Data, [Btn | _T]} -> LastXdiff; {gs, Id, buttonrelease, _Data, _Args} -> get_xdiff(Id, Btn, LastXdiff, LineId, LineXpos, MinAllowedXdiff); {gs, Id, buttonpress, _Data, _Args} -> get_xdiff(Id, Btn, LastXdiff, LineId, LineXpos, MinAllowedXdiff) end.%%======================================================================%% Function: %%%% Return Value: %%%% Description: %%%% Parameters: %%======================================================================init_btns(Msg, ProcVars) -> #pb_init_btns{parent_id = ParentId, parent_width = Width, parent_height = Height, ypos = Ypos, hbtn_height = HbtnH, resbtn_width = RbtnW, vbtn_width = VbtnW, nof_rows = NofRows, row_height = RowHeight, first_col_shown = FirstColShown, cols_shown = ColsShown} = Msg, NewProcVars = tv_pb_funcs:init_btns(ParentId, Ypos, HbtnH, VbtnW, RbtnW, FirstColShown, ColsShown, NofRows, RowHeight, ProcVars), gs:frame(ParentId, [{bg, {0, 0, 0}}, {bw, 0}, {width, 1300}, {height, 1}, {x, 0}, {y, Ypos - 1} ]), NewProcVars#process_variables{grid_frame_width = Width, grid_frame_height = Height }.%%======================================================================%% Function: %%%% Return Value: %%%% Description: %%%% Parameters: %%======================================================================update_hbtns(Msg, ProcVars) -> #pb_update_hbtns{parent_width = Width, parent_height = Height, first_col_shown = FirstColShown, cols_shown = ColsShown} = Msg, NewProcVars = tv_pb_funcs:update_hbtns(FirstColShown, ColsShown, ProcVars), NewProcVars#process_variables{grid_frame_width = Width, grid_frame_height = Height }.%%======================================================================%% Function: %%%% Return Value: %%%% Description: %%%% Parameters: %%======================================================================update_vbtns(Msg, ProcVars) -> #pb_update_vbtns{color_list = Colors, first_row_shown = FirstRowShown, nof_rows_shown = NofRowsShown, blinking_enabled = BlinkEnabled} = Msg, tv_pb_funcs:update_vbtns(NofRowsShown, FirstRowShown, Colors, BlinkEnabled, ProcVars). %%======================================================================%% Function: %%%% Return Value: %%%% Description: %%%% Parameters: %%======================================================================update_keys(Msg, ProcVars) -> #pb_key_info{list_of_keys = KeyList} = Msg, tv_pb_funcs:update_keys(KeyList, ProcVars).%%======================================================================%% Function: %%%% Return Value: %%%% Description: %%%% Parameters: %%======================================================================max(A, B) when A >= B -> A;max(_, B) -> B.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?