In Windows you can mark a checkbox in the list without the selected item changing.
On macOS and Linux, the selection item is changed. This is OS specific.
Whether a checkbox is marked in a list, you have to check all entries.
Update
Not LeftClick evaluated, but Change, then works via keyboard too
Code: Select all
;-TOP
EnableExplicit
#ProgramTitle = "Main Window"
#ProgramVersion = "v1.01.2"
Enumeration Windows
#Main
EndEnumeration
Enumeration MenuBar
#MainMenu
EndEnumeration
Enumeration MenuItems
#MainMenuAbout
#MainMenuExit
EndEnumeration
Enumeration Gadgets
#MainList
#MainButton
EndEnumeration
Enumeration StatusBar
#MainStatusBar
EndEnumeration
Procedure UpdateWindow()
Protected dx, dy
dx = WindowWidth(#Main)
dy = WindowHeight(#Main) - StatusBarHeight(#MainStatusBar) - MenuHeight()
; Resize gadgets
ResizeGadget(#MainList, 0, 0, dx, dy - 40)
ResizeGadget(#MainButton, 5, dy - 35, 120, 25)
EndProcedure
Procedure Main()
Protected dx, dy
Protected StateItem, LastStateItem
Protected CheckedItem, i
#MainStyle = #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget
If OpenWindow(#Main, #PB_Ignore, #PB_Ignore, 800, 600, #ProgramTitle , #MainStyle)
; Menu
CreateMenu(#MainMenu, WindowID(#Main))
MenuTitle("&File")
CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
MenuItem(#PB_Menu_About, "")
CompilerElse
MenuItem(#MainMenuAbout, "About")
CompilerEndIf
; Menu File Items
CompilerIf Not #PB_Compiler_OS = #PB_OS_MacOS
MenuBar()
MenuItem(#MainMenuExit, "E&xit")
CompilerEndIf
; StatusBar
CreateStatusBar(#MainStatusBar, WindowID(#Main))
AddStatusBarField(#PB_Ignore)
; Gadgets
dx = WindowWidth(#Main)
dy = WindowHeight(#Main) - StatusBarHeight(#MainStatusBar) - MenuHeight()
ListIconGadget(#MainList, 0, 0, dx, dy - 40, "Column 0", 400, #PB_ListIcon_CheckBoxes | #PB_ListIcon_FullRowSelect | #PB_ListIcon_MultiSelect)
ButtonGadget(#MainButton, 5, dy - 35, 120, 25, "Ok")
For i = 0 To 9
AddGadgetItem(#MainList, -1 , "Item " + i)
Next
; Bind Events
BindEvent(#PB_Event_SizeWindow, @UpdateWindow(), #Main)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Select EventWindow()
Case #Main
Break
EndSelect
Case #PB_Event_Menu
Select EventMenu()
CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
Case #PB_Menu_About
PostEvent(#PB_Event_Menu, #Main, #MainMenuAbout)
Case #PB_Menu_Preferences
Case #PB_Menu_Quit
PostEvent(#PB_Event_CloseWindow, #Main, #Null)
CompilerEndIf
Case #MainMenuExit
PostEvent(#PB_Event_CloseWindow, #Main, #Null)
Case #MainMenuAbout
MessageRequester("About", #ProgramTitle + #LF$ + #ProgramVersion, #PB_MessageRequester_Info)
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case #MainList
Select EventType()
Case #PB_EventType_Change
For i = 0 To CountGadgetItems(#MainList) - 1
StateItem = GetGadgetItemState(#MainList, i)
LastStateItem = GetGadgetItemData(#MainList, i)
If StateItem <> LastStateItem
If (StateItem & #PB_ListIcon_Checked) <> (LastStateItem & #PB_ListIcon_Checked)
Debug "Change Checked Item " + i + " State " + Bool(StateItem & #PB_ListIcon_Checked)
EndIf
If (StateItem & #PB_ListIcon_Selected) <> (LastStateItem & #PB_ListIcon_Selected)
Debug "Change Selected Item " + i + " State " + Bool(StateItem & #PB_ListIcon_Selected)
EndIf
SetGadgetItemData(#MainList, i, StateItem)
EndIf
Next
EndSelect
Case #MainButton
For i = 0 To CountGadgetItems(#MainList) - 1
CheckedItem = GetGadgetItemState(#MainList, i) & #PB_ListIcon_Checked
Debug "Checked Item " + i + " State " + Bool(CheckedItem = #PB_ListIcon_Checked)
Next
EndSelect
EndSelect
ForEver
EndIf
EndProcedure : Main()