Page 1 of 1
ListIconGadget with checkboxes
Posted: Mon Feb 11, 2013 11:38 am
by SFSxOI
I don't normally use the ListIconGadget so i'm not familiar with its quirks. If you have a list icon gadget using multiple checkboxes like the below example:
Code: Select all
If OpenWindow(0, 0, 0, 640, 300, "ListIconGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TextGadget (7, 10, 105, 300, 20, "ListIcon with Checkbox", #PB_Text_Center)
ListIconGadget(1, 10, 120, 340, 80, "Column 1", 100, #PB_ListIcon_CheckBoxes) ; ListIcon with checkboxs
For b = 2 To 4
AddGadgetColumn(1, b, "Column " + Str(b), 65)
Next
For b = 0 To 2
AddGadgetItem(1, b, "Item 1"+Chr(10)+"Item 2"+Chr(10)+"Item 3"+Chr(10)+"Item 4")
Next
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
How do you ensure that only one item can be/remain checked at a time and once an item is checked any other item that was previously checked is automatically unchecked and the currently checked item remains checked until another item is checked?
Re: ListIconGadget with checkboxes
Posted: Mon Feb 11, 2013 4:06 pm
by RASHAD
@SFSxOI Hi
I think I posted something similar before
Code: Select all
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
Repeat
Select WaitWindowEvent(1)
Case #PB_Event_CloseWindow
Quit = 1
Case #PB_Event_Gadget
Select EventGadget()
Case 1
Select EventType()
Case #PB_EventType_LeftClick,#PB_EventType_RightClick
If Old > 0 Or GetGadgetState(1) > 0
SetGadgetItemState(1,GetGadgetState(1),2)
EndIf
For x = 0 To CountGadgetItems(1)
If GetGadgetItemState(1, x) = 2
If x <> Old
SetGadgetItemState(1,Old,0)
Break
EndIf
EndIf
Next
For x = 0 To CountGadgetItems(1)
If GetGadgetItemState(1, x) = 2
SetGadgetState(1,x)
Old = x
Break
EndIf
Next
EndSelect
EndSelect
EndSelect
Until Quit = 1
Re: ListIconGadget with checkboxes
Posted: Mon Feb 11, 2013 4:33 pm
by srod
Not sure Rashad's does what you are after?
Here's one :
Code: Select all
If OpenWindow(0, 0, 0, 640, 300, "ListIconGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TextGadget (7, 10, 105, 300, 20, "ListIcon with Checkbox", #PB_Text_Center)
ListIconGadget(1, 10, 120, 340, 80, "Column 1", 100, #PB_ListIcon_CheckBoxes) ; ListIcon with checkboxs
For b = 2 To 4
AddGadgetColumn(1, b, "Column " + Str(b), 65)
Next
For b = 0 To 2
AddGadgetItem(1, b, "Item 1"+Chr(10)+"Item 2"+Chr(10)+"Item 3"+Chr(10)+"Item 4")
Next
lastChecked = -1
Repeat
eventID = WaitWindowEvent()
Select eventID
Case #PB_Event_Gadget
If EventType() = #PB_EventType_Change
numItems = CountGadgetItems(1)
countChecks = 0
For i = 0 To numItems-1
state = GetGadgetItemState(1, i)
If state & #PB_ListIcon_Checked
countChecks+1
If i <> lastChecked
If lastChecked <> -1
SetGadgetItemState(1, lastChecked, GetGadgetItemState(1, lastChecked) ! #PB_ListIcon_Checked)
EndIf
lastChecked = i
Break
EndIf
EndIf
Next
If countChecks = 0
lastChecked = -1
EndIf
EndIf
EndSelect
Until eventID = #PB_Event_CloseWindow
EndIf
Re: ListIconGadget with checkboxes
Posted: Mon Feb 11, 2013 5:07 pm
by RASHAD
Well srod
I think you hit the case which I did not consider
Previous post modified
And next is one extra snippet
Code: Select all
Global Row
Procedure WndProc(hwnd, uMsg, wParam, lParam)
Select uMsg
Case #WM_NOTIFY
*uMsg.NMHDR = lParam
If *uMsg\hwndFrom = GadgetID(1) And *uMsg\code = #NM_CLICK
*Li.NMITEMACTIVATE = lParam
Row = *Li\iItem
EndIf
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
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
SetWindowCallback(@WndProc())
Repeat
Select WaitWindowEvent(1)
Case #PB_Event_CloseWindow
Quit = 1
Case #PB_Event_Gadget
Select EventGadget()
Case 1
Select EventType()
Case #PB_EventType_LeftClick
If Row <> Old
SetGadgetItemState(1,Old,0)
SetGadgetItemState(1,Row,3)
Old = Row
EndIf
EndSelect
EndSelect
EndSelect
Until Quit = 1
Re: ListIconGadget with checkboxes
Posted: Mon Feb 11, 2013 5:23 pm
by SFSxOI
RASHAD and srod;
Thank you both for your replies.
Tried both of the fine examples offered. srod, I ended up using yours as it fit perfectly into what i'm working on. RASHAD, gonna keep yours around as I think it may work out for another project i'm planning.
Re: ListIconGadget with checkboxes
Posted: Wed Feb 20, 2013 10:41 am
by !ns0
srod, first of all thank you for your solution
But what to do if checkbox was checked from the beginning?





some time later




Code: Select all
If OpenWindow(0, 0, 0, 640, 300, "ListIconGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TextGadget (7, 10, 105, 300, 20, "ListIcon with Checkbox", #PB_Text_Center)
ListIconGadget(1, 10, 120, 340, 80, "Column 1", 100, #PB_ListIcon_CheckBoxes) ; ListIcon with checkboxs
For b = 2 To 4
AddGadgetColumn(1, b, "Column " + Str(b), 65)
Next
For b = 0 To 2
AddGadgetItem(1, b, "Item 1"+Chr(10)+"Item 2"+Chr(10)+"Item 3"+Chr(10)+"Item 4")
Next
SetGadgetItemState(1,0,#PB_ListIcon_Checked) ;Check Item
;Get Checked Item
lsItems = CountGadgetItems(1)
For lastChecked = lsItems - 1 To 0 Step -1
ChkResult = GetGadgetItemState(1, lastChecked)
If ChkResult & #PB_ListIcon_Checked
Break
EndIf
Next
Repeat
eventID = WaitWindowEvent()
Select eventID
Case #PB_Event_Gadget
If EventType() = #PB_EventType_Change
numItems = CountGadgetItems(1)
countChecks = 0
For i = 0 To numItems-1
state = GetGadgetItemState(1, i)
If state & #PB_ListIcon_Checked
countChecks+1
If i <> lastChecked
If lastChecked <> -1
SetGadgetItemState(1, lastChecked, GetGadgetItemState(1, lastChecked) ! #PB_ListIcon_Checked)
EndIf
lastChecked = i
Break
EndIf
EndIf
Next
If countChecks = 0
lastChecked = -1
EndIf
EndIf
EndSelect
Until eventID = #PB_Event_CloseWindow
EndIf