Code: Select all
; --> Structure used to define Group
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 ;: Global lvg.LVGROUP1
; --> Structure used to define Vista+ Group
Structure LVGROUP1_v6 Extends LVGROUP1 Align #PB_Structure_AlignC
*pszSubtitle
cchSubtitle.l
*pszTask
cchTask.l
*pszDescriptionTop
cchDescriptionTop.l
*pszDescriptionBottom
cchDescriptionBottom.l
iTitleImage.l
iExtendedImage.l
iFirstItem.l
cItems.l
*pszSubsetTitle
cchSubsetTitle.l
EndStructure ;: Global lvg.LVGROUP1_v6
; --> Structure used for placing item into it's Group
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
; ; --> Structure used for changing Group colors
; Structure LVGROUPMETRICS Align #PB_Structure_AlignC
; 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 ;: Global lvGM.LVGROUPMETRICS
#LVGS_NORMAL = $0
#LVGF_SUBTITLE = $100
; Structure INITCOMMONCONTROLSEX
; dwSize.l
; dwICC.l
; EndStructure
; InitICC.INITCOMMONCONTROLSEX
; InitICC\dwSize = SizeOf(INITCOMMONCONTROLSEX)
; InitICC\dwICC = #ICC_STANDARD_CLASSES ; #ICC_LISTVIEW_CLASSES ;#ICC_DATE_CLASSES
;
; InitCommonControlsEx_(@InitICC)
;
; Procedure ListIcon_SetGTextColor(gadget.l, colour.l)
; ; --> Change Group header text color
; ; --> AFAIK, Group Metrics applies to all Groups
; lvGM.LVGROUPMETRICS
; lvGM\cbSize = SizeOf(LVGROUPMETRICS)
; lvGM\mask = #LVGMF_TEXTCOLOR
; lvGM\crHeader = colour
;
; SendMessage_(GadgetID(gadget), #LVM_SETGROUPMETRICS, 0, @lvGM)
; EndProcedure
Procedure ListIcon_AddSubTitle(gadget.l, text.s, groupid.l) ;;;; Vista+ Function
lvg.LVGROUP1_v6
lvg\cbSize = SizeOf(LVGROUP1_v6)
lvg\mask + #LVGF_SUBTITLE
sLen = Len(text)
CompilerIf #PB_Compiler_Unicode = 0
Subtitle_uc.s = Space(sLen*2+2)
PokeS(@Subtitle_uc,text,sLen,#PB_Unicode)
lvg\pszSubtitle = @Subtitle_uc
CompilerElse
lvg\pszSubtitle = @text
CompilerEndIf
SendMessage_ (GadgetID(gadget), #LVM_SETGROUPINFO, groupid, @lvg)
EndProcedure
Procedure ListIcon_DelSubTitle(gadget.l, groupid.l) ;;;; Vista+ Function
lvg.LVGROUP1_v6
lvg\cbSize = SizeOf(LVGROUP1_v6)
lvg\mask -#LVGF_SUBTITLE
SendMessage_ (GadgetID(gadget), #LVM_SETGROUPINFO, groupid, @lvg)
EndProcedure
Procedure ListIcon_AddGroup(gadget.l, text.s, groupid.l = 0, state.l = 0, mask.l = 0, Image=-1)
Static lGroupID.l = 0
If groupid : lGroupID = groupid : Else : lGroupID+1 : EndIf
lvg.LVGROUP1
lvg\cbSize = SizeOf(LVGROUP1)
lvg\mask = #LVGF_GROUPID | #LVGF_ALIGN | #LVGF_HEADER
lvg\iGroupId = lGroupID
lvg\uAlign = #LVGA_HEADER_LEFT
If state
lvg\state = state
EndIf
If mask
lvg\mask + mask
EndIf
sLen = Len(text)
CompilerIf #PB_Compiler_Unicode = 0
text_uc.s = Space(sLen*2+2)
PokeS(@text_uc,text,sLen,#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=1)
SendMessage_(GadgetID(gadget), #LVM_ENABLEGROUPVIEW, state, 0)
EndProcedure
Procedure ListIcon_AddItem(gadget.l, text.s, groupid.l = 0, pos.l = 0, image=-1)
Static lGroupID.l = 0, lPos.l = 0
Protected CountSubItem.l , Index, Buff.s
If groupid : lGroupID = groupid : EndIf
If pos : lPos = pos : EndIf
CountSubItem = CountString( text , Chr(10))
text2.s = StringField(text, 1, Chr(10))
itm.LVITEM1\mask = #LVIF_TEXT
itm\pszText = @text2
If lGroupID
itm\mask + #LVIF_GROUPID
itm\iGroupId = lGroupID
Else
itm\iItem = lPos
EndIf
SendMessage_ (GadgetID(gadget), #LVM_INSERTITEM, 0, @itm)
For Index = 1 To CountSubItem
subitm.LVITEM1\mask = #LVIF_TEXT | #LVIF_GROUPID | #LVIF_DI_SETITEM
Buff = StringField(text, Index + 1, Chr(10))
subitm\mask = #LVIF_TEXT
subitm\pszText = @Buff
subitm\iGroupId = groupid
subitm\iItem = 0
subitm\iSubItem = Index
SendMessage_ (GadgetID(gadget), #LVM_SETITEM, 0, @subitm)
Next
EndProcedure
Enumeration
#Window
#ListIcon
EndEnumeration
Procedure ListIcon_AddItem_Ex(Gadget.b, Row.b, Column.b, Text.s, ImageIndex.b)
var.lvITEM1
Var\mask = #LVIF_IMAGE | #LVIF_TEXT
Var\iItem = Row ; row number for change
Var\iSubItem = Column ; item
Var\pszText = @Text ; text to change to
Var\iImage = ImageIndex; index of icon in the list
If Column = 0
SendMessage_(GadgetID(Gadget), #LVM_INSERTITEM, 0, @Var)
Else
SendMessage_(GadgetID(Gadget), #LVM_SETITEM, 0, @Var)
EndIf
EndProcedure
If OpenWindow(#Window, 0, 0, 800, 700, "Single ListIcon Gadget Controls", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
ListIconGadget(#ListIcon, 5, 5, 290, 390, "Group Name(s)", 260)
SetGadgetColor(#ListIcon, #PB_Gadget_BackColor, $92D7EB)
For k=1 To 3
AddGadgetColumn(#ListIcon, k, "Column "+Str(k+1), 170)
Next
ListIcon_EnableGroupView(#ListIcon)
ListIcon_AddGroup(#ListIcon, "Pre-Alpha")
ListIcon_AddItem(#ListIcon, "Item 1 belongs to Pre-Alpha", 1)
ListIcon_AddItem(#ListIcon, "Item 2 belongs to Pre-Alpha")
ListIcon_AddItem(#ListIcon, "Item 3 belongs to Pre-Alpha")
ListIcon_AddGroup(#ListIcon, "Alpha")
ListIcon_AddSubTitle(#ListIcon, " Alpha SubTitle: blah, blah, blah", 2)
ListIcon_AddItem(#ListIcon, "Item 1 belongs to Alpha", 2)
ListIcon_AddItem(#ListIcon, "Item 2 belongs to Alpha")
ListIcon_AddItem(#ListIcon, "Item 3 belongs to Alpha")
ListIcon_AddGroup(#ListIcon, "Beta", 0, #LVGS_COLLAPSIBLE, #LVGF_STATE)
ListIcon_AddItem(#ListIcon, "Item 1 belongs to Beta ", 3)
ListIcon_AddItem(#ListIcon, "Item 2 belongs to Beta"+Chr(10)+"Column 2"+Chr(10)+"Column 3"+Chr(10)+"Column 4")
ListIcon_AddItem(#ListIcon, "Item 3 belongs to Beta")
ListIcon_AddGroup(#ListIcon, "Final", 0, #LVGS_COLLAPSIBLE|#LVGS_COLLAPSED, #LVGF_STATE)
ListIcon_AddSubTitle(#ListIcon, "SubTitle: blah, blah, blah", 4)
ListIcon_AddItem(#ListIcon, "Item 1 belongs to Final", 4)
ListIcon_AddItem(#ListIcon, "Item 2 belongs to Final")
ListIcon_AddItem(#ListIcon, "Item 3 belongs to Final"+Chr(10)+"Column 2"+Chr(10)+"Column 3"+Chr(10)+"Column 4")
ListIcon_AddItem(#ListIcon, "ItemX be Placed in First-Group", 1)
ListIcon_AddItem(#ListIcon, "ItemY be Placed in Third-Group", 3)
ListIcon_AddGroup(#ListIcon, "Group Oops! Beta Again")
ListIcon_AddItem(#ListIcon, "Item 1 belongs to Beta Again", 5)
ListIcon_AddItem(#ListIcon, "Item 2 belongs to Beta Again")
ListIcon_AddItem(#ListIcon, "Item 3 belongs to Beta Again")
; ListIcon_DelSubTitle(#ListIcon, 2)
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