Jump to content

Finding indes of item selcted in the tree


ShikiPiki
 Share

Go to solution Solved by kylomas,

Recommended Posts

So, I've been creating a treeview using the GUICtrlCreateTreeView help file and so far what I have is a tree view with

item 1

sub item 1- 5

item 2

sub item 1-5

Next to the tree is a list, and the user can add items from the tree. All of these functions work as intended however now what I'm trying to do with the items added is the following:

When I select item 1/ subitem 3 and press the add button. not only do i want it to add it to the list but i want to get its indices. So as a return i would want something like [1,3] and save it to an array.

I've been snooping around for a function to get these indices and I’ve come across a topic which speaks of developing something like it.. But i can't seem to find any complete functions. Is there one for it?

The reason why I want the indices is because when i populate my tree list i take it from a 10 by 5 array and use the first 2 columns, the first being the item number and the 2nd being the item name. Item 3,4 and 5 are all properties which I will use to make calculations but I don't want the user to see these properties because it would not be neat. So, once I add the items I need their indices so i can go back to the proper location in the original array and find what properties the item they added have and do calculations.

Maybe there is a more simple way to do this which is why I wished to explain in full detail my objective.

Thank you.

-Shikipiki

Edit1 : Fixed some grammar and spelling mistakes to be more clear. Sorry If I am unclear.

Edited by ShikiPiki

Thanks! -ShikiPiki

Link to comment
Share on other sites

ShikiPiki,

One way to get the parent / child (assumes only two levels for tree control...

#include <GUIConstantsEx.au3>
#include <GuiTreeView.au3>

#AutoIt3Wrapper_Add_Constants=n

local $gui010   =   guicreate('TreeView Example',400,600)
local $hTV      =   guictrlcreatetreeview(20,20,300,500)
local $btn010   =   guictrlcreatebutton('Press Me!',20,550,360,20)

; populate treeview

local $hItem

for $1 = 0 to 9
    $hItem = _guictrltreeview_add($hTV,0,'Item - ' & stringformat('%03i',$1))
    for $2 = 0 to random(1,10,1)
        _GUICtrlTreeView_AddChild($hTV,$hItem,'Child - ' & stringformat('%03i',$2))
    Next
Next

guisetstate()

while 1
    switch guigetmsg()
        case $gui_event_close
            Exit
        case $btn010
            _show_tree()
    endswitch
wend

func _show_tree()

    local $hSel, $hParent
    $hSel = _guictrltreeview_getselection($hTV)
    $hParent = _GUICtrlTreeView_GetParentHandle($hTV,$hSel)
    if $hParent <> 0 then _
        ConsoleWrite(_GUICtrlTreeView_GetText($hTV,$hParent) & '\' & _GUICtrlTreeView_GetText($hTV,$hSel) & @LF)

endfunc

kylomas

edit: changed code to not output console message if top level selection

Edited by kylomas

Forum Rules         Procedure for posting code

"I like pigs.  Dogs look up to us.  Cats look down on us.  Pigs treat us as equals."

- Sir Winston Churchill

Link to comment
Share on other sites

  • Solution

ShikiPiki,

This one is more flexible.  It will return the parent tree from the selected item anywhere in the tree...

#include <GUIConstantsEx.au3>
#include <GuiTreeView.au3>

#AutoIt3Wrapper_Add_Constants=n

local $gui010   =   guicreate('TreeView Example',400,600)
local $hTV      =   guictrlcreatetreeview(20,20,300,500)
local $btn010   =   guictrlcreatebutton('Press Me!',20,550,360,20)

; populate treeview

local $hItem

for $1 = 0 to 9
    $hItem = _guictrltreeview_add($hTV,0,'Item - ' & stringformat('%03i',$1))
    for $2 = 0 to random(1,10,1)
        $hChild = _GUICtrlTreeView_AddChild($hTV,$hItem,'Child - ' & stringformat('%03i',$2))
        for $3 = 0 to random(1,5,1)
            $hSubChild = _guictrltreeview_addchild($hTV,$hChild,'Sub-Child - ' & stringformat('%03i',$3))
            for $4 = 0 to random(1,5,1)
                _guictrltreeview_addchild($hTV,$hSubChild,'Sub-Sub-Child - ' & stringformat('%03i',$4))
            next
        next
    Next
Next

guisetstate()

while 1
    switch guigetmsg()
        case $gui_event_close
            Exit
        case $btn010
            consolewrite(_show_tree() & @lf)
    endswitch
wend

func _show_tree()

    local $hSel, $hParent, $sTree = '', $idx = 0
    $hSel = _guictrltreeview_getselection($hTV)
    $hParent = _GUICtrlTreeView_GetParentHandle($hTV,$hSel)
    $sTree &= _GUICtrlTreeView_GetText($hTV,$hSel) & ','
    $sTree &= _GUICtrlTreeView_GetText($hTV,$hParent) & ','

    while 1

        $hSel = $hParent
        $hParent = _GUICtrlTreeView_GetParentHandle($hTV,$hSel)
        if $hParent = 0 then exitloop
        $sTree &= _GUICtrlTreeView_GetText($hTV,$hParent) & ','

    wend

    local $aTMP = stringsplit(stringtrimright($sTree,1),',',2)

    $sTree = ''

    for $1 = ubound($aTMP) -1 to 0 step -1
        $sTree &= $aTMP[$1] & ' \ '
    Next

    return stringtrimright($sTree,3)

endfunc

kylomas

Forum Rules         Procedure for posting code

"I like pigs.  Dogs look up to us.  Cats look down on us.  Pigs treat us as equals."

- Sir Winston Churchill

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...