Code: Select all
; Windows Ok
; Linux Ok but #PB_ListIcon_TextItemAutoSize
; Mac OS no tested
DeclareModule ListIconText
EnableExplicit
#PB_ListIcon_TextLeft = 1<<1
#PB_ListIcon_TextCenter = 1<<2
#PB_ListIcon_TextRight = 1<<3
#PB_ListIcon_TextItemAutoSize = 1<<4
#PB_ListIcon_TextColumnAutoSize = 1<<5
Declare Alignment(Gadget, Column, Alignment)
EndDeclareModule
Module ListIconText
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux ;- OS_Linux
ImportC ""
g_object_set_double(*Object, Property.p-ascii, Value.D, Null) As "g_object_set"
gtk_cell_layout_get_cells(*cell_layout)
gtk_tree_view_column_set_alignment(*tree_column, xalign.f); replaced PureBasic's V5.* buggy: gtk_tree_view_column_set_alignment_(*Column, Alignment)
EndImport
ProcedureC Alignment(Gadget, Column, Alignment)
Protected AlignmentFactor.D
Protected *CellRenderers
Protected *Column
Protected Count
Protected i
If ((Alignment & #PB_ListIcon_TextLeft) = #PB_ListIcon_TextLeft)
AlignmentFactor = 0.0
ElseIf ((Alignment & #PB_ListIcon_TextCenter) = #PB_ListIcon_TextCenter)
AlignmentFactor = 0.5
ElseIf ((Alignment & #PB_ListIcon_TextRight) = #PB_ListIcon_TextRight)
AlignmentFactor = 1.0
EndIf
*Column = gtk_tree_view_get_column_(GadgetID(Gadget), Column)
If *Column
;gtk_tree_view_column_set_alignment_(*Column, AlignmentFactor) ; bug
gtk_tree_view_column_set_alignment(*Column, AlignmentFactor); title-alignment - fixed with ImportC
If ((Alignment & #PB_ListIcon_TextColumnAutoSize) = #PB_ListIcon_TextColumnAutoSize)
gtk_tree_view_column_set_sizing_(*Column, #GTK_TREE_VIEW_COLUMN_AUTOSIZE)
EndIf
; *CellRenderers = gtk_tree_view_column_get_cell_renderers_(*Column)
*CellRenderers = gtk_cell_layout_get_cells(*Column)
If *CellRenderers
Count = g_list_length_(*CellRenderers) ; number of columns
For i = 0 To Count - 1
;g_object_set_double(g_list_nth_data_(*CellRenderers, i), "xalign", AlignmentFactor, #Null)
Protected *Cellule.GtkCellRenderer = g_list_nth_data_(*CellRenderers, i) : *Cellule\xalign=AlignmentFactor
Next i
g_list_free_(*CellRenderers)
EndIf
gtk_widget_queue_draw_(GadgetID(Gadget)); force Redraw
EndIf
EndProcedure
CompilerCase #PB_OS_MacOS ;- OS_MacOS
#kControlUseJustMask = $0040
#teCenter = 1
#teFlushRight = -1
#teFlushLeft = -2
ImportC ""
GetDataBrowserListViewHeaderDesc(DataBrowserRef, ColumnID, *HeaderDesc)
GetDataBrowserTableViewColumnProperty(DataBrowserRef, Column, *ColumnID)
HiliteControl(ControlRef, ControlPart)
SetControlVisibility(ControlRef, IsVisible, DoDraw)
SetDataBrowserListViewHeaderDesc(DataBrowserRef, ColumnID, *HeaderDesc)
EndImport
Structure RGBColor
Red.U
Green.U
Blue.U
EndStructure
Structure ControlFontStyleRec
Flags.W
Font.W
Size.W
Style.W
Mode.W
Just.W
ForeColor.RGBColor
BackColor.RGBColor
EndStructure
Structure DataBrowserListViewHeaderDesc
Version.L
MinimumColumnWidth.U
MaximumColumnWidth.U
TitleOffset.W
CFTitleString.L
InitialSortOrder.U
FontStyle.ControlFontStyleRec
IconInfo.L
EndStructure
ProcedureC Alignment(Gadget, Column, Alignment)
; Protected ColumnID.L
; Protected HeaderDesc.DataBrowserListViewHeaderDesc
;
; If GetDataBrowserTableViewColumnProperty(GadgetID(Gadget), Column, @ColumnID) = 0
; If GetDataBrowserListViewHeaderDesc(GadgetID(Gadget), ColumnID, @HeaderDesc) = 0
; HeaderDesc\FontStyle\Flags = #kControlUseJustMask
;
; If ((Alignment & #PB_ListIcon_TextLeft) = #PB_ListIcon_TextLeft)
; HeaderDesc\FontStyle\Just = #teFlushLeft
; ElseIf ((Alignment & #PB_ListIcon_TextCenter) = #PB_ListIcon_TextCenter)
; HeaderDesc\FontStyle\Just = #teCenter
; ElseIf ((Alignment & #PB_ListIcon_TextRight) = #PB_ListIcon_TextRight)
; HeaderDesc\FontStyle\Just = #teFlushRight
; EndIf
;
; SetDataBrowserListViewHeaderDesc(GadgetID(Gadget), ColumnID, @HeaderDesc)
; EndIf
; EndIf
Protected ColumnHeaderCell.I
Protected ColumnObject.I
Protected ColumnObjectArray.I
If ((Alignment & #PB_ListIcon_TextLeft) = #PB_ListIcon_TextLeft)
Alignment = 0
ElseIf ((Alignment & #PB_ListIcon_TextCenter) = #PB_ListIcon_TextCenter)
Alignment = 2
ElseIf ((Alignment & #PB_ListIcon_TextRight) = #PB_ListIcon_TextRight)
Alignment = 1
EndIf
; ----- Justify text of column cells
CocoaMessage(@ColumnObjectArray, GadgetID(Gadget), "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(Gadget), "reloadData")
EndProcedure
CompilerCase #PB_OS_Windows ;- OS_Windows
Procedure Alignment(Gadget, Column, Alignment)
Protected ListIconColumn.LV_COLUMN
ListIconColumn\mask = #LVCF_FMT
If ((Alignment & #PB_ListIcon_TextLeft) = #PB_ListIcon_TextLeft)
ListIconColumn\fmt = #LVCFMT_LEFT
ElseIf ((Alignment & #PB_ListIcon_TextCenter) = #PB_ListIcon_TextCenter)
ListIconColumn\fmt = #LVCFMT_CENTER
ElseIf ((Alignment & #PB_ListIcon_TextRight) = #PB_ListIcon_TextRight)
ListIconColumn\fmt = #LVCFMT_RIGHT
EndIf
SendMessage_(GadgetID(Gadget), #LVM_SETCOLUMN, Column, @ListIconColumn)
If ((Alignment & #PB_ListIcon_TextItemAutoSize) = #PB_ListIcon_TextItemAutoSize)
SendMessage_(GadgetID(Gadget),#LVM_SETCOLUMNWIDTH,Column,#LVSCW_AUTOSIZE)
ElseIf ((Alignment & #PB_ListIcon_TextColumnAutoSize) = #PB_ListIcon_TextColumnAutoSize)
SendMessage_(GadgetID(Gadget),#LVM_SETCOLUMNWIDTH,Column,#LVSCW_AUTOSIZE_USEHEADER)
EndIf
InvalidateRect_(GadgetID(Gadget), 0, #True)
EndProcedure
CompilerEndSelect
EndModule
Enumeration Window
#Window_0
EndEnumeration
Enumeration Gadget
#Window_0_Gadget_0
EndEnumeration
Procedure Resize()
ResizeGadget(#Window_0_Gadget_0,#PB_Ignore,#PB_Ignore,WindowWidth(EventWindow()),WindowHeight(EventWindow()))
EndProcedure
If OpenWindow(#Window_0,0,0,1000,100, "",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
ListIconGadget(#Window_0_Gadget_0,0,0,1000,100, "Text left", 100, #PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect)
AddGadgetColumn(#Window_0_Gadget_0, 1, "Text center", 100)
AddGadgetColumn(#Window_0_Gadget_0, 2, "Text right", 100)
AddGadgetColumn(#Window_0_Gadget_0, 3, "Text column auto size and text center", 200)
AddGadgetColumn(#Window_0_Gadget_0, 4, "Text column auto size", 200)
AddGadgetColumn(#Window_0_Gadget_0, 5, "Text center", 250)
AddGadgetColumn(#Window_0_Gadget_0, 6, "Text right", 150)
For i =0 To 3
AddGadgetItem(#Window_0_Gadget_0,i,"(standart)" + Chr(10) + "text center" + Chr(10) + "text right" + Chr(10) + "text center" + Chr(10) + "text right" + Chr(10) + "text item auto size" + Chr(10) + "text item auto size")
Next
ListIconText::Alignment(#Window_0_Gadget_0,0,ListIconText::#PB_ListIcon_TextLeft)
ListIconText::Alignment(#Window_0_Gadget_0,1,ListIconText::#PB_ListIcon_TextCenter)
ListIconText::Alignment(#Window_0_Gadget_0,2,ListIconText::#PB_ListIcon_TextRight)
ListIconText::Alignment(#Window_0_Gadget_0,3,ListIconText::#PB_ListIcon_TextColumnAutoSize|ListIconText::#PB_ListIcon_TextCenter)
ListIconText::Alignment(#Window_0_Gadget_0,4,ListIconText::#PB_ListIcon_TextColumnAutoSize|ListIconText::#PB_ListIcon_TextRight)
ListIconText::Alignment(#Window_0_Gadget_0,5,ListIconText::#PB_ListIcon_TextItemAutoSize|ListIconText::#PB_ListIcon_TextCenter)
ListIconText::Alignment(#Window_0_Gadget_0,6,ListIconText::#PB_ListIcon_TextItemAutoSize|ListIconText::#PB_ListIcon_TextRight)
BindEvent(#PB_Event_SizeWindow, @Resize(), #Window_0)
While IsWindow(#Window_0)
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
CloseWindow(EventWindow())
EndSelect
Wend
EndIf
End