Re: ListView with groups ?
Posted: Thu Apr 04, 2013 6:04 am
Hi
Code: Select all
; www.PureArea.net, sent by mail to me
; Author: Stefan 'wayne-c' Christen (updated for PB 4.00 by Andre)
; Date: 28. June 2004
; OS: Windows
; Demo: No
; Purpose: How to use item groups in the ListIcon gadget
; Tested: on Windows XP only (don't think it runs elsewhere)
Structure LVGROUP1 Align #PB_Structure_AlignC
cbSize.l
mask.l
*pszHeader
cchHeader.l
*pszFooter
cchFooter.l
iGroupId.l
stateMask.l
state.l
uAlign.l
EndStructure
Structure LVITEM1 Align #PB_Structure_AlignC
mask.l
iItem.l
iSubItem.l
state.l
stateMask.l
*pszText
cchTextMax.l
iImage.l
lParam.i
iIndent.l
iGroupId.l
cColumns.l
puColunns.l
EndStructure
#LVM_ENABLEGROUPVIEW = #LVM_FIRST + 157
#LVM_MOVEITEMTOGROUP = #LVM_FIRST + 154
#LVM_INSERTGROUP = #LVM_FIRST + 145
#LVIF_GROUPID = $0100
#LVGA_HEADER_LEFT = $1
#LVGA_HEADER_CENTER = $2
#LVGA_HEADER_RIGHT = $4
#LVGS_NORMAL = $0
#LVGS_COLLAPSED = $1
#LVGS_HIDDEN = $2
#LVGF_HEADER = $1
#LVGF_FOOTER = $2
#LVGF_STATE = $4
#LVGF_ALIGN = $8
#LVGF_GROUPID = $10
Procedure ListIcon_AddGroup(gadget.l, text.s, groupid.l)
lvg.LVGROUP1\cbSize = SizeOf(LVGROUP1)
lvg\mask = #LVGF_GROUPID | #LVGF_ALIGN | #LVGF_HEADER
lvg\iGroupId = groupid
lvg\uAlign = #LVGA_HEADER_LEFT
CompilerIf #PB_Compiler_Unicode = 0
text_uc.s = Space(260*2+2)
PokeS(@text_uc,text,260,#PB_Unicode)
lvg\pszHeader = @text_uc
CompilerElse
lvg\pszHeader = @text
CompilerEndIf
SendMessage_ (GadgetID(gadget), #LVM_INSERTGROUP, -1, @lvg)
EndProcedure
Procedure ListIcon_EnableGroupView(gadget.l, state.l)
SendMessage_ (GadgetID(gadget), #LVM_ENABLEGROUPVIEW, state, 0)
EndProcedure
Procedure ListIcon_AddItem(gadget.l, text.s, groupid.l, Text1$, Text2$, Text3$)
itm.LVITEM1\mask = #LVIF_TEXT | #LVIF_GROUPID
itm\pszText = @text
itm\iGroupId = groupid
SendMessage_ (GadgetID(gadget), #LVM_INSERTITEM, 0, @itm)
itm.LVITEM1\mask = #LVIF_TEXT
itm\pszText = @Text1$
itm\iSubItem = 1
SendMessage_ (GadgetID(gadget), #LVM_SETITEM, 0, @itm)
itm\pszText = @Text2$
itm\iSubItem = 2
SendMessage_ (GadgetID(gadget), #LVM_SETITEM, 0, @itm)
itm\pszText = @Text3$
itm\iSubItem = 3
SendMessage_ (GadgetID(gadget), #LVM_SETITEM, 0, @itm)
EndProcedure
Enumeration
#Window
#ListIcon
EndEnumeration
If OpenWindow(#Window, 0, 0, 300, 400, "ListIcon_Groups_XP", #PB_Window_SystemMenu|#PB_Window_SizeGadget| #PB_Window_ScreenCentered)
ListIconGadget(#ListIcon, 5, 5, 290, 390, "Game", 200,#PB_ListIcon_FullRowSelect)
ListIcon_EnableGroupView(#ListIcon, 1)
For c = 1 To 3
AddGadgetColumn(#ListIcon, c, "Column "+Str(c), 120)
Next
For g=1 To 5
ListIcon_AddGroup(#ListIcon, "This is group "+Str(g), g)
For i=1 To 5
ListIcon_AddItem(#ListIcon, "Item "+Str((g-1)*5+i)+" belongs to group "+Str(g), g,"Group "+Str(g)+" Test 1","Group "+Str(g)+" Test 2","Group "+Str(g)+" Test 3")
Next
Next
Quit.l = 0
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Quit = 1
Case #PB_Event_SizeWindow
ResizeGadget(#ListIcon, 5, 5, WindowWidth(#Window)-10, WindowHeight(#Window)-10)
EndSelect
Until Quit > 0
EndIf
End