aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Gudmundsson <[email protected]>2011-07-07 11:47:39 +0200
committerDan Gudmundsson <[email protected]>2011-07-07 11:47:39 +0200
commitac970679c2570947374de24bc69f8721714002f0 (patch)
treecdfea0ef57fb348121299bb3e6987de289186c73
parent0635c276c279b195c06738cfc6d9e44a60ddc627 (diff)
downloadotp-ac970679c2570947374de24bc69f8721714002f0.tar.gz
otp-ac970679c2570947374de24bc69f8721714002f0.tar.bz2
otp-ac970679c2570947374de24bc69f8721714002f0.zip
Add example and testcase
-rw-r--r--lib/wx/examples/demo/ex_listCtrl.erl50
-rw-r--r--lib/wx/test/wx_class_SUITE.erl124
2 files changed, 124 insertions, 50 deletions
diff --git a/lib/wx/examples/demo/ex_listCtrl.erl b/lib/wx/examples/demo/ex_listCtrl.erl
index c574c7247a..3faec4e229 100644
--- a/lib/wx/examples/demo/ex_listCtrl.erl
+++ b/lib/wx/examples/demo/ex_listCtrl.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2009. All Rights Reserved.
-%%
+%%
+%% Copyright Ericsson AB 2009-2011. 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%
-module(ex_listCtrl).
@@ -25,7 +25,7 @@
-export([start/1, init/1, terminate/2, code_change/3,
handle_info/2, handle_call/3, handle_event/2]).
--record(state,
+-record(state,
{
parent,
config,
@@ -40,11 +40,11 @@ init(Config) ->
wx:batch(fun() -> do_init(Config) end).
do_init(Config) ->
- Parent = proplists:get_value(parent, Config),
+ Parent = proplists:get_value(parent, Config),
Panel = wxPanel:new(Parent, []),
%% Setup sizers
- MainSizer = wxStaticBoxSizer:new(?wxVERTICAL, Panel,
+ MainSizer = wxStaticBoxSizer:new(?wxVERTICAL, Panel,
[{label, "wxListCtrl"}]),
Notebook = wxNotebook:new(Panel, 1, [{style, ?wxBK_DEFAULT}]),
@@ -81,14 +81,46 @@ do_init(Config) ->
wxListCtrl:setItemBackgroundColour(ListCtrl3,3,?wxGREEN),
wxListCtrl:setItemBackgroundColour(ListCtrl3,0,?wxCYAN),
+ IA = wxListItemAttr:new(),
+ wxListItemAttr:setTextColour(IA, {190, 25, 25}),
+ LC4Opts = [{style, ?wxLC_REPORT bor ?wxLC_VIRTUAL},
+ {onGetItemText, fun(_This, Item, 0) ->
+ "Row " ++ integer_to_list(Item);
+ (_, Item, 1) when Item rem 5 == 0 ->
+ "Column 2";
+ (_, _, _) -> ""
+ end},
+ {onGetItemAttr, fun(_This, Item) when Item rem 3 == 0 ->
+ IA;
+ (_This, _Item) ->
+ wx:typeCast(wx:null(), wxListItemAttr)
+ end},
+ {onGetItemColumnImage, fun(_This, Item, 1) ->
+ Item rem 4;
+ (_, _, _) ->
+ -1
+ end}
+ ],
+ ListCtrl4 = wxListCtrl:new(Notebook, LC4Opts),
+ wxListCtrl:setImageList(ListCtrl4, IL, ?wxIMAGE_LIST_SMALL),
+
+ wxListCtrl:insertColumn(ListCtrl4, 0, "Column 1"),
+ wxListCtrl:insertColumn(ListCtrl4, 1, "Column 2"),
+ wxListCtrl:setColumnWidth(ListCtrl4, 0, 200),
+ wxListCtrl:setColumnWidth(ListCtrl4, 1, 200),
+ wxListCtrl:setItemCount(ListCtrl4, 1000000),
+
+
wxListCtrl:connect(ListCtrl1, command_list_item_selected, []),
wxListCtrl:connect(ListCtrl2, command_list_item_selected, []),
wxListCtrl:connect(ListCtrl3, command_list_item_selected, []),
+ wxListCtrl:connect(ListCtrl4, command_list_item_selected, []),
%% Add to sizers
wxNotebook:addPage(Notebook, ListCtrl1, "List", []),
wxNotebook:addPage(Notebook, ListCtrl2, "Report", []),
wxNotebook:addPage(Notebook, ListCtrl3, "Colored multiselect", []),
+ wxNotebook:addPage(Notebook, ListCtrl4, "Virtual Report", []),
wxSizer:add(MainSizer, Notebook, [{proportion, 1},
{flag, ?wxEXPAND}]),
@@ -145,4 +177,4 @@ create_list_ctrl(Win, Options) ->
ListCtrl.
-
+
diff --git a/lib/wx/test/wx_class_SUITE.erl b/lib/wx/test/wx_class_SUITE.erl
index 79e6833e9b..ef37dc68bc 100644
--- a/lib/wx/test/wx_class_SUITE.erl
+++ b/lib/wx/test/wx_class_SUITE.erl
@@ -18,14 +18,14 @@
%%%-------------------------------------------------------------------
%%% File : wx_class_SUITE.erl
%%% Author : Dan Gudmundsson <[email protected]>
-%%% Description :
+%%% Description :
%%%
%%% Created : 13 Nov 2008 by Dan Gudmundsson <[email protected]>
%%%-------------------------------------------------------------------
-module(wx_class_SUITE).
--export([all/0, suite/0,groups/0,init_per_group/2,end_per_group/2,
- init_per_suite/1, end_per_suite/1,
+-export([all/0, suite/0,groups/0,init_per_group/2,end_per_group/2,
+ init_per_suite/1, end_per_suite/1,
init_per_testcase/2, end_per_testcase/2]).
-compile(export_all).
@@ -41,18 +41,18 @@ end_per_suite(Config) ->
init_per_testcase(Func,Config) ->
wx_test_lib:init_per_testcase(Func,Config).
-end_per_testcase(Func,Config) ->
+end_per_testcase(Func,Config) ->
wx_test_lib:end_per_testcase(Func,Config).
%% SUITE specification
suite() -> [{ct_hooks,[ts_install_cth]}].
-all() ->
+all() ->
[calendarCtrl, treeCtrl, notebook, staticBoxSizer,
- clipboard, helpFrame, htmlWindow, listCtrlSort,
+ clipboard, helpFrame, htmlWindow, listCtrlSort, listCtrlVirtual,
radioBox, systemSettings].
-groups() ->
+groups() ->
[].
init_per_group(_GroupName, Config) ->
@@ -70,9 +70,9 @@ calendarCtrl(Config) ->
Frame = ?mt(wxFrame, wxFrame:new(Wx, 1, "Calendar", [])),
Panel = wxPanel:new(Frame),
Sz = wxBoxSizer:new(?wxVERTICAL),
-
+
{YMD={_,_,Day},_} = DateTime = calendar:now_to_datetime(erlang:now()),
- Cal = ?mt(wxCalendarCtrl, wxCalendarCtrl:new(Panel, ?wxID_ANY,
+ Cal = ?mt(wxCalendarCtrl, wxCalendarCtrl:new(Panel, ?wxID_ANY,
[{date,DateTime}
])),
wxSizer:add(Sz,Cal),
@@ -91,25 +91,25 @@ calendarCtrl(Config) ->
?m({0,243,0,255}, wxCalendarDateAttr:getBackgroundColour(DateAttr1)),
?m({YMD, _},wxCalendarCtrl:getDate(Cal)),
-
- wxCalendarCtrl:connect(Cal, calendar_weekday_clicked),
- wxCalendarCtrl:connect(Cal, calendar_day_changed),
- wxCalendarCtrl:connect(Cal, calendar_month_changed),
+
+ wxCalendarCtrl:connect(Cal, calendar_weekday_clicked),
+ wxCalendarCtrl:connect(Cal, calendar_day_changed),
+ wxCalendarCtrl:connect(Cal, calendar_month_changed),
wxCalendarCtrl:connect(Cal, calendar_year_changed),
- wxCalendarCtrl:connect(Cal, calendar_doubleclicked),
+ wxCalendarCtrl:connect(Cal, calendar_doubleclicked),
wxCalendarCtrl:connect(Cal, calendar_sel_changed),
-
+
wxWindow:setSizer(Panel,Sz),
wxSizer:setSizeHints(Sz,Frame),
- wxWindow:show(Frame),
-
+ wxWindow:show(Frame),
+
wx_test_lib:wx_destroy(Frame,Config).
treeCtrl(TestInfo) when is_atom(TestInfo) -> wx_test_lib:tc_info(TestInfo);
treeCtrl(Config) ->
Wx = wx:new(),
-
+
Frame = wxFrame:new(Wx, ?wxID_ANY, "Frame"),
Panel = wxPanel:new(Frame, []),
Tree = ?mt(wxTreeCtrl,wxTreeCtrl:new(Panel, [{style , ?wxTR_HAS_BUTTONS}])),
@@ -122,25 +122,25 @@ treeCtrl(Config) ->
?m(ok, wxTreeCtrl:setItemData(Tree, Item2, {data, item2})),
Item3 = wxTreeCtrl:appendItem(Tree, Root, "Item3", []),
?m(ok, wxTreeCtrl:setItemData(Tree, Item3, {data, item3})),
-
+
Sizer = wxBoxSizer:new(?wxVERTICAL),
wxSizer:add(Sizer, Tree, [{flag, ?wxEXPAND}, {proportion, 1}]),
wxWindow:setSizerAndFit(Panel, Sizer),
wxFrame:show(Frame),
-
+
?m([], wxTreeCtrl:getItemData(Tree, Root)),
?m({data,item1}, wxTreeCtrl:getItemData(Tree, Item1)),
?m({data,item2}, wxTreeCtrl:getItemData(Tree, Item2)),
?m({data,item3}, wxTreeCtrl:getItemData(Tree, Item3)),
-
+
wxFrame:connect(Tree, command_tree_item_expanded),
wxFrame:connect(Tree, command_tree_item_collapsed),
wxFrame:connect(Frame, close_window),
wxTreeCtrl:editLabel(Tree, Root),
-
+
wx_test_lib:wx_destroy(Frame,Config).
notebook(TestInfo) when is_atom(TestInfo) -> wx_test_lib:tc_info(TestInfo);
@@ -210,13 +210,13 @@ staticBoxSizer(Config) ->
Frame = wxFrame:new(Wx, ?wxID_ANY, "Frame"),
Panel = wxPanel:new(Frame, []),
InclSizer = ?mt(wxStaticBoxSizer,
- wxStaticBoxSizer:new(?wxVERTICAL, Panel,
+ wxStaticBoxSizer:new(?wxVERTICAL, Panel,
[{label, "Module inclusion policy"}])),
Sizer = wxBoxSizer:new(?wxVERTICAL),
wxSizer:add(Sizer, InclSizer,
[{border, 2}, {flag, ?wxALL bor ?wxEXPAND}, {proportion, 1}]),
- wxWindow:setSizerAndFit(Panel, Sizer),
-
+ wxWindow:setSizerAndFit(Panel, Sizer),
+
wxWindow:show(Frame),
wx_test_lib:wx_destroy(Frame,Config).
@@ -263,13 +263,13 @@ clipboard(_Config) ->
wxClipboard:flush(CB),
?log("Stopping ~n",[]),
ok.
-
+
helpFrame(TestInfo) when is_atom(TestInfo) -> wx_test_lib:tc_info(TestInfo);
helpFrame(Config) ->
Wx = wx:new(),
MFrame = wx:batch(fun() ->
MFrame = wxFrame:new(Wx, ?wxID_ANY, "Main Frame"),
- wxPanel:new(MFrame, [{size, {600,400}}]),
+ wxPanel:new(MFrame, [{size, {600,400}}]),
wxWindow:show(MFrame),
MFrame
end),
@@ -279,11 +279,11 @@ helpFrame(Config) ->
{X, Y, W,H} = wxWindow:getScreenRect(MFrame),
io:format("Pos0: ~p ~p ~p Pos: ~p:~p Size: ~p:~p ~n",
[X0,Y0, wxWindow:clientToScreen(MFrame, {0,0}), X,Y,W,H]),
-
+
Pos = {X+5, Y+(H div 2)},
Size = {W-10, (H div 2) - 5},
- Comp = wxFrame:new(MFrame, ?wxID_ANY, "Completion Window",
+ Comp = wxFrame:new(MFrame, ?wxID_ANY, "Completion Window",
[{pos, Pos}, {size, Size},
{style, ?wxFRAME_FLOAT_ON_PARENT}]),
LB = wxListBox:new(Comp, 42, [{style, ?wxLB_SINGLE},
@@ -301,7 +301,7 @@ htmlWindow(Config) ->
{MFrame,HPanel} =
wx:batch(fun() ->
MFrame = wxFrame:new(Wx, ?wxID_ANY, "Main Frame"),
- HPanel = wxHtmlWindow:new(MFrame, [{size, {600,400}}]),
+ HPanel = wxHtmlWindow:new(MFrame, [{size, {600,400}}]),
wxWindow:show(MFrame),
{MFrame, HPanel}
end),
@@ -310,7 +310,7 @@ htmlWindow(Config) ->
WxMod = code:which(wx),
WxDir = filename:split(filename:dirname(WxMod)) -- ["ebin"],
Html = filename:join(filename:join(WxDir),filename:join("doc", "html")),
-
+
Index = filename:join(Html, "wx.html"),
?m(ok, wxHtmlWindow:connect(HPanel, command_html_link_clicked,
@@ -318,7 +318,7 @@ htmlWindow(Config) ->
fun(Ev,_) ->
io:format("Link clicked: ~p~n",[Ev])
end}])),
-
+
case filelib:is_file(Index) of
true ->
?m(true, wxHtmlWindow:loadFile(HPanel, Index)),
@@ -326,7 +326,7 @@ htmlWindow(Config) ->
false ->
ok
end,
-
+
wx_test_lib:wx_destroy(MFrame,Config).
@@ -334,18 +334,18 @@ listCtrlSort(TestInfo) when is_atom(TestInfo) -> wx_test_lib:tc_info(TestInfo);
listCtrlSort(Config) ->
Wx = wx:new(),
Frame = wxFrame:new(Wx, ?wxID_ANY, "Frame"),
-
+
LC = wxListCtrl:new(Frame, [{style, ?wxLC_REPORT bor ?wxLC_SORT_ASCENDING}]),
%% must be done crashes in wxwidgets otherwise.
wxListCtrl:insertColumn(LC, 0, "Column"),
-
- Add = fun(Int) ->
+
+ Add = fun(Int) ->
wxListCtrl:insertItem(LC, Int, integer_to_list(Int)),
%% ItemData Can only be integers currently
wxListCtrl:setItemData(LC, Int, abs(2500-Int))
end,
-
+
wx:foreach(Add, lists:seq(0,5000)),
wxWindow:show(Frame),
@@ -360,10 +360,10 @@ listCtrlSort(Config) ->
end
end)
end,
-
+
Time = timer:tc(erlang, apply, [Sort,[]]),
io:format("Sorted ~p ~n",[Time]),
-
+
Item = wxListItem:new(),
_List = wx:map(fun(Int) ->
wxListItem:setId(Item, Int),
@@ -374,6 +374,48 @@ listCtrlSort(Config) ->
wx_test_lib:wx_destroy(Frame,Config).
+listCtrlVirtual(TestInfo) when is_atom(TestInfo) -> wx_test_lib:tc_info(TestInfo);
+listCtrlVirtual(Config) ->
+ Wx = wx:new(),
+ Frame = wxFrame:new(Wx, ?wxID_ANY, "Frame"),
+ IA = wxListItemAttr:new(),
+ wxListItemAttr:setTextColour(IA, {190, 25, 25}),
+ LC = wxListCtrl:new(Frame,
+ [{style, ?wxLC_REPORT bor ?wxLC_VIRTUAL},
+ {onGetItemText, fun(_This, Item, 0) ->
+ "Row " ++ integer_to_list(Item);
+ (_, Item, 1) when Item rem 5 == 0 ->
+ "Column 2";
+ (_, _, _) -> ""
+ end},
+ {onGetItemAttr, fun(_This, Item) when Item rem 3 == 0 ->
+ IA;
+ (_This, Item) ->
+ wx:typeCast(wx:null(), wxListItemAttr)
+ end},
+ {onGetItemColumnImage, fun(_This, Item, 1) ->
+ Item rem 4;
+ (_, _, _) ->
+ -1
+ end}
+ ]),
+
+ IL = wxImageList:new(16,16),
+ wxImageList:add(IL, wxArtProvider:getBitmap("wxART_COPY", [{size, {16,16}}])),
+ wxImageList:add(IL, wxArtProvider:getBitmap("wxART_MISSING_IMAGE", [{size, {16,16}}])),
+ wxImageList:add(IL, wxArtProvider:getBitmap("wxART_TICK_MARK", [{size, {16,16}}])),
+ wxImageList:add(IL, wxArtProvider:getBitmap("wxART_CROSS_MARK", [{size, {16,16}}])),
+ wxListCtrl:assignImageList(LC, IL, ?wxIMAGE_LIST_SMALL),
+
+ wxListCtrl:insertColumn(LC, 0, "Column 1"),
+ wxListCtrl:insertColumn(LC, 1, "Column 2"),
+ wxListCtrl:setColumnWidth(LC, 0, 200),
+ wxListCtrl:setColumnWidth(LC, 1, 200),
+ wxListCtrl:setItemCount(LC, 1000000),
+
+ wxWindow:show(Frame),
+ wx_test_lib:wx_destroy(Frame,Config).
+
radioBox(TestInfo) when is_atom(TestInfo) -> wx_test_lib:tc_info(TestInfo);
radioBox(Config) ->
@@ -382,7 +424,7 @@ radioBox(Config) ->
TrSortRadioBox = wxRadioBox:new(Frame, ?wxID_ANY, "Sort by:",
{100, 100},{100, 100}, ["Timestamp"]),
-
+
io:format("TrSortRadioBox ~p ~n", [TrSortRadioBox]),
%% If I uncomment any of these lines, it will crash
@@ -398,7 +440,7 @@ systemSettings(TestInfo) when is_atom(TestInfo) -> wx_test_lib:tc_info(TestInfo)
systemSettings(Config) ->
Wx = wx:new(),
Frame = wxFrame:new(Wx, ?wxID_ANY, "Frame"),
-
+
?m({_,_,_,_}, wxSystemSettings:getColour(?wxSYS_COLOUR_DESKTOP)),
?mt(wxFont, wxSystemSettings:getFont(?wxSYS_SYSTEM_FONT)),
?m(true, is_integer(wxSystemSettings:getMetric(?wxSYS_MOUSE_BUTTONS))),