; Module/File: TG_SearchNative.pb ; Function: Native Search in TreeView, all depths - Linux gtk2/gtk3 ; Author: Omi ; Date: Mar. 06, 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 ; Object constants #MainWin= 0 #TG1= 0 #Txt= 1 #WinX= 200 #WinY= 200 #WinW= 300 #WinH= 400 Global.i gEvent, gQuit Global.s Dim Zeile(20) Structure TREEVIEWDATA Path.l ItemIndex.l PathString.s EndStructure Global TreeForEach_Data.TREEVIEWDATA ProcedureC Callback_TreeForEach2Index(*Model, *Path, *Iter, *userdata.TREEVIEWDATA) If PeekS(gtk_tree_path_to_string_(*Path), -1 ,#PB_UTF8)= *userdata\PathString; case-sensitive ProcedureReturn #True Else *userdata\ItemIndex + 1 ProcedureReturn #False EndIf EndProcedure Procedure.i TV_ItemIndexFromPathString(Gadget, PathString.s) Protected iter.GtkTreeIter Protected tPath Protected *tModel= gtk_tree_view_get_model_(GadgetID(Gadget)) gtk_tree_model_get_iter_first_(*tModel, @iter) tPath= gtk_tree_model_get_path_(*tModel, iter) If tPath TreeForEach_Data\ItemIndex = 0 TreeForEach_Data\Path = tPath TreeForEach_Data\PathString = PathString gtk_tree_model_foreach_(*tModel, @Callback_TreeForEach2Index(), TreeForEach_Data) gtk_tree_path_free_(tPath) EndIf If TreeForEach_Data\ItemIndex>= CountGadgetItems(Gadget) TreeForEach_Data\ItemIndex= -1 EndIf ProcedureReturn TreeForEach_Data\ItemIndex EndProcedure ProcedureC Callback_SearchInTreeView(*model, column, *key, iter, *search_data) Protected.i I, Index, Found= #True Protected tPath Protected.s STerm= PeekS(*key, -1, #PB_UTF8); current search-string in UTF8-Format Protected.s PathString tPath = gtk_tree_model_get_path_(*model, iter) PathString= PeekS(gtk_tree_path_to_string_(tPath), -1, #PB_UTF8) Index = TV_ItemIndexFromPathString(#TG1, PathString); like PB-ItemIndex ;If LCase(Left(GetGadgetItemText(#TG1, Index), Len(STerm))) = LCase(STerm); Search 'from left', or If FindString(GetGadgetItemText(#TG1, Index), STerm, 1, #PB_String_NoCase); Search InString Found= #False EndIf gtk_tree_path_free_(tPath) ProcedureReturn Found; #False = Found ! EndProcedure ; ***** Procedure CreateWindow_Main() Protected.i I, O Protected.s S If OpenWindow(#MainWin, #WinX, #WinY, #WinW, #WinH, "Native search in TreeView", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) TreeGadget(#TG1, 5, 30, 290, 355, #PB_ListIcon_AlwaysShowSelection) TextGadget(#Txt, 5, 5, 290, 20, "select row and type the search item ...") Restore FamilyMembers For I= 0 To 4 Read.s S AddGadgetItem(#TG1, -1, S, #Null, 0) For O= 0 To 2 Read.s S AddGadgetItem(#TG1, -1, S, #Null, 1) Next O Next I gtk_tree_view_expand_all_(GadgetID(#TG1)); must be expanded gtk_tree_view_set_enable_search_(GadgetID(#TG1), #True); must be ON ;gtk_tree_view_set_search_column_(GadgetID(#TG1), 2); set column (=depth) 2 for search, off=all columns gtk_tree_view_set_search_equal_func_(GadgetID(#TG1), @Callback_SearchInTreeView(), #Null, 1); set function for verification EndIf EndProcedure CreateWindow_Main() Repeat gEvent= WaitWindowEvent() Select gEvent Case #PB_Event_CloseWindow gQuit= #True EndSelect Until gQuit End DataSection FamilyMembers: Data.s "Bauer", "Adam", "Bert", "David", "Müller", "Ernst", "Franz", "Georg", "Groß", "Herrmann", "Josef", "Klaus", "König", "Ludwig", "Manfred", "Norbert", "Schneider", "Otto", "Paul", "Bärbel" EndDataSection ; IDE Options = PureBasic 5.40 LTS (Linux - x86) ; CursorPosition = 7 ; Folding = - ; EnableUnicode ; EnableXP ; CurrentDirectory = /home/charly-xubuntu/Programming/PureBasic/purebasic/