diff options
Diffstat (limited to 'lib/gs/src/gstk_generic.erl')
-rw-r--r-- | lib/gs/src/gstk_generic.erl | 1089 |
1 files changed, 0 insertions, 1089 deletions
diff --git a/lib/gs/src/gstk_generic.erl b/lib/gs/src/gstk_generic.erl deleted file mode 100644 index db4e2fdff4..0000000000 --- a/lib/gs/src/gstk_generic.erl +++ /dev/null @@ -1,1089 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1996-2016. All Rights Reserved. -%% -%% Licensed under the Apache License, Version 2.0 (the "License"); -%% you may not use this file except in compliance with the License. -%% You may obtain a copy of the License at -%% -%% http://www.apache.org/licenses/LICENSE-2.0 -%% -%% Unless required by applicable law or agreed to in writing, software -%% distributed under the License is distributed on an "AS IS" BASIS, -%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -%% See the License for the specific language governing permissions and -%% limitations under the License. -%% -%% %CopyrightEnd% -%% - -%% - --module(gstk_generic). --compile([{nowarn_deprecated_function,{gs,assq,2}}]). - --export([out_opts/8, - read_option/5, - mk_tkw_child/2, - merge_default_options/3, - merge_default_options/2, - opts_for_child/3, - mk_cmd_and_exec/4, - mk_cmd_and_exec/5, - mk_cmd_and_exec/6, - mk_cmd_and_exec/7, - make_command/5, - make_command/6, - make_command/7, - read_option/4, - handle_external_opt_call/9, - handle_external_read/1, - gen_anchor/9, - gen_anchor/5, - gen_height/9, - gen_height/5, - gen_width/9, - gen_width/5, - gen_x/9, - gen_x/5, - gen_y/9, - gen_y/5, - gen_raise/9, - gen_raise/5, - gen_lower/9, - gen_lower/5, - gen_enable/9, - gen_enable/5, - gen_align/9, - gen_align/5, - gen_justify/9, - gen_justify/5, - gen_padx/9, - gen_padx/5, - gen_pady/9, - gen_pady/5, - gen_font/9, - gen_font/5, - gen_label/9, - gen_label/5, - gen_activebg/9, - gen_activebg/5, - gen_activefg/9, - gen_activefg/5, - gen_default/9, - gen_relief/9, - gen_relief/5, - gen_bw/9, - gen_bw/5, - gen_font_wh/5, - gen_choose_font/5, - gen_data/9, - gen_data/5, - gen_pack_x/9, - gen_pack_x/5, - gen_pack_y/9, - gen_pack_y/5, - gen_pack_xy/9, - gen_flush/9, - gen_flush/5, - gen_keep_opt/9, - gen_children/5, - make_extern_id/2, - gen_id/5, - gen_parent/5, - gen_type/5, - gen_beep/9, - gen_setfocus/9, - gen_setfocus/5, - gen_buttonpress/9, - gen_buttonpress/5, - gen_buttonrelease/9, - gen_buttonrelease/5, - gen_configure/9, - gen_configure/5, - gen_destroy/9, - gen_destroy/5, - gen_enter/9, - gen_enter/5, - gen_focus_ev/9, - gen_focus_ev/5, - gen_keypress/9, - gen_keypress/5, - gen_keyrelease/9, - gen_keyrelease/5, - gen_leave/9, - gen_leave/5, - gen_motion/9, - gen_motion/5, - gen_highlightbw/9, - gen_highlightbw/5, - gen_highlightbg/9, - gen_highlightbg/5, - gen_highlightfg/9, - gen_highlightfg/5, - gen_selectbw/9, - gen_selectbw/5, - gen_selectfg/9, - gen_selectfg/5, - gen_selectbg/9, - gen_selectbg/5, - gen_fg/9, - gen_fg/5, - gen_bg/9, - gen_bg/5, - gen_so_activebg/9, - gen_so_activebg/5, - gen_so_bc/9, - gen_so_bc/5, - gen_so_scrollfg/9, - gen_so_scrollfg/5, - gen_so_scrollbg/9, - gen_so_scrollbg/5, - obj/1, - gen_so_bg/9, - gen_so_bg/5, - gen_so_selectbw/9, - gen_so_selectbw/5, - gen_so_selectfg/9, - gen_so_selectfg/5, - gen_so_selectbg/9, - gen_so_selectbg/5, - gen_so_scrolls/9, - gen_so_hscroll/5, - gen_so_vscroll/5, - cursors/0, - gen_cursor/9, - gen_cursor/5, - gen_citem_coords/9, - gen_citem_coords/5, - gen_citem_fill/9, - gen_citem_fill/5, - gen_citem_lower/9, - gen_citem_raise/9, - gen_citem_move/9, - move_coords/3, - add_to_coords/3, - gen_citem_setfocus/9, - gen_citem_setfocus/5, - gen_citem_buttonpress/9, - gen_citem_buttonrelease/9, - gen_citem_enter/9, - gen_citem_keypress/9, - gen_citem_keyrelease/9, - gen_citem_leave/9, - gen_citem_motion/9, - scrolls_vh/3, - parse_scrolls/1, - parse_scrolls/2, - parse_scrolls/4, - bind/5, - bind/6, - ebind/6, - eunbind/6, - item_bind/6, - item_ebind/6, - item_eunbind/5, - event/5, - read_option/3, - make_command/4, - mk_create_opts_for_child/4]). - --include("gstk.hrl"). --include("gstk_generic.hrl"). - -%%---------------------------------------------------------------------- -%% Returns: a new unique TkWidget (string()) -%%---------------------------------------------------------------------- -mk_tkw_child(DB,#gstkid{parent=P,objtype=Ot}) -> - Pgstkid = gstk_db:lookup_gstkid(DB, P), - PW = Pgstkid#gstkid.widget, - Oref = gstk_db:counter(DB, Ot), - PF = gstk_widgets:suffix(Ot), - _TkW = lists:concat([PW, PF, Oref]). - -%%---------------------------------------------------------------------- -%% Purpose: Merges options. Opts have higher priority than BuiltIn -%% (and ParentOpts have higher than BuiltIn) -%% Returns: A list of new options. -%%---------------------------------------------------------------------- -merge_default_options(ParOpts, BuildInOpts, Opts) -> - %% parents options first - Tmp=merge_default_options(ParOpts, lists:sort(Opts)), - merge_default_options(BuildInOpts,Tmp). - -merge_default_options([Def|Ds],[Opt|Os]) - when element(1,Def) < element(1,Opt) -> - [Def | merge_default_options(Ds,[Opt|Os])]; - -merge_default_options([Def|Ds],[Opt|Os]) - when element(1,Def) > element(1,Opt) -> - [Opt | merge_default_options([Def|Ds],Os)]; - -merge_default_options([Def|Ds],[Opt|Os]) - when element(1,Def) == element(1,Opt) -> - [Opt | merge_default_options(Ds,Os)]; - -merge_default_options(Defs,[Opt|Os]) -> - [Opt | merge_default_options(Defs,Os)]; - -merge_default_options([],Opts) -> Opts; -merge_default_options(Defs,[]) -> Defs. - -opts_for_child(DB,Childtype,ParId) -> - case gs_widgets:container(Childtype) of - true -> - gstk_db:default_container_opts(DB,ParId,Childtype); - false -> - gstk_db:default_opts(DB,ParId,Childtype) - end. - -mk_create_opts_for_child(DB,#gstkid{objtype=ChildType}, Pgstkid, Opts) -> - merge_default_options( - opts_for_child(DB,ChildType,Pgstkid#gstkid.id), - gs_widgets:default_options(ChildType), - Opts). - -mk_cmd_and_exec(Opts,Gstkid,Scmd,DB) -> - TkW = Gstkid#gstkid.widget, - mk_cmd_and_exec(Opts,Gstkid,TkW,Scmd,[";place ", TkW],DB,dummy). -mk_cmd_and_exec(Opts,Gstkid,Scmd,Pcmd,DB) -> - mk_cmd_and_exec(Opts,Gstkid,Gstkid#gstkid.widget,Scmd,Pcmd,DB,dummy). -mk_cmd_and_exec(Options, Gstkid, TkW, SCmd, PCmd, DB) -> - mk_cmd_and_exec(Options, Gstkid, TkW, SCmd, PCmd, DB,dummy). -mk_cmd_and_exec(Options, Gstkid, TkW, SCmd, PCmd, DB,ExtraArg) -> - case gstk_generic:make_command(Options,Gstkid,TkW,SCmd,PCmd,DB,ExtraArg) of - {error,Reason} -> {error,Reason}; - Cmd when is_list(Cmd) -> - gstk:exec(Cmd) - end. - -%%---------------------------------------------------------------------- -%% SCmd: SimplePreCommand - prepended to simple (s) options -%% PCmd: PlacePreCommand - prepended to placer (p) options -%% (should start with ';' (at least if preceeded with simple cmds)) -%% Comment: If some function changes the gstkid, -%% it's responsible for storing it in the DB. -%%---------------------------------------------------------------------- -make_command(Opts,Gstkid,Scmd,DB) -> - TkW = Gstkid#gstkid.widget, - make_command(Opts,Gstkid,TkW,Scmd,[";place ", TkW],DB,dummy). -make_command(Opts,Gstkid,Scmd,Pcmd,DB) -> - make_command(Opts,Gstkid,Gstkid#gstkid.widget,Scmd,Pcmd,DB,dummy). -make_command(Options, Gstkid, TkW, SCmd, PCmd, DB) -> - make_command(Options, Gstkid, TkW, SCmd, PCmd, DB,dummy). -make_command(Options, Gstkid, TkW, SCmd, PCmd, DB,ExtraArg) -> - case out_opts(Options, Gstkid, TkW, DB, ExtraArg, [], [], []) of - {[], [], []} -> []; - {Si, [], []} -> [SCmd, Si,$;]; - {[], Pl, []} -> [PCmd, Pl,$;]; - {[], [], Co} -> [$;,Co]; - {[], Pl, Co} -> [PCmd, Pl, $;, Co]; - {Si, [], Co} -> [SCmd, Si, $;, Co]; - {Si, Pl, []} -> [SCmd, Si, PCmd, Pl, $;]; - {Si, Pl, Co} -> [SCmd, Si, PCmd, Pl, $;, Co]; - {error,Reason} -> {error,Reason} - end. - -read_option(DB,Gstkid,Opt) -> - read_option(DB,Gstkid,Gstkid#gstkid.widget,Opt,dummy). -read_option(DB,Gstkid,Opt,ExtraArg) -> - read_option(DB,Gstkid,Gstkid#gstkid.widget,Opt,ExtraArg). - -%%---------------------------------------------------------------------- -%% Args: Args is [Gstkid, TkW, DB, ExtraArg] -%% Comment: An optimization:don't reconstruct the arg list for apply each time. -%% This is the option-engine so we should optimize. -%%---------------------------------------------------------------------- -handle_external_opt_call([Opt|Options],Gstkid,TkW,DB,ExtraArg,ExtRes,S,P,C) -> - case ExtRes of - {s, Cmd} -> - out_opts(Options,Gstkid, TkW,DB, ExtraArg, [Cmd|S], P, C); - {p, Cmd} -> - out_opts(Options, Gstkid,TkW,DB, ExtraArg, S, [Cmd|P], C); - {c, Cmd} -> - out_opts(Options, Gstkid,TkW,DB, ExtraArg,S, P, [Cmd,$;|C]); - none -> - out_opts(Options, Gstkid,TkW,DB,ExtraArg, S, P, C); - % {s, NGstkid, Cmd} -> - % out_opts(Options,NGstkid,TkW,DB,ExtraArg, [Cmd|S], P, C); - % {p, NGstkid, Cmd} -> - % out_opts(Options,NGstkid,TkW,DB,ExtraArg, S, [Cmd|P], C); - {c, NGstkid, Cmd} -> - out_opts(Options,NGstkid,TkW,DB, ExtraArg,S,P,[Cmd,$;|C]); - {none, NGstkid} -> - out_opts(Options,NGstkid,TkW,DB, ExtraArg, S, P, C); - {sp,{Scmd,Pcmd}} -> - out_opts(Options,Gstkid,TkW,DB,ExtraArg,[Scmd|S],[Pcmd|P],C); - invalid_option -> - {error,{invalid_option,Gstkid#gstkid.objtype,Opt}}; - break -> % a hack. it is possible to abort generic option handling at - %% any time (without even inserting the gstkid inte to DB (for - %% performance reasons)). - {S, P, C} - end. - -handle_external_read(Res) -> - %% We have removed dead code here that attempted to translate - %% a bad return value from {bad_result,{A,B,C}} to {error,{A,B,C}}. - %% Since the gs application is deprecated, we don't want to introduce - %% a potential incompatibility; thus we have removed the dead code - %% instead of correcting it. - Res. - -%%---------------------------------------------------------------------- -%% Generic options -%%---------------------------------------------------------------------- - -gen_anchor(How,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,[" -anc ", gstk:to_ascii(How)|P],C). -gen_anchor(_Opt,_Gstkid,TkW,_DB,_ExtraArg) -> - tcl2erl:ret_place(anchor, TkW). - -gen_height(Height,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - gstk_db:insert_opt(DB,Gstkid,{height,Height}), - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S, - [" -he ", gstk:to_ascii(Height)|P],C). -gen_height(_Opt,Gstkid,_TkW,DB,_ExtraArg) -> - gstk_db:opt(DB,Gstkid,height). - -gen_width(Width,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - gstk_db:insert_opt(DB,Gstkid,{width,Width}), - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S, - [" -wi ", gstk:to_ascii(Width)|P],C). -gen_width(_Opt,Gstkid,_TkW,DB,_ExtraArg) -> - gstk_db:opt(DB,Gstkid,width). - -gen_x(X,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - gstk_db:insert_opt(DB,Gstkid,{x,X}), - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S, - [" -x ", gstk:to_ascii(X)|P],C). -gen_x(_Opt,Gstkid,_TkW,DB,_ExtraArg) -> - gstk_db:opt(DB,Gstkid,x). - -gen_y(Y,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - gstk_db:insert_opt(DB,Gstkid,{y,Y}), - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S, - [" -y ", gstk:to_ascii(Y)|P],C). -gen_y(_Opt,Gstkid,_TkW,DB,_ExtraArg) -> - gstk_db:opt(DB,Gstkid,y). - -gen_raise(_,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,["raise ", TkW,$;|C]). -gen_raise(_Opt,_Gstkid,_TkW,_DB,_ExtraArg) -> - undefined. - -gen_lower(_,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,["lower ", TkW,$;|C]). -gen_lower(_Opt,_Gstkid,_TkW,_DB,_ExtraArg) -> - undefined. - -gen_enable(true,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,[" -st normal"|S],P,C); -gen_enable(false,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,[" -st disabled"|S],P,C). -gen_enable(_Opt,_Gstkid,TkW,_DB,_ExtraArg) -> - tcl2erl:ret_enable([TkW, " cg -st"]). - -gen_align(How,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,[" -an ", gstk:to_ascii(How)|S],P,C). -gen_align(_Opt,_Gstkid,TkW,_DB,_ExtraArg) -> - tcl2erl:ret_atom([TkW, " cg -anch"]). - -gen_justify(How,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,[" -ju ", gstk:to_ascii(How)|S],P,C). -gen_justify(_Opt,_Gstkid,TkW,_DB,_ExtraArg) -> - tcl2erl:ret_atom([TkW, " cg -ju"]). - -gen_padx(Pad,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,[" -padx ", gstk:to_ascii(Pad)|S],P,C). -gen_padx(_Opt,_Gstkid,TkW,_DB,_ExtraArg) -> - tcl2erl:ret_atom([TkW, " cg -padx"]). - -gen_pady(Pad,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,[" -pady ", gstk:to_ascii(Pad)|S],P,C). -gen_pady(_Opt,_Gstkid,TkW,_DB,_ExtraArg) -> - tcl2erl:ret_atom([TkW, " cg -pady"]). - - -gen_font(Font,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - gstk_db:insert_opt(DB,Gstkid,{font,Font}), - out_opts(Opts,Gstkid,TkW,DB,ExtraArg, - [" -font ", gstk_font:choose_ascii(DB,Font)|S],P,C). -gen_font(_Opt,Gstkid,_TkW,DB,_ExtraArg) -> - gstk_db:opt(DB,Gstkid,font,undefined). - -gen_label({text,Text},Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,[" -text ", gstk:to_ascii(Text), " -bi {}"|S],P,C); -gen_label({image,Img},Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - I2 = re:replace(Img, [92,92], "/", [global,{return,list}]), - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,[" -bi \"@", I2, "\" -text {}"|S],P,C). -gen_label(_Opt,_Gstkid,TkW,_DB,_ExtraArg) -> - case gstk:call([TkW, " cg -bit"]) of - {result, [$@|Image]} -> {image,Image}; - _Nope -> - case gstk:call([TkW, " cg -text"]) of - {result, Txt} -> {text, Txt}; - Bad_Result -> Bad_Result - end - end. - -gen_activebg(Color,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,[" -activeba ", gstk:to_color(Color)|S],P,C). -gen_activebg(_Opt,_Gstkid,TkW,_DB,_ExtraArg) -> - tcl2erl:ret_color([TkW, " cg -activeba"]). - -gen_activefg(Color,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,[" -activef ", gstk:to_color(Color)|S],P,C). -gen_activefg(_Opt,_Gstkid,TkW,_DB,_ExtraArg) -> - tcl2erl:ret_color([TkW, " cg -activef"]). - - -gen_default(Opt,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - case Opt of - {all, {font, Font}} -> - C2 = ["option a *",tl(TkW), % have to remove preceeding dot - "*font ",gstk_font:choose_ascii(DB, Font)], - gstk_db:insert_def(Gstkid,grid,{font,Font}), - gstk_db:insert_def(Gstkid,text,{font,Font}), - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,[C2,$;|C]); - {buttons, {font, Font}} -> - C2 = ["option a *",tl(TkW), % have to remove preceeding dot - ".Button.font ",gstk_font:choose_ascii(DB, Font)], - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,[C2,$;|C]); - {buttons,{Key,Val}} -> - gstk_db:insert_def(Gstkid,button,{Key,Val}), - gstk_db:insert_def(Gstkid,checkbutton,{Key,Val}), - gstk_db:insert_def(Gstkid,radiobutton,{Key,Val}), - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,C); - {ObjType, {Key,Val}} -> - gstk_db:insert_def(Gstkid,ObjType,{Key,Val}), - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) - end. - - -gen_relief(Relief,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,[" -reli ",gstk:to_ascii(Relief)|S],P,C). -gen_relief(_Opt,_Gstkid,TkW,_DB,_ExtraArg) -> - tcl2erl:ret_atom([TkW, " cg -reli"]). - -gen_bw(Wth,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,[" -bd ", gstk:to_ascii(Wth)|S],P,C). -gen_bw(_Opt,_Gstkid,TkW,_DB,_ExtraArg) -> - tcl2erl:ret_int([TkW, " cg -bd"]). - - - -gen_font_wh({font_wh,{Font, Txt}},_Gstkid,_TkW,DB,_) -> - gstk_font:width_height(DB, gstk_font:choose(DB,Font), Txt). - -gen_choose_font({choose_font,Font},_Gstkid,_TkW,DB,_ExtraArg) -> - gstk_font:choose(DB,Font). - -gen_data(Data,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - gstk_db:insert_opt(DB,Gstkid,{data,Data}), - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,C). -gen_data(_Opt,Gstkid,_TkW,DB,_ExtraArg) -> - gstk_db:opt(DB,Gstkid,data). - -gen_pack_x({Start,Stop},Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - gstk_db:insert_opt(DB,Gstkid,{pack_x,{Start,Stop}}), - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,C); -gen_pack_x(Col,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) when is_integer(Col) -> - gstk_db:insert_opt(DB,Gstkid,{pack_x,{Col,Col}}), - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,C). -gen_pack_x(_Opt,Gstkid,_TkW,DB,_ExtraArg) -> - gstk_db:opt(DB,Gstkid,pack_x, undefined). - -gen_pack_y({Start,Stop},Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - gstk_db:insert_opt(DB,Gstkid,{pack_y,{Start,Stop}}), - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,C); -gen_pack_y(Row,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) when is_integer(Row) -> - gstk_db:insert_opt(DB,Gstkid,{pack_y,{Row,Row}}), - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,C). -gen_pack_y(_Opt,Gstkid,_TkW,DB,_ExtraArg) -> - gstk_db:opt(DB,Gstkid,pack_y, undefined). - -gen_pack_xy({Col,Row},Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) - when is_integer(Col), is_integer(Row) -> - gstk_db:insert_opt(DB,Gstkid,{pack_x,{Col,Col}}), - gstk_db:insert_opt(DB,Gstkid,{pack_y,{Row,Row}}), - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,C); -gen_pack_xy({Col,{StartRow,StopRow}},Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) - when is_integer(Col) -> - gstk_db:insert_opt(DB,Gstkid,{pack_x,{Col,Col}}), - gstk_db:insert_opt(DB,Gstkid,{pack_y,{StartRow,StopRow}}), - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,C); -gen_pack_xy({{StartCol,StopCol},Row},Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) - when is_integer(Row) -> - gstk_db:insert_opt(DB,Gstkid,{pack_x,{StartCol,StopCol}}), - gstk_db:insert_opt(DB,Gstkid,{pack_y,{Row,Row}}), - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,C); -gen_pack_xy({Col,Row},Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - gstk_db:insert_opt(DB,Gstkid,{pack_x,Col}), - gstk_db:insert_opt(DB,Gstkid,{pack_y,Row}), - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,C). - - -gen_flush(_Opt,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - tcl2erl:ret_int(["update idletasks;expr 1+1"]), - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,C). -gen_flush(_Opt,_Gstkid,_TkW,_DB,_ExtraArg) -> - tcl2erl:ret_int(["update idletasks;expr 1+1"]). - - % a hidden impl option. -gen_keep_opt(Opt,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - gstk_db:insert_opt(DB,Gstkid,Opt), - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,C). - -gen_children(_Opt,Gstkid,_TkW,DB,_ExtraArg) -> - make_extern_id(gstk_db:lookup_kids(DB, Gstkid#gstkid.id), DB). - -make_extern_id([Id|Ids], DB) -> - [gstk:make_extern_id(Id, DB) | make_extern_id(Ids, DB)]; -make_extern_id([], _) -> []. - -gen_id(_Opt,#gstkid{id=Id},_TkW,DB,_ExtraArg) -> - gstk:make_extern_id(Id, DB). - -gen_parent(_Opt,Gstkid,_TkW,DB,_ExtraArg) -> - gstk:make_extern_id(Gstkid#gstkid.parent, DB). - -gen_type(_Opt,Gstkid,_TkW,_DB,_ExtraArg) -> - Gstkid#gstkid.objtype. - -gen_beep(_,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,["bell;",$;|C]). - -gen_setfocus(true,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,["focus ", TkW,$;|C]); -gen_setfocus(false,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,["focus .",$;|C]). - -gen_setfocus(_Opt,_Gstkid,TkW,_DB,_ExtraArg) -> - tcl2erl:ret_focus(TkW, "focus"). - -gen_buttonpress(On,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - Cmd = bind(DB, Gstkid, TkW, buttonpress, On), - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,[Cmd,$;|C]). -gen_buttonpress(_Opt,Gstkid,_TkW,DB,_ExtraArg) -> - gstk_db:is_inserted(DB, Gstkid, buttonpress). - -gen_buttonrelease(On,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - Cmd = bind(DB, Gstkid, TkW, buttonrelease, On), - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,[Cmd,$;|C]). -gen_buttonrelease(_Opt,Gstkid,_TkW,DB,_ExtraArg) -> - gstk_db:is_inserted(DB,Gstkid,buttonrelease). - -gen_configure(On,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - Cmd = bind(DB, Gstkid, TkW, configure, On), - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,[Cmd,$;|C]). -gen_configure(_Opt,Gstkid,_TkW,DB,_ExtraArg) -> - gstk_db:is_inserted(DB,Gstkid,configure). - -gen_destroy(On,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - Cmd = bind(DB, Gstkid, TkW, destroy, On), - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,[Cmd,$;|C]). -gen_destroy(_Opt,Gstkid,_TkW,DB,_ExtraArg) -> - gstk_db:is_inserted(DB,Gstkid,destroy). - -gen_enter(On,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - Cmd = bind(DB, Gstkid, TkW, enter, On), - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,[Cmd,$;|C]). -gen_enter(_Opt,Gstkid,_TkW,DB,_ExtraArg) -> - gstk_db:is_inserted(DB,Gstkid,enter). - -gen_focus_ev(On,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - Cmd = bind(DB, Gstkid, TkW, focus, On), - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,[Cmd,$;|C]). -gen_focus_ev(_Opt,Gstkid,_TkW,DB,_ExtraArg) -> - gstk_db:is_inserted(DB,Gstkid,focus). - -gen_keypress(On,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - Cmd = bind(DB, Gstkid, TkW, keypress, On), - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,[Cmd,$;|C]). -gen_keypress(_Opt,Gstkid,_TkW,DB,_ExtraArg) -> - gstk_db:is_inserted(DB,Gstkid,keypress). - -gen_keyrelease(On,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - Cmd = bind(DB, Gstkid, TkW, keyrelease, On), - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,[Cmd,$;|C]). -gen_keyrelease(_Opt,Gstkid,_TkW,DB,_ExtraArg) -> - gstk_db:is_inserted(DB,Gstkid,keyrelease). - -gen_leave(On,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - Cmd = bind(DB, Gstkid, TkW, leave, On), - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,[Cmd,$;|C]). -gen_leave(_Opt,Gstkid,_TkW,DB,_ExtraArg) -> - gstk_db:is_inserted(DB,Gstkid,leave). - -gen_motion(On,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - Cmd = bind(DB, Gstkid, TkW, motion, On), - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,[Cmd,$;|C]). -gen_motion(_Opt,Gstkid,_TkW,DB,_ExtraArg) -> - gstk_db:is_inserted(DB,Gstkid,motion). - -gen_highlightbw(Wth,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,[" -highlightt ", gstk:to_ascii(Wth)|S],P,C). -gen_highlightbw(_Opt,_Gstkid,TkW,_DB,_ExtraArg) -> - tcl2erl:ret_int([TkW, " cg -highlightt"]). - -gen_highlightbg(Color,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,[" -highlightb ", gstk:to_color(Color)|S],P,C). -gen_highlightbg(_Opt,_Gstkid,TkW,_DB,_ExtraArg) -> - tcl2erl:ret_color([TkW, " cg -highlightb"]). - -gen_highlightfg(Color,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,[" -highlightc ", gstk:to_color(Color)|S],P,C). -gen_highlightfg(_Opt,_Gstkid,TkW,_DB,_ExtraArg) -> - tcl2erl:ret_color([TkW, " cg -highlightc"]). - - -gen_selectbw(Width,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,[TkW, " conf -selectbo ", gstk:to_ascii(Width),$;|C]). -gen_selectbw(_Opt,_Gstkid,TkW,_DB,_ExtraArg) -> - tcl2erl:ret_int([TkW," cg -selectbo"]). - -gen_selectfg(Color,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,[TkW, " conf -selectfo ", gstk:to_color(Color),$;|C]). -gen_selectfg(_Opt,_Gstkid,TkW,_DB,_ExtraArg) -> - tcl2erl:ret_color([TkW," cg -selectfo"]). - -gen_selectbg(Color,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,[TkW, " conf -selectba ", gstk:to_color(Color),$;|C]). -gen_selectbg(_Opt,_Gstkid,TkW,_DB,_ExtraArg) -> - tcl2erl:ret_color([TkW," cg -selectba"]). - -gen_fg(Color,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,[" -fg ", gstk:to_color(Color)|S],P,C). -gen_fg(_Opt,_Gstkid,TkW,_DB,_ExtraArg) -> - tcl2erl:ret_color([TkW, " cg -fg"]). - -gen_bg(Color,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,[" -bg ", gstk:to_color(Color)|S],P,C). -gen_bg(_Opt,_Gstkid,TkW,_DB,_ExtraArg) -> - tcl2erl:ret_color([TkW, " cg -bg"]). - -%%---------------------------------------------------------------------- -%% Generic functions for scrolled objects -%%---------------------------------------------------------------------- -gen_so_activebg(Color,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - Col = gstk:to_color(Color), - C2 = [TkW, ".sy conf -activeba ", Col,$;, - TkW, ".pad.sx conf -activeba ", Col], - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,[C2,$;|C]). -gen_so_activebg(_Opt,_Gstkid,TkW,_DB,_ExtraArg) -> - tcl2erl:ret_color([TkW,".sy cg -activeba"]). - -gen_so_bc(Color,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - Col = gstk:to_color(Color), - C2= [TkW, " conf -bg ", Col,$;, - TkW, ".sy conf -highlightba ", Col,$;, - TkW, ".pad.it conf -bg ", Col,$;, - TkW, ".pad.sx conf -highlightba ", Col], - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,[C2,$;|C]). -gen_so_bc(_Opt,_Gstkid,TkW,_DB,_ExtraArg) -> - tcl2erl:ret_color([TkW," cg -bg"]). - -gen_so_scrollfg(Color,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - Col = gstk:to_color(Color), - C2=[TkW, ".sy conf -bg ", Col,$;, - TkW, ".pad.sx conf -bg ", Col], - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,[C2,$;|C]). -gen_so_scrollfg(_Opt,_Gstkid,TkW,_DB,_ExtraArg) -> - tcl2erl:ret_color([TkW,".sy cg -bg"]). - - -gen_so_scrollbg(Color,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - Col = gstk:to_color(Color), - C2 = [TkW, ".sy conf -troughc ", Col, $;, - TkW, ".pad.sx conf -troughc ", Col], - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,[C2,$;|C]). - -gen_so_scrollbg(_Opt,_Gstkid,TkW,_DB,_ExtraArg) -> - tcl2erl:ret_color([TkW,".sy cg -troughc"]). - -obj(#gstkid{widget_data=SO}) -> - SO#so.object. - -gen_so_bg(Color,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - C2= [obj(Gstkid), " conf -bg ", gstk:to_color(Color)], - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,[C2,$;|C]). -gen_so_bg(_Opt,Gstkid,_TkW,_DB,_ExtraArg) -> - tcl2erl:ret_color([obj(Gstkid)," cg -bg"]). - -gen_so_selectbw(Width,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - C2 = [obj(Gstkid), " conf -selectbo ", gstk:to_ascii(Width)], - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,[C2,$;|C]). -gen_so_selectbw(_Opt,Gstkid,_TkW,_DB,_ExtraArg) -> - tcl2erl:ret_int([obj(Gstkid)," cg -selectbo"]). - -gen_so_selectfg(Color,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - C2 = [obj(Gstkid), " conf -selectfo ", gstk:to_color(Color)], - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,[C2,$;|C]). -gen_so_selectfg(_Opt,Gstkid,_TkW,_DB,_ExtraArg) -> - tcl2erl:ret_color([obj(Gstkid)," cg -selectfo"]). - -gen_so_selectbg(Color,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - C2 = [obj(Gstkid), " conf -selectba ", gstk:to_color(Color)], - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,S,P,[C2,$;|C]). -gen_so_selectbg(_Opt,Gstkid,_TkW,_DB,_ExtraArg) -> - tcl2erl:ret_color([obj(Gstkid)," cg -selectba"]). - -gen_so_scrolls({Vscroll, Hscroll},Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - SO = Gstkid#gstkid.widget_data, - NewSO = SO#so{hscroll=Hscroll, vscroll=Vscroll}, - C2 = scrolls_vh(TkW, Vscroll, Hscroll), - Ngstkid = Gstkid#gstkid{widget_data=NewSO}, - gstk_db:update_widget(DB,Ngstkid), - out_opts(Opts,Ngstkid,TkW,DB,ExtraArg,S,P,[C2,$;|C]). - - % read-only -gen_so_hscroll(_Opt,#gstkid{widget_data=SO},_TkW,_DB,_) -> - SO#so.hscroll. - - % read-only -gen_so_vscroll(_Opt,#gstkid{widget_data=SO},_TkW,_DB,_) -> - SO#so.vscroll. - -cursors() -> [{arrow,"top_left_arrow"},{busy,"watch"},{cross,"X_cursor"}, - {hand,"hand2"},{help,"question_arrow"},{resize,"fleur"}, - {text,"xterm"}]. - -gen_cursor(parent,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,[" -cur {}"|S],P,C); -gen_cursor(Cur,Opts,Gstkid,TkW,DB,ExtraArg,S,P,C) -> - case gs:assq(Cur,cursors()) of - {value, TxtCur} -> - out_opts(Opts,Gstkid,TkW,DB,ExtraArg,[" -cur ",TxtCur|S],P,C); - _ -> - {error,{invalid_cursor,Gstkid#gstkid.objtype,Cur}} - end. -gen_cursor(_Opt,_Gstkid,TkW,_DB,_ExtraArg) -> - case tcl2erl:ret_str([TkW," cg -cur"]) of - "" -> parent; - Txt when is_list(Txt) -> - case lists:keysearch(Txt,2,cursors()) of - {value,{Cur,_}} -> Cur; - _ -> {bad_result, read_cursor} - end; - Bad_Result -> Bad_Result - end. - -gen_citem_coords(Coords,Opts,Gstkid,TkW,DB,AItem,S,P,C) -> - gstk_db:insert_opt(DB,Gstkid,{coords,Coords}), - out_opts(Opts,Gstkid,TkW,DB,AItem,S,P, - [TkW, " coords ", AItem," ",gstk_canvas:coords(Coords),$;|C]). -gen_citem_coords(_Opt,Gstkid,_TkW,DB,_ExtraArg) -> - gstk_db:opt(DB,Gstkid, coords). - -gen_citem_fill(none,Opts,Gstkid,TkW,DB,AItem,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,AItem,[" -f {}"|S],P,C); -gen_citem_fill(Color,Opts,Gstkid,TkW,DB,AItem,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,AItem,[" -f ",gstk:to_color(Color)|S],P,C). -gen_citem_fill(_Opt,_Gstkid,TkW,_DB,AItem) -> - tcl2erl:ret_color([TkW, " itemcg ", AItem, " -f"]). - -gen_citem_lower(_,Opts,Gstkid,TkW,DB,AItem,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,AItem,S,P, - [TkW, " lower ", AItem,$;|C]). - -gen_citem_raise(_,Opts,Gstkid,TkW,DB,AItem,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,AItem,S,P, - [TkW, " raise ", AItem,$;|C]). - -gen_citem_move({Dx,Dy},Opts,Gstkid,TkW,DB,AItem,S,P,C) -> - NewCoords = move_coords(Dx,Dy,gstk_db:opt(DB,Gstkid,coords)), - gstk_db:insert_opt(DB,Gstkid,NewCoords), - out_opts(Opts,Gstkid,TkW,DB,AItem,S,P, - [TkW, " move ", AItem, " ", - gstk:to_ascii(Dx), " ", gstk:to_ascii(Dy),$;|C]). - -move_coords(Dx,Dy,Coords) -> - Coords2 = add_to_coords(Dx,Dy, Coords), - {coords,Coords2}. - -add_to_coords(Dx,Dy,[{X,Y}|Coords]) -> - [{X+Dx,Y+Dy}|add_to_coords(Dx,Dy,Coords)]; -add_to_coords(_,_,[]) -> []. - - -gen_citem_setfocus(true,Opts,Gstkid,TkW,DB,AItem,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,AItem,S,P, - [TkW, " focus ", AItem,$;|C]); -gen_citem_setfocus(false,Opts,Gstkid,TkW,DB,AItem,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,AItem,S,P, - [TkW, " focus {}",$;|C]). -gen_citem_setfocus(_Opt,_Gstkid,TkW,_DB,_ExtraArg) -> - tcl2erl:ret_focus(gstk:to_ascii(bug_aitem),[TkW, " focus"]). - -gen_citem_buttonpress(On,Opts,Gstkid,TkW,DB,AItem,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,AItem,S,P, - [item_bind(DB, Gstkid, TkW, AItem,buttonpress, On),$;|C]). -gen_citem_buttonrelease(On,Opts,Gstkid,TkW,DB,AItem,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,AItem,S,P, - [item_bind(DB,Gstkid,TkW,AItem,buttonrelease, On),$;|C]). -gen_citem_enter(On,Opts,Gstkid,TkW,DB,AItem,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,AItem,S,P, - [item_bind(DB, Gstkid, TkW, AItem, enter, On),$;|C]). - -gen_citem_keypress(On,Opts,Gstkid,TkW,DB,AItem,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,AItem,S,P, - [item_bind(DB, Gstkid, TkW, AItem, keypress, On),$;|C]). -gen_citem_keyrelease(On,Opts,Gstkid,TkW,DB,AItem,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,AItem,S,P, - [item_bind(DB, Gstkid, TkW, AItem, keyrelease, On),$;|C]). - -gen_citem_leave(On,Opts,Gstkid,TkW,DB,AItem,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,AItem,S,P, - [item_bind(DB, Gstkid, TkW, AItem, leave, On),$;|C]). -gen_citem_motion(On,Opts,Gstkid,TkW,DB,AItem,S,P,C) -> - out_opts(Opts,Gstkid,TkW,DB,AItem,S,P, - [item_bind(DB, Gstkid, TkW, AItem, motion, On),$;|C]). - - -scrolls_vh(W, V, true) -> scrolls_vh(W, V, bottom); -scrolls_vh(W, true, H) -> scrolls_vh(W, left, H); -scrolls_vh(W, left, bottom) -> ["so_bottom_left ",W]; -scrolls_vh(W, left, top) -> ["so_top_left ",W]; -scrolls_vh(W, left, _) -> ["so_left ",W]; -scrolls_vh(W, right, bottom) -> ["so_bottom_right ",W]; -scrolls_vh(W, right, top) -> ["so_top_right ",W]; -scrolls_vh(W, right, _) -> ["so_right ",W]; -scrolls_vh(W, _, bottom) -> ["so_bottom ",W]; -scrolls_vh(W, _, top) -> ["so_top ",W]; -scrolls_vh(W, _, _) -> ["so_plain ",W]. - -%% create version -parse_scrolls(Opts) -> - {Vscroll, Hscroll, NewOpts} = parse_scrolls(Opts, false, false, []), - {Vscroll, Hscroll, [{scrolls, {Vscroll, Hscroll}} | NewOpts]}. - -%% config version -parse_scrolls(Gstkid, Opts) -> - SO = Gstkid#gstkid.widget_data, - Vscroll = SO#so.vscroll, - Hscroll = SO#so.hscroll, - case parse_scrolls(Opts, Vscroll, Hscroll, []) of - {Vscroll, Hscroll, Opts} -> Opts; - {NewVscroll, NewHscroll, NewOpts} -> - [{scrolls, {NewVscroll, NewHscroll}} | NewOpts] - end. - - -parse_scrolls([Option | Rest], Vscroll, Hscroll, Opts) when is_tuple(Option) -> - case element(1, Option) of - vscroll -> - parse_scrolls(Rest, element(2, Option), Hscroll, Opts); - hscroll -> - parse_scrolls(Rest, Vscroll, element(2, Option), Opts); - _ -> - parse_scrolls(Rest, Vscroll, Hscroll, [Option | Opts]) - end; - -parse_scrolls([Option | Rest], Vscroll, Hscroll, Opts) -> - parse_scrolls(Rest, Vscroll, Hscroll, [Option | Opts]); - -parse_scrolls([], Vscroll, Hscroll, Opts) -> - {Vscroll, Hscroll, Opts}. - - -%% -%% Event bind main function -%% -%% Should return a list of tcl commands or invalid_option -%% -%% WS = Widget suffix for complex widgets -%% -bind(DB, Gstkid, TkW, Etype, On) -> - WD = Gstkid#gstkid.widget_data, - TkW2 = if is_record(WD, so) -> - WD#so.object; - true -> TkW - end, - case bind(DB, Gstkid, TkW2, Etype, On, "") of - invalid_option -> invalid_option; - Cmd -> - Cmd - end. - -bind(DB, Gstkid, TkW, Etype, On, WS) -> - case On of - true -> ebind(DB, Gstkid, TkW, Etype, WS, ""); - false -> eunbind(DB, Gstkid, TkW, Etype, WS, ""); - {true, Edata} -> ebind(DB, Gstkid, TkW, Etype, WS, Edata); - {false, Edata} -> eunbind(DB, Gstkid, TkW, Etype, WS, Edata); - _ -> invalid_option - end. - - -%% -%% Event bind on -%% -%% Should return a list of tcl commands or invalid_option -%% -%% WS = Widget suffix for complex widgets -%% -ebind(DB, Gstkid, TkW, Etype, WS, Edata) -> - Eref = gstk_db:insert_event(DB, Gstkid, Etype, Edata), - P = ["bind ", TkW, WS], - Cmd = case Etype of - motion -> [P, " <Motion> {erlsend ", Eref, " %x %y}"]; - keypress -> - [P, " <KeyPress> {erlsend ", Eref," %K %N 0 0};", - P, " <Shift-KeyPress> {erlsend ", Eref, " %K %N 1 0};", - P, " <Control-KeyPress> {erlsend ", Eref, " %K %N 0 1};", - P," <Control-Shift-KeyPress> {erlsend ", Eref," %K %N 1 1}"]; - keyrelease -> - [P, " <KeyRelease> {erlsend ", Eref," %K %N 0 0};", - P, " <Shift-KeyRelease> {erlsend ", Eref, " %K %N 1 0};", - P, " <Control-KeyRelease> {erlsend ", Eref, " %K %N 0 1};", - P," <Control-Shift-KeyRelease> {erlsend ",Eref," %K %N 1 1}"]; - buttonpress -> - [P, " <ButtonPress> {erlsend ", Eref, " %b %x %y}"]; - buttonrelease -> - [P, " <ButtonRelease> {erlsend ", Eref, " %b %x %y}"]; - leave -> [P, " <Leave> {erlsend ", Eref, "}"]; - enter -> [P, " <Enter> {erlsend ", Eref, "}"]; - destroy -> - [P, " <Destroy> {if {\"%W\"==\"", [TkW, WS], - "\"} {erlsend ", Eref, "}}"]; - focus -> - [P, " <FocusIn> {erlsend ", Eref, " 1};" , - P, " <FocusOut> {erlsend ", Eref, " 0}"]; - configure -> - [P, " <Configure> {if {\"%W\"==\"", [TkW, WS], - "\"} {erlsend ", Eref, " %w %h %x %y}}"] - end, - Cmd. - - -%% -%% Unbind event -%% -%% Should return a list of tcl commands -%% Already checked for validation in bind/5 -%% -%% WS = Widget suffix for complex widgets -%% -eunbind(DB, Gstkid, TkW, Etype, WS, _Edata) -> - gstk_db:delete_event(DB, Gstkid, Etype), - P = ["bind ", TkW, WS], - Cmd = case Etype of - motion -> - [P, " <Motion> {}"]; - keypress -> - [P, " <KeyPress> {};", - P, " <Shift-KeyPress> {};", - P, " <Control-KeyPress> {};", - P, " <Control-Shift-KeyPress> {}"]; - keyrelease -> - [P, " <KeyRelease> {};", - P, " <Shift-KeyRelease> {};", - P, " <Control-KeyRelease> {};", - P, " <Control-Shift-KeyRelease> {}"]; - buttonpress -> - [P, " <ButtonPress> {}"]; - buttonrelease -> - [P, " <ButtonRelease> {}"]; - leave -> - [P, " <Leave> {}"]; - enter -> - [P, " <Enter> {}"]; - destroy -> - [P, " <Destroy> {}"]; - focus -> - [P, " <FocusIn> {};", - P, " <FocusOut> {}"]; - configure -> - [P, " <Configure> {}"] - end, - Cmd. - - -%% -%% Event item bind main function -%% -%% Should return a list of tcl commands or invalid_option -%% -item_bind(DB, Gstkid, Canvas, Item, Etype, On) -> - case On of - true -> item_ebind(DB, Gstkid, Canvas, Item, Etype, ""); - {true, Edata} -> item_ebind(DB, Gstkid, Canvas, Item, Etype, Edata); - _Other -> item_eunbind(DB, Gstkid, Canvas, Item, Etype) - end. - -%% -%% Event bind on -%% -%% Should return a list of tcl commands or invalid_option -%% -item_ebind(DB, Gstkid, Canvas, Item, Etype, Edata) -> - Eref = gstk_db:insert_event(DB, Gstkid, Etype, Edata), - P = [Canvas, " bind ", Item], - case Etype of - enter -> [P, " <Enter> {erlsend ", Eref, "}"]; - leave -> [P, " <Leave> {erlsend ", Eref, "}"]; - motion -> [P, " <Motion> {erlsend ", Eref, " [", - Canvas, " canvasx %x] [", Canvas, " canvasy %y] %x %y}"]; - keypress -> - [P, " <Key> {erlsend ", Eref," %K %N 0 0 [", - Canvas, " canvasx %x] [", Canvas, " canvasy %y]};", - P, " <Shift-Key> {erlsend ", Eref, " %K %N 1 0 [", - Canvas, " canvasx %x] [", Canvas, " canvasy %y]};", - P, " <Control-Key> {erlsend ", Eref, " %K %N 0 1 [", - Canvas, " canvasx %x] [", Canvas, " canvasy %y]};", - P, " <Control-Shift-Key> {erlsend ", Eref," %K %N 1 1 [", - Canvas, " canvasx %x] [", Canvas, " canvasy %y]}"]; - keyrelease -> - [P, " <KeyRelease> {erlsend ", Eref," %K %N 0 0 [", - Canvas, " canvasx %x] [", Canvas, " canvasy %y]};", - P, " <Shift-KeyRelease> {erlsend ", Eref, " %K %N 1 0 [", - Canvas, " canvasx %x] [", Canvas, " canvasy %y]};", - P, " <Control-KeyRelease> {erlsend ", Eref, " %K %N 0 1 [", - Canvas, " canvasx %x] [", Canvas, " canvasy %y]};", - P, " <Control-Shift-KeyRelease> {erlsend ", Eref," %K %N 1 1[", - Canvas, " canvasx %x] [", Canvas, " canvasy %y]}"]; - buttonpress -> - [P, " <Button> {erlsend ", Eref, " %b [", - Canvas, " canvasx %x] [", Canvas, " canvasy %y] %x %y}"]; - buttonrelease -> - [P, " <ButtonRelease> {erlsend ", Eref, " %b [", - Canvas, " canvasx %x] [", Canvas, " canvasy %y] %x %y}"] - end. - - -%% -%% Unbind event -%% -%% Should return a list of tcl commands -%% Already checked for validation in bind/5 -%% -item_eunbind(DB, Gstkid, Canvas, Item, Etype) -> - gstk_db:delete_event(DB, Gstkid, Etype), - P = [Canvas, " bind ", Item], - Cmd = case Etype of - enter -> [P, " <Enter> {}"]; - leave -> [P, " <Leave> {}"]; - motion -> [P, " <Motion> {}"]; - keypress -> - [P, " <KeyPress> {};", - P, " <Shift-KeyPress> {};", - P, " <Control-KeyPress> {};", - P, " <Control-Shift-KeyPress> {}"]; - keyrelease -> - [P, " <KeyRelease> {};", - P, " <Shift-KeyRelease> {};", - P, " <Control-KeyRelease> {};", - P, " <Control-Shift-KeyRelease> {}"]; - buttonpress -> [P, " <Button> {}"]; - buttonrelease -> [P, " <ButtonRelease> {}"] - end, - Cmd. - - - -event(DB, Gstkid, Etype, _Edata, Args) -> - #gstkid{owner=Ow,id=Id} = Gstkid, - Data = gstk_db:opt(DB,Gstkid,data), - gs_frontend:event(get(gs_frontend),Ow,{gs,Id,Etype,Data,Args}). |