
Code: Select all
EnableExplicit
ImportC ""
gtk_scale_add_mark(*TrackBar.GtkScale, Value.D, Position.I, *MarkupText)
gtk_tree_view_column_get_cell_renderers(*Column.GtkTreeViewColumn)
EndImport
Define *CellRenderer.GtkCellRenderer
Define CellRendererList.I
Define Column.I
Define i.I
Define OldRowHeight.L
Define RowHeight.L
Define RowWidth.L
Define TickMarkLabel.S
Define WindowEvent.I
Define xOffset.L
Define yOffset.L
OpenWindow(0, 200, 100, 418, 200, "Change ListIcon's row height")
ListIconGadget(0, 10, 10, WindowWidth(0) - 20, 94, "Name", 110, #PB_ListIcon_GridLines)
AddGadgetColumn(0, 1, "Address", GadgetWidth(0) - GetGadgetItemAttribute(0, 0, #PB_ListIcon_ColumnWidth) - 30)
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, "Didi Foundit" + #LF$ + "321 Logo Drive, Mouse House, Downtown")
Frame3DGadget(1, 10, GadgetY(0) + GadgetHeight(0) + 10, WindowWidth(0) - 20, 90, "Row height:")
TrackBarGadget(2, GadgetX(1) + 10, GadgetY(1) + 20, GadgetWidth(1) - 20, 55, 18, 40, #PB_TrackBar_Ticks)
; ----- Draw even tick marks with labels
For i = 18 To 40 Step 2
TickMarkLabel = Str(i)
gtk_scale_add_mark(GadgetID(2), i, #GTK_POS_BOTTOM, @TickMarkLabel)
Next i
; ----- Draw uneven tick marks without labels
For i = 19 To 39 Step 2
gtk_scale_add_mark(GadgetID(2), i, #GTK_POS_BOTTOM, 0)
Next i
; ----- Get column 0
Column = gtk_tree_view_get_column_(GadgetID(0), 0)
If Column
; ----- Get list of cell renderers for column 0
CellRendererList = gtk_tree_view_column_get_cell_renderers(Column)
If CellRendererList
; ----- Get 2nd cell renderer from list to obtain current row height
*CellRenderer = g_list_nth_data_(CellRendererList, 1)
; ----- Get current row height and display it in TrackBar
gtk_cell_renderer_get_size_(*CellRenderer, GadgetID(0), 0, @xOffset, @yOffset, @RowWidth, @RowHeight)
SetGadgetState(2, RowHeight)
OldRowHeight = RowHeight
; ----- Get 1st cell renderer from list for changing row height
*CellRenderer = g_list_nth_data_(CellRendererList, 0)
EndIf
EndIf
Repeat
WindowEvent = WaitWindowEvent()
Select WindowEvent
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
If EventGadget() = 2
; ----- Set new row height
RowHeight = GetGadgetState(2)
If RowHeight <> OldRowHeight
*CellRenderer\height = RowHeight
gtk_tree_view_column_clear_attributes_(Column, *CellRenderer)
OldRowHeight = RowHeight
EndIf
EndIf
EndSelect
ForEver
I presume that you don't get the function of ypad correctly. I have written a second example code which lets you dynamically change the value of ypad and see the resulting effect: beginning with a ypad value of 8 (in KDE) the text is vertically moved down in a column until it is only partly visible. You can't move it upwards. The row's height never changes when changing the ypad value:mdp wrote:NOW, if I increase a GtkCellRenderer\ypad ('ypad' can be replaced to 'height' in the example from Shardik), the row becomes taller, but how is it that if I try to zero that GtkCellRenderer\ypad, nothing happens?

Code: Select all
EnableExplicit
ImportC ""
gtk_scale_add_mark(*TrackBar.GtkScale, Value.D, Position.I, *MarkupText)
gtk_tree_view_column_get_cell_renderers(*Column.GtkTreeViewColumn)
EndImport
Procedure ChangeVerticalTextAlignment(NewYPad.L)
Protected *CellRenderer.GtkCellRenderer
Protected CellRendererList.I
Protected Column.I
; ----- Get column 0
Column = gtk_tree_view_get_column_(GadgetID(0), 0)
; ----- Get 2nd cell renderer from list of cell renderers of column 0
If Column
CellRendererList = gtk_tree_view_column_get_cell_renderers(Column)
If CellRendererList
*CellRenderer = g_list_nth_data_(CellRendererList, 1)
g_list_free_(CellRendererList)
*CellRenderer\height = 30
*CellRenderer\ypad = NewYPad
EndIf
gtk_widget_queue_draw_(GadgetID(0))
EndIf
EndProcedure
Define i.I
Define TickMarkLabel.S
Define NewYPad.L
Define OldYPad.L
OpenWindow(0, 200, 100, 413, 240, "Change vertical text position in column 0")
ListIconGadget(0, 10, 10, WindowWidth(0) - 20, 124, "Name", 110, #PB_ListIcon_GridLines)
AddGadgetColumn(0, 1, "Address", GadgetWidth(0) - GetGadgetItemAttribute(0, 0, #PB_ListIcon_ColumnWidth) - 30)
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, "Didi Foundit" + #LF$ + "321 Logo Drive, Mouse House, Downtown")
NewYPad = 2
OldYPad = 2
ChangeVerticalTextAlignment(NewYPad)
Frame3DGadget(1, 10, GadgetY(0) + GadgetHeight(0) + 10, WindowWidth(0) - 20, 90, "Vertical text alignment in column 0:")
TrackBarGadget(2, GadgetX(1) + 10, GadgetY(1) + 20, GadgetWidth(1) - 20, 55, 0, 20, #PB_TrackBar_Ticks)
For i = 0 To 20 Step 2
TickMarkLabel = Str(i)
gtk_scale_add_mark(GadgetID(2), i, #GTK_POS_BOTTOM, @TickMarkLabel)
Next i
For i = 1 To 19 Step 2
gtk_scale_add_mark(GadgetID(2), i, #GTK_POS_BOTTOM, 0)
Next i
SetGadgetState(2, NewYPad)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
If EventGadget() = 2
; ----- Set new vertical text position in row
NewYPad = GetGadgetState(2)
If NewYPad <> OldYPad
ChangeVerticalTextAlignment(NewYPad)
OldYPad = NewYPad
EndIf
EndIf
EndSelect
ForEver