2011年7月10日日曜日

wxErlang wxChoice wxSpinCtrl wxListBox Sample サンプル

当初、wxErlangを勉強していたきっかけは、飛行機本のチャットのGUIをwxErlangで書き換えることだった。しかし、今やwxErlangのサンプルを貼ることが目的になってしまっている。

Erlangで何かツールを作ってみようと思っているので、今度からサンプルも貼りつつ、ツールの作成にも着手していく。

今回のソースはリストボックスとかその周辺のもの。

ソース:

-module(choicesTest).
-include_lib("wx.hrl").

-export([start/0]).

start()->
    Wx = wx:new(),
    Frame = wx:batch(fun() -> create_window(Wx) end),
    wxWindow:show(Frame),
    loop(Frame),
    wx:destroy(),
    ok.

create_window(Wx)->  
    %% Create Frame
    Parent = wxFrame:new(Wx,
 -1,
 "ListBox Example",
 %%[{size,{300,200}}]),
 [{size,{-1,-1}}]),

    %% Create Panel
    Panel = wxScrolledWindow:new(Parent, []),

    %% Setup sizers
    MainSizer = wxBoxSizer:new(?wxVERTICAL),
    ListBoxSizer = wxStaticBoxSizer:new(?wxVERTICAL, Panel,
[{label, "wxListBox"}]),

    ChoiceSizer = wxStaticBoxSizer:new(?wxVERTICAL, Panel,
[{label, "wxChoice"}]),
    SpinSizer = wxStaticBoxSizer:new(?wxVERTICAL, Panel,
    [{label, "wxSpinCtrl"}]),
    ComboSizer = wxStaticBoxSizer:new(?wxVERTICAL, Panel,
    [{label, "wxComboBox"}]),
    Sizer = wxBoxSizer:new(?wxHORIZONTAL),
    Sizer3  = wxBoxSizer:new(?wxHORIZONTAL),

    Choices = ["one","two","three",
      "four","five","six",
      "seven","eight","nine",
      "ten", "eleven", "twelve"],

    %% Create a wxListBox that uses multiple selection
    ListBox = wxListBox:new(Panel, 1, [{size, {-1,100}},
      {choices, ["Multiple selection"|Choices]},
      {style, ?wxLB_MULTIPLE}]),
    wxListBox:setToolTip(ListBox, "A wxListBox with multiple selection"),

    %% Create a wxListBox that uses single selection
    ListBox2 = wxListBox:new(Panel, 2, [{size, {-1,100}},
{choices, ["Single selection"|Choices]},
{style, ?wxLB_SINGLE}]),
    wxListBox:setToolTip(ListBox2, "A wxListBox with single selection"),

    %% Create a wxChoice
    Choice = wxChoice:new(Panel, 4, [{choices, Choices}]),
    wxChoice:setToolTip(Choice, "A wxChoice"),

    %% Create a wxSpinCtrl with range between 0 and 100
    SpinCtrl = wxSpinCtrl:new(Panel, []),
    wxSpinCtrl:setRange(SpinCtrl, 0, 100),
    wxSpinCtrl:setToolTip(SpinCtrl, "A wxSpinCtrl with range from 0 to 100"),

    %% Create a wxComboBox and set the value to "Default value"
    ComboBox = wxComboBox:new(Panel, 5, [{choices, Choices}]),
    wxComboBox:setToolTip(ComboBox, "A wxComboBox"),


    wxChoice:connect(Choice,command_choice_selected),
    wxSpinCtrl:connect(SpinCtrl,command_spinctrl_updated),
    wxComboBox:connect(ComboBox, command_combobox_selected),


    %% Add to sizers
    Options = [{border,4}, {flag, ?wxALL}],
    wxSizer:add(Sizer, ListBox, Options),
    wxSizer:add(Sizer, ListBox2, Options),

    wxSizer:add(ChoiceSizer, Choice, Options),
    wxSizer:add(SpinSizer, SpinCtrl, Options),
    wxSizer:add(Sizer3, ChoiceSizer, []),
    wxSizer:add(Sizer3, SpinSizer, [{border, 4}, {flag, ?wxLEFT}]),

    wxSizer:add(ComboSizer, ComboBox, Options),

    wxSizer:add(ListBoxSizer, Sizer, Options),
    wxSizer:add(MainSizer, ListBoxSizer, Options),
    wxSizer:add(MainSizer, Sizer3, Options),
    wxSizer:add(MainSizer, ComboSizer, Options),

    wxScrolledWindow:setScrollRate(Panel, 5, 5),
    wxPanel:setSizer(Panel, MainSizer),

    %% Set Connect Close
    wxFrame:connect(Parent, close_window),

    Parent.

loop(Frame) ->
    receive
% Window Close Event
#wx{event=#wxClose{}} ->
   io:format("~p Closing window ~n",[self()]),
   wxWindow:destroy(Frame),
   ok
    end.

0 件のコメント:

コメントを投稿