USCode wrote:You WinAPI gurus must have a solution at least for Windows?
Unfortunately I am no WinAPI guru nor a Linux or MacOS guru but I am trying my
best while developing my first major app for all 3 platforms simultaneously.
Nevertheless I was able to find a MacOS X API solution utilizing my first stab at a
DataBrowser callback (tested with PB 4.51 and Snow Leopard):
Code: Select all
EnableExplicit
ImportC ""
DisposeDataBrowserItemNotificationUPP(*DataBrowserItemNotificationCallback)
InitDataBrowserCallbacks(*DataBrowserCallbacks)
NewDataBrowserItemNotificationUPP(*DataBrowserItemNotificationCallback)
SetDataBrowserCallbacks(Control.I, *DataBrowserCallbacks)
EndImport
#kDataBrowserLatestCallbacks = 0
#kDataBrowserUserStateChanged = 13
#noErr = 0
#NumColumns = 2
Structure DataBrowserCallbacks
Version.I
DataBrowserItemDataUPP.I
DataBrowserItemCompareUPP.I
DataBrowserItemNotificationUPP.I
DataBrowserAddDragItemUPP.I
DataBrowserAcceptDragUPP.I
DataBrowserReceiveDragUPP.I
DataBrowserPostProcessDragUPP.I
DataBrowserItemHelpContentUPP.I
DataBrowserGetContextualMenuUPP.I
DataBrowserSelectContextualMenuUPP.I
EndStructure
Define DataBrowserCallbacks.DataBrowserCallbacks
Define *DataBrowserItemNotificationUPP
Define i.I
Dim ColumnWidth.I(#NumColumns - 1)
Procedure DataBrowserItemNotificationCallback(Control.I, ItemID.I, ItemNotification.I)
Shared ColumnWidth.I()
Protected i.I
Protected NewColumnWidth.I
If ItemNotification = #kDataBrowserUserStateChanged
For i = 0 To #NumColumns - 1
NewColumnWidth = GetGadgetItemAttribute(0, 0, #PB_ListIcon_ColumnWidth, i)
If NewColumnWidth <> ColumnWidth(i)
Debug "Column width of column " + Str(i) + " changed from " + Str(ColumnWidth(i)) + " to " + Str(NewColumnWidth)
ColumnWidth(i) = NewColumnWidth
EndIf
Next i
EndIf
EndProcedure
OpenWindow(0, 100, 100, 420, 90, "ListIcon Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(0, 5, 5, 410, 80, "Name", 110, #PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
AddGadgetColumn(0, 1, "Address", 279)
AddGadgetItem(0, -1, "Harry Rannit"+Chr(10)+"12 Parliament Way, Battle Street, By the Bay")
AddGadgetItem(0, -1, "Ginger Brokeit"+Chr(10)+"130 PureBasic Road, BigTown, CodeCity")
For i = 0 To #NumColumns - 1
ColumnWidth(i) = GetGadgetItemAttribute(0, 0, #PB_ListIcon_ColumnWidth, i)
Next i
DataBrowserCallbacks\version = #kDataBrowserLatestCallbacks
If InitDataBrowserCallbacks(@DataBrowserCallbacks) = #noErr
*DataBrowserItemNotificationUPP = NewDataBrowserItemNotificationUPP(@DataBrowserItemNotificationCallback())
DataBrowserCallbacks\DataBrowserItemNotificationUPP = *DataBrowserItemNotificationUPP
While WindowEvent()
Wend
If SetDataBrowserCallbacks(GadgetID(0), @DataBrowserCallbacks) = #noErr
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
DisposeDataBrowserItemNotificationUPP(*DataBrowserItemNotificationUPP)
EndIf
EndIf