tv_pw_window.erl
来自「OTP是开放电信平台的简称」· ERL 代码 · 共 274 行
ERL
274 行
%% ``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$%%%%%*********************************************************************%%% %%% Description: Part of the pw component controlling the graphics.%%%%%%*********************************************************************-module(tv_pw_window).-export([create_window/2, resize_window/3, create_menubar/2, create_menu/2]).-include("tv_int_def.hrl").-include("tv_int_msg.hrl").-include("tv_pw_int_def.hrl").-define(DEFAULT_BG_COLOR, {217, 217, 217}).%%%*********************************************************************%%% EXTERNAL FUNCTIONS%%%*********************************************************************%%======================================================================%% Function: create_menu.%%%% Return Value: Identifier to the menu created.%%%% Description: Creates a menu in the window.%%%% Parameters: Win: ID of parent window.%%======================================================================create_menu(Msg, ProcVars) -> MenuP = ProcVars#process_variables.menu_params, MenubarId = MenuP#menu_params.menubar_id, ShortcutList = MenuP#menu_params.shortcuts, #pw_create_menu{menutitle = MenuTitle, title_acc_pos = TitleAccPos, menulist = MenuList} = Msg, % Create the menubutton! Label = def_or_param(MenuTitle, "NoName"), Mbutt = gs:create(menubutton, MenubarId, [{bg, ?DEFAULT_BG_COLOR}, {fg, {178, 34, 34}}, % firebrick % {font, {helvetica, bold, 14}}, {label, {text, Label}}, {underline, TitleAccPos} ]), % Create the actual menu! Menu = gs:create(menu, Mbutt, [{bg, ?DEFAULT_BG_COLOR}, {fg, {178, 34, 34}} ]), NewMenuP = MenuP#menu_params{shortcuts = ShortcutList ++ create_menulist(MenuList, Menu)}, ProcVars#process_variables{menu_params = NewMenuP}. create_menubar(WinP, MenuP) -> WindowId = WinP#window_params.window_id, MenubarId = gs:create(menubar, WindowId, [{bg, ?DEFAULT_BG_COLOR} ]), Mbutt = gs:create(menubutton, MenubarId, [{bg, ?DEFAULT_BG_COLOR}, {fg, {178, 34, 34}}, % firebrick % {font, {helvetica, bold, 14}}, {label, {text, " Help "}}, {underline, 1}, {side, right} ]), % Create the actual menu! Menu = gs:create(menu, Mbutt, [{bg, ?DEFAULT_BG_COLOR}, {fg, {178, 34, 34}} ]), MenuP#menu_params{menubar_id = MenubarId, shortcuts = create_menulist([{" Help ", normal, help_button, 1, h}, separator, {" OTP Documentation ",normal,otp_help_button,1,no_char}], Menu) ++ [{x,exit_button}, {'X',exit_button}] }.create_window(Msg, WinP) -> #pw_deblock{win_title = Title, win_width = Width, win_height = Height, min_win_width = MinWidth} = Msg, S = gs:start(), WindowTitle = def_or_param(Title, "NoName"), WindowMinWidth = def_or_param(MinWidth, ?DEFAULT_MIN_WINDOW_WIDTH), WindowMinHeight = def_or_param(MinWidth, ?DEFAULT_MIN_WINDOW_HEIGHT), WindowWidth = ?COMM_FUNC_FILE:max(def_or_param(Width, ?DEFAULT_WINDOW_WIDTH), WindowMinWidth), WindowHeight = ?COMM_FUNC_FILE:max(def_or_param(Height, ?DEFAULT_WINDOW_HEIGHT), WindowMinHeight), WindowId = gs:create(window, S, [{title, WindowTitle}, {width, WindowWidth}, {height, WindowHeight}, {bg, ?DEFAULT_BG_COLOR}, {configure, true}, {destroy, true}, {keypress, true}, {cursor, arrow} ]), WinP#window_params{window_id = WindowId, window_title = WindowTitle, window_width = WindowWidth, window_height = WindowHeight, min_window_width = WindowMinWidth, min_window_height = WindowMinHeight }.resize_window(WindowId, NewWidth, NewHeight) -> gs:config(WindowId, [{width, NewWidth}, {height, NewHeight} ]).%%%********************************************************************%%% INTERNAL FUNCTIONS%%%********************************************************************create_menulist([], _Menu) -> [];create_menulist(List, Menu) -> MaxLength = get_length_of_longest_menu_text(List, 0), create_menulist(List, Menu, MaxLength).create_menulist([], _Menu, _MaxLength) -> [];create_menulist([{Text, Type, Data, AccCharPos, ShortcutChar} | Rest], Menu, MaxLength) -> ShortcutCapitalChar = if ShortcutChar =:= no_char -> no_char; true -> CharAsciiValue = lists:nth(1, atom_to_list(ShortcutChar)), CapitalCharValue = CharAsciiValue - ($a - $A), list_to_atom([CapitalCharValue]) end, FinalText = if ShortcutChar =:= no_char -> Text; true -> Text ++ lists:duplicate(MaxLength - length(Text), " ") ++ " Ctrl+" ++ atom_to_list(ShortcutCapitalChar) ++ " " end, TypeAndSel = case Type of normal -> [{itemtype, normal}]; {radio, Selected, Group} -> [{itemtype, radio}, {select, Selected}, {group, Group}]; {check, Selected} -> [{itemtype, check}, {select, Selected}] end, gs:menuitem(Data, Menu, [{bg, ?DEFAULT_BG_COLOR}, {fg, {178, 34, 34}}, {label, {text, FinalText}}, {underline, AccCharPos}, {data, Data} | TypeAndSel ]), [{ShortcutChar, Data}, {ShortcutCapitalChar, Data} | create_menulist(Rest, Menu, MaxLength)];create_menulist([separator | Rest], Menu, MaxLength) -> gs:create(menuitem, Menu, [{itemtype, separator} ]), create_menulist(Rest, Menu, MaxLength). get_length_of_longest_menu_text([], MaxLength) -> MaxLength;get_length_of_longest_menu_text([{Text, _Type, _Data, _APos, _SChar} | Rest], CurrMax) -> L = length(Text), if L > CurrMax -> get_length_of_longest_menu_text(Rest, L); true -> get_length_of_longest_menu_text(Rest, CurrMax) end;get_length_of_longest_menu_text([separator | Rest], CurrMax) -> get_length_of_longest_menu_text(Rest, CurrMax).def_or_param(undefined, DefaultValue) -> DefaultValue;def_or_param(Param, _Default) -> Param.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?