; Module/File: LIG_HeaderCellTextColor_gtk3.pb ; Function: Change column header cells text color - Linux gtk3 ; Author: Omi ; Date: Aug. 28, 2017 ; 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 ;-------------------------------------------------------------- ;function depends on window manager & theme EnableExplicit ImportC "" gtk_tree_view_get_column(*tree_view.GtkTreeView, n) gtk_tree_view_column_get_widget(*tree_column.GtkTreeViewColumn) gtk_tree_view_column_set_clickable(*Column.GtkTreeViewColumn, clickable) gdk_rgba_parse(*rgba, spec.p-utf8) gtk_widget_override_color(*widget.GtkWidget, state, color) gtk_widget_get_name(*widget.GtkWidget) EndImport Structure GdkRGBA red.d green.d blue.d alpha.d EndStructure ;Object constants #Win_Main= 0 #LIG = 0 Global.i gEvent, gQuit Global bgcolor.GdkRGBA Enumeration GtkStateFlags #GTK_STATE_FLAG_NORMAL = 0 ; #GTK_STATE_FLAG_ACTIVE = 1 << 0 ; #GTK_STATE_FLAG_PRELIGHT = 1 << 1 #GTK_STATE_FLAG_SELECTED = 1 << 2 ; #GTK_STATE_FLAG_INSENSITIVE = 1 << 3 ; #GTK_STATE_FLAG_INCONSISTENT= 1 << 4 ; #GTK_STATE_FLAG_FOCUSED = 1 << 5 ; #GTK_STATE_FLAG_BACKDROP = 1 << 6 ; #GTK_STATE_FLAG_DIR_LTR = 1 << 7 ; #GTK_STATE_FLAG_DIR_RTL = 1 << 8 ; #GTK_STATE_FLAG_LINK = 1 << 9 ; #GTK_STATE_FLAG_VISITED = 1 << 10 ; #GTK_STATE_FLAG_CHECKED = 1 << 11 EndEnumeration Procedure TV_SetColumnHeaderCellForeground(Gadget, Column, Clickable, Color.s= "") Protected *Column= gtk_tree_view_get_column(GadgetID(Gadget), Column) Protected *Widget.GtkWidget, *Button.GtkWidget If *Column If Clickable gtk_tree_view_column_set_clickable(*Column, #True); make column clickable too EndIf *Widget= gtk_tree_view_column_get_widget(*Column) If *Widget If PeekS(gtk_widget_get_name(*widget), -1, #PB_UTF8) = "GtkLabel" ;Button foreground ... *Button= gtk_widget_get_parent_(gtk_widget_get_parent_(gtk_widget_get_parent_(*Widget))) If PeekS(gtk_widget_get_name(*Button), -1, #PB_UTF8) = "GtkButton"; change the button foreground gdk_rgba_parse(@bgcolor, Color) gtk_widget_override_color(gtk_widget_get_parent_(gtk_widget_get_parent_(gtk_widget_get_parent_(*Widget))), #GTK_STATE_FLAG_NORMAL, bgcolor) ; gtk_widget_override_color(gtk_widget_get_parent_(gtk_widget_get_parent_(gtk_widget_get_parent_(*Widget))), #GTK_STATE_FLAG_SELECTED, bgcolor) Else Debug "No GtkButton found to change foreground!" EndIf EndIf EndIf EndIf EndProcedure Procedure CreateWindow_Main() Protected.i I If OpenWindow(#Win_Main, 0, 0, 600, 400, "ListIcon Header cell font color (gtk3)", #PB_Window_SystemMenu |#PB_Window_ScreenCentered) ListIconGadget(#LIG, 10, 10, 580, 380, "'Black' (selectable)", 150, #PB_ListIcon_AlwaysShowSelection | #PB_ListIcon_GridLines) AddGadgetColumn(#LIG, 1, "'Purple' as rgb()", 150) AddGadgetColumn(#LIG, 2, "'#A52A2A' (selectable)", 150) AddGadgetColumn(#LIG, 3, "'#0000C8' + ⍺= 179", 150) TV_SetColumnHeaderCellForeground(#LIG, 0, #True, "Black") TV_SetColumnHeaderCellForeground(#LIG, 1, #False, "rgb(128,0,128)") TV_SetColumnHeaderCellForeground(#LIG, 2, #True, "#A52A2A") TV_SetColumnHeaderCellForeground(#LIG, 3, #False, "rgba(0,0,200,0.7)") For I= 0 To 9 AddGadgetItem(#LIG, -1, "Cell " + Str(I) + "-0" + #LF$ + "Cell " + Str(I) + "-1" + #LF$ + "Cell " + Str(I) + "-2" + #LF$ + "Cell " + Str(I) + "-3") Next I EndIf EndProcedure CreateWindow_Main() Repeat gEvent= WaitWindowEvent() Select gEvent Case #PB_Event_CloseWindow gQuit= #True EndSelect Until gQuit ; IDE Options = PureBasic 5.44 LTS (Linux - x86) ; CursorPosition = 16 ; FirstLine = 27 ; Folding = - ; EnableUnicode ; EnableXP