; Module/File: LIG_CellTextMarkup.pb
; Function: Formatted cell text in ListIconGadget - Linux gtk2/gtk3
; Author: Omi
; Date: Dec. 27, 2016
; Version: 0.1
; Target Compiler: PureBasic 5.22/5.3/5.4/5.5/5.6
; Target OS: Linux: (X/K/L)ubuntu, Mint, 32/64, Ascii/Uni
; Link to topic: http://www.purebasic.fr/english/viewtopic.php?f=15&t=60855
;--------------------------------------------------------------
;Be careful! Markups can cause hidden failures in the interaction PureBasic <-> gtk.
EnableExplicit
ImportC ""
g_type_check_instance_is_a(*instance.GTypeInstance, *type.GTypeClass)
gtk_cell_layout_get_cells(*cell_layout)
g_markup_escape_text(text.p-utf8, length)
;for method with GObjectSet ...
g_object_set_string(*object.GtkObject, property_name.p-utf8, property_data.p-utf8, v= 0) As "g_object_set"
;for method with GValue ...
; g_value_set_string (*value.GValue, v_string.p-utf8) As "g_value_set_string"
; g_object_set_property ( *object.GObject, property_name.p-utf8, *value.GValue)
EndImport
#Win_Main= 0
#LIG1= 0
#PANGO_SCALE= 1024
; #G_TYPE_STRING= 64; for method with GValue
Global.i gEvent, gQuit
; Global gVal.GValue; for method with GValue
Structure LISTICONCOLUMNDATA
GadgetNo.i
ColumnNo.i
EndStructure
Global gLigStruct.LISTICONCOLUMNDATA
ProcedureC Callback_SetColumnRenderer(*tree_column.GtkTreeViewColumn, *cell_renderer.GtkCellRenderer, *tree_model, *iter.GtkTreeIter, *user_data.LISTICONCOLUMNDATA)
Protected.s Text
Protected.i Item
Item= Val(PeekS(gtk_tree_model_get_string_from_iter_(*tree_model, *iter), -1, #PB_UTF8))
Select Item
Case 0
Text= "" + PeekS(g_markup_escape_text(GetGadgetItemText(*user_data\GadgetNo, Item, *user_data\ColumnNo), -1), -1, #PB_UTF8)+ ""
Case 1
Text= "" + PeekS(g_markup_escape_text(GetGadgetItemText(*user_data\GadgetNo, Item, *user_data\ColumnNo), -1), -1, #PB_UTF8)+ ""
Case 2
Text= "" + PeekS(g_markup_escape_text(GetGadgetItemText(*user_data\GadgetNo, Item, *user_data\ColumnNo), -1), -1, #PB_UTF8)+ ""
Case 3
Text= "" + PeekS(g_markup_escape_text(GetGadgetItemText(*user_data\GadgetNo, Item, *user_data\ColumnNo), -1), -1, #PB_UTF8)+ ""
Case 4
Text= "" + PeekS(g_markup_escape_text(GetGadgetItemText(*user_data\GadgetNo, Item, *user_data\ColumnNo), -1), -1, #PB_UTF8)+ ""
Case 5
Text= "" + PeekS(g_markup_escape_text(GetGadgetItemText(*user_data\GadgetNo, Item, *user_data\ColumnNo), -1), -1, #PB_UTF8)+ ""
Case 6
Text= "" + PeekS(g_markup_escape_text(GetGadgetItemText(*user_data\GadgetNo, Item, *user_data\ColumnNo), -1), -1, #PB_UTF8)+ ""
Case 7
Text= "" + PeekS(g_markup_escape_text(GetGadgetItemText(*user_data\GadgetNo, Item, *user_data\ColumnNo), -1), -1, #PB_UTF8)+ ""
Case 8
Text= "" + PeekS(g_markup_escape_text(GetGadgetItemText(*user_data\GadgetNo, Item, *user_data\ColumnNo), -1), -1, #PB_UTF8)+ ""
Case 9
Text= "" + PeekS(g_markup_escape_text(GetGadgetItemText(*user_data\GadgetNo, Item, *user_data\ColumnNo), -1), -1, #PB_UTF8)+ ""
Case 10
Text= "" + PeekS(g_markup_escape_text(GetGadgetItemText(*user_data\GadgetNo, Item, *user_data\ColumnNo), -1), -1, #PB_UTF8)+ ""
Case 11
Text= "" + PeekS(g_markup_escape_text(GetGadgetItemText(*user_data\GadgetNo, Item, *user_data\ColumnNo), -1), -1, #PB_UTF8)+ ""
Text+ "" + PeekS(g_markup_escape_text(GetGadgetItemText(*user_data\GadgetNo, Item, *user_data\ColumnNo), -1), -1, #PB_UTF8)+ ""
Case 12 To 20
Text= GetGadgetItemText(*user_data\GadgetNo, Item, *user_data\ColumnNo)
EndSelect
;for method with GValue ...
; g_value_unset_(@gVal)
; g_value_init_(@gVal, #G_TYPE_STRING)
; g_value_set_string(@gVal, Text)
; g_object_set_property(*cell_renderer, "markup", @gVal)
;for method with GObjectSet ...
g_object_set_string(*cell_renderer, "markup", Text)
EndProcedure
Procedure TreeViewColumn_ActivateMarkups(*TreeView.LISTICONCOLUMNDATA)
Protected.i I
Protected *Column.GtkTreeViewColumn= gtk_tree_view_get_column_(GadgetID(*TreeView\GadgetNo), *TreeView\ColumnNo)
Protected *Cell_Renderers.GList = gtk_cell_layout_get_cells(*Column)
Protected *Cell_Renderer.GtkCellRenderer
For I= 0 To g_list_length_(*Cell_Renderers) - 1
*Cell_Renderer= g_list_nth_data_(*Cell_Renderers, I)
If g_type_check_instance_is_a(*Cell_Renderer, gtk_cell_renderer_text_get_type_())
gtk_tree_view_column_set_cell_data_func_(*Column, *Cell_Renderer, @Callback_SetColumnRenderer(), *TreeView, #Null)
Break
EndIf
Next I
g_list_free_(*Cell_Renderers)
EndProcedure
If OpenWindow(#Win_Main, 100, 100, 640, 400, "Formatted text in ListIconGadget items")
ListIconGadget(#LIG1, 5, 5, 630, 390, " attribute or ", 340, #PB_ListIcon_GridLines)
AddGadgetColumn(#LIG1, 1, "Result", 270)
AddGadgetItem(#LIG1, -1, "span attribute: Link-like formatting, blue & underlined" + #LF$ + "http://www.chabba.de/LinuxAPI.html")
AddGadgetItem(#LIG1, -1, "span attribute: fgcolor" + #LF$ + "Foreground in 'red'")
AddGadgetItem(#LIG1, -1, "span attribute: bgcolor" + #LF$ + "Background in 'aqua'")
AddGadgetItem(#LIG1, -1, "span attribute: strikethrough" + #LF$ + "Strikethrough")
AddGadgetItem(#LIG1, -1, "span attribute: font_style" + #LF$ + "Font_Style 'italic'")
AddGadgetItem(#LIG1, -1, "span attribute: font_weight" + #LF$ + "Font_Weight 'bold'")
AddGadgetItem(#LIG1, -1, "span attribute: underline + underline_color" + #LF$ + "Underline 'double' + underline_color 'orange'")
AddGadgetItem(#LIG1, -1, "span attribute: font" + #LF$ + "Font 'Monospace 11'")
AddGadgetItem(#LIG1, -1, "span attribute: font_size" + #LF$ + "Font_Size '12'")
AddGadgetItem(#LIG1, -1, "span attribute: font_variant" + #LF$ + "Font_Variant 'smallcaps'")
AddGadgetItem(#LIG1, -1, "span attribute: font_stretch" + #LF$ + "Font_Stretch 'condensed'")
AddGadgetItem(#LIG1, -1, "span attribute: rise" + #LF$ + "Rise +/-'1024 x 4'")
AddGadgetItem(#LIG1, -1, "Convinience tag: Italic" + #LF$ + "Italic")
AddGadgetItem(#LIG1, -1, "Convinience tag: Bold" + #LF$ + "Bold")
AddGadgetItem(#LIG1, -1, "Convinience tag: Monospace font" + #LF$ + "Monospace font")
AddGadgetItem(#LIG1, -1, "Convinience tag: Underline" + #LF$ + "Underline")
AddGadgetItem(#LIG1, -1, "Convinience tag: smaller" + #LF$ + "smaller font")
AddGadgetItem(#LIG1, -1, "Convinience tag: larger" + #LF$ + "larger font")
AddGadgetItem(#LIG1, -1, "Convinience tag: Strikethrough" + #LF$ + "Strikethrough")
AddGadgetItem(#LIG1, -1, "Convinience tag: Subscript" + #LF$ + "here's Subscript")
AddGadgetItem(#LIG1, -1, "Convinience tag: Superscript" + #LF$ + "here's Superscript")
With gLigStruct; build a structure for Gadget and column in the Callback user_data
\GadgetNo= #LIG1
\ColumnNo= 1
TreeViewColumn_ActivateMarkups(@gLigStruct)
EndWith
Repeat
gEvent= WaitWindowEvent()
Select gEvent
Case #PB_Event_CloseWindow
gQuit= #True
Case #PB_Event_Gadget
Select EventGadget()
Case #LIG1
If EventType() = #PB_EventType_LeftDoubleClick
If GetGadgetState(#LIG1) > -1
Debug GetGadgetItemText(#LIG1, GetGadgetState(#LIG1), gLigStruct\ColumnNo)
EndIf
EndIf
EndSelect
EndSelect
Until gQuit
EndIf
; IDE Options = PureBasic 5.46 LTS Beta 2 (Linux - x86)
; CursorPosition = 12
; Folding = -
; EnableUnicode
; EnableXP