Code: Select all
EnableExplicit
Define i.L
Define ItemCount.L
OpenWindow(0, 270, 100, 210, 284, "Multi-selection demo")
ListViewGadget(0, 10, 10, WindowWidth(0) - 20, WindowHeight(0) - 50, #PB_ListView_MultiSelect)
ButtonGadget(1, (WindowWidth(0) - 140) / 2, WindowHeight(0) - 31, 140, 20, "List selected items")
For i = 1 To 12
AddGadgetItem (0, -1, "Item " + Str(i) )
Next
SetGadgetState(0, 6)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
If EventGadget() = 1
If EventType() = #PB_EventType_LeftClick
ItemCount = 0
Debug "Selected items:"
For i = 0 To CountGadgetItems(0)
If GetGadgetItemState(0, i) & #PB_ListIcon_Selected
Debug GetGadgetItemText(0, i)
ItemCount + 1
EndIf
Next i
If ItemCount = 0
Debug "No items are currently selected!"
EndIf
Debug ""
EndIf
EndIf
EndSelect
ForEver
But you may hit performance problems in ListViews with lots of items. Therefore in Carbon based programs you may use the API function GetDataBrowserItems() to detect all selected items (this works similar for ListIconGadgets and TreeViewGadgets):
Code: Select all
EnableExplicit
#kDataBrowserItemIsSelected = 1
ImportC ""
DisposeHandle(Handle.L)
GetDataBrowserItems(DataBrowserRef.L, ItemID.L, Recurse.L, ItemState.L, ItemArrayHandle)
GetDataBrowserTableViewItemRow(DataBrowserRef.L, ItemID.L, *RowIndex)
GetHandleSize(Handle.L)
NewHandle(Size.L)
EndImport
Procedure ListSelectedItems(ListViewID.L)
Protected i.L
Protected ItemArrayHandle.L
Protected ItemID.L
Protected NumHandles.L
Protected Result.L
Protected RowIndex.L
ItemArrayHandle = NewHandle(0)
If ItemArrayHandle = 0
Debug "Error: No memory available anymore!"
Else
If GetDataBrowserItems(GadgetID(ListViewID), 0, #True, #kDataBrowserItemIsSelected, ItemArrayHandle) = 0
NumHandles = GetHandleSize(ItemArrayHandle) / SizeOf(ItemID)
If NumHandles = 0
Debug "No items are currently selected!"
Else
Debug "Selected items:"
For i = 0 To NumHandles - 1
ItemID = PeekL(PeekL(ItemArrayHandle) + i * SizeOf(ItemID))
If GetDataBrowserTableViewItemRow(GadgetID(ListViewID), ItemID, @RowIndex) = 0
Debug GetGadgetItemText(ListViewID, RowIndex)
EndIf
Next i
EndIf
EndIf
Debug ""
DisposeHandle(ItemArrayHandle)
EndIf
EndProcedure
Define i.L
OpenWindow(0, 270, 100, 210, 284, "Multi-selection demo")
ListViewGadget(0, 10, 10, WindowWidth(0) - 20, WindowHeight(0) - 50, #PB_ListView_MultiSelect)
ButtonGadget(1, (WindowWidth(0) - 140) / 2, WindowHeight(0) - 31, 140, 20, "List selected items")
For i = 1 To 12
AddGadgetItem (0, -1, "Item " + Str(i) )
Next
SetGadgetState(0, 6)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
If EventGadget() = 1
If EventType() = #PB_EventType_LeftClick
ListSelectedItems(0)
EndIf
EndIf
EndSelect
ForEver