How do I detect if a checkbox in a listicongadget has been changed without scanning the whole listicongadget?

Thanks!


Code: Select all
Define b, event, eg, item
If OpenWindow(0, 0, 0, 700, 300, "ListIconGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TextGadget (7, 10, 105, 330, 20, "ListIcon with Checkbox", #PB_Text_Center)
ListIconGadget(1, 10, 120, 330, 70, "Column 1", 100, #PB_ListIcon_CheckBoxes) ; ListIcon with checkbox
For b = 2 To 4 ; add 3 more columns to listicon
AddGadgetColumn(1, b, "Column " + Str(b), 65)
Next
For b = 0 To 2 ; add 4 items to each line of the listicon
AddGadgetItem(1, b, "Item 1"+Chr(10)+"Item 2"+Chr(10)+"Item 3"+Chr(10)+"Item 4")
Next
Repeat
event = WaitWindowEvent()
If event = #PB_Event_Gadget
eg = EventGadget()
If eg = 1 And EventType() = #PB_EventType_Change
item = GetGadgetState(1)
If item <> -1
If GetGadgetItemState(1, item) & #PB_ListIcon_Checked
Debug "item #" + item + " is currently selected and checked"
Else
Debug "item #" + item + " is currently selected and unchecked"
EndIf
EndIf
EndIf
EndIf
Until event = #PB_Event_CloseWindow
EndIf
By Rashad here (but you still need to loop all items) -> viewtopic.php?p=405811#p405811marcoagpinto wrote:What I really meant is to just click on the checkboxes without selecting an item.

Code: Select all
Global Dim checkstate(100)
If OpenWindow(0, 0, 0, 640, 400, "ListIconGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(1, 10, 10, 620,380, "Column 0", 100, #PB_ListIcon_GridLines|#PB_ListIcon_CheckBoxes|#PB_ListIcon_FullRowSelect)
For c = 1 To 6
AddGadgetColumn(1, c, "Column " + Str(c), 100)
Next
For r = 0 To 100
AddGadgetItem(1, r, " Item "+Str(r)+Chr(10)+"Item "+Str(r)+Chr(10)+"Item 3"+Chr(10)+"Item 4")
Next
EndIf
gadgetx = GadgetX(1,#PB_Gadget_ScreenCoordinate)
gadgety = GadgetY(1,#PB_Gadget_ScreenCoordinate)
AddWindowTimer(0,125,10)
Repeat
Select WaitWindowEvent(1)
Case #PB_Event_CloseWindow
Quit = 1
Case #PB_Event_SizeWindow ,#PB_Event_MoveWindow
gadgetx = GadgetX(1,#PB_Gadget_ScreenCoordinate)
gadgety = GadgetY(1,#PB_Gadget_ScreenCoordinate)
Case #PB_Event_Timer
If flag = 1
checkx = DesktopMouseX()
checky = DesktopMouseY()
If checkx > gadgetx And checkx < (gadgetx+18)
item = Int((checky - gadgety - 18)/18)
itemstste = GetGadgetItemState(1,item)
checkstate(item) = itemstste & #PB_ListIcon_Checked
If checkstate(item) = 2
count + 1
Else
count - 1
EndIf
EndIf
If count <> oldcount
Debug "Item : "+Str(item)+" Checkbox state changed "
EndIf
oldcount = count
flag = 0
EndIf
Case #PB_Event_Gadget
Select EventGadget()
Case 1
Select EventType()
Case #PB_EventType_LeftClick
flag = 1
EndSelect
EndSelect
EndSelect
Until Quit = 1
