ListIconGadget, detect Column Header press??

Just starting out? Need help? Post your questions and find answers here.
fcb
User
User
Posts: 42
Joined: Fri Aug 31, 2012 10:12 pm

ListIconGadget, detect Column Header press??

Post by fcb »

Is there a method of detecting a mouse click/press for a column header in ListIconGadget?
User avatar
blueb
Addict
Addict
Posts: 1116
Joined: Sat Apr 26, 2003 2:15 pm
Location: Cuernavaca, Mexico

Re: ListIconGadget, detect Column Header press??

Post by blueb »

Here's some code that might help...

Code: Select all

; =================================================================
;
;        Author:       Shardik  
;          Date:       January 27th, 2015
;       Explain:       Get ListIconGadget column
;           
; Typical Usage:
;
;     File Name:      Get Column Info.pb    
; =================================================================
Enumeration
  #MainForm
EndEnumeration

Enumeration Gadget
  #MyListIcon
EndEnumeration


Procedure OnListIconCLick(WindowID, message, wParam, lParam)
  Result = #PB_ProcessPureBasicEvents 
  
  Select message
    Case #WM_NOTIFY
      *nmITEM.NMITEMACTIVATE = lParam
      Select *nmITEM\hdr\code
          
        Case #LVN_COLUMNCLICK ;/ HeaderClick
          If *nmITEM\hdr\hwndFrom = GadgetID(#MyListIcon) ;/ ListIconGadget
            Debug " header col = " + Str(*nmITEM\iSubItem)
            Result = #True
          EndIf
          
        Case #NM_CLICK ;/ CellClick (Your question)
          If *nmITEM\hdr\hwndFrom = GadgetID(#MyListIcon) ;/ ListIconGadget
            Debug "row = " + Str(*nmITEM\iItem) + ", col = "+Str(*nmITEM\iSubItem) + ", content = "+ GetGadgetItemText(#MyListIcon, *nmITEM\iItem,*nmITEM\iSubItem)
            Result = #True
          EndIf
          
        Case #NM_DBLCLK 
          Debug "left doubleclick"
          ;Your code
          
        Case #NM_RCLICK
          Debug "right click"
          ;Your code
          
        Case #NM_RDBLCLK
          Debug "right doubleclick"
          ;Your code
          
      EndSelect
  EndSelect
  ProcedureReturn Result 
EndProcedure

Procedure Start()
  Protected n, Buffer.s
  
  OpenWindow(#MainForm, 0, 0, 500, 500, "Listicon gadget", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  SetWindowCallback(@OnListIconCLick(), #MainForm)
  
  ListIconGadget(#MyListIcon, 10, 10, 480, 400, "Col 0", 100, #PB_ListIcon_FullRowSelect)
  AddGadgetColumn(#MyListIcon, 1, "Col 1", 100)
  AddGadgetColumn(#MyListIcon, 2, "Col 2", 100)
  
  For n=0 To 10
    Buffer = "Item " + Str(n) + Chr(10) + "Result Col 1=" + Str(n)  + Chr(10) + "Result Col 2=" + Str(n)
    AddGadgetItem(#MyListIcon, -1, Buffer)
  Next

  Repeat : Until WaitWindowEvent(10) = #PB_Event_CloseWindow
EndProcedure

Start()
- It was too lonely at the top.

System : PB 6.21(x64) and Win 11 Pro (x64)
Hardware: AMD Ryzen 9 5900X w/64 gigs Ram, AMD RX 6950 XT Graphics w/16gigs Mem
fcb
User
User
Posts: 42
Joined: Fri Aug 31, 2012 10:12 pm

Re: ListIconGadget, detect Column Header press??

Post by fcb »

Thank you blueb. Is there a way of doing this without rhe SetWindowCallback?
Rinzwind
Enthusiast
Enthusiast
Posts: 690
Joined: Wed Mar 11, 2009 4:06 pm
Location: NL

Re: ListIconGadget, detect Column Header press??

Post by Rinzwind »

Afraid not, and I agree one should not have to go this route. It's missing in the PB library. Then again, grid functionality is non-existent up to this point in time. Let's hope for improvements... :shock:
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4953
Joined: Sun Apr 12, 2009 6:27 am

Re: ListIconGadget, detect Column Header press??

Post by RASHAD »

What is your OS(Windows,Linux or Mac)?
Egypt my love
User avatar
Shardik
Addict
Addict
Posts: 2060
Joined: Thu Apr 21, 2005 2:38 pm
Location: Germany

Re: ListIconGadget, detect Column Header press??

Post by Shardik »

Here I posted a cross-platform example.
User avatar
mk-soft
Always Here
Always Here
Posts: 6244
Joined: Fri May 12, 2006 6:51 pm
Location: Germany

Re: ListIconGadget, detect Column Header press??

Post by mk-soft »

You can also create your own EventTypes globally ;)

Base from Shardik

Code: Select all

; =================================================================
;
;        Author:       Shardik  
;          Date:       January 27th, 2015
;       Explain:       Get ListIconGadget column
;           
; Typical Usage:
;
;     File Name:      Get Column Info.pb    
; =================================================================
Enumeration
  #MainForm
EndEnumeration

Enumeration Gadget 1
  #MyListIcon
EndEnumeration

Enumeration #PB_EventType_FirstCustomValue
  #MyEventType_ColumnClick
  #MyEventType_CellClick
EndEnumeration

Procedure OnListIconCLick(WindowID, message, wParam, lParam)
  Protected Result = #PB_ProcessPureBasicEvents 
  Protected Gadget
  Select message
    Case #WM_NOTIFY
      *nmITEM.NMITEMACTIVATE = lParam
      Select *nmITEM\hdr\code
          
        Case #LVN_COLUMNCLICK ;/ HeaderClick
          Gadget = GetProp_(*nmITEM\hdr\hwndFrom, "pb_id")
          If IsGadget(gadget) And GadgetType(Gadget) = #PB_GadgetType_ListIcon
            PostEvent(#PB_Event_Gadget, GetActiveWindow(), Gadget, #MyEventType_ColumnClick, *nmITEM\iSubItem)
          EndIf
          
;           If *nmITEM\hdr\hwndFrom = GadgetID(#MyListIcon) ;/ ListIconGadget
;             Debug " header col = " + Str(*nmITEM\iSubItem)
;             Result = #True
;           EndIf
          
        Case #NM_CLICK ;/ CellClick (Your question)
          Gadget = GetProp_(*nmITEM\hdr\hwndFrom, "pb_id")
          If IsGadget(gadget) And GadgetType(Gadget) = #PB_GadgetType_ListIcon
            PostEvent(#PB_Event_Gadget, GetActiveWindow(), Gadget, #MyEventType_CellClick, (*nmITEM\iSubItem << 16) | *nmITEM\iItem)
          EndIf
          
;           If *nmITEM\hdr\hwndFrom = GadgetID(#MyListIcon) ;/ ListIconGadget
;             Debug "row = " + Str(*nmITEM\iItem) + ", col = "+Str(*nmITEM\iSubItem) + ", content = "+ GetGadgetItemText(#MyListIcon, *nmITEM\iItem,*nmITEM\iSubItem)
;             Result = #True
;           EndIf
          
        Case #NM_DBLCLK 
          Debug "left doubleclick"
          ;Your code
          
        Case #NM_RCLICK
          Debug "right click"
          ;Your code
          
        Case #NM_RDBLCLK
          Debug "right doubleclick"
          ;Your code
          
      EndSelect
  EndSelect
  ProcedureReturn Result 
EndProcedure

Procedure Start()
  Protected n, Buffer.s
  
  OpenWindow(#MainForm, 0, 0, 500, 500, "Listicon gadget", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  SetWindowCallback(@OnListIconCLick(), #MainForm)
  
  ListIconGadget(#MyListIcon, 10, 10, 480, 400, "Col 0", 100, #PB_ListIcon_FullRowSelect)
  AddGadgetColumn(#MyListIcon, 1, "Col 1", 100)
  AddGadgetColumn(#MyListIcon, 2, "Col 2", 100)
  
  For n=0 To 10
    Buffer = "Item " + Str(n) + Chr(10) + "Result Col 1=" + Str(n)  + Chr(10) + "Result Col 2=" + Str(n)
    AddGadgetItem(#MyListIcon, -1, Buffer)
  Next

  Repeat
    Select WaitWindowEvent(10)
      Case #PB_Event_CloseWindow
        Break
        
      Case #PB_Event_Gadget
        Select EventGadget()
          Case #MyListIcon
            Select EventType()
              Case #MyEventType_ColumnClick
                Debug "#MyEventType_ColumnClick: Column " + EventData()
                
              Case #MyEventType_CellClick
                Debug "#MyEventType_CellClick: Column " + Str(EventData() >> 16) + " / Row " + Str(EventData() & $FFFF)
                
            EndSelect
              
        EndSelect
        
    EndSelect
  ForEver
  
EndProcedure

Start()
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
Post Reply