mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-21 15:29:25 +02:00
* Further development
git-svn-id: trunk@3693 -
This commit is contained in:
parent
86d9e04409
commit
bf2950a809
@ -27,7 +27,7 @@ type Pnode=^Tnode;
|
||||
procedure expandall(node:pointer);
|
||||
function firstthat(test:pointer):pointer;
|
||||
procedure focused(i:sw_integer);virtual;
|
||||
procedure foreach(node:pointer);
|
||||
procedure foreach(action:pointer);
|
||||
function getchild(node:pointer;i:sw_integer):pointer;virtual;
|
||||
function getgraph(level:integer;lines:longint;flags:word):string;
|
||||
function getnode(i:sw_integer):pointer;virtual;
|
||||
@ -36,7 +36,12 @@ type Pnode=^Tnode;
|
||||
function gettext(node:pointer):string;virtual;
|
||||
function haschildren(node:pointer):boolean;virtual;
|
||||
function isexpanded(node:pointer):boolean;virtual;
|
||||
destructor done;virtual;
|
||||
function isselected(i:sw_integer):boolean;virtual;
|
||||
procedure selected(i:sw_integer);virtual;
|
||||
procedure setstate(Astate:word;enable:boolean);virtual;
|
||||
procedure update;
|
||||
private
|
||||
procedure set_focus(Afocus:sw_integer);
|
||||
end;
|
||||
|
||||
Toutline=object(Toutlineviewer)
|
||||
@ -51,11 +56,13 @@ type Pnode=^Tnode;
|
||||
function gettext(node:pointer):string;virtual;
|
||||
function haschildren(node:pointer):boolean;virtual;
|
||||
function isexpanded(node:pointer):boolean;virtual;
|
||||
function isselected(node:pointer):boolean;virtual;
|
||||
procedure selected(i:sw_integer);virtual;
|
||||
procedure setstate(Astate:word;enable:boolean);virtual;
|
||||
destructor done;virtual;
|
||||
end;
|
||||
|
||||
const ovExpanded = $1;
|
||||
ovChildren = $2;
|
||||
ovLast = $4;
|
||||
|
||||
function newnode(const Atext:string;Achildren,Anext:Pnode):Pnode;
|
||||
procedure disposenode(node:Pnode);
|
||||
|
||||
@ -85,15 +92,13 @@ end;
|
||||
procedure disposenode(node:Pnode);
|
||||
|
||||
begin
|
||||
with node^ do
|
||||
while node<>nil do
|
||||
begin
|
||||
if childlist<>nil then
|
||||
disposenode(childlist);
|
||||
if next<>nil then
|
||||
disposenode(next)
|
||||
disposestr(text);
|
||||
disposenode(node^.childlist);
|
||||
disposestr(node^.text);
|
||||
dispose(node);
|
||||
node:=node^.next;
|
||||
end;
|
||||
dispose(node);
|
||||
end;
|
||||
|
||||
{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
|
||||
@ -109,7 +114,7 @@ begin
|
||||
growmode:=gfGrowHiX+gfGrowHiY;
|
||||
end;
|
||||
|
||||
procedure Toutlineviewer.adjust(node:pointer;expand:boolean);virtual;
|
||||
procedure Toutlineviewer.adjust(node:pointer;expand:boolean);
|
||||
|
||||
begin
|
||||
abstract;
|
||||
@ -277,10 +282,10 @@ begin
|
||||
abstract;
|
||||
end;
|
||||
|
||||
function Toutlineviewer.isexpanded(i:sw_integer):boolean;
|
||||
function Toutlineviewer.isselected(i:sw_integer):boolean;
|
||||
|
||||
begin
|
||||
isexpanded:=foc=i;
|
||||
isselected:=foc=i;
|
||||
end;
|
||||
|
||||
procedure Toutlineviewer.selected(i:sw_integer);
|
||||
@ -289,14 +294,44 @@ begin
|
||||
{Does nothing by default.}
|
||||
end;
|
||||
|
||||
procedure Toutlineviewer.set_focus(Afocus:sw_integer);
|
||||
|
||||
begin
|
||||
{}
|
||||
end;
|
||||
|
||||
procedure Toutlineviewer.setstate(Astate:word;enable:boolean);
|
||||
|
||||
begin
|
||||
if Astate and sffocused<>0 then
|
||||
drawview;
|
||||
inherited setstate(Astate);
|
||||
inherited setstate(Astate,enable);
|
||||
end;
|
||||
|
||||
procedure Toutlineviewer.update;
|
||||
|
||||
var count:sw_integer;
|
||||
maxwidth:byte;
|
||||
|
||||
procedure check_item(cur:pointer;level,position:sw_integer;
|
||||
lines:longint;flags:word);
|
||||
|
||||
var width:word;
|
||||
|
||||
begin
|
||||
inc(count);
|
||||
width:=length(gettext(cur))+length(getgraph(level,lines,flags));
|
||||
if width>maxwidth then
|
||||
maxwidth:=width;
|
||||
end;
|
||||
|
||||
begin
|
||||
count:=0;
|
||||
maxwidth:=0;
|
||||
foreach(@check_item);
|
||||
setlimit(maxwidth,count);
|
||||
set_focus(foc);
|
||||
end;
|
||||
|
||||
{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
|
||||
{ Toutline object methods }
|
||||
@ -308,7 +343,7 @@ constructor Toutline.init(var bounds:Trect;
|
||||
|
||||
begin
|
||||
inherited init(bounds,AHscrollbar,AVscrollbar);
|
||||
root:=Pnode;
|
||||
root:=Aroot;
|
||||
update;
|
||||
end;
|
||||
|
||||
@ -318,38 +353,32 @@ begin
|
||||
Pnode(node)^.expanded:=expand;
|
||||
end;
|
||||
|
||||
function Toutline.getroot:pointer;virtual;
|
||||
|
||||
begin
|
||||
getroot:=root;
|
||||
end;
|
||||
|
||||
function Toutline.getnumchildren(node:pointer):sw_integer;virtual;
|
||||
function Toutline.getnumchildren(node:pointer):sw_integer;
|
||||
|
||||
var p:Pnode;
|
||||
|
||||
begin
|
||||
p:=Pnode(node)^.childlist;
|
||||
get_num_children:=0;
|
||||
getnumchildren:=0;
|
||||
while p<>nil do
|
||||
begin
|
||||
inc(get_num_children);
|
||||
inc(getnumchildren);
|
||||
p:=p^.next;
|
||||
end;
|
||||
end;
|
||||
|
||||
function Toutline.getchild(node:pointer;i:sw_integer):pointer;virtual;
|
||||
function Toutline.getchild(node:pointer;i:sw_integer):pointer;
|
||||
|
||||
begin
|
||||
get_child:=Pnode(node)^.childlist;
|
||||
getchild:=Pnode(node)^.childlist;
|
||||
while i<>0 do
|
||||
begin
|
||||
dec(i);
|
||||
get_child:=get_child^.next;
|
||||
getchild:=Pnode(getchild)^.next;
|
||||
end;
|
||||
end;
|
||||
|
||||
function Toutlineviewer.getroot:pointer;
|
||||
function Toutline.getroot:pointer;
|
||||
|
||||
begin
|
||||
getroot:=root;
|
||||
@ -358,7 +387,7 @@ end;
|
||||
function Toutline.gettext(node:pointer):string;
|
||||
|
||||
begin
|
||||
gettext:=Pnode(node)^.text;
|
||||
gettext:=Pnode(node)^.text^;
|
||||
end;
|
||||
|
||||
function Toutline.haschildren(node:pointer):boolean;
|
||||
@ -367,7 +396,7 @@ begin
|
||||
haschildren:=Pnode(node)^.childlist<>nil;
|
||||
end;
|
||||
|
||||
function isexpanded(node:pointer):boolean;
|
||||
function Toutline.isexpanded(node:pointer):boolean;
|
||||
|
||||
begin
|
||||
isexpanded:=Pnode(node)^.expanded;
|
||||
@ -376,7 +405,8 @@ end;
|
||||
destructor Toutline.done;
|
||||
|
||||
begin
|
||||
dispose(root,done);
|
||||
disposenode(root);
|
||||
inherited done;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
Loading…
Reference in New Issue
Block a user