Furthermore I have included Charly's suggested change in order to be able to run the example on Linux with both GTK2 and GTK3 (Thank you for that hint, Charly!).
Code: Select all
EnableExplicit
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux
ImportC ""
g_object_set_double(*Object, Property.P-ASCII, Value.D,
Null) As "g_object_set"
gtk_cell_layout_get_cells(*CellLayout)
gtk_tree_view_column_set_alignment(*TreeColumn.GtkTreeViewColumn,
Alignment.F)
EndImport
CompilerEndSelect
Enumeration
#PB_ListIcon_JustifyColumnLeft
#PB_ListIcon_JustifyColumnCenter
#PB_ListIcon_JustifyColumnRight
EndEnumeration
Procedure SetListIconColumnJustification(ListIconID.I, Column.I, Alignment.I)
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux
Protected AlignmentFactor.F
Protected *CellRenderers
Protected *Column
Protected Count.I
Protected i.I
Select Alignment
Case #PB_ListIcon_JustifyColumnLeft
AlignmentFactor = 0.0
Case #PB_ListIcon_JustifyColumnCenter
AlignmentFactor = 0.5
Case #PB_ListIcon_JustifyColumnRight
AlignmentFactor = 1.0
EndSelect
*Column = gtk_tree_view_get_column_(GadgetID(ListIconID), Column)
If *Column
gtk_tree_view_column_set_alignment(*Column, AlignmentFactor)
*CellRenderers = gtk_cell_layout_get_cells(*Column)
If *CellRenderers
Count = g_list_length_(*CellRenderers)
For i = 0 To Count - 1
g_object_set_double(g_list_nth_data_(*CellRenderers, i), "xalign",
AlignmentFactor, #Null)
Next i
g_list_free_(*CellRenderers)
EndIf
EndIf
CompilerCase #PB_OS_MacOS
Protected ColumnHeaderCell.I
Protected ColumnObject.I
Protected ColumnObjectArray.I
Select Alignment
Case #PB_ListIcon_JustifyColumnLeft
Alignment = #NSLeftTextAlignment
Case #PB_ListIcon_JustifyColumnCenter
Alignment = #NSCenterTextAlignment
Case #PB_ListIcon_JustifyColumnRight
Alignment = #NSRightTextAlignment
EndSelect
; ----- Justify text of column cells
CocoaMessage(@ColumnObjectArray, GadgetID(ListIconID), "tableColumns")
CocoaMessage(@ColumnObject, ColumnObjectArray, "objectAtIndex:", Column)
CocoaMessage(0, CocoaMessage(0, ColumnObject, "dataCell"), "setAlignment:", Alignment)
; ----- Justify text of column header
CocoaMessage(@ColumnHeaderCell, ColumnObject, "headerCell")
CocoaMessage(0, ColumnHeaderCell, "setAlignment:", Alignment)
; ----- Redraw ListIcon contents to see change
CocoaMessage(0, GadgetID(ListIconID), "reloadData")
CompilerCase #PB_OS_Windows
Protected ListIconColumn.LV_COLUMN
ListIconColumn\mask = #LVCF_FMT
Select Alignment
Case #PB_ListIcon_JustifyColumnLeft
ListIconColumn\fmt = #LVCFMT_LEFT
Case #PB_ListIcon_JustifyColumnCenter
ListIconColumn\fmt = #LVCFMT_CENTER
Case #PB_ListIcon_JustifyColumnRight
ListIconColumn\fmt = #LVCFMT_RIGHT
EndSelect
SendMessage_(GadgetID(ListIconID), #LVM_SETCOLUMN, Column, @ListIconColumn)
CompilerEndSelect
EndProcedure
OpenWindow(0, 200, 100, 445, 90, "Right justify 1st column")
ListIconGadget(0, 5, 5, 435, 80, "Name", 110)
AddGadgetColumn(0, 1, "Address", 300)
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")
SetListIconColumnJustification(0, 0, #PB_ListIcon_JustifyColumnRight)
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow