ListIconGadget-Sort

ListIconGadget-Sort-Befehle
 Top Next

ListIconSortAddClick

ListIconSortAddGadget

ListIconSortAddColumn

ListIconSortListe

ListIconSortSetCol

ListIconSortDelGadget

Modul Code


Start
 Previous Top Next
ListIconGadget-Sort ist als Modul konzipiert. Ab PureBasic 5.20 Windows x86.

Grundsätzlich muß dem Modul bekannt sein, welches Gadget sortiert werden soll.

Befehl: ListIconSortAddGadget (#liste)

Um richtig zu sortieren, kann man dem Modul mitteilen, welche Art Daten in den Spalten stehen.
Geschieht das nicht, werden alle Spalten vom Typ Character sein

Datentypen
#ListIcon_Typ_Char
#ListIcon_Typ_Date
#ListIcon_Typ_Float
#ListIcon_Typ_Number

Befehl: ListIconSortAddColumn (#liste, 4, #ListIcon_Typ_Float, 10, 3)

Hinweis: wird bei einem Gadget die Anzahl der Spalten verändert,
sollte mit ListIconSortDelGadget (#liste) die Liste entfernt werden.
Anschließend wird erneut AddGadget und AddColumn aufgerufen.

Es gibt 2 Wege das Sortieren der Daten zu starten.

1. Der Spaltenkopf (Header) wird angeklickt
Es wird die gewählte Spalte mit den nächsten 2 Spalten sortiert

Befehl: ListIconSortAddClick (#liste)

2. Ein Button oder Befehl startet das Sortieren
Welche Spalten sortiert werden, muß angegeben werden

Befehl: ListIconSortSetCol (#liste, 5)
ListIconSortListe (#liste)


ListIconSortAddClick

x
ListIconSortAddClick()

Syntax

ListIconSortAddClick(#Gadget)

Beschreibung

Ermöglicht das Sortieren einer Spalte, indem man den Spaltenkopf anklickt.

Parameter
#Gadget
PB Gadgetnummer

Anmerkungen

Es werden beim Sortieren die nächsten 2 Spalten mit berücksichtigt.

Beispiel

XIncludeFile "LvSortEx.pbm"

OpenWindow(0, 100, 100, 400, 150, "ListIcon Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(0, 5, 5, 390, 140, "Name", 100, #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
AddGadgetColumn(0, 1, "Address", 270)
AddGadgetItem(0, -1, "Harry Rannit" + #LF$ + "12 Parliament Way, Battle Street, By the Bay")
AddGadgetItem(0, -1, "Ginger Brokeit" + #LF$ + "130 PureBasic Road, BigTown, CodeCity")
AddGadgetItem(0, -1, "John Baker" + #LF$ + "99 Pure Street, Downtown, New York")

ListIconSortAddClick (0)
ListIconSortAddGadget(0)

Repeat
   Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow

Inhaltsverzeichnis


ListIconSortAddGadget
ListIconSortAddGadget()

Syntax

ListIconSortAddGadget(#Gadget [, flag])

Beschreibung

Fügt ein ListIconGadget der internen Liste hinzu. Initialisiert das Sortieren.

Parameter
#Gadget | PB Gadgetnummer
flag | #ListIcon_Sort_Down, interne Vorgabe ist #ListIcon_Sort_Up

Anmerkungen

Ohne diesen Befehl funktioniert das Sortieren nicht !
flag ändert die Start-Sortierrichtung, gilt für alle Spalten.

Beispiel

XIncludeFile "LvSortEx.pbm"

OpenWindow(0, 100, 100, 400, 150, "ListIcon Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(0, 5, 5, 390, 140, "Name", 100, #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
AddGadgetColumn(0, 1, "Address", 270)
AddGadgetItem(0, -1, "Harry Rannit" + #LF$ + "12 Parliament Way, Battle Street, By the Bay")
AddGadgetItem(0, -1, "Ginger Brokeit" + #LF$ + "130 PureBasic Road, BigTown, CodeCity")
AddGadgetItem(0, -1, "John Baker" + #LF$ + "99 Pure Street, Downtown, New York")

ListIconSortAddClick (0)
ListIconSortAddGadget(0)

Repeat
   Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow


ListIconSortAddColumn
ListIconSortAddColumn()

Syntax

ListIconSortAddColumn(#Gadget, column [, typ = 0, lg = 0, dec = 0, mask$ = ""] )

Beschreibung

Definiert für die Spalten den Datentyp.

ListIconSortAddColumn(0, 0, #ListIcon_Typ_Char, 6)
ListIconSortAddColumn(0, 1, #ListIcon_Typ_Number, 10)
ListIconSortAddColumn(0, 2, #ListIcon_Typ_Float, 10, 2)
ListIconSortAddColumn(0, 3, #ListIcon_Typ_Date, 15, 0, #datemask)

Parameter
#Gadget | PB Gadgetnummer
column | für welche Spalte, ab null gezählt
typ | Datentyp #ListIcon_Typ_Char #ListIcon_Typ_Number #ListIcon_Typ_Float #ListIcon_Typ_Date
lg | Länge = Anzahl Zeichen die beim Sortieren berücksichtigt wird
dec | Anzahl Dezimalstellen, nur für den Typ #ListIcon_Typ_Float
mask$ | Datumsmaske, siehe auch Purebasic ParseDate()

Anmerkungen

ist die Länge zu klein, wird scheinbar falsch sortiert, fällt besonders bei Zahlen auf.
ist die Länge hingegen zu groß, dauert das Sortieren länger.

Beim Datentyp #ListIcon_Typ_Char wird die Telefonbuch-Sortierung unterstützt. Wobei die Zeichen àâéèêùû hinter die Umlaute einsortiert werden.

Beispiel

XIncludeFile "LvSortEx.pbm"

#datemask = "%yyyy-%mm-%dd, %hh:%mm:%ss"

OpenWindow(0, 100, 100, 510, 150, "ListIcon Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(0, 5, 5, 500, 140, "Name", 90, #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
AddGadgetColumn(0, 1, "Address", 225)
AddGadgetColumn(0, 2, "Price", 60)
AddGadgetColumn(0, 3, "Date", 120)
AddGadgetItem(0, -1, "Harry Rannit" + #LF$ + "12 Parliament Way, Battle Street, By the Bay")
AddGadgetItem(0, -1, "Ginger Brokeit" + #LF$ + "130 PureBasic Road, BigTown, CodeCity")
AddGadgetItem(0, -1, "John Baker" + #LF$ + "99 Pure Street, Downtown, New York")
AddGadgetItem(0, -1, "Mike Miller" + #LF$ + "4700 Downstreet, Harlem, New York")

For j = 0 To 3
   SetGadgetItemText(0, j, Str(Random(999)) + "," + Str(Random(99)), 2)
   SetGadgetItemText(0, j, FormatDate(#datemask, Random(Date(), 0)), 3)
Next

ListIconSortAddClick (0)
ListIconSortAddGadget(0)

ListIconSortAddColumn(0, 0, #ListIcon_Typ_Char, 6)
ListIconSortAddColumn(0, 1, #ListIcon_Typ_Number, 10)
ListIconSortAddColumn(0, 2, #ListIcon_Typ_Float, 10, 2)
ListIconSortAddColumn(0, 3, #ListIcon_Typ_Date, 15, 0, #datemask)

Repeat
   Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow


ListIconSortSetCol
ListIconSortSetCol()

Syntax

ListIconSortSetCol(#Gadget, col)

Beschreibung

Dieser Befehl wird benötigt, wenn das Sortieren von einem Button oder einer Anweisung gestartet wird.

Parameter
#Gadget | PB Gadgetnummer
col | Spalte die sortiert werden soll

Anmerkungen

Befehl ersetzt die Spaltenangabe durch den Headerclick. Im Gegensatz zum Headerclick kann man selbst die Reihenfolge der Spalten bestimmen.
Im Beispiel erst nach Date, dann nach Adress.

Beispiel

siehe ListIconSortListe


ListIconSortListe
ListIconSortListe()

Syntax

ListIconSortListe(#Gadget)

Beschreibung

Dieser Befehl startet das Sortieren von einem Button oder einer Anweisung aus.

Parameter
#Gadget
PB Gadgetnummer

Anmerkungen

Befehl ersetzt praktisch den Headerclick. Nachdem mit ListIconSortSetCol die Spalten bestimmt wurden, wird das Sortieren gestartet.

Beispiel

XIncludeFile "LvSortEx.pbm"

#datemask = "%yyyy-%mm-%dd, %hh:%mm:%ss"

OpenWindow(0, 100, 100, 510, 200, "ListIcon Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(0, 5, 5, 500, 140, "Name", 90, #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
AddGadgetColumn(0, 1, "Address", 225)
AddGadgetColumn(0, 2, "Price", 60)
AddGadgetColumn(0, 3, "Date", 120)
AddGadgetItem(0, -1, "Harry Rannit" + #LF$ + "12 Parliament Way, Battle Street, By the Bay")
AddGadgetItem(0, -1, "Ginger Brokeit" + #LF$ + "130 PureBasic Road, BigTown, CodeCity")
AddGadgetItem(0, -1, "John Baker" + #LF$ + "99 Pure Street, Downtown, New York")
AddGadgetItem(0, -1, "Mike Miller" + #LF$ + "130 Downstreet, Harlem, New York")

For j = 0 To 3
   SetGadgetItemText(0, j, Str(Random(999)) + "," + Str(Random(99)), 2)
   SetGadgetItemText(0, j, FormatDate(#datemask, Random(Date(), 0)), 3)
Next

ListIconSortAddClick (0)
ListIconSortAddGadget(0)

ListIconSortAddColumn(0, 0, #ListIcon_Typ_Char, 6)
ListIconSortAddColumn(0, 1, #ListIcon_Typ_Number, 10)
ListIconSortAddColumn(0, 2, #ListIcon_Typ_Float, 10, 2)
ListIconSortAddColumn(0, 3, #ListIcon_Typ_Date, 15, 0, #datemask)

ButtonGadget(1, 10, 170, 120, 22, "sortiere nach 3 + 1")

Repeat
   event = WaitWindowEvent()
   Select event

         Case #PB_Event_Gadget
            Select EventGadget()
               Case 1
                  ListIconSortSetCol(0, 3)
                  ListIconSortSetCol(0, 1)
                  ListIconSortListe(0)
            EndSelect

      EndSelect
Until Event = #PB_Event_CloseWindow


ListIconSortDelGadget
ListIconSortDelGadget()

Syntax

ListIconSortDelGadget(#Gadget)

Beschreibung

Entfernt ein ListIconGadget aus der internen Liste.

Parameter
#Gadget
PB Gadgetnummer

Anmerkungen

Befehl wird nötig wenn ein ListIconGadget verändert oder entfernt wude.
z.B. Spalten wurden eingefügt, verschoben etc.

Dann sollte/muß das Gadget aus der internen Liste entfernt und mit ListIconSortAddGadget und bei Bedarf mit ListIconSortAddColumn neu definiert werden.

Beispiel

---


Modul

Beispiel
 Previous Top
; 31.12.2013 PB 5.21 x86 Windows Vista

DeclareModule ListIconGadget_Sort
   ; Alle Elemente in diesem Abschnitt sind für den Zugriff von außerhalb verfügbar

   Enumeration
      #ListIcon_Typ_Char      ;Datentypen
      #ListIcon_Typ_Date
      #ListIcon_Typ_Float
      #ListIcon_Typ_Number
      #ListIcon_Sort_Up       ;Sortier Richtung
      #ListIcon_Sort_Down
   EndEnumeration

   Declare ListIconSortListe(pbnr)
   Declare ListIconSortSetCol(pbnr, col)
   Declare ListIconSortAddClick(pbnr)
   Declare ListIconSortAddGadget(pbnr, sort = #ListIcon_Sort_Up)
   Declare ListIconSortAddColumn(pbnr, col, typ = 0, lg = 0, dec = 0, mask$ = "")
   Declare ListIconSortDelGadget(pbnr)

EndDeclareModule

Module ListIconGadget_Sort

   EnableExplicit

   Structure ListIconColInfo
      nr.i        ; Spaltennr ab null
      typ.i       ; Datentyp
      charanz.i   ; Anzahl Sortier-Zeichen
      decimals.i  ; Anzahl Dezimalstellen
      datemask.s  ; Mask für ParseDate()
   EndStructure

   Structure ListIconSortInfo
      pbnr.i         ; PB Gadgednr
      sort.i
      direction.i    ; Sortierrichtung
      Array column.ListIconColInfo(0)
   EndStructure

   ;'lisi' wird von ListIconSortSetCol() mit Sortierdaten gefüllt
   Global lisi.ListIconSortInfo

   ;für SortCallbackIntern,
   Global original = GetClassLongPtr_(GetDesktopWindow_(), #GCL_HCURSOR)
   Global idc_wait = LoadCursor_(0, #IDC_WAIT)

   ;Liste mit Felddaten, aus dieser Liste wird 'lisi' mit Daten versorgt
   Global NewList LvFieldtyp.ListIconSortInfo()

   Procedure.i ListIconSortDelGadget(pbnr)

      ;Entfernt ein ListIconGadget aus der internen Liste

      ForEach LvFieldtyp()
         If LvFieldtyp()\pbnr = pbnr
            DeleteElement(LvFieldtyp())
         EndIf
      Next

   EndProcedure

   Procedure.i ListIconSortAddGadget(pbnr, sort = #ListIcon_Sort_Up)

      ;Fügt ein ListIconGadget zur internen Liste hinzu
      ; und setzt Vorgaben ins ColumnArray

      Protected j
      Protected hd = SendMessage_(GadgetID(pbnr), #LVM_GETHEADER, #Null, #Null)
      Protected cols = SendMessage_(hd, #HDM_GETITEMCOUNT, 0, 0)

      AddElement(LvFieldtyp())
      ReDim LvFieldtyp()\column(cols)

      LvFieldtyp()\pbnr = pbnr
      LvFieldtyp()\sort = sort

      ;Vorgaben
      For j = 0 To cols
         LvFieldtyp()\column(j)\typ = #ListIcon_Typ_Char
         LvFieldtyp()\column(j)\charanz = 9
         LvFieldtyp()\column(j)\decimals = 0
         LvFieldtyp()\column(j)\datemask = ""
      Next

   EndProcedure

   Procedure.i ListIconSortAddColumn(pbnr, col, typ = 0, lg = 0, dec = 0, mask$ = "")

      ;schreibt die Sortier-Eigenschaften einer Spalte ins ColumnArray

      ;Hinweis: ist die Länge zu klein,
      ; wird scheinbar falsch sortiert, fällt besonders bei Zahlen auf

      ForEach LvFieldtyp()
         If LvFieldtyp()\pbnr = pbnr
            If col <= ArraySize(LvFieldtyp()\column())
               If typ: LvFieldtyp()\column(col)\typ = typ: EndIf
               If lg:  LvFieldtyp()\column(col)\charanz = lg: EndIf
               If dec: LvFieldtyp()\column(col)\decimals = dec: EndIf
               If mask$: LvFieldtyp()\column(col)\datemask = mask$: EndIf
            EndIf
         EndIf
      Next

   EndProcedure

   Procedure.i ListIconSortSetCol(pbnr, col)

      ;Holt aus der FieldTypListe die Eigenschaften einer Spalte
      ; und vergrößert 'lisi' um 1 und schreibt diese in 'lisi'
      ; Hinweis nach dem Sortieren wird 'lisi' gelöscht

      Protected j, *typ.ListIconSortInfo

      ForEach LvFieldtyp()
         If LvFieldtyp()\pbnr = pbnr
            If col <= ArraySize(LvFieldtyp()\column())
               *typ = LvFieldtyp()
            EndIf
         EndIf
      Next

      j = ArraySize(lisi\column()) + 1
      ReDim lisi\column(j)

      If *typ
         With lisi
            \sort = *typ\sort
            \column(j)\nr = col
            \column(j)\typ = *typ\column(col)\typ
            \column(j)\charanz = *typ\column(col)\charanz
            \column(j)\decimals = *typ\column(col)\decimals
            \column(j)\datemask = *typ\column(col)\datemask
         EndWith
      EndIf

   EndProcedure

   Procedure.i ListIconSortCallbackHeader(hwnd, msg, wParam, lParam)
      ;hwnd ist die ID vom Header

      ;Sub-Callback eines ListiconGadget für Headerclick

      Protected oldpt = GetProp_(hwnd, "LvSort")
      Protected *hdn.HD_NOTIFY

      Select msg

         Case #WM_DESTROY
            RemoveProp_(hwnd, "LvSort")
            SetWindowLongPtr_(hwnd, #GWLP_WNDPROC, oldpt)

         Case #WM_NOTIFY
            *hdn.HD_NOTIFY = lparam
            Select *hdn\hdr\code
               Case #HDN_ITEMCLICKW, #HDN_ITEMCLICK
                  With lisi
                     \pbnr = GetDlgCtrlID_(hwnd)
                     ListIconSortSetCol(\pbnr, *hdn\iItem)
                     ListIconSortSetCol(\pbnr, *hdn\iItem + 1)
                     ListIconSortSetCol(\pbnr, *hdn\iItem + 2)
                     ListIconSortListe (\pbnr)
                  EndWith

            EndSelect

      EndSelect

      ProcedureReturn CallWindowProc_(oldpt, hwnd, msg, wParam, lParam)

   EndProcedure

   Procedure.i ListIconSortAddClick(pbnr)

      ;Richtet Subclassing für ListiconGadget ein für Headerclick

      Protected oldpt = GetWindowLongPtr_(GadgetID(pbnr), #GWL_WNDPROC)

      SetProp_(GadgetID(pbnr), "LvSort", oldpt)
      SetWindowLongPtr_(GadgetID(pbnr), #GWL_WNDPROC, @ListIconSortCallbackHeader())

   EndProcedure

   Procedure.i ListIconSortCallBackIntern(lParam1, lParam2, lParamSort)
      ; dies ist die Vergleichsfunktion von #LVM_SORTITEMSEX

      ; lParam1 und lParam2 sind die Itemnummern welche verglichen werden
      ; der Rückgabewert des Vergleichs ist -1, +1 oder 0 für gleich

      ; lParamSort ist der Pointer der bei Aufruf von #LVM_SORTITEMSEX übergeben wurde

      Static substrg1.s    ;Static beschleunigt das Vergleichen minimal
      Static substrg2.s
      Static sortitem1.s
      Static sortitem2.s
      Static result

      Static umlaute1$ = "ÄÖÜäöüßàâéèêùû"
      Static umlaute2$ = "AeOeUeaeoeuessayazexeyezuyuz"
      Static umlautelg, um1$, um2$

      Protected *lisi.ListIconSortInfo = lParamSort
      Protected j, anzahl

      With *lisi

         anzahl = ArraySize(\column())

         sortitem1 = ""
         sortitem2 = ""

         For j = 1 To anzahl

            If \column(j)\charanz

               substrg1 = GetGadgetItemText(\pbnr, lParam1, \column(j)\nr)
               substrg2 = GetGadgetItemText(\pbnr, lParam2, \column(j)\nr)

               Select \column(j)\typ
                  Case #ListIcon_Typ_Number
                     substrg1 = Str(Val(substrg1))
                     substrg2 = Str(Val(substrg2))
                     sortitem1 + RSet(substrg1, \column(j)\charanz)
                     sortitem2 + RSet(substrg2, \column(j)\charanz)

                  Case #ListIcon_Typ_Float
                     ReplaceString(substrg1, ",", ".", #PB_String_InPlace)
                     ReplaceString(substrg2, ",", ".", #PB_String_InPlace)
                     substrg1 = StrF(ValF(substrg1), \column(j)\decimals)
                     substrg2 = StrF(ValF(substrg2), \column(j)\decimals)
                     sortitem1 + RSet(substrg1, \column(j)\charanz)
                     sortitem2 + RSet(substrg2, \column(j)\charanz)

                  Case #ListIcon_Typ_Char
                     sortitem1 + LSet(substrg1, \column(j)\charanz)
                     sortitem2 + LSet(substrg2, \column(j)\charanz)

                     ;Umlaute etc ersetzen
                     umlautelg = Len(umlaute1$)
                     For j = 1 To umlautelg
                        um1$ = Mid(umlaute1$, j, 1)
                        If FindString(sortitem1, um1$)
                           um2$ = Mid(umlaute2$, (j * 2) - 1, 2)
                           sortitem1 = ReplaceString(sortitem1, um1$, um2$)
                        EndIf
                        If FindString(sortitem2, um1$)
                           um2$ = Mid(umlaute2$, (j * 2) - 1, 2)
                           sortitem2 = ReplaceString(sortitem2, um1$, um2$)
                        EndIf
                     Next

                  Case #ListIcon_Typ_Date
                     substrg1 = Str(ParseDate(\column(j)\datemask, substrg1))
                     substrg2 = Str(ParseDate(\column(j)\datemask, substrg2))
                     sortitem1 + RSet(substrg1, \column(j)\charanz)
                     sortitem2 + RSet(substrg2, \column(j)\charanz)

               EndSelect

            EndIf

         Next

         ;Vergleich
         If \direction = #ListIcon_Sort_Up
            result = CompareMemoryString(@sortitem1, @sortitem2, #PB_String_CaseSensitive)
         Else
            result = CompareMemoryString(@sortitem2, @sortitem1, #PB_String_CaseSensitive)
         EndIf

      EndWith

      ProcedureReturn result
   EndProcedure

   Procedure.i ListIconSortSetArrow(pbnr, col, firstsort)

      ;Löscht und setzt SortierPfeil im Header und gibt Sortrichtung zurück
      ; wird nur von ListIconSortListe() aufgerufen

      Protected header = SendMessage_(GadgetID(pbnr), #LVM_GETHEADER, #Null, #Null)
      Protected colanz = SendMessage_(header, #HDM_GETITEMCOUNT, 0, 0) - 1

      Protected j, flags, direction, hdi.HD_ITEM

      ;Pfeile löschen, gewählte Spalte Flag setzen
      hdi\mask = #HDI_FORMAT
      For j = 0 To colanz
         SendMessage_(header, #HDM_GETITEM, j, hdi)
         flags = hdi\fmt                           ;flags merken
         hdi\fmt & ~ (#HDF_SORTDOWN | #HDF_SORTUP) ;flags löschen
         If j = col
            If flags & #HDF_SORTDOWN               ;wenn Downflag
               hdi\fmt | #HDF_SORTUP               ;Upflag setzen
               direction = #ListIcon_Sort_Up
            ElseIf flags & #HDF_SORTUP             ;wenn Upflag
               hdi\fmt | #HDF_SORTDOWN             ;Downflag setzen
               direction = #ListIcon_Sort_Down
            Else                                   ;wenn keins von beiden
               If firstsort = #ListIcon_Sort_Down
                  hdi\fmt | #HDF_SORTDOWN             ;Downflag setzen
                  direction = #ListIcon_Sort_Down
               Else
                  hdi\fmt | #HDF_SORTUP               ;Upflag setzen
                  direction = #ListIcon_Sort_Up
               EndIf
            EndIf
         EndIf
         SendMessage_(header, #HDM_SETITEM, j, hdi)
      Next

      ProcedureReturn direction

   EndProcedure

   Procedure.i ListIconSortListe(pbnr)

      ;ruft SortierCallback auf und löscht 'lisi' nach dem sortieren

      If ArraySize(lisi\column()) = 0
         Debug "ListIconSortSetCol() oder ListIconSortAddGadget() fehlt"
         ProcedureReturn
      EndIf

      lisi\pbnr = pbnr
      lisi\direction = ListIconSortSetArrow(pbnr, lisi\column(1)\nr, lisi\sort)

      DisableGadget(pbnr, 1)
      SetCursor_(idc_wait): ShowCursor_(#True)

      SendMessage_(GadgetID(pbnr), #LVM_SORTITEMSEX, lisi, @ListIconSortCallBackIntern())

      ReDim lisi\column(0)

      DisableGadget(pbnr, 0)
      SetCursor_(original): ShowCursor_(#True)
      SetGadgetState(pbnr, GetGadgetState(pbnr))

   EndProcedure

EndModule

UseModule ListIconGadget_Sort