nobody at rubyforge.org
2006-Dec-01 17:40 UTC
[Wxruby-development] [766] trunk/wxruby2: Added item_data aliases for client_data functions, update doc & tests;
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head><meta http-equiv="content-type" content="text/html; charset=utf-8" /><style type="text/css"><!-- #msg dl { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; } #msg dt { float: left; width: 6em; font-weight: bold; } #msg dt:after { content:'':'';} #msg dl, #msg dt, #msg ul, #msg li, #header, #footer { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; } #msg dl a { font-weight: bold} #msg dl a:link { color:#fc3; } #msg dl a:active { color:#ff0; } #msg dl a:visited { color:#cc6; } h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; } #msg pre { overflow: auto; background: #ffc; border: 1px #fc0 solid; padding: 6px; } #msg ul, pre { overflow: auto; } #header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; } #patch { width: 100%; } #patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;} #patch .propset h4, #patch .binary h4 {margin:0;} #patch pre {padding:0;line-height:1.2em;margin:0;} #patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;} #patch .propset .diff, #patch .binary .diff {padding:10px 0;} #patch span {display:block;padding:0 10px;} #patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;} #patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;} #patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;} #patch .lines, .info {color:#888;background:#fff;} --></style> <title>[766] trunk/wxruby2: Added item_data aliases for client_data functions, update doc & tests;</title> </head> <body> <div id="msg"> <dl> <dt>Revision</dt> <dd>766</dd> <dt>Author</dt> <dd>brokentoy</dd> <dt>Date</dt> <dd>2006-12-01 12:40:06 -0500 (Fri, 01 Dec 2006)</dd> </dl> <h3>Log Message</h3> <pre>Added item_data aliases for client_data functions, update doc & tests; also extend and tidy treectrl item_data tests</pre> <h3>Modified Paths</h3> <ul> <li><a href="#trunkwxruby2doctextilecontrolwithitemstxtl">trunk/wxruby2/doc/textile/controlwithitems.txtl</a></li> <li><a href="#trunkwxruby2teststest_item_datarb">trunk/wxruby2/tests/test_item_data.rb</a></li> </ul> <h3>Added Paths</h3> <ul> <li><a href="#trunkwxruby2libwxclasseschoicerb">trunk/wxruby2/lib/wx/classes/choice.rb</a></li> <li><a href="#trunkwxruby2libwxclassescomboboxrb">trunk/wxruby2/lib/wx/classes/combobox.rb</a></li> <li><a href="#trunkwxruby2libwxclasseslistboxrb">trunk/wxruby2/lib/wx/classes/listbox.rb</a></li> </ul> </div> <div id="patch"> <h3>Diff</h3> <a id="trunkwxruby2doctextilecontrolwithitemstxtl"></a> <div class="modfile"><h4>Modified: trunk/wxruby2/doc/textile/controlwithitems.txtl (765 => 766)</h4> <pre class="diff"><span> <span class="info">--- trunk/wxruby2/doc/textile/controlwithitems.txtl        2006-11-30 01:21:25 UTC (rev 765) +++ trunk/wxruby2/doc/textile/controlwithitems.txtl        2006-12-01 17:40:06 UTC (rev 766) </span><span class="lines">@@ -1,26 +1,18 @@ </span><span class="cx"> h1(#wxcontrolwithitems). Wx::ControlWithItems </span><span class="cx"> </span><del>-This class is an abstract base class for some Widgets controls which contain -several items, such as "ListBox":listbox.html and -"CheckListBox":checklistbox.html derived from it, -"Choice":choice.html and "ComboBox":combobox.html. </del><ins>+This class is an abstract base class for several Widgets controls which +contain several items, such as "ListBox":listbox.html and +"CheckListBox":checklistbox.html derived from it, "Choice":choice.html +and "ComboBox":combobox.html. </ins><span class="cx"> </span><span class="cx"> It defines the methods for accessing the controls items and although each of </span><span class="cx"> the derived classes implements them differently, they still all conform to the </span><span class="cx"> same interface. </span><span class="cx"> </span><span class="cx"> The items in a ControlWithItems have (non empty) string labels and, </span><del>-optionally, client data associated with them. Client data may be of two -different kinds: either simple untyped (@void *@) pointers which are simply -stored by the control but not used in any way by it, or typed pointers -(@ClientData *@) which are owned by the control meaning that the typed -client data (and only it) will be deleted when an item is -"deleted":controlwithitemsdelete.html or the entire control is -"cleared":controlwithitemsclear.html (which also happens when it is -destroyed). Finally note that in the same control all items must have client -data of the same type (typed or untyped), if any. This type is determined by -the first call to "Append":controlwithitemsappend.html (the version with -client data pointer) or "set_client_data":#ControlWithItems_setclientdata. </del><ins>+optionally, item data associated with them. Any ruby object may be set +as item data for an item with a control, allowing linking of core ruby +program objects with GUI code. </ins><span class="cx"> </span><span class="cx"> h2. Derived from </span><span class="cx"> </span><span class="lines">@@ -40,9 +32,8 @@ </span><span class="cx"> * "ControlWithItems#clear":#ControlWithItems_clear </span><span class="cx"> * "ControlWithItems#delete":#ControlWithItems_delete </span><span class="cx"> * "ControlWithItems#find_string":#ControlWithItems_findstring </span><del>-* "ControlWithItems#get_client_data":#ControlWithItems_getclientdata -* "ControlWithItems#get_client_object":#ControlWithItems_getclientobject </del><span class="cx"> * "ControlWithItems#get_count":#ControlWithItems_getcount </span><ins>+* "ControlWithItems#get_item_data":#ControlWithItems_getitemdata </ins><span class="cx"> * "ControlWithItems#get_selection":#ControlWithItems_getselection </span><span class="cx"> * "ControlWithItems#get_string":#ControlWithItems_getstring </span><span class="cx"> * "ControlWithItems#get_string_selection":#ControlWithItems_getstringselection </span><span class="lines">@@ -50,8 +41,7 @@ </span><span class="cx"> * "ControlWithItems#is_empty":#ControlWithItems_isempty </span><span class="cx"> * "ControlWithItems#number":#ControlWithItems_number </span><span class="cx"> * "ControlWithItems#select":#ControlWithItems_select </span><del>-* "ControlWithItems#set_client_data":#ControlWithItems_setclientdata -* "ControlWithItems#set_client_object":#ControlWithItems_setclientobject </del><ins>+* "ControlWithItems#set_item_data":#ControlWithItems_setitemdata </ins><span class="cx"> * "ControlWithItems#set_selection":#ControlWithItems_setselection </span><span class="cx"> * "ControlWithItems#set_string":#ControlWithItems_setstring </span><span class="cx"> * "ControlWithItems#set_string_selection":#ControlWithItems_setstringselection </span><span class="lines">@@ -133,51 +123,36 @@ </span><span class="cx"> not found. </span><span class="cx"> </span><span class="cx"> </span><del>-h3(#ControlWithItems_getclientdata). ControlWithItems#get_client_data </del><ins>+h3(#ControlWithItems_getcount). ControlWithItems#get_count </ins><span class="cx"> </span><del>- *get_client_data*(%(arg-type)Integer% n) </del><ins>+ Integer *get_count*() </ins><span class="cx"> </span><del>-Returns a pointer to the client data associated with the given item (if any). -It is an error to call this function for a control which doesn''t have untyped -client data at all although it is ok to call it even if the given item doesn''t -have any client data associated with it (but other items do). </del><ins>+Returns the number of items in the control. </ins><span class="cx"> </span><del>-h4. Parameters </del><ins>+h4. See also </ins><span class="cx"> </span><del>-* _n_ The zero-based position of the item. </del><ins>+"is_empty":#ControlWithItems_isempty </ins><span class="cx"> </span><del>-h4. Return value </del><ins>+h3(#ControlWithItems_getitemdata). ControlWithItems#get_item_data </ins><span class="cx"> </span><del>-A pointer to the client data, or @NULL@ if not present. </del><ins>+ Object *get_item_data*(%(arg-type)Integer% n) </ins><span class="cx"> </span><ins>+Returns the ruby object previously set as data for the given item in the +control. If no object has been set as data, then @nil@ is returned. </ins><span class="cx"> </span><del>-h3(#ControlWithItems_getclientobject). ControlWithItems#get_client_object </del><ins>+Note that in WxWidgets C++, this method is called GetClientData; +therefore *get_client_data* is an alias in WxRuby for this method. THe +name *get_item_data* is preferred for clarity and consistency with the +other classes such as "TreeCtrl":treectrl.html and +"ListCtrl":listctrl.html which offer a similar feature. </ins><span class="cx"> </span><del>- "ClientData":clientdata.html *get_client_object*(%(arg-type)Integer% n) - -Returns a pointer to the client data associated with the given item (if any). -It is an error to call this function for a control which doesn''t have typed -client data at all although it is ok to call it even if the given item doesn''t -have any client data associated with it (but other items do). - </del><span class="cx"> h4. Parameters </span><span class="cx"> </span><span class="cx"> * _n_ The zero-based position of the item. </span><span class="cx"> </span><del>-h4. Return value - -A pointer to the client data, or @NULL@ if not present. - - -h3(#ControlWithItems_getcount). ControlWithItems#get_count - - Integer *get_count*() - -Returns the number of items in the control. - </del><span class="cx"> h4. See also </span><span class="cx"> </span><del>-"is_empty":#ControlWithItems_isempty </del><ins>+"set_item_data":#ControlWithItems_setitemdata </ins><span class="cx"> </span><span class="cx"> </span><span class="cx"> h3(#ControlWithItems_getselection). ControlWithItems#get_selection </span><span class="lines">@@ -253,10 +228,9 @@ </span><span class="cx"> </span><span class="cx"> h4. Return value </span><span class="cx"> </span><del>-The return value is the index of the newly inserted item. If the insertion failed -for some reason, -1 is returned. </del><ins>+The return value is the index of the newly inserted item. If the +insertion failed for some reason, -1 is returned. </ins><span class="cx"> </span><del>- </del><span class="cx"> h3(#ControlWithItems_isempty). ControlWithItems#is_empty </span><span class="cx"> </span><span class="cx"> Boolean *is_empty*() </span><span class="lines">@@ -267,18 +241,6 @@ </span><span class="cx"> </span><span class="cx"> "get_count":#ControlWithItems_getcount </span><span class="cx"> </span><del>- -h3(#ControlWithItems_number). ControlWithItems#number - - Integer *number*() - -*Obsolescence note:* This method is obsolete and was replaced with -"get_count":#ControlWithItems_getcount, please use the new method in -the new code. This method is only available if Widgets was compiled with -@WXWIN_COMPATIBILITY_2_2@ defined and will disappear completely in -future versions. - - </del><span class="cx"> h3(#ControlWithItems_select). ControlWithItems#select </span><span class="cx"> </span><span class="cx"> *select*(%(arg-type)Integer% n) </span><span class="lines">@@ -288,44 +250,36 @@ </span><span class="cx"> multiple selection. </span><span class="cx"> </span><span class="cx"> </span><del>-h3(#ControlWithItems_setclientdata). ControlWithItems#set_client_data </del><ins>+h3(#ControlWithItems_setitemdata). ControlWithItems#set_item_data </ins><span class="cx"> </span><del>- *set_client_data*(%(arg-type)Integer% n, %(arg-type)% data) </del><ins>+ *set_item_data*(%(arg-type)Integer% n, %(arg-type)Object% data) </ins><span class="cx"> </span><del>-Associates the given untyped client data pointer with the given item. Note that -it is an error to call this function if any typed client data pointers had been -associated with the control items before. </del><ins>+Associates the ruby object with the given item in the control. This +useful feature enables the linking of program data (for example, objects +representing a database record) with the GUI, so that on subsequent +interaction with the control, GUI code can use +"get_item_data":#ControlWithItems_getitemdata to determine which program +data object is being interacted with. Any ruby object may be set as item +data, though it may be unwise to use volatile objects such as sockets or +files as item data. </ins><span class="cx"> </span><del>-h4. Parameters </del><ins>+Note that in WxWidgets C++, this method is called SetClientData; +therefore *set_client_data* is an alias in WxRuby for this method. THe +name *set_item_data* is preferred for clarity and consistency with the +other classes such as "TreeCtrl":treectrl.html and +"ListCtrl":listctrl.html which offer a similar feature. </ins><span class="cx"> </span><del>-* _n_ The zero-based item index. -* _data_ The client data to associate with the item. - - -h3(#ControlWithItems_setclientobject). ControlWithItems#set_client_object - - *set_client_object*(%(arg-type)Integer% n, %(arg-type)ClientData% data) - -Associates the given typed client data pointer with the given item: the -_data_ object will be deleted when the item is deleted (either explicitly -by using "Deletes":controlwithitemsdelete.html or implicitly when the -control itself is destroyed). - -Note that it is an error to call this function if any untyped client data -pointers had been associated with the control items before. - </del><span class="cx"> h4. Parameters </span><span class="cx"> </span><span class="cx"> * _n_ The zero-based item index. </span><span class="cx"> * _data_ The client data to associate with the item. </span><span class="cx"> </span><del>- </del><span class="cx"> h3(#ControlWithItems_setselection). ControlWithItems#set_selection </span><span class="cx"> </span><span class="cx"> *set_selection*(%(arg-type)Integer% n) </span><span class="cx"> </span><span class="cx"> Sets the selection to the given item n or removes the selection entirely </span><del>-if n $==$ @NOT_FOUND@. </del><ins>+if n == -1. </ins><span class="cx"> </span><span class="cx"> Note that this does not cause any command events to be emitted nor does it </span><span class="cx"> deselect any other items in the controls which support multiple selections. </span><span class="lines">@@ -364,8 +318,8 @@ </span><span class="cx"> </span><span class="cx"> h4. Return value </span><span class="cx"> </span><del>- if the specified string has been selected, if it wasn''t found in -the control. </del><ins>+@true@ if the specified string has been selected, @false@ if it wasn''t +found in the control. </ins><span class="cx"> </span><span class="cx"> h4. See also </span><span class="cx"> </span></span></pre></div> <a id="trunkwxruby2libwxclasseschoicerb"></a> <div class="addfile"><h4>Added: trunk/wxruby2/lib/wx/classes/choice.rb (0 => 766)</h4> <pre class="diff"><span> <span class="info">--- trunk/wxruby2/lib/wx/classes/choice.rb         (rev 0) +++ trunk/wxruby2/lib/wx/classes/choice.rb        2006-12-01 17:40:06 UTC (rev 766) </span><span class="lines">@@ -0,0 +1,4 @@ </span><ins>+class Wx::Choice + alias :get_item_data :get_client_data + alias :set_item_data :set_client_data +end </ins></span></pre></div> <a id="trunkwxruby2libwxclassescomboboxrb"></a> <div class="addfile"><h4>Added: trunk/wxruby2/lib/wx/classes/combobox.rb (0 => 766)</h4> <pre class="diff"><span> <span class="info">--- trunk/wxruby2/lib/wx/classes/combobox.rb         (rev 0) +++ trunk/wxruby2/lib/wx/classes/combobox.rb        2006-12-01 17:40:06 UTC (rev 766) </span><span class="lines">@@ -0,0 +1,4 @@ </span><ins>+class Wx::ComboBox + alias :get_item_data :get_client_data + alias :set_item_data :set_client_data +end </ins></span></pre></div> <a id="trunkwxruby2libwxclasseslistboxrb"></a> <div class="addfile"><h4>Added: trunk/wxruby2/lib/wx/classes/listbox.rb (0 => 766)</h4> <pre class="diff"><span> <span class="info">--- trunk/wxruby2/lib/wx/classes/listbox.rb         (rev 0) +++ trunk/wxruby2/lib/wx/classes/listbox.rb        2006-12-01 17:40:06 UTC (rev 766) </span><span class="lines">@@ -0,0 +1,4 @@ </span><ins>+class Wx::ListBox + alias :get_item_data :get_client_data + alias :set_item_data :set_client_data +end </ins></span></pre></div> <a id="trunkwxruby2teststest_item_datarb"></a> <div class="modfile"><h4>Modified: trunk/wxruby2/tests/test_item_data.rb (765 => 766)</h4> <pre class="diff"><span> <span class="info">--- trunk/wxruby2/tests/test_item_data.rb        2006-11-30 01:21:25 UTC (rev 765) +++ trunk/wxruby2/tests/test_item_data.rb        2006-12-01 17:40:06 UTC (rev 766) </span><span class="lines">@@ -20,10 +20,10 @@ </span><span class="cx"> class TestItemData < Test::Unit::TestCase </span><span class="cx"> def assert_retrievable_data(ctrl, n, test_value) </span><span class="cx"> compare = Marshal.load( Marshal.dump(test_value) ) </span><del>- ctrl.set_client_data(n, test_value) - assert_equal(compare, ctrl.get_client_data(n) ) </del><ins>+ ctrl.set_item_data(n, test_value) + assert_equal(compare, ctrl.get_item_data(n) ) </ins><span class="cx"> GC.start </span><del>- assert_equal(compare, ctrl.get_client_data(n) ) </del><ins>+ assert_equal(compare, ctrl.get_item_data(n) ) </ins><span class="cx"> end </span><span class="cx"> </span><span class="cx"> def do_control_with_items_assertions(f) </span><span class="lines">@@ -34,21 +34,26 @@ </span><span class="cx"> </span><span class="cx"> def test_treectrl_itemdata </span><span class="cx"> f = CtrlContainerFrame.new(Wx::TreeCtrl) </span><del>- root = f.control.add_root(''foo'') </del><ins>+ tree = f.control + root = tree.add_root(''foo'') + assert_nil(tree.get_item_data( tree.get_root_item)) </ins><span class="cx"> </span><del>- id = f.control.append_item(root, ''a hash'', -1, -1, { :a => 7 }) - assert_equal({:a => 7 }, - f.control.get_item_data(id) ) </del><ins>+ id = tree.append_item(root, ''a hash'', -1, -1, { :a => 7 }) + assert_equal({:a => 7 }, tree.get_item_data(id) ) </ins><span class="cx"> </span><del>- id = f.control.prepend_item(root, ''a float'', -1, -1, 7.8) - assert_equal(7.8, </del><ins>+ id = tree.prepend_item(root, ''a float'', -1, -1, 7.8) + assert_equal(7.8, tree.get_item_data(id) ) + GC.start + assert_equal(7.8, tree.get_item_data(id) ) + + id = tree.prepend_item(root, ''an array'', -1, -1) + assert_nil( tree.get_item_data(id) ) + tree.set_item_data(id, %w|foo bar baz|) + assert_equal(%w|foo bar baz|, </ins><span class="cx"> f.control.get_item_data(id) ) </span><del>- - id = f.control.prepend_item(root, ''an array'', -1, -1, %w|foo bar baz|) </del><span class="cx"> GC.start </span><span class="cx"> assert_equal(%w|foo bar baz|, </span><span class="cx"> f.control.get_item_data(id) ) </span><del>- </del><span class="cx"> f.close(true) </span><span class="cx"> end </span><span class="cx"> </span></span></pre> </div> </div> </body> </html>
Apparently Analagous Threads
- TreeCtrl item_data
- [744] trunk/wxruby2: get_data support & mem mgmt to all ControlWithItems types, using more
- [937] trunk/wxsugar/lib/wx_sugar/enumerable_controls.rb: Initial commit of enumerable_controls.rb
- [765] trunk/wxruby2: Fixed item_data functions for ListCtrl, plus test
- [943] trunk/wxsugar/lib/wx_sugar/enumerable_controls.rb: Fix bug with false positives from #find_string, bounds-checking for