Re: ListIconGadget sort on column
Posted: Sat Oct 02, 2010 2:00 pm
Andre wrote:Anyone already adapted such an example code (for sorting by listicon header) to MacOS?
Code: Select all
EnableExplicit
ImportC ""
DisposeDataBrowserItemCompareUPP(*DataBrowserItemCompareCallback)
GetDataBrowserCallbacks(DataBrowser.L, *DataBrowserCallbacks)
GetDataBrowserPropertyFlags(DataBrowser.L, ColumnPropertyID.L, ColumnPropertyFlags.L)
GetDataBrowserTableViewColumnPosition(DataBrowser.L, ColumnPropertyID, *ColumnIndex.L)
GetDataBrowserTableViewColumnProperty(DataBrowser.L, ColumnIndex.L, *ColumnPropertyID)
InitDataBrowserCallbacks(*DataBrowserCallbacks)
NewDataBrowserItemCompareUPP(*DataBrowserItemCompareCallback)
SetDataBrowserCallbacks(DataBrowser.L, *DataBrowserCallbacks)
SetDataBrowserHasScrollBars(DataBrowser.L, HasHorizontalScrollbar.L, HasVerticalScrollbar.L)
SetDataBrowserPropertyFlags(DataBrowser.L, ColumnPropertyID.L, ColumnPropertyFlags.L)
SetDataBrowserSortOrder(DataBrowser.L, SortOrder.L)
SetDataBrowserSortProperty(DataBrowser.L, ColumnPropertyID.L)
EndImport
#kDataBrowserLatestCallbacks = 0
#kDataBrowserViewSpecificFlagsOffset = 16
#kDataBrowserListViewSortableColumn = 1 << (#kDataBrowserViewSpecificFlagsOffset + 2)
#kDataBrowserOrderIncreasing = 1
#kDataBrowserOrderDecreasing = 2
#noErr = 0
Structure DataBrowserCallbacks
Version.L
DataBrowserItemDataUPP.L
DataBrowserItemCompareUPP.L
DataBrowserItemNotificationUPP.L
DataBrowserAddDragItemUPP.L
DataBrowserAcceptDragUPP.L
DataBrowserReceiveDragUPP.L
DataBrowserPostProcessDragUPP.L
DataBrowserItemHelpContentUPP.L
DataBrowserGetContextualMenuUPP.L
DataBrowserSelectContextualMenuUPP.L
EndStructure
Define ColumnPropertyFlags.L
Define ColumnPropertyID.L
Define DataBrowserCallbacks.DataBrowserCallbacks
Define *DataBrowserItemCompareUPP
Define i.I
; ----- Item-comparison callback for row sort
Procedure DataBrowserItemCompareCallback(DataBrowser.L, Item1ID.L, Item2ID.L, ColumnPropertyID.L)
Protected ColumnIndex.L
If GetDataBrowserTableViewColumnPosition(DataBrowser, ColumnPropertyID, @ColumnIndex) = #noErr
If GetGadgetItemText(0, Item1ID - 1, ColumnIndex) < GetGadgetItemText(0, Item2ID - 1, ColumnIndex)
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndIf
EndProcedure
OpenWindow(0, 100, 100, 422, 90, "Sort ListIcon on column click", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(0, 5, 5, 412, 80, "Name", 115)
AddGadgetColumn(0, 1, "Address", 290)
AddGadgetItem(0, -1, "Harry Rannit" + #LF$ + "22 Parliament Way, Battle Street, By the Bay")
AddGadgetItem(0, -1, "Didi Foundit"+ #LF$ + "321 Logo Drive, Mouse House, Downtown")
AddGadgetItem(0, -1, "Ginger Brokeit" + #LF$ + "130 PureBasic Road, BigTown, CodeCity")
Delay(10)
While WindowEvent()
Wend
; ----- Switch off horizontal and vertical scrollbars
SetDataBrowserHasScrollBars(GadgetID(0), #False, #False)
; ----- Initialize new item-comparison callback
DataBrowserCallbacks\version = #kDataBrowserLatestCallbacks
If InitDataBrowserCallbacks(@DataBrowserCallbacks) = #noErr
*DataBrowserItemCompareUPP = NewDataBrowserItemCompareUPP(@DataBrowserItemCompareCallback())
DataBrowserCallbacks\DataBrowserItemCompareUPP = *DataBrowserItemCompareUPP
If SetDataBrowserCallbacks(GadgetID(0), @DataBrowserCallbacks) = #noErr
; ----- Set Sortable Flag for column 0 and 1
For i = 1 To 0 Step -1
GetDataBrowserTableViewColumnProperty(GadgetID(0), i, @ColumnPropertyID)
GetDataBrowserPropertyFlags(GadgetID(0), ColumnPropertyID, @ColumnPropertyFlags)
ColumnPropertyFlags ! #kDataBrowserListViewSortableColumn
SetDataBrowserPropertyFlags(GadgetID(0), ColumnPropertyID, ColumnPropertyFlags)
Next i
; ----- Designate column 0 for sorting
SetDataBrowserSortProperty(GadgetID(0), ColumnPropertyID)
; ----- Set sorting order to increasing
SetDataBrowserSortOrder(GadgetID(0), #kDataBrowserOrderIncreasing)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
; ----- Dispose procedure pointer to item-comparison callback
DisposeDataBrowserItemCompareUPP(*DataBrowserItemCompareUPP)
EndIf
EndIf