%%
%% %CopyrightBegin%
%%
%% Copyright Ericsson AB 1997-2012. 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%
%%
%%
%%%----------------------------------------------------------------------
%%% Purpose : Wrapper library for GS to provide proper error handling
%%%----------------------------------------------------------------------
-module(gse).
-compile([{nowarn_deprecated_function,{gs,arc,2}},
{nowarn_deprecated_function,{gs,arc,3}},
{nowarn_deprecated_function,{gs,button,2}},
{nowarn_deprecated_function,{gs,button,3}},
{nowarn_deprecated_function,{gs,canvas,2}},
{nowarn_deprecated_function,{gs,canvas,3}},
{nowarn_deprecated_function,{gs,checkbutton,2}},
{nowarn_deprecated_function,{gs,checkbutton,3}},
{nowarn_deprecated_function,{gs,config,2}},
{nowarn_deprecated_function,{gs,create,3}},
{nowarn_deprecated_function,{gs,create,4}},
{nowarn_deprecated_function,{gs,create_tree,2}},
{nowarn_deprecated_function,{gs,destroy,1}},
{nowarn_deprecated_function,{gs,editor,2}},
{nowarn_deprecated_function,{gs,editor,3}},
{nowarn_deprecated_function,{gs,entry,2}},
{nowarn_deprecated_function,{gs,entry,3}},
{nowarn_deprecated_function,{gs,frame,2}},
{nowarn_deprecated_function,{gs,frame,3}},
{nowarn_deprecated_function,{gs,grid,2}},
{nowarn_deprecated_function,{gs,grid,3}},
{nowarn_deprecated_function,{gs,gridline,2}},
{nowarn_deprecated_function,{gs,gridline,3}},
{nowarn_deprecated_function,{gs,image,2}},
{nowarn_deprecated_function,{gs,image,3}},
{nowarn_deprecated_function,{gs,label,2}},
{nowarn_deprecated_function,{gs,label,3}},
{nowarn_deprecated_function,{gs,line,2}},
{nowarn_deprecated_function,{gs,line,3}},
{nowarn_deprecated_function,{gs,listbox,2}},
{nowarn_deprecated_function,{gs,listbox,3}},
{nowarn_deprecated_function,{gs,menu,2}},
{nowarn_deprecated_function,{gs,menu,3}},
{nowarn_deprecated_function,{gs,menubar,2}},
{nowarn_deprecated_function,{gs,menubar,3}},
{nowarn_deprecated_function,{gs,menubutton,2}},
{nowarn_deprecated_function,{gs,menubutton,3}},
{nowarn_deprecated_function,{gs,menuitem,2}},
{nowarn_deprecated_function,{gs,menuitem,3}},
{nowarn_deprecated_function,{gs,message,2}},
{nowarn_deprecated_function,{gs,message,3}},
{nowarn_deprecated_function,{gs,oval,2}},
{nowarn_deprecated_function,{gs,oval,3}},
{nowarn_deprecated_function,{gs,polygon,2}},
{nowarn_deprecated_function,{gs,polygon,3}},
{nowarn_deprecated_function,{gs,prompter,2}},
{nowarn_deprecated_function,{gs,prompter,3}},
{nowarn_deprecated_function,{gs,radiobutton,2}},
{nowarn_deprecated_function,{gs,radiobutton,3}},
{nowarn_deprecated_function,{gs,read,2}},
{nowarn_deprecated_function,{gs,rectangle,2}},
{nowarn_deprecated_function,{gs,rectangle,3}},
{nowarn_deprecated_function,{gs,scale,2}},
{nowarn_deprecated_function,{gs,scale,3}},
{nowarn_deprecated_function,{gs,scrollbar,2}},
{nowarn_deprecated_function,{gs,scrollbar,3}},
{nowarn_deprecated_function,{gs,start,0}},
{nowarn_deprecated_function,{gs,start,1}},
{nowarn_deprecated_function,{gs,text,2}},
{nowarn_deprecated_function,{gs,text,3}},
{nowarn_deprecated_function,{gs,window,2}},
{nowarn_deprecated_function,{gs,window,3}}]).
%%-compile(export_all).
-export([
start/0,
start/1,
create/3,
create_named/4,
config/2,
read/2,
destroy/1,
create_tree/2,
window/2,
named_window/3,
button/2,
named_button/3,
checkbutton/2,
named_checkbutton/3,
radiobutton/2,
named_radiobutton/3,
frame/2,
named_frame/3,
canvas/2,
named_canvas/3,
label/2,
named_label/3,
message/2,
named_message/3,
listbox/2,
named_listbox/3,
entry/2,
named_entry/3,
scrollbar/2,
named_scrollbar/3,
scale/2,
named_scale/3,
editor/2,
named_editor/3,
prompter/2,
named_prompter/3,
line/2,
named_line/3,
oval/2,
named_oval/3,
rectangle/2,
named_rectangle/3,
polygon/2,
named_polygon/3,
text/2,
named_text/3,
image/2,
named_image/3,
arc/2,
named_arc/3,
menu/2,
named_menu/3,
menubutton/2,
named_menubutton/3,
menubar/2,
named_menubar/3,
menuitem/2,
named_menuitem/3,
grid/2,
named_grid/3,
gridline/2,
named_gridline/3,
%% Convenience functions
enable/1,
disable/1,
select/1,
deselect/1,
map/1,
unmap/1,
resize/3,
name_occupied/1
]).
%%
%% gse:start()
%% Returns:
%% An identifier to a top object for the graphic system
%%
%% Errors:
%% Exits with a {?MODULE,start,Reason} if there is a problem
%% creating the top level graphic object.
%%
start() ->
case gs:start() of
{error,Reason} ->
exit({?MODULE, start,Reason});
Return -> Return
end.
%%
%% gse:start(Opts)
%% Returns:
%% An identifier to a top object for the graphic system
%%
%% Errors:
%% Exits with a {?MODULE,start,Reason} if there is a problem
%% creating the top level graphic object.
%%
start(Opts) ->
case gs:start(Opts) of
{error,Reason} ->
exit({?MODULE, start,Reason});
Return -> Return
end.
%%
%% gse:create(Objtype,Parent,Opts) replaces
%% the unnecessary functions:
%% gs:create(Obj,Parent)
%% gs:create(Obj,Parent,Opt)
%% gs:create(Obj,Parent)
%% gs:create(Obj,Parent)
%%
%% Returns:
%% An identifier for the created object
%%
%% Errors: {?MODULE, create, Reason}, where Reason is one of:
%% {no_such_parent, Parent}
%% {unknown_type, Type}
%% {incvalid_option, Type, {Option,Value}}
%%
%%
create(Objtype,Parent,Opts) when is_list(Opts) ->
case gs:create(Objtype,Parent,Opts) of
{error,Reason} ->
exit({?MODULE, create,Reason});
Return -> Return
end.
%%
%% gse:create_named(Name, Objtype,Parent, Opts) replaces
%% the confusing
%% gs:create(Name,Objtype, Parent, Opts)
%%
%% Returns:
%% An identifier for the created object
%%
%% Errors: {?MODULE, create, Reason}, where Reason is one of:
%% {no_such_parent, Parent}
%% {unknown_type, Type}
%% {incvalid_option, Type, {Option,Value}}
%% {name_occupied,Name}
%%
create_named(Name,Objtype,Parent,Opts) when is_list(Opts) ->
case gs:create(Objtype,Name,Parent,Opts) of
{error,Reason} ->
exit({?MODULE, create_named,Reason});
Return -> Return
end.
%%
%% gse:config(Object, Options) replaces
%% the unnecessary
%% gs:config(Object, Opt)
%%
config(Object,Opts) when is_list(Opts) ->
case gs:config(Object,Opts) of
{error,Reason} ->
exit({?MODULE, config,Reason});
Return -> Return
end.
%%
%% gs:read(Object, OptionKey)
%%
read(Object,OptionKey) ->
case gs:read(Object,OptionKey) of
{error,Reason} ->
exit({?MODULE, read,Reason});
Return -> Return
end.
%%
%% gs:destroy(Object)
%%
destroy(Object)->
case gs:destroy(Object) of
{error,Reason} ->
exit({?MODULE, destroy,Reason});
Return -> Return
end.
%%
%% gs:create_tree
%%
create_tree(Parent, Tree)->
case gs:create_tree(Parent,Tree) of
{error,Reason} ->
exit({?MODULE, create_tree,Reason});
Return -> Return
end.
window(Parent,Options) when is_list(Options) ->
case gs:window(Parent,Options) of
{error, Reason} ->
exit({?MODULE,window,Reason});
Return -> Return
end.
named_window(Name,Parent,Options) when is_list(Options) ->
case gs:window(Name, Parent,Options) of
{error, Reason} ->
exit({?MODULE,named_window,Reason});
Return -> Return
end.
button(Parent,Options) when is_list(Options) ->
case gs:button(Parent,Options) of
{error, Reason} ->
exit({?MODULE,button,Reason});
Return -> Return
end.
named_button(Name,Parent,Options) when is_list(Options) ->
case gs:button(Name, Parent,Options) of
{error, Reason} ->
exit({?MODULE,named_button,Reason});
Return -> Return
end.
checkbutton(Parent,Options) when is_list(Options) ->
case gs:checkbutton(Parent,Options) of
{error, Reason} ->
exit({?MODULE,checkbutton,Reason});
Return -> Return
end.
named_checkbutton(Name,Parent,Options) when is_list(Options) ->
case gs:checkbutton(Name, Parent,Options) of
{error, Reason} ->
exit({?MODULE,named_checkbutton,Reason});
Return -> Return
end.
radiobutton(Parent,Options) when is_list(Options) ->
case gs:radiobutton(Parent,Options) of
{error, Reason} ->
exit({?MODULE,radiobutton,Reason});
Return -> Return
end.
named_radiobutton(Name,Parent,Options) when is_list(Options) ->
case gs:radiobutton(Name, Parent,Options) of
{error, Reason} ->
exit({?MODULE,named_radiobutton,Reason});
Return -> Return
end.
frame(Parent,Options) when is_list(Options) ->
case gs:frame(Parent,Options) of
{error, Reason} ->
exit({?MODULE,frame,Reason});
Return -> Return
end.
named_frame(Name,Parent,Options) when is_list(Options) ->
case gs:frame(Name, Parent,Options) of
{error, Reason} ->
exit({?MODULE,named_frame,Reason});
Return -> Return
end.
canvas(Parent,Options) when is_list(Options) ->
case gs:canvas(Parent,Options) of
{error, Reason} ->
exit({?MODULE,canvas,Reason});
Return -> Return
end.
named_canvas(Name,Parent,Options) when is_list(Options) ->
case gs:canvas(Name, Parent,Options) of
{error, Reason} ->
exit({?MODULE,named_canvas,Reason});
Return -> Return
end.
label(Parent,Options) when is_list(Options) ->
case gs:label(Parent,Options) of
{error, Reason} ->
exit({?MODULE,label,Reason});
Return -> Return
end.
named_label(Name,Parent,Options) when is_list(Options) ->
case gs:label(Name, Parent,Options) of
{error, Reason} ->
exit({?MODULE,named_label,Reason});
Return -> Return
end.
message(Parent,Options) when is_list(Options) ->
case gs:message(Parent,Options) of
{error, Reason} ->
exit({?MODULE,message,Reason});
Return -> Return
end.
named_message(Name,Parent,Options) when is_list(Options) ->
case gs:message(Name, Parent,Options) of
{error, Reason} ->
exit({?MODULE,named_message,Reason});
Return -> Return
end.
listbox(Parent,Options) when is_list(Options) ->
case gs:listbox(Parent,Options) of
{error, Reason} ->
exit({?MODULE,listbox,Reason});
Return -> Return
end.
named_listbox(Name,Parent,Options) when is_list(Options) ->
case gs:listbox(Name, Parent,Options) of
{error, Reason} ->
exit({?MODULE,named_listbox,Reason});
Return -> Return
end.
entry(Parent,Options) when is_list(Options) ->
case gs:entry(Parent,Options) of
{error, Reason} ->
exit({?MODULE,entry,Reason});
Return -> Return
end.
named_entry(Name,Parent,Options) when is_list(Options) ->
case gs:entry(Name, Parent,Options) of
{error, Reason} ->
exit({?MODULE,named_entry,Reason});
Return -> Return
end.
scrollbar(Parent,Options) when is_list(Options) ->
case gs:scrollbar(Parent,Options) of
{error, Reason} ->
exit({?MODULE,scrollbar,Reason});
Return -> Return
end.
named_scrollbar(Name,Parent,Options) when is_list(Options) ->
case gs:scrollbar(Name, Parent,Options) of
{error, Reason} ->
exit({?MODULE,named_scrollbar,Reason});
Return -> Return
end.
scale(Parent,Options) when is_list(Options) ->
case gs:scale(Parent,Options) of
{error, Reason} ->
exit({?MODULE,scale,Reason});
Return -> Return
end.
named_scale(Name,Parent,Options) when is_list(Options) ->
case gs:scale(Name, Parent,Options) of
{error, Reason} ->
exit({?MODULE,named_scale,Reason});
Return -> Return
end.
editor(Parent,Options) when is_list(Options) ->
case gs:editor(Parent,Options) of
{error, Reason} ->
exit({?MODULE,editor,Reason});
Return -> Return
end.
named_editor(Name,Parent,Options) when is_list(Options) ->
case gs:editor(Name, Parent,Options) of
{error, Reason} ->
exit({?MODULE,named_editor,Reason});
Return -> Return
end.
prompter(Parent,Options) when is_list(Options) ->
case gs:prompter(Parent,Options) of
{error, Reason} ->
exit({?MODULE,prompter,Reason});
Return -> Return
end.
named_prompter(Name,Parent,Options) when is_list(Options) ->
case gs:prompter(Name, Parent,Options) of
{error, Reason} ->
exit({?MODULE,named_prompter,Reason});
Return -> Return
end.
line(Parent,Options) when is_list(Options) ->
case gs:line(Parent,Options) of
{error, Reason} ->
exit({?MODULE,line,Reason});
Return -> Return
end.
named_line(Name,Parent,Options) when is_list(Options) ->
case gs:line(Name, Parent,Options) of
{error, Reason} ->
exit({?MODULE,named_line,Reason});
Return -> Return
end.
oval(Parent,Options) when is_list(Options) ->
case gs:oval(Parent,Options) of
{error, Reason} ->
exit({?MODULE,oval,Reason});
Return -> Return
end.
named_oval(Name,Parent,Options) when is_list(Options) ->
case gs:oval(Name, Parent,Options) of
{error, Reason} ->
exit({?MODULE,named_oval,Reason});
Return -> Return
end.
rectangle(Parent,Options) when is_list(Options) ->
case gs:rectangle(Parent,Options) of
{error, Reason} ->
exit({?MODULE,rectangle,Reason});
Return -> Return
end.
named_rectangle(Name,Parent,Options) when is_list(Options) ->
case gs:rectangle(Name, Parent,Options) of
{error, Reason} ->
exit({?MODULE,named_rectangle,Reason});
Return -> Return
end.
polygon(Parent,Options) when is_list(Options) ->
case gs:polygon(Parent,Options) of
{error, Reason} ->
exit({?MODULE,polygon,Reason});
Return -> Return
end.
named_polygon(Name,Parent,Options) when is_list(Options) ->
case gs:polygon(Name, Parent,Options) of
{error, Reason} ->
exit({?MODULE,named_polygon,Reason});
Return -> Return
end.
text(Parent,Options) when is_list(Options) ->
case gs:text(Parent,Options) of
{error, Reason} ->
exit({?MODULE,text,Reason});
Return -> Return
end.
named_text(Name,Parent,Options) when is_list(Options) ->
case gs:text(Name, Parent,Options) of
{error, Reason} ->
exit({?MODULE,named_text,Reason});
Return -> Return
end.
image(Parent,Options) when is_list(Options) ->
case gs:image(Parent,Options) of
{error, Reason} ->
exit({?MODULE,image,Reason});
Return -> Return
end.
named_image(Name,Parent,Options) when is_list(Options) ->
case gs:image(Name, Parent,Options) of
{error, Reason} ->
exit({?MODULE,named_image,Reason});
Return -> Return
end.
arc(Parent,Options) when is_list(Options) ->
case gs:arc(Parent,Options) of
{error, Reason} ->
exit({?MODULE,arc,Reason});
Return -> Return
end.
named_arc(Name,Parent,Options) when is_list(Options) ->
case gs:arc(Name, Parent,Options) of
{error, Reason} ->
exit({?MODULE,named_arc,Reason});
Return -> Return
end.
menu(Parent,Options) when is_list(Options) ->
case gs:menu(Parent,Options) of
{error, Reason} ->
exit({?MODULE,menu,Reason});
Return -> Return
end.
named_menu(Name,Parent,Options) when is_list(Options) ->
case gs:menu(Name, Parent,Options) of
{error, Reason} ->
exit({?MODULE,named_menu,Reason});
Return -> Return
end.
menubutton(Parent,Options) when is_list(Options) ->
case gs:menubutton(Parent,Options) of
{error, Reason} ->
exit({?MODULE,menubutton,Reason});
Return -> Return
end.
named_menubutton(Name,Parent,Options) when is_list(Options) ->
case gs:menubutton(Name, Parent,Options) of
{error, Reason} ->
exit({?MODULE,named_menubutton,Reason});
Return -> Return
end.
menubar(Parent,Options) when is_list(Options) ->
case gs:menubar(Parent,Options) of
{error, Reason} ->
exit({?MODULE,menubar,Reason});
Return -> Return
end.
named_menubar(Name,Parent,Options) when is_list(Options) ->
case gs:menubar(Name, Parent,Options) of
{error, Reason} ->
exit({?MODULE,named_menubar,Reason});
Return -> Return
end.
menuitem(Parent,Options) when is_list(Options) ->
case gs:menuitem(Parent,Options) of
{error, Reason} ->
exit({?MODULE,menuitem,Reason});
Return -> Return
end.
named_menuitem(Name,Parent,Options) when is_list(Options) ->
case gs:menuitem(Name, Parent,Options) of
{error, Reason} ->
exit({?MODULE,named_menuitem,Reason});
Return -> Return
end.
grid(Parent,Options) when is_list(Options) ->
case gs:grid(Parent,Options) of
{error, Reason} ->
exit({?MODULE,grid,Reason});
Return -> Return
end.
named_grid(Name,Parent,Options) when is_list(Options) ->
case gs:grid(Name, Parent,Options) of
{error, Reason} ->
exit({?MODULE,named_grid,Reason});
Return -> Return
end.
gridline(Parent,Options) when is_list(Options) ->
case gs:gridline(Parent,Options) of
{error, Reason} ->
exit({?MODULE,gridline,Reason});
Return -> Return
end.
named_gridline(Name,Parent,Options) when is_list(Options) ->
case gs:gridline(Name, Parent,Options) of
{error, Reason} ->
exit({?MODULE,named_gridline,Reason});
Return -> Return
end.
%% gs:config - Utility functions
%%
%% enable/disable
%%
enable(Object) ->
gse:config(Object,[{enable,true}]).
disable(Object) ->
gse:config(Object,[{enable,false}]).
%%
%% select/deselect
%%
deselect(Object) ->
gse:config(Object,[{select,false}]).
select(Object) ->
gse:config(Object,[{select,true}]).
%%
%% map/unmap
%%
map(Object) ->
gse:config(Object,[{map,true}]).
unmap(Object) ->
gse:config(Object,[{map,false}]).
%%
%% resize
%%
resize(Object, Width, Height) ->
gse:config(Object,[{width,Width}, {height, Height}]).
%%
%% Misc utility functions
%%
name_occupied(Name) ->
case gs:read(Name,id) of
{error,_Reason} ->
false;
_Id -> true
end.