aboutsummaryrefslogtreecommitdiffstats
path: root/lib/wx/examples/demo/ex_button.erl
diff options
context:
space:
mode:
Diffstat (limited to 'lib/wx/examples/demo/ex_button.erl')
-rw-r--r--lib/wx/examples/demo/ex_button.erl230
1 files changed, 230 insertions, 0 deletions
diff --git a/lib/wx/examples/demo/ex_button.erl b/lib/wx/examples/demo/ex_button.erl
new file mode 100644
index 0000000000..28c8273cb9
--- /dev/null
+++ b/lib/wx/examples/demo/ex_button.erl
@@ -0,0 +1,230 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2009. All Rights Reserved.
+%%
+%% 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 online 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.
+%%
+%% %CopyrightEnd%
+
+%% This is example of the widgets and usage of wxErlang
+%% Hopefully it will contain all implemented widgets, it's event handling
+%% and some tutorials of how to use sizers and other stuff.
+
+-module(ex_button).
+
+-include_lib("wx/include/wx.hrl").
+
+-behaviour(wx_object).
+-export([start/1, init/1, terminate/2, code_change/3,
+ handle_info/2, handle_call/3, handle_event/2]).
+
+-record(state,
+ {
+ parent,
+ config
+ }).
+
+start(Config) ->
+ wx_object:start_link(?MODULE, Config, []).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+init(Config) ->
+ wx:batch(fun() -> do_init(Config) end).
+
+do_init(Config) ->
+ Parent = proplists:get_value(parent, Config),
+ Panel = wxScrolledWindow:new(Parent),
+
+ %% Setup sizers
+ Sz = wxBoxSizer:new(?wxVERTICAL),
+ ButtSz = wxStaticBoxSizer:new(?wxHORIZONTAL, Panel,
+ [{label, "wxButton"}]),
+ AlignSz = wxStaticBoxSizer:new(?wxHORIZONTAL, Panel,
+ [{label, "Alignment Style"}]),
+ OtherSz = wxStaticBoxSizer:new(?wxHORIZONTAL, Panel,
+ [{label, "Other Styles"}]),
+ StockTopSz = wxStaticBoxSizer:new(?wxHORIZONTAL, Panel,
+ [{label, "Stock Buttons"}]),
+
+ B10 = wxButton:new(Panel, 10, [{label,"Normal"}]),
+ wxButton:setToolTip(B10, "Normal button with (default) centered label"),
+
+ B11 = wxToggleButton:new(Panel, 11, "Toggle Button"),
+ wxToggleButton:connect(B11, command_togglebutton_clicked),
+ wxButton:setToolTip(B11, "A toggle button"),
+
+ B12 = wxButton:new(Panel, 12, [{label,"Default"}]),
+ wxButton:setDefault(B12),
+ wxButton:setToolTip(B12, "Normal button set to be the default button"),
+
+ B13 = wxButton:new(Panel, 13, [{label,"Disabled"}]),
+ wxButton:disable(B13),
+ wxButton:setToolTip(B13, "Disabled Normal button"),
+
+ B14 = wxBitmapButton:new(Panel, 14, create_bitmap("A bitmap button")),
+ wxButton:setToolTip(B14, "A Bitmap button"),
+
+ %% Alignment and NO_BORDER only works on Win and GTK
+ %% according to docs.
+ B20 = wxButton:new(Panel, 20, [{label,"Left Aligned"},
+ {size, {100, -1}},
+ {style,?wxBU_LEFT}]),
+ wxButton:setToolTip(B20, "Normal button with left aligned label"),
+
+ B21 = wxButton:new(Panel, 21, [{label,"Top Aligned"},
+ {size, {-1, 50}},
+ {style,?wxBU_TOP}]),
+ wxButton:setToolTip(B21, "Normal button with top aligned label"),
+
+ B22 = wxButton:new(Panel, 22, [{label,"Lower Right Aligned"},
+ {size, {150, 50}},
+ {style,?wxBU_BOTTOM bor ?wxBU_RIGHT}]),
+ wxButton:setToolTip(B22, "Normal button with top right aligned label"),
+
+ %% Other types
+ B30 = wxButton:new(Panel, 30, [{label,"Flat Style"},
+ {style, ?wxNO_BORDER}]),
+ wxButton:setToolTip(B30, "Flat style button, on some OS'es"),
+
+ B31 = wxButton:new(Panel, 31, [{label,"Exact Fit"},
+ {style, ?wxBU_EXACTFIT}]),
+ wxButton:setToolTip(B31, "Minimal Size button"),
+
+ %% Stock Buttons
+ StockButts = [wxButton:new(Panel, Id) || Id <- stock_buttons()],
+
+ StockSz = wxGridSizer:new(0,5,3,3),
+
+ SzFlags = [{proportion, 0}, {border, 4}, {flag, ?wxALL}],
+ Expand = [{proportion, 0}, {border, 4}, {flag, ?wxALL bor
+ ?wxEXPAND}],
+ [wxSizer:add(ButtSz, Button, SzFlags) ||
+ Button <- [B10, B11, B12, B13, B14]],
+ [wxSizer:add(AlignSz, Button, SzFlags) || Button <- [B20,B21,B22]],
+ [wxSizer:add(OtherSz, Button, SzFlags) || Button <- [B30,B31]],
+ [wxSizer:add(StockSz, Butt, SzFlags) || Butt <- StockButts],
+ wxSizer:add(StockTopSz, StockSz, SzFlags),
+ [wxSizer:add(Sz, Button, Flag) ||
+ {Button, Flag} <- [{ButtSz,SzFlags},{AlignSz,Expand},
+ {OtherSz,Expand}, {StockTopSz, Expand}]],
+ wxWindow:connect(Panel, command_button_clicked),
+ wxWindow:setSizer(Panel, Sz),
+ wxSizer:layout(Sz),
+ wxScrolledWindow:setScrollRate(Panel, 5, 5),
+ {Panel, #state{parent=Panel, config=Config}}.
+
+
+%%%%%%%%%%%%
+%% Async Events are handled in handle_event as in handle_info
+handle_event(#wx{id=Id, event=#wxCommand{type=command_button_clicked}},
+ State = #state{parent=Parent}) ->
+ B0 = wxWindow:findWindowById(Id, [{parent, Parent}]),
+ Butt = wx:typeCast(B0, wxButton),
+ Label = wxButton:getLabel(Butt),
+ demo:format(State#state.config,"Button: \'~ts\' clicked~n",[Label]),
+ {noreply,State};
+
+handle_event(#wx{event=#wxCommand{type=command_togglebutton_clicked}},
+ State = #state{}) ->
+ demo:format(State#state.config,
+ "Button: You toggled the 'Toggle button' ~n",[]),
+ {noreply,State};
+
+handle_event(Ev = #wx{}, State = #state{}) ->
+ demo:format(State#state.config,"Got Event ~p~n",[Ev]),
+ {noreply,State}.
+
+%% Callbacks handled as normal gen_server callbacks
+handle_info(Msg, State) ->
+ demo:format(State#state.config, "Got Info ~p~n",[Msg]),
+ {noreply,State}.
+
+handle_call(Msg, _From, State) ->
+ demo:format(State#state.config,"Got Call ~p~n",[Msg]),
+ {reply,ok,State}.
+
+code_change(_, _, State) ->
+ {stop, ignore, State}.
+
+terminate(_Reason, _State) ->
+ ok.
+
+%%%%% a copy from wxwidgets samples.
+create_bitmap(Label) ->
+ Bmp = wxBitmap:new(140, 30),
+ DC = wxMemoryDC:new(),
+ wxMemoryDC:selectObject(DC, Bmp),
+ wxDC:setBackground(DC, ?wxWHITE_BRUSH),
+ wxDC:clear(DC),
+ wxDC:setTextForeground(DC, ?wxBLUE),
+ wxDC:drawLabel(DC, Label, {5,5,130,20}, [{alignment, ?wxALIGN_CENTER}]),
+ wxMemoryDC:destroy(DC),
+ Bmp.
+
+
+stock_buttons() ->
+ [?wxID_ABOUT,
+ ?wxID_ADD,
+ ?wxID_APPLY,
+ ?wxID_BOLD,
+ ?wxID_CANCEL,
+ ?wxID_CLEAR,
+ ?wxID_CLOSE,
+ ?wxID_COPY,
+ ?wxID_CUT,
+ ?wxID_DELETE,
+ ?wxID_EDIT,
+ ?wxID_FIND,
+ ?wxID_FILE,
+ ?wxID_REPLACE,
+ ?wxID_BACKWARD,
+ ?wxID_DOWN,
+ ?wxID_FORWARD,
+ ?wxID_UP,
+ ?wxID_HELP,
+ ?wxID_HOME,
+ ?wxID_INDENT,
+ ?wxID_INDEX,
+ ?wxID_ITALIC,
+ ?wxID_JUSTIFY_CENTER,
+ ?wxID_JUSTIFY_FILL,
+ ?wxID_JUSTIFY_LEFT,
+ ?wxID_JUSTIFY_RIGHT,
+ ?wxID_NEW,
+ ?wxID_NO,
+ ?wxID_OK,
+ ?wxID_OPEN,
+ ?wxID_PASTE,
+ ?wxID_PREFERENCES,
+ ?wxID_PRINT,
+ ?wxID_PREVIEW,
+ ?wxID_PROPERTIES,
+ ?wxID_EXIT,
+ ?wxID_REDO,
+ ?wxID_REFRESH,
+ ?wxID_REMOVE,
+ ?wxID_REVERT_TO_SAVED,
+ ?wxID_SAVE,
+ ?wxID_SAVEAS,
+ ?wxID_SELECTALL,
+ ?wxID_STOP,
+ ?wxID_UNDELETE,
+ ?wxID_UNDERLINE,
+ ?wxID_UNDO,
+ ?wxID_UNINDENT,
+ ?wxID_YES,
+ ?wxID_ZOOM_100,
+ ?wxID_ZOOM_FIT,
+ ?wxID_ZOOM_IN,
+ ?wxID_ZOOM_OUT].
+