<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <font size="-1">I found the answer.<br>
      <br>
      To be able to read back data from a wxListCtrl, using
      wxListCtrl:getItem/2 you need to set the item mask using
      wxListItem:setMask/2. This is (indirectly) documented under
      getMask/1 in the external docs. To get the text you should call:<br>
      <br>
      wxListItem:new/0<br>
      wxListItem:setId/2<br>
      wxListItem:setColumn/2<br>
      wxListItem:setMask/2, with mask at least containing
      ?wxLIST_MASK_TEXT<br>
      wxListCtrl:getItem/2<br>
      wxListItem:destroy/1<br>
      <br>
      <br>
      /Joakim<br>
      <br>
      <br>
    </font>
    <div class="moz-cite-prefix">Joakim Hirsch skrev 2014-09-30 11:29:<br>
    </div>
    <blockquote cite="mid:542A77F0.9060503@snookerhallen.se" type="cite">
      <meta http-equiv="content-type" content="text/html;
        charset=ISO-8859-1">
      <font size="-1">Hi,<br>
        <br>
        I'm having some trouble using wxListCtrl. I've created a table
        and filled it with data. When a row is activated (2-click) I
        receive an index into the table: the row number. I want to read
        (some of) the data from that row, but I can't figure out how.<br>
        <br>
        To me it appears as if wxListCtrl:getItem/1 doesn't read the
        data into the Item. Below is a minimal example. Where do I go
        wrong?<br>
        <br>
        Regs,<br>
        Joakim<br>
        <br>
        -module(test_gui).<br>
        <br>
        -behaviour(wx_object).<br>
        <br>
        %% Client API<br>
        -export([start/0]).<br>
        <br>
        %% wx_object callbacks<br>
        -export([init/1, terminate/2,  code_change/3,<br>
             handle_info/2, handle_call/3, handle_cast/2,
        handle_event/2,<br>
             handle_sync_event/3]).<br>
        <br>
        -include_lib("wx/include/wx.hrl").<br>
        <br>
        -record(state, <br>
            {<br>
              parent<br>
            }).<br>
        <br>
        <br>
        start() -><br>
            Wx = wx:new(),<br>
            Size = {size, {500, 500}},<br>
            Frame = wxFrame:new(Wx, ?wxID_ANY, "Title", [Size]),<br>
            Config = [{parent, Frame}],<br>
            wx_object:start_link(?MODULE, Config, []).<br>
        <br>
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%<br>
        init(Config) -><br>
            wx:batch(fun() -> do_init(Config) end).<br>
        <br>
        do_init(Config) -><br>
            Parent = proplists:get_value(parent, Config),<br>
        <br>
            % Create panel and set up sizer.<br>
            Panel = wxPanel:new(Parent, []),<br>
            MainSizer = wxBoxSizer:new(?wxVERTICAL),<br>
            wxPanel:setSizer(Panel, MainSizer),<br>
        <br>
            LC = wxListCtrl:new(Panel, [{style, ?wxLC_REPORT bor
        ?wxLC_SINGLE_SEL}]),<br>
            wxSizer:add(MainSizer, LC, [{flag, ?wxEXPAND}]),<br>
        <br>
      </font><font size="-1"><font size="-1">    % Create columns<br>
        </font>    wxListCtrl:insertColumn(LC, 0, "name", []),<br>
            wxListCtrl:insertColumn(LC, 1, "address", []),<br>
        <br>
            % Create the row<br>
            wxListCtrl:insertItem(LC, 0, ""),<br>
        <br>
            % Write cell 0,0<br>
            wxListCtrl:setItem(LC, 0, 0, "Bob"),<br>
        <br>
            % Write cell 0,1<br>
            Item1 = wxListItem:new(),<br>
            wxListItem:setId(Item1, 0),<br>
            wxListItem:setColumn(Item1, 1),<br>
            wxListItem:setText(Item1, "Street"),<br>
            true = wxListCtrl:setItem(LC, Item1),<br>
        <br>
            wxFrame:show(Parent),<br>
        <br>
            % Read 0,0<br>
            It0 = wxListItem:new(),<br>
            wxListItem:setId(It0, 0),<br>
            wxListItem:setColumn(It0, 0),<br>
            true = wxListCtrl:getItem(LC, It0),<br>
        <br>
            io:format("Row 0: ~p~n", [wxListItem:getId(It0)]),<br>
            io:format("Col 0: ~p~n", [wxListItem:getColumn(It0)]),<br>
            io:format("getText: ~p~n", [wxListItem:getText(It0)]),<br>
        <br>
            % Read 0,1<br>
            It1 = wxListItem:new(),<br>
            wxListItem:setId(It1, 0),<br>
            wxListItem:setColumn(It1, 1),<br>
            true = wxListCtrl:getItem(LC, It1),<br>
        <br>
            io:format("Row 0: ~p~n", [wxListItem:getId(It1)]),<br>
            io:format("Col 1: ~p~n", [wxListItem:getColumn(It1)]),<br>
            io:format("getText: ~p~n", [wxListItem:getText(It1)]),<br>
        <br>
            wxWindow:connect(LC, command_list_item_activated),<br>
        <br>
            {Parent, #state{parent = Parent}}.<br>
        <br>
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%<br>
        %% Sync events i.e. from callbacks must return ok, it can not
        return a<br>
        %% new state.  Do the redrawing here.<br>
        handle_sync_event(#wx{event = #wxPaint{}},_,<br>
                  #state{}) -><br>
            ok.<br>
        <br>
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%<br>
        %% Callbacks handled as normal gen_server callbacks<br>
        %%<br>
        <br>
        handle_event(#wx{obj = LC,<br>
                 event = #wxList{type = command_list_item_activated,
        itemIndex = Index}},<br>
                 State) -><br>
        <br>
            It0 = wxListItem:new(),<br>
            wxListItem:setId(It0, Index),<br>
            wxListItem:setColumn(It0, 0),<br>
            true = wxListCtrl:getItem(LC, It0),<br>
        <br>
            io:format("Row 0: ~p~n", [wxListItem:getId(It0)]),<br>
            io:format("Col 0: ~p~n", [wxListItem:getColumn(It0)]),<br>
            io:format("getText: ~p~n", [wxListItem:getText(It0)]),<br>
        <br>
            It1 = wxListItem:new(),<br>
            wxListItem:setId(It1, Index),<br>
            wxListItem:setColumn(It1, 1),<br>
            true = wxListCtrl:getItem(LC, It1),<br>
        <br>
            io:format("Row 0: ~p~n", [wxListItem:getId(It1)]),<br>
            io:format("Col 1: ~p~n", [wxListItem:getColumn(It1)]),<br>
            io:format("getText: ~p~n", [wxListItem:getText(It1)]),<br>
        <br>
            {noreply, State};<br>
        <br>
        %% Unknown event.<br>
        %%<br>
        handle_event(Ev = #wx{}, State) -><br>
            io:format("Got event:~p\n", [Ev]),<br>
            {noreply, State}.<br>
        <br>
        handle_info(Msg, State) -><br>
            io:format("Got Info ~p\n", [Msg]),<br>
            {noreply, State}.<br>
        <br>
        handle_call(shutdown, _From, State=#state{parent=Parent}) -><br>
            io:format("Shutdown~n", []),<br>
            wxPanel:destroy(Parent),<br>
            {stop, normal, ok, State};<br>
        <br>
        handle_call(Msg, _From, State) -><br>
            io:format("Got Call ~p\n", [Msg]),<br>
            {reply, {error, unknown_call}, State}.<br>
        <br>
        handle_cast(Msg, State) -><br>
            io:format("Got cast ~p~n",[Msg]),<br>
            {noreply, State}.<br>
        <br>
        code_change(_, _, State) -><br>
            {stop, ignore, State}.<br>
        <br>
        terminate(_Reason, _State) -><br>
            io:format("Stopping~n", []),<br>
            wx:destroy(),<br>
            ok.<br>
        <br>
        <br>
      </font> </blockquote>
    <br>
  </body>
</html>