Hi Oliver,
 
On Sat, Jan 28, 2012 at 10:57 AM, Oliver Sims <oliver.sims@simsassociates.co.uk> wrote:
The ooDialog Reference (build 7341) section 16.41 ~getItemInfo (ListView)
says::
   Return value:
         Returns .true on success and .false on error.

On my ListView, the user selects an item, which enables a pushbutton. On
pressing the pushbutton, the selected item is actioned. This works fine. But
if I select an item, then de-select it, then press the pushbutton, the value
-1 is returned from ~getItemInfo, and the program closes with an error. I
expected it to return .false.
 
No that's a misinterpretation of what happened on your part.  Nothing is returned from getItemInfo(), rather a syntax condition has been raised, which is not trapped, that causes the interpreter to close.
 
 
 

Is this an error on my part, or is the documentation incomplete? The
ooDialog Reference also says, under "Details":
 
This is an error on your part, the documentation is complete, (in my opinion.)
 

   Raises syntax errors when incorrect arguments are detected.
 
 
Which is exactly what happened.  -1 is not a valid list item index.
 



The console output is:

 CustomerListView-showCustomer-01: item selected = -1
    202 *-* if lvCustomers~getItemInfo(item, info)
 Error 88:  Invalid argument
 Error 88.907:  Argument 1 must be in the range 0 to 4294967295; found "-1"
 
So here, we see exactly what you did wrong, spelled out in detail.  <grin>  Argument 1, which is the item index is incorrect.  It must be in the range of 0 to 429... and you passed in -1.  -1 is not a valid item index.
 
 

The code is:

 ::METHOD showCustomer UNGUARDED
   expose lvCustomers rootDlg
   item = lvCustomers~selected
   say "CustomerListView-showCustomer-01: item selected =" item
   info=.Directory~new
   if lvCustomers~getItemInfo(item, info) then do
     ...
   end
   else do
     say "No item selected!"
   end

 
 
You just have your logic there a little inverted.  The method should be something like this:
 
::METHOD showCustomer UNGUARDED
    expose lvCustomers rootDlg
    item = lvCustomers~selected
    say "CustomerListView-showCustomer-01: item selected =" item
   
    if item < 0 then do
      say "No item selected!"
    end
    else do
      info=.Directory~new
      if lvCustomers~getItemInfo(item, info) then do
        -- Process the information returned
        ...
      end
    end

 
The selected() method is what informs you if an item is selected or not.  The getItemInfo() method requires you to pass in a valid index.
 
Oh - by the way, these are the type of questions that I would prefer to be on the ooRexx Users list.  I don't see anything wrong with posting them on the Developers list and will answer questions where ever I see them.
 
However, very few users read the developers list.  It's true that probably very few users read the users list either.  <grin>  But, it makes sense to me to encourage ooDialog users to read the users list, less sense to encourage them to read the developers list.
 
--
Mark Miesfeld