ListView with groups ?

Just starting out? Need help? Post your questions and find answers here.
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 5015
Joined: Sun Apr 12, 2009 6:27 am

Re: ListView with groups ?

Post by RASHAD »

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
Egypt my love
User avatar
Danilo
Addict
Addict
Posts: 3036
Joined: Sat Apr 26, 2003 8:26 am
Location: Planet Earth

Re: ListView with groups ?

Post by Danilo »

va!n wrote:@all:
Problem filling a row with more columns as only one.
Works great as long as using a listview with only 1 column... I have listviews with different numbers of comlumns, so i have tried following like which dont work:

Code: Select all

 ListIcon_AddItem( liExample,""+ Column1$+Chr(10)+Chr(10)+Column2$, g)
;  AddGadgetItem(liExample ,-1,Column1$+Chr(10)+Column2$)       
See new ListIcon_AddItem() posted by Maitre_Kanter above ("and a little modification for SubItems support").

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)
;   itm.LVITEM1\mask = #LVIF_TEXT | #LVIF_GROUPID
;   itm\pszText = @text
;   itm\iGroupId = groupid
;   SendMessage_ (GadgetID(gadget), #LVM_INSERTITEM, 0, @itm)
; EndProcedure

Procedure ListIcon_AddItem(gadget.l, text.s, groupid.l) ; SubItems support by Maitre_Kanter
   Define   CountSubItem.i , Index
   Define   itm.LVITEM1\mask = #LVIF_TEXT | #LVIF_GROUPID | #LVIF_DI_SETITEM
   Define   Buff.s
   CountSubItem = CountString( text , Chr(10) )
   
   Buff = StringField( text , 1 , Chr(10) )
   
   itm\pszText = @Buff
  itm\iGroupId = groupid
  SendMessage_ (GadgetID(gadget), #LVM_INSERTITEM, 0, @itm)
 
  For Index = 1 To CountSubItem
     Define 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

;- Test


;XIncludeFile "ListIcon_Groups_XP.pb"


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)
  AddGadgetColumn(#ListIcon,1,"Column 2",100)
  AddGadgetColumn(#ListIcon,2,"Column 3",100)
  
  ListIcon_EnableGroupView(#ListIcon, 1)
  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)+Chr(10)+"Column 2"+Chr(10)+"Column 3", g)
    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
va!n
Addict
Addict
Posts: 1104
Joined: Wed Apr 20, 2005 12:48 pm

Re: ListView with groups ?

Post by va!n »

Thanks for your help guys! Works great now!
va!n aka Thorsten

Intel i7-980X Extreme Edition, 12 GB DDR3, Radeon 5870 2GB, Windows7 x64,
User avatar
mk-soft
Always Here
Always Here
Posts: 6433
Joined: Fri May 12, 2006 6:51 pm
Location: Germany

Re: ListView with groups ?

Post by mk-soft »

ListIcon_AddItem repaired because the old version had always inserted above

Added ImageList...

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_CreateImageList(cx, cy, flags=#ILC_COLOR32, cInitial=0, cGrow=1)
  
  ProcedureReturn ImageList_Create_(cx, cy, flags, cInitial, cGrow)
  
EndProcedure

Procedure ListIcon_AddImage(himl, hbmImage, hbmMask=0)
  
  ProcedureReturn ImageList_Add_(himl, hbmImage, hbmMask)
  
EndProcedure

Procedure ListIcon_SetImageList(gadget, himl, iImageList=#LVSIL_SMALL)
  
  ProcedureReturn SendMessage_(GadgetID(gadget), #LVM_SETIMAGELIST, iImageList, himl)
  
EndProcedure

Procedure ListIcon_SetImage(gadget, item, index)
  
  Protected itm.LVITEM1
  
  With itm
    \mask = #LVIF_IMAGE
    \iItem = item
    \iImage = index
  EndWith
  ProcedureReturn SendMessage_ (GadgetID(gadget), #LVM_SETITEM, 0, @itm)
  
EndProcedure

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)
;   itm.LVITEM1\mask = #LVIF_TEXT | #LVIF_GROUPID
;   itm\pszText = @text
;   itm\iGroupId = groupid
;   SendMessage_ (GadgetID(gadget), #LVM_INSERTITEM, 0, @itm)
; EndProcedure

Procedure ListIcon_AddItem(gadget.l, text.s, groupid.l, image=-1) ; SubItems support by Maitre_Kanter
  Define   CountSubItem.i , Index, Item
  Define   itm.LVITEM1\mask
  Define   Buff.s
  CountSubItem = CountString( text , Chr(10) )
   
  Buff = StringField( text , 1 , Chr(10) )
  
  If image >=0
    itm\mask = #LVIF_TEXT | #LVIF_GROUPID | #LVIF_IMAGE | #LVIF_DI_SETITEM
    itm\iImage = image
  Else
    itm.LVITEM1\mask = #LVIF_TEXT | #LVIF_GROUPID | #LVIF_DI_SETITEM
  EndIf 
  Item = SendMessage_(GadgetID(gadget), #LVM_GETITEMCOUNT, 0, 0)
  itm\pszText = @Buff
  itm\iGroupId = groupid
  itm\iItem = Item
  SendMessage_ (GadgetID(gadget), #LVM_INSERTITEM, 0, @itm)
 
  For Index = 1 To CountSubItem
     Define 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 = Item 
     subitm\iSubItem = Index
     SendMessage_ (GadgetID(gadget), #LVM_SETITEM, 0, @subitm)
  Next
EndProcedure

;- Test


;XIncludeFile "ListIcon_Groups_XP.pb"


Enumeration
  #Window
  #ListIcon
EndEnumeration


; --> 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(#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)
  AddGadgetColumn(#ListIcon,1,"Column 2",100)
  AddGadgetColumn(#ListIcon,2,"Column 3",100)
  
  imagelist = ListIcon_CreateImageList(16, 16)
    ListIcon_AddImage(imagelist, redImg)
    ListIcon_AddImage(imagelist, greenImg)
    ListIcon_AddImage(imagelist, blueImg)
  
  ListIcon_SetImageList(#ListIcon, imagelist)
  ListIcon_EnableGroupView(#ListIcon, 1)
  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)+Chr(10)+"Column 2"+Chr(10)+"Column 3", g, 0)
    Next
  Next
  
  ; Change Images
  
  For i=6 To 25
    Debug ListIcon_SetImage(#ListIcon, i-1, Random(2))
  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

GT :D
My Projects ThreadToGUI / OOP-BaseClass / EventDesigner V3
PB v3.30 / v5.75 - OS Mac Mini OSX 10.xx - VM Window Pro / Linux Ubuntu
Downloads on my Webspace / OneDrive
User avatar
Thunder93
Addict
Addict
Posts: 1788
Joined: Tue Mar 21, 2006 12:31 am
Location: Canada

Re: ListView with groups ?

Post by Thunder93 »

I thrown something together, I wanted little more control in a single ListIcon gadget.

Image

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
ʽʽSuccess is almost totally dependent upon drive and persistence. The extra energy required to make another effort or try another approach is the secret of winning.ʾʾ --Dennis Waitley
Post Reply