$typecheck on
$include "fileops.inc"
type QtreeviewEx extends Qtreeview
function getparent (i as integer) as integer
Dim startlevel as integer
startlevel = QtreeviewEx.item(i).level
if startlevel = 0 then result = -1
if i = -1 then result = i
do
if QtreeviewEx.item(i).level < startlevel then Exit do
dec(i)
loop until i = -1
result = i
end function
'_______________________________________________________________________________
function getindex(from as integer, itemtext as string) as integer
dim i as integer
i = From
do
if QtreeviewEx.item(i).text = itemtext then exit do
inc(i)
loop until i = QtreeviewEx.itemcount
if i = QtreeviewEx.itemcount then i = -1
result = i
end function
'_______________________________________________________________________________
function strgetparent(itemtext as string) as integer
dim i as integer
with QtreeviewEx
i = .getindex(0, itemtext)
i = .getparent(i)
result = i
end with
end function
'_______________________________________________________________________________
Function getchildrenlist (i as integer) as string
if QtreeviewEx.item(i).haschildren = 0 then result = ""
dim startlevel as integer
dim templist as string
templist = ""
startlevel = QtreeviewEx.item(i).level + 1
inc(i)
do
if QtreeviewEx.item(i).level = startlevel then
templist = templist + QtreeviewEx.item(i).text + ","
elseif QtreeviewEx.item(i).level < startlevel then
exit do
end if
inc(i)
loop until i = QtreeviewEx.itemcount
result = left$(templist, len(templist) - 1)
end function
'_______________________________________________________________________________
sub addchildto (startfrom as integer, itemtext as string, childtext as string)
with QtreeviewEx
.addchilditems (.getindex(startfrom, itemtext), childtext)
end with
end sub
'_______________________________________________________________________________
function Branchlength (i as integer) as integer
defint startlevel, x, y
with qtreeviewex
if .item(i).haschildren = 0 then
result = 1
else
startlevel = .item(i).level
x = i + 1
y = .itemcount
if x = y then result = 0
do
if .item(x).level <= startlevel then
exit do
else
inc(x)
end if
loop until x = y
result = x - i
end if
end with
end function
'_______________________________________________________________________________
sub MoveDown (i as integer)
defint x,y, startlevel, destindex, howmany
dim sl as qstringlist
with QtreeviewEx
x = i + 1
y = .itemcount
if i = y then exit sub
startlevel = .item(i).level
do
if .item(x).level = startlevel then
destindex = x + .branchlength(x) - 1
exit do
elseif .item(x).level < startlevel then
exit sub
end if
inc(x)
loop until x = y
.savetofile (homedir + "tmp_tree.tv")
end with
with sl
.loadfromfile (homedir + "tmp_tree.tv")
howmany = Qtreeviewex.branchlength(i)
x = 0
do
if destindex = y then
.additems .item(i)
.delitems(i)
else
.insertitem (destindex + 1, .item(i).text)
.delitems(i)
end if
inc(x)
loop until x = howmany
.savetofile (homedir + "tmp_tree.tv")
end with
Qtreeviewex.loadfromfile (homedir + "tmp_tree.tv")
Qtreeviewex.itemindex = i + Qtreeviewex.branchlength(i)
kill(homedir + "tmp_tree.tv")
end sub
'_______________________________________________________________________________
sub MoveUp (i as integer)
defint x,y, startlevel, destindex
with QtreeviewEx
if i = 0 then exit sub
startlevel = .item(i).level
x = i - 1
do
if .item(x).level = startlevel then
destindex = x
exit do
elseif .item(x).level < startlevel then
exit sub
end if
dec(x)
loop until x = -1
.movedown(destindex)
.itemindex = destindex
end with
end sub
'_______________________________________________________________________________
sub IncLevel (i as integer)
defint x,y, startlevel
dim sl as qstringlist
startlevel = QtreeviewEx.item(i).level
x = i
if i = 0 then exit sub
with QtreeviewEx
do
if .item(x).level = startlevel then
exit do
elseif .item(x).level > startlevel then
exit sub
end if
dec(x)
loop until x = -1
.savetofile (homedir + "tmp_tree.tv")
end with
with sl
.loadfromfile (homedir + "tmp_tree.tv")
x = 0
y = QtreeviewEx.branchlength(i)
do
.item(x + i) = chr$(9) + .item(x + i)
inc(x)
loop until x = y
.savetofile (homedir + "tmp_tree.tv")
end with
QtreeviewEx.loadfromfile (homedir + "tmp_tree.tv")
QtreeviewEx.itemindex = i
kill (homedir + "tmp_tree.tv")
end sub
'_______________________________________________________________________________
sub DecLevel (i as integer)
defint x,y, parentindex
dim sl as qstringlist
with QtreeviewEx
if .item(i).level = 0 then exit sub
parentindex = .getparent(i)
y = .branchlength(i)
.savetofile (homedir + "tmp_tree.tv")
end with
with sl
.loadfromfile (homedir + "tmp_tree.tv")
x = 0
do
.insertitem(parentindex + x, right$(.item(i + x), len(.item(i + x)) - 1))
.delitems(i + x + 1)
inc(x)
loop until x = y
.savetofile (homedir + "tmp_tree.tv")
end with
QtreeviewEx.loadfromfile (homedir + "tmp_tree.tv")
QtreeviewEx.itemindex = parentindex - 1
kill (homedir + "tmp_tree.tv")
end sub
end type
'===============================================================================