ListView with groups ?
Posted: Sun Mar 31, 2013 1:28 am
I found an old example to use ListViews with groups at following url:
http://www.purebasic.fr/english/viewtop ... VIEW+GROUP
I have tried to get it work with PB 5.11 but no groups will be shown. Any idea how to fix? Thanks
Here my version of the source
http://www.purebasic.fr/english/viewtop ... VIEW+GROUP
I have tried to get it work with PB 5.11 but no groups will be shown. Any idea how to fix? Thanks
Here my version of the source
Code: Select all
; *****************************************************************
; ************ Requires WinXP with Skins enabled ******************
; *****************************************************************
#LVM_FIRST = $1000
#LVM_SETGROUPMETRICS = #LVM_FIRST + 155
#LVM_ENABLEGROUPVIEW = #LVM_FIRST + 157
#LVM_INSERTGROUP = #LVM_FIRST + 145
#LVGF_HEADER = 1
#LVGF_ALIGN = 8
#LVGF_STATE = 4
#LVGF_GROUPID = $10
#LVGMF_BORDERCOLOR = 2
#LVGMF_BORDERSIZE = 1
#LVGMF_NONE = 0
#LVGMF_TEXTCOLOR = 4
#LVGA_HEADER_CENTER = 2
#LVGA_HEADER_LEFT = 1
#LVGA_HEADER_RIGHT = 4
#LVIF_GROUPID = $100
#LVIF_IMAGE = 2
#LVIF_TEXT = 1
; --> Structure used tp define Group
Structure myLVGROUP
cbSize.l
mask.l
pszHeader.l
cchHeader.l
pszFooter.l
cchFooter.l
iGroupId.l
stateMask.l
state.l
uAlign.l
EndStructure
lvGroup.myLVGROUP
; --> Structure used for placing item into it's Group
Structure myLVITEM
mask.l
iItem.l
iSubItem.l
state.l
stateMask.l
pszText.l
cchTextMax.l
iImage.l
lParam.l
iIndent.l
iGroupId.l
cColumns.l
puColumns.l
EndStructure
lvitemgroup.myLVITEM
; --> Structure used for changing Group colors
Structure myLVGROUPMETRICS
cbSize.l
mask.l
left.l
top.l
right.l
bottom.l
crLeft.l
crTop.l
crRight.l
crBottom.l
crHeader.l
crFooter.l
EndStructure
lvGM.myLVGROUPMETRICS
; --> Create 3 Group images
redImg = CreateImage(0, 16, 16)
StartDrawing(ImageOutput(0))
Box(0, 0, 16, 16, RGB(255, 0, 0))
StopDrawing()
greenImg = CreateImage(1, 16, 16)
StartDrawing(ImageOutput(1))
Box(0, 0, 16, 16, RGB(0, 255, 0))
StopDrawing()
blueImg = CreateImage(2, 16, 16)
StartDrawing(ImageOutput(2))
Box(0, 0, 16, 16, RGB(0, 0, 255))
StopDrawing()
If OpenWindow(0, 0, 0, 500, 300, "",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(0, 10, 10, 480, 280, "ww", 200)
; ChangeListIconGadgetDisplay(0, 1)
SetGadgetAttribute(0, #PB_ListIcon_DisplayMode, 2 )
For i = 0 To 3
item$ = "Item " + Str(i)
AddGadgetItem(0 , i, item$, redImg)
Next i
For i = 4 To 7
item$ = "Item " + Str(i)
AddGadgetItem(0 , i, item$, greenImg)
Next i
For i = 8 To 11
item$ = "Item " + Str(i)
AddGadgetItem(0 , i, item$, blueImg)
Next i
; --> Enable Group view
SendMessage_(GadgetID(0), #LVM_ENABLEGROUPVIEW , #True, 0)
lvGroup\cbSize = SizeOf(myLVGROUP)
lvGroup\mask = #LVGF_HEADER | #LVGF_GROUPID | #LVGF_ALIGN
; --> Create Group 0
group$ = "Red Group"
sLen = MultiByteToWideChar_(#CP_ACP, 0, group$, -1, 0, 0)
GroupName$ = Space(sLen*2)
MultiByteToWideChar_(#CP_ACP, 0, group$, -1, @GroupName$, sLen)
lvGroup\pszHeader = @GroupName$
lvGroup\cchHeader = sLen*2
lvGroup\iGroupId = 0
lvGroup\uAlign = #LVGA_HEADER_LEFT
SendMessage_(GadgetID(0), #LVM_INSERTGROUP, 0, lvGroup)
; --> Create Group 1
group$ = "Green Group"
sLen = MultiByteToWideChar_(#CP_ACP, 0, group$, -1, 0, 0)
GroupName$ = Space(sLen*2)
MultiByteToWideChar_(#CP_ACP, 0, group$, -1, @GroupName$, sLen)
lvGroup\pszHeader = @GroupName$
lvGroup\cchHeader = sLen*2
lvGroup\iGroupId = 1
lvGroup\uAlign = #LVGA_HEADER_LEFT
SendMessage_(GadgetID(0), #LVM_INSERTGROUP, 1, lvGroup)
; --> Create Group 2
group$ = "Blue Group"
sLen = MultiByteToWideChar_(#CP_ACP, 0, group$, -1, 0, 0)
GroupName$ = Space(sLen*2)
MultiByteToWideChar_(#CP_ACP, 0, group$, -1, @GroupName$, sLen)
lvGroup\pszHeader = @GroupName$
lvGroup\cchHeader = sLen*2
lvGroup\iGroupId = 2
lvGroup\uAlign = #LVGA_HEADER_LEFT
SendMessage_(GadgetID(0), #LVM_INSERTGROUP, 2, lvGroup)
; --> Change Group header text color
; --> AFAIK, Group Metrics applies to all Groups
lvGM\cbSize = SizeOf(myLVGROUPMETRICS)
lvGM\mask = #LVGMF_TEXTCOLOR
lvGM\crHeader = RGB(100, 50, 100)
SendMessage_(GadgetID(0), #LVM_SETGROUPMETRICS, 0, lvGM)
; --> Place items 0 - 3 into Group 0
For r = 0 To 3
lvitemgroup\mask = #LVIF_GROUPID
lvitemgroup\iItem = r
lvitemgroup\iGroupId = 0
SendMessage_(GadgetID(0), #LVM_SETITEM, r, lvitemgroup)
Next r
; --> Place items 4 - 7 into Group 1
For g = 4 To 7
lvitemgroup\mask = #LVIF_GROUPID
lvitemgroup\iItem = g
lvitemgroup\iGroupId = 1
SendMessage_(GadgetID(0), #LVM_SETITEM, g, lvitemgroup)
Next g
; --> Place items 8 - 11 into Group 2
For b = 8 To 11
lvitemgroup\mask = #LVIF_GROUPID
lvitemgroup\iItem = b
lvitemgroup\iGroupId = 2
SendMessage_(GadgetID(0), #LVM_SETITEM, b, lvitemgroup)
Next b
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
