; Module/File: TG_TooltipOnItems.pb ; Function: Get item (index) beyond mouseposition - Linux gtk2/gtk3 ; Author: Omi ; Date: Mar. 17, 2015 ; Version: 0.1 ; Target Compiler: PureBasic 5.22/5.31/5.40 ; Target OS: Linux: (X/K/L)ubuntu, Mint, 32/64, Ascii/Uni ;-------------------------------------------------------------- EnableExplicit ImportC "" gtk_tree_view_set_tooltip_column(*GtkTreeView, Column) gtk_tooltip_set_text(*tooltip, text.p-utf8) gtk_tooltip_set_icon_from_icon_name(*tooltip, stock_id.p-utf8, size) g_signal_connect(*instance, detailed_signal.p-utf8, *c_handler, *data, destroy= 0, flags= 0) As "g_signal_connect_data" gtk_tree_view_convert_widget_to_bin_window_coords(*tree_view, wx, wy, *bx, *by) EndImport ; Object constants #MainWin= 0 #TG1= 0 #BT1= 1 #WinX= 200 #WinY= 200 #WinW= 300 #WinH= 330 Global.i gEvent, gQuit, I Structure TREEVIEWDATA Path.l ItemIndex.l EndStructure ProcedureC Callback_TreeForEachPath2Index(*Model, *Path, *Iter, *user_data.TREEVIEWDATA) If gtk_tree_path_compare_(*Path, *user_data\Path) = 0 ProcedureReturn #True Else *user_data\ItemIndex + 1 ProcedureReturn #False EndIf EndProcedure ProcedureC Callback_TreeViewCheckTooltip(*Widget.GtkWidget, mX, mY, key, *tooltip, Gadget); user_data= Gadget Protected ItemIndex Protected Show= #False Protected *tModel= gtk_tree_view_get_model_(*Widget) Protected *tPath, *tColumn Protected TreeForEach_Data.TREEVIEWDATA gtk_tree_view_convert_widget_to_bin_window_coords(*Widget, mX, mY, @mX, @mY) If gtk_tree_view_get_path_at_pos_(*Widget, mX, mY, @*tPath, @*tColumn, #Null, #Null) If GadgetType(Gadget) = #PB_GadgetType_Tree TreeForEach_Data\ItemIndex = 0 TreeForEach_Data\Path = *tPath gtk_tree_model_foreach_(*tModel, @Callback_TreeForEachPath2Index(), @TreeForEach_Data) ItemIndex = TreeForEach_Data\ItemIndex If ItemIndex> -1 And ItemIndex< CountGadgetItems(Gadget) gtk_tooltip_set_text(*tooltip, "Own dynamic textes: " + #LF$ + GetGadgetItemText(Gadget, ItemIndex) + #LF$ + "Depth: " + Str(gtk_tree_path_get_depth_(*tPath))) ;you wanna icon? ... ;gtk_tooltip_set_icon_from_icon_name(*tooltip, "gtk-info", #GTK_ICON_SIZE_MENU) Show= #True EndIf gtk_tree_path_free_(*tPath) EndIf EndIf ProcedureReturn Show EndProcedure Procedure CreateWindow_Main() Protected.i I If OpenWindow(#MainWin, #WinX, #WinY, #WinW, #WinH, "TreeGadget - Tooltip on items", #PB_Window_SystemMenu) ButtonGadget(#BT1, 5, 5, #WinW-10, 26, "Tooltip automode (takes item-text)", #PB_Button_Toggle) TreeGadget(#TG1, 5, 35, #WinW-10, 275) For I = 0 To 10 AddGadgetItem (#TG1, -1, "Main node "+Str(I), 0, 0) AddGadgetItem(#TG1, -1, "Sub-Item " + Str(I) + ":0", 0, 1) AddGadgetItem(#TG1, -1, "Sub-Item " + Str(I) + ":1", 0, 1) AddGadgetItem(#TG1, -1, "Sub-Item " + Str(I) + ":2", 0, 1) AddGadgetItem(#TG1, -1, "Sub-node " + Str(I) + ":3", 0, 1) If I= 2 AddGadgetItem(#TG1, -1, "Sub-Item " + Str(I) + ":3:0", 0, 2) AddGadgetItem(#TG1, -1, "Sub-node " + Str(I) + ":3:1", 0, 2) AddGadgetItem(#TG1, -1, "Sub-Item " + Str(I) + ":3:1:0", 0, 3) AddGadgetItem(#TG1, -1, "Sub-Item " + Str(I) + ":3:1:1", 0, 3) AddGadgetItem(#TG1, -1, "Sub-Item " + Str(I) + ":3:1:1:0", 0, 4) AddGadgetItem(#TG1, -1, "Sub-Item " + Str(I) + ":3:1:1:1", 0, 4) EndIf Next I EndIf gtk_tree_view_expand_all_(GadgetID(#TG1)) gtk_tree_view_set_tooltip_column(GadgetID(#TG1), 2) g_signal_connect(GadgetID(#TG1), "query-tooltip", @Callback_TreeViewCheckTooltip(), #TG1, #Null, #Null) EndProcedure CreateWindow_Main() Repeat gEvent= WaitWindowEvent() Select gEvent Case #PB_Event_CloseWindow gQuit= #True Case #PB_Event_Gadget If EventGadget()= #BT1 If GetGadgetState(#BT1) gtk_tree_view_set_tooltip_column(GadgetID(#TG1), 3); automatic sets row-text as row-tooltip - no callback SetGadgetText(#BT1, "Own Tooltips in Callback") Else gtk_tree_view_set_tooltip_column(GadgetID(#TG1), 2) SetGadgetText(#BT1, "Tooltip automode (takes item-text)"); Own tooltips on rows - calls callback EndIf EndIf EndSelect Until gQuit ; IDE Options = PureBasic 5.44 LTS (Linux - x86) ; CursorPosition = 15 ; Folding = - ; EnableUnicode ; EnableXP