; 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