; Module/File: TV_ItemIsNode.pb ; Function: Query whether item is a 'node' - Linux gtk2/gtk3 ; Author: Omi ; Date: Jan. 30, 2016 ; 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 #But1= 0 #TG1 = 1 Global.i gEvent, gQuit Global.i gI Structure TREEVIEWDATA Path.i Node.i SearchIndex.l ItemIndex.l PathString.s EndStructure Global TreeForEach_Data.TREEVIEWDATA ProcedureC Callback_TreeForEach2String(*Model, *Path, *Iter, *userdata.TREEVIEWDATA) If *userdata\ItemIndex= *userdata\SearchIndex *userdata\Node= gtk_tree_model_iter_has_child_(*Model, *Iter) ProcedureReturn #True Else *userdata\ItemIndex + 1 *userdata\Node= gtk_tree_model_iter_has_child_(*Model, *Iter) ProcedureReturn #False EndIf EndProcedure Procedure.i TV_ItemIsNode(Gadget, ItemIndex) Protected iter.GtkTreeIter Protected tPath Protected *tModel= gtk_tree_view_get_model_(GadgetID(Gadget)) Protected IsNode gtk_tree_model_get_iter_first_(*tModel, @iter) tPath= gtk_tree_model_get_path_(*tModel, iter) If tPath TreeForEach_Data\ItemIndex = 0 TreeForEach_Data\SearchIndex = ItemIndex gtk_tree_model_foreach_(*tModel, @Callback_TreeForEach2String(), @TreeForEach_Data) IsNode= TreeForEach_Data\Node gtk_tree_path_free_(tPath); ??? EndIf ProcedureReturn IsNode EndProcedure ; ***** Procedure CreateWindow_Main() Protected.i I If OpenWindow(#MainWin, 200, 200, 450, 330, "TreeGadget - item is node?", #PB_Window_SystemMenu) ButtonGadget(#But1, 5, 5, 440, 26, "Query 'node'-state of items ...") TreeGadget(#TG1, 5, 35, 440, 290) For I = 0 To 2 AddGadgetItem (#TG1, -1, "Node Item "+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= 1 AddGadgetItem(#TG1, -1, "Sub-Item 1:3:0", 0, 2) AddGadgetItem(#TG1, -1, "Sub-node 1:3:1", 0, 2) AddGadgetItem(#TG1, -1, "Sub-Item 1:3:1:0", 0, 3) AddGadgetItem(#TG1, -1, "Sub-Item 1:3:1:1", 0, 3) EndIf Next I EndIf gtk_tree_view_expand_all_(GadgetID(#TG1)) EndProcedure CreateWindow_Main() Repeat gEvent= WaitWindowEvent() Select gEvent Case #PB_Event_CloseWindow gQuit= #True Case #PB_Event_Gadget If EventGadget() = #But1 For gI= 0 To CountGadgetItems(#TG1)- 1 Debug "Item " + RSet(Str(gI), 2) + " '" + GetGadgetItemText(#TG1, gI) + "' is node: " + Str(TV_ItemIsNode(#TG1, gI)) Next gI EndIf EndSelect Until gQuit ; IDE Options = PureBasic 5.45 LTS (Linux - x86) ; CursorPosition = 3 ; Folding = - ; EnableUnicode ; EnableXP