; Module/File: TV_ItemOnHover.pb ; Function: Get PB-TreeGadget-Item-Index on Hover - 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) g_signal_connect(*instance, detailed_signal.p-utf8, *c_handler, *data, destroy= 0, flags= 0) As "g_signal_connect_data" EndImport ; Object constants #MainWin= 0 #TG1= 0 #Text1= 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_TreeViewGetIndex(*Widget.GtkWidget, mX, mY, key, *tooltip, Gadget); user_data= Gadget Protected ItemIndex Protected *tModel= gtk_tree_view_get_model_(*Widget) Protected *tPath, *tColumn Protected TreeForEach_Data.TREEVIEWDATA 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 SetGadgetText(#Text1, "Item under Mouse: "+ Str(ItemIndex)) gtk_tree_path_free_(*tPath) EndIf EndIf ProcedureReturn #False; no action EndProcedure Procedure CreateWindow_Main() Protected.i I If OpenWindow(#MainWin, #WinX, #WinY, #WinW, #WinH, "TreeGadget - Get Item-Index", #PB_Window_SystemMenu) TextGadget(#Text1, 5, 5, #WinW-10, 26, "") TreeGadget(#TG1, 5, 35, #WinW-10, 290) 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)) EndProcedure CreateWindow_Main() gtk_tree_view_set_tooltip_column(GadgetID(#TG1), 2) g_signal_connect(GadgetID(#TG1), "query-tooltip", @Callback_TreeViewGetIndex(), #TG1, #Null, #Null); use tooltip-signal Repeat gEvent= WaitWindowEvent() Select gEvent Case #PB_Event_CloseWindow gQuit= #True EndSelect Until gQuit ; IDE Options = PureBasic 5.44 LTS (Linux - x86) ; CursorPosition = 13 ; Folding = - ; EnableUnicode ; EnableXP