Fixed codetools node cache and added icons

git-svn-id: trunk@3638 -
This commit is contained in:
mattias 2002-11-15 15:07:11 +00:00
parent 912fe26086
commit bec5c13181
10 changed files with 591 additions and 66 deletions

3
.gitattributes vendored
View File

@ -389,10 +389,12 @@ images/components/tsavepicturedialog.xpm -text svneol=native#image/x-xpixmap
images/components/tscrollbar.ico -text svneol=unset#image/x-icon
images/components/tscrollbar.xpm -text svneol=native#image/x-xpixmap
images/components/tscrollbox.xpm -text svneol=native#image/x-xpixmap
images/components/tshape.xpm -text svneol=native#image/x-xpixmap
images/components/tspeedbutton.ico -text svneol=unset#image/x-icon
images/components/tspeedbutton.xpm -text svneol=native#image/x-xpixmap
images/components/tspinedit.ico -text svneol=unset#image/x-icon
images/components/tspinedit.xpm -text svneol=native#image/x-xpixmap
images/components/tstatictext.xpm -text svneol=native#image/x-xpixmap
images/components/tstatusbar.ico -text svneol=unset#image/x-icon
images/components/tstatusbar.xpm -text svneol=native#image/x-xpixmap
images/components/ttimer.ico -text svneol=unset#image/x-icon
@ -404,6 +406,7 @@ images/components/ttoolbar.xpm -text svneol=native#image/x-xpixmap
images/components/ttrackbar.ico -text svneol=unset#image/x-icon
images/components/ttrackbar.xpm -text svneol=native#image/x-xpixmap
images/components/ttreeview.xpm -text svneol=native#image/x-xpixmap
images/components/tupdown.xpm -text svneol=native#image/x-xpixmap
images/components/unregisteredcomponent.xpm -text svneol=native#image/x-xpixmap
images/components_images.lrs svneol=native#text/pascal
images/downarrow.ico -text svneol=unset#image/x-icon

View File

@ -125,6 +125,8 @@ function FindCommentEnd(const ASource: string; StartPos: integer;
NestedComments: boolean): integer;
function FindNextCompilerDirective(const ASource: string; StartPos: integer;
NestedComments: boolean): integer;
function CleanCodeFromComments(const DirtyCode: string;
NestedComments: boolean): string;
// line ranges and indent
procedure GetLineStartEndAtPosition(const Source:string; Position:integer;
@ -169,11 +171,15 @@ function CompareSubStrings(const Find, Txt: string;
FindStartPos, TxtStartPos, Len: integer; CaseSensitive: boolean): integer;
function CompareIdentifiers(Identifier1, Identifier2: PChar): integer;
//
function CleanCodeFromComments(const DirtyCode: string;
NestedComments: boolean): string;
// space and special chars
function TrimCodeSpace(const ACode: string): string;
function CodeIsOnlySpace(const ACode: string; FromPos, ToPos: integer): boolean;
function StringToPascalConst(const s: string): string;
// other useful stuff
procedure RaiseCatchableException(const Msg: string);
//-----------------------------------------------------------------------------
@ -1853,7 +1859,7 @@ begin
ReadComment(DirtyPos);
end;
end;
Result:=LeftStr(Result,CleanPos);
SetLength(Result,CleanPos-1);
end;
function CompareIdentifiers(Identifier1, Identifier2: PChar): integer;
@ -1990,6 +1996,68 @@ begin
end;
end;
function StringToPascalConst(const s: string): string;
function Convert(var DestStr: string): integer;
var
SrcLen, SrcPos, DestPos: integer;
c: char;
i: integer;
begin
SrcLen:=length(s);
DestPos:=0;
for SrcPos:=1 to SrcLen do begin
inc(DestPos);
c:=s[SrcPos];
if c>=' ' then begin
if DestStr<>'' then
DestStr[DestPos]:=c;
end else begin
if DestStr<>'' then
DestStr[DestPos]:='#';
inc(DestPos);
i:=ord(c);
if i>=100 then begin
if DestStr<>'' then
DestStr[DestPos]:=chr((i div 100)+ord('0'));
inc(DestPos);
end;
if i>=10 then begin
if DestStr<>'' then
DestStr[DestPos]:=chr(((i div 10) mod 10)+ord('0'));
inc(DestPos);
end;
if DestStr<>'' then
DestStr[DestPos]:=chr((i mod 10)+ord('0'));
end;
end;
Result:=DestPos;
end;
var
NewLen: integer;
begin
Result:='';
NewLen:=Convert(Result);
if NewLen=length(s) then begin
Result:=s;
exit;
end;
SetLength(Result,NewLen);
Convert(Result);
end;
procedure RaiseCatchableException(const Msg: string);
begin
{ Raises an exception.
gdb does not catch fpc Exception objects, therefore this procedure raises
a standard AV which is catched by gdb. }
writeln('ERROR in CodeTools: ',Msg);
// creates an exception, that gdb catches:
writeln('Creating gdb catchable error:');
if (length(Msg) div (length(Msg) div 10000))=0 then ;
end;
function CountNeededLineEndsToAddForward(const Src: string;
StartPos, MinLineEnds: integer): integer;
var c:char;

View File

@ -120,6 +120,7 @@ type
function OnParserProgress(Tool: TCustomCodeTool): boolean;
function OnScannerProgress(Sender: TLinkScanner): boolean;
function GetResourceTool: TResourceCodeTool;
function GetOwnerForCodeTreeNode(ANode: TCodeTreeNode): TObject;
public
DefinePool: TDefinePool; // definition templates (rules)
DefineTree: TDefineTree; // cache for defines (e.g. initial compiler values)
@ -352,6 +353,11 @@ begin
Result:=0;
end;
function GetOwnerForCodeTreeNode(ANode: TCodeTreeNode): TObject;
begin
Result:=CodeToolBoss.GetOwnerForCodeTreeNode(ANode);
end;
{ TCodeToolManager }
@ -382,39 +388,39 @@ end;
destructor TCodeToolManager.Destroy;
begin
{$IFDEF CTDEBUG}
writeln('[TCodeToolManager.Destroy] A');
{$ENDIF}
{$IFDEF CTDEBUG}
writeln('[TCodeToolManager.Destroy] A');
{$ENDIF}
GlobalValues.Free;
{$IFDEF CTDEBUG}
writeln('[TCodeToolManager.Destroy] B');
{$ENDIF}
{$IFDEF CTDEBUG}
writeln('[TCodeToolManager.Destroy] B');
{$ENDIF}
FSourceTools.FreeAndClear;
FSourceTools.Free;
FResourceTool.Free;
{$IFDEF CTDEBUG}
writeln('[TCodeToolManager.Destroy] C');
{$ENDIF}
{$IFDEF CTDEBUG}
writeln('[TCodeToolManager.Destroy] C');
{$ENDIF}
DefineTree.Free;
DefinePool.Free;
{$IFDEF CTDEBUG}
writeln('[TCodeToolManager.Destroy] D');
{$ENDIF}
{$IFDEF CTDEBUG}
writeln('[TCodeToolManager.Destroy] D');
{$ENDIF}
SourceChangeCache.Free;
{$IFDEF CTDEBUG}
writeln('[TCodeToolManager.Destroy] E');
{$ENDIF}
{$IFDEF CTDEBUG}
writeln('[TCodeToolManager.Destroy] E');
{$ENDIF}
SourceCache.Free;
{$IFDEF CTDEBUG}
writeln('[TCodeToolManager.Destroy] F');
{$ENDIF}
{$IFDEF CTDEBUG}
writeln('[TCodeToolManager.Destroy] F');
{$ENDIF}
inherited Destroy;
{$IFDEF CTDEBUG}
writeln('[TCodeToolManager.Destroy] END');
{$ENDIF}
{$IFDEF MEM_CHECK}
CheckHeap('TCodeToolManager.Destroy END');
{$ENDIF}
{$IFDEF CTDEBUG}
writeln('[TCodeToolManager.Destroy] END');
{$ENDIF}
{$IFDEF MEM_CHECK}
CheckHeap('TCodeToolManager.Destroy END');
{$ENDIF}
end;
procedure TCodeToolManager.BeginUpdate;
@ -1805,6 +1811,27 @@ begin
Result:=FResourceTool;
end;
function TCodeToolManager.GetOwnerForCodeTreeNode(ANode: TCodeTreeNode
): TObject;
var
AToolNode: TAVLTreeNode;
CurTool: TCustomCodeTool;
RootCodeTreeNode: TCodeTreeNode;
begin
Result:=nil;
if ANode=nil then exit;
RootCodeTreeNode:=ANode.GetRoot;
AToolNode:=FSourceTools.FindLowest;
while (AToolNode<>nil) do begin
CurTool:=TCustomCodeTool(AToolNode.Data);
if CurTool.Tree.Root=RootCodeTreeNode then begin
Result:=CurTool;
exit;
end;
AToolNode:=FSourceTools.FindSuccessor(AToolNode);
end;
end;
procedure TCodeToolManager.OnToolSetWriteLock(Lock: boolean);
begin
if Lock then ActivateWriteLock else DeactivateWriteLock;
@ -1885,12 +1912,14 @@ end;
initialization
CodeToolBoss:=TCodeToolManager.Create;
OnFindOwnerOfCodeTreeNode:=@GetOwnerForCodeTreeNode;
finalization
{$IFDEF CTDEBUG}
writeln('codetoolmanager.pas - finalization');
{$ENDIF}
OnFindOwnerOfCodeTreeNode:=nil;
CodeToolBoss.Free;
CodeToolBoss:=nil;
{$IFDEF CTDEBUG}

View File

@ -180,6 +180,8 @@ type
function GetNodeOfType(ADesc: TCodeTreeNodeDesc): TCodeTreeNode;
function GetLevel: integer;
function DescAsString: string;
function GetRoot: TCodeTreeNode;
function FindOwner: TObject;
procedure Clear;
constructor Create;
function ConsistencyCheck: integer; // 0 = ok
@ -248,6 +250,14 @@ function CompareCodeTreeNodeExtWithPos(NodeData1, NodeData2: pointer): integer;
function CompareCodeTreeNodeExtWithNodeStartPos(
NodeData1, NodeData2: pointer): integer;
type
TOnFindOwnerOfCodeTreeNode = function (ANode: TCodeTreeNode): TObject;
var
OnFindOwnerOfCodeTreeNode: TOnFindOwnerOfCodeTreeNode;
function FindOwnerOfCodeTreeNode(ANode: TCodeTreeNode): TObject;
implementation
@ -353,6 +363,14 @@ begin
Result:=0;
end;
function FindOwnerOfCodeTreeNode(ANode: TCodeTreeNode): TObject;
begin
if Assigned(OnFindOwnerOfCodeTreeNode) then
Result:=OnFindOwnerOfCodeTreeNode(ANode)
else
Result:=nil;
end;
{ TCodeTreeNode }
constructor TCodeTreeNode.Create;
@ -475,6 +493,18 @@ begin
Result:=NodeDescriptionAsString(Desc);
end;
function TCodeTreeNode.GetRoot: TCodeTreeNode;
begin
Result:=Self;
while (Result.Parent<>nil) do Result:=Result.Parent;
while (Result.PriorBrother<>nil) do Result:=Result.PriorBrother;
end;
function TCodeTreeNode.FindOwner: TObject;
begin
Result:=FindOwnerOfCodeTreeNode(Self);
end;
{ TCodeTree }
constructor TCodeTree.Create;

View File

@ -635,28 +635,41 @@ var
NewSearchRangeFlags: TNodeCacheEntryFlags;
procedure RaiseConflictException;
var s: string;
var
s: string;
begin
s:='[TCodeTreeNodeCache.Add] internal error:'
+' conflicting cache nodes: Ident='+GetIdentifier(Identifier);
if Owner<>nil then
s:=s+' Owner='+Owner.DescAsString;
s:=s+' Old: Start='+IntToStr(OldEntry^.CleanStartPos)
+' End='+IntToStr(OldEntry^.CleanEndPos);
if OldEntry^.NewNode<>nil then
s:=s+' OwnerPos='+IntToStr(Owner.StartPos);
s:=s+' Old: Range='+IntToStr(OldEntry^.CleanStartPos)
+'-'+IntToStr(OldEntry^.CleanEndPos);
if OldEntry^.NewNode<>nil then begin
s:=s+' Node='+OldEntry^.NewNode.DescAsString
else
+' Pos='+IntToStr(OldEntry^.NewNode.StartPos);
end else
s:=s+' Node=nil';
if OldEntry^.NewTool<>nil then
if OldEntry^.NewTool<>nil then begin
s:=s+' Tool='+OldEntry^.NewTool.MainFilename;
s:=s+' New: Start='+IntToStr(CleanStartPos)
+' End='+IntToStr(CleanEndPos);
if NewNode<>nil then
if OldEntry^.NewNode<>nil then
s:=s+' Src="'
+StringToPascalConst(
copy(OldEntry^.NewTool.Src,OldEntry^.NewNode.StartPos,50))+'"';
end;
s:=s+' New: Range='+IntToStr(CleanStartPos)
+'-'+IntToStr(CleanEndPos);
if NewNode<>nil then begin
s:=s+' Node='+NewNode.DescAsString
else
+' Pos='+IntToStr(NewNode.StartPos);
end else
s:=s+' Node=nil';
if NewTool<>nil then
if NewTool<>nil then begin
s:=s+' Tool='+NewTool.MainFilename;
if NewNode<>nil then
s:=s+' Src="'
+StringToPascalConst(copy(NewTool.Src,NewNode.StartPos,50))+'"';
end;
raise Exception.Create(s);
end;

View File

@ -928,6 +928,18 @@ begin
Result:=FindIdentifierInContext(Params);
end;
if Result then begin
// adjust result for nicer position
NewNode:=Params.NewNode;
if (NewNode<>nil) and (NewNode.Desc=ctnProcedure)
and (NewNode.FirstChild<>nil)
and (NewNode.FirstChild.Desc=ctnProcedureHead) then begin
// Instead of jumping to the procedure keyword,
// jump to the procedure name
Params.NewNode:=NewNode.FirstChild;
Params.NewCleanPos:=Params.NewNode.StartPos;
end;
Params.ConvertResultCleanPosToCaretPos;
NewNode:=Params.NewNode;
NewTool:=Params.NewCodeTool;
@ -1528,6 +1540,13 @@ var
if Found and (not (fdfDoNotCache in Params.NewFlags))
and (FirstSearchedNode<>nil) then begin
// cache result
if (Params.NewNode<>nil) and (Params.NewNode.Desc=ctnProcedure) then begin
// ToDo:
// The search range is from start to end of search.
// This does not work for overloaded procs.
// -> do not cache
exit;
end;
AddResultToNodeCaches(FirstSearchedNode,ContextNode,
fdfSearchForward in Params.Flags,Params,SearchRangeFlags);
end;
@ -1583,7 +1602,7 @@ var
// unsuccessful
// -> return the found proc
Params.SetResult(Params.FoundProc^.Context.Tool,
Params.FoundProc^.Context.Node.FirstChild);
Params.FoundProc^.Context.Node);
FindIdentifierInContext:=true;
exit;
end;
@ -1794,12 +1813,12 @@ var
ctnTypeSection, ctnVarSection, ctnConstSection, ctnResStrSection,
ctnLabelSection,
ctnInterface, ctnImplementation,
ctnClassPublished,ctnClassPublic,ctnClassProtected, ctnClassPrivate,
ctnClassPublished,ctnClassPublic,ctnClassProtected,ctnClassPrivate,
ctnRecordCase, ctnRecordVariant,
ctnProcedureHead, ctnParameterList:
// these codetreenodes build a parent-child-relationship, but
// for pascal it is only a range, hence after searching in the
// childs of the last node, it must be searched next in the childs
// childs of the last node, search must continue in the childs
// of the prior node
;
@ -2963,14 +2982,13 @@ begin
end;
// search the identifier in the interface of the used unit
Params.Save(OldInput);
try
Params.Flags:=[fdfIgnoreUsedUnits]+(fdfGlobalsSameIdent*Params.Flags)
-[fdfExceptionOnNotFound];
Result:=NewCodeTool.FindIdentifierInInterface(Self,Params);
if Result then exit;
finally
Params.Load(OldInput);
end;
Params.Flags:=[fdfIgnoreUsedUnits]+(fdfGlobalsSameIdent*Params.Flags)
-[fdfExceptionOnNotFound];
Result:=NewCodeTool.FindIdentifierInInterface(Self,Params);
if Result and (Params.NewNode.Desc=ctnProcedureHead) then
writeln('CCC1 TFindDeclarationTool.FindIdentifierInUsesSection');
if Result then exit;
Params.Load(OldInput);
// restore the cursor
MoveCursorToCleanPos(UnitNameAtom.StartPos);
end;
@ -3083,15 +3101,14 @@ begin
if InterfaceNode=nil then
RaiseException(ctsInterfaceSectionNotFound);
Params.Save(OldInput);
try
Params.Flags:=(fdfGlobalsSameIdent*Params.Flags)
-[fdfExceptionOnNotFound,fdfSearchInParentNodes];
Params.ContextNode:=InterfaceNode;
Result:=FindIdentifierInContext(Params);
finally
Params.Load(OldInput)
end;
Params.Flags:=(fdfGlobalsSameIdent*Params.Flags)
-[fdfExceptionOnNotFound,fdfSearchInParentNodes];
Params.ContextNode:=InterfaceNode;
Result:=FindIdentifierInContext(Params);
if Result and (Params.NewNode.Desc=ctnProcedureHead) then
writeln('DDD1 ',MainFilename);
Params.Load(OldInput);
// save result in cache
if FInterfaceIdentifierCache=nil then
FInterfaceIdentifierCache:=TInterfaceIdentifierCache.Create(Self);
@ -5589,6 +5606,13 @@ begin
NewFlags:=[];
end;
procedure TFindDeclarationParams.SetResult(AFindContext: TFindContext);
begin
ClearResult;
NewCodeTool:=AFindContext.Tool;
NewNode:=AFindContext.Node;
end;
procedure TFindDeclarationParams.SetResult(ANewCodeTool: TFindDeclarationTool;
ANewNode: TCodeTreeNode);
begin
@ -5643,13 +5667,6 @@ begin
FoundProc:=nil;
end;
procedure TFindDeclarationParams.SetResult(AFindContext: TFindContext);
begin
ClearResult;
NewCodeTool:=AFindContext.Tool;
NewNode:=AFindContext.Node;
end;
procedure TFindDeclarationParams.SetIdentifier(
NewIdentifierTool: TFindDeclarationTool; NewIdentifier: PChar;
NewOnIdentifierFound: TOnIdentifierFound);

View File

@ -0,0 +1,22 @@
/* XPM */
static char * tshape_xpm[] = {
"15 15 4 1",
" c None",
". c #D5D6D5",
"+ c #000000",
"@ c #FFFFFF",
"...............",
"..+++++++++++..",
".++@@@@@@@@@++.",
".+@@@@@@@@@@@+.",
".+@@@@@@@@@@@+.",
".+@@@@@@@@@@@+.",
".+@@@@@@@@@@@+.",
".+@@@@@@@@@@@+.",
".+@@@@@@@@@@@+.",
".+@@@@@@@@@@@+.",
".+@@@@@@@@@@@+.",
".+@@@@@@@@@@@+.",
".++@@@@@@@@@++.",
"..+++++++++++..",
"..............."};

View File

@ -0,0 +1,163 @@
/* XPM */
static char * tstatictext_xpm[] = {
"23 16 144 2",
" c None",
". c #929292",
"+ c #747474",
"@ c #818181",
"# c #7C7C7C",
"$ c #7D7D7D",
"% c #777777",
"& c #7E7E7E",
"* c #878787",
"= c #888888",
"- c #7A7A7A",
"; c #858585",
"> c #7B7B7B",
", c #8A8A8A",
"' c #868686",
") c #787878",
"! c #727272",
"~ c #0B0B0B",
"{ c #000000",
"] c #030303",
"^ c #050505",
"/ c #0A0A0A",
"( c #040404",
"_ c #FFFFFF",
": c #F9F9F9",
"< c #FCFCFC",
"[ c #FDFDFD",
"} c #BEBEBE",
"| c #FFFDFF",
"1 c #FEFEFE",
"2 c #FDFFFE",
"3 c #FDFEFF",
"4 c #FDFDFF",
"5 c #FDFBFF",
"6 c #FEFCFF",
"7 c #FEFEFF",
"8 c #FFFFFD",
"9 c #FFFEFF",
"0 c #C2C2C2",
"a c #020003",
"b c #FFFAFF",
"c c #FEFCFD",
"d c #FBFBFB",
"e c #FEFFFF",
"f c #FCFFFF",
"g c #F8F8FF",
"h c #AA4747",
"i c #FCFDFF",
"j c #FEFFFD",
"k c #FAFBF3",
"l c #FFFFFA",
"m c #010103",
"n c #FFFBFF",
"o c #FBFAFF",
"p c #F6F9FF",
"q c #FBFEFF",
"r c #F9FAFF",
"s c #FBF9FF",
"t c #F6F8FF",
"u c #FCFBF6",
"v c #FAF5F9",
"w c #EEECF9",
"x c #FEFDFF",
"y c #F8FBFF",
"z c #F2F2FF",
"A c #F4F6FF",
"B c #F5F5FD",
"C c #FCFBFF",
"D c #F1EFFF",
"E c #F5F1FF",
"F c #F5F7FF",
"G c #F8F2FF",
"H c #000105",
"I c #F7FBFF",
"J c #F4F3FF",
"K c #F1F4FF",
"L c #F5F3FF",
"M c #F9FBFF",
"N c #F2F5FF",
"O c #000103",
"P c #FBFFFF",
"Q c #F4F8FF",
"R c #F3EFFF",
"S c #F3F6FF",
"T c #F5F2FF",
"U c #F8FAFF",
"V c #F0F6FF",
"W c #F9FEFF",
"X c #F8F1FF",
"Y c #F1F1FF",
"Z c #F7F1FF",
"` c #F7F9FF",
" . c #000201",
".. c #FAFAFF",
"+. c #F7F6FF",
"@. c #050503",
"#. c #FEFFFB",
"$. c #FCFCFF",
"%. c #FBFDFF",
"&. c #FBFCFF",
"*. c #F5F8FF",
"=. c #FEFFF4",
"-. c #C5C5C5",
";. c #F8F8F8",
">. c #8D8D8D",
",. c #FDFEF9",
"'. c #FCFEF9",
"). c #FDFDFB",
"!. c #FCFEFD",
"~. c #FCFEFB",
"{. c #FCFFF2",
"]. c #FCFFF4",
"^. c #F9FAFE",
"/. c #FCFFF6",
"(. c #FFFFF3",
"_. c #FEFFF5",
":. c #FFFFFB",
"<. c #BCBCBC",
"[. c #C2C2C0",
"}. c #C3C0C7",
"|. c #C2C1C6",
"1. c #C2C0CB",
"2. c #C2BFD0",
"3. c #C3C1CE",
"4. c #BEBFBA",
"5. c #C9CBC0",
"6. c #BBBCB7",
"7. c #BEBEBC",
"8. c #B9B8B4",
"9. c #C2C3BE",
"0. c #B7B7B5",
"a. c #CACACA",
"b. c #B5B5B5",
"c. c #BBBBBB",
"d. c #FAFAFC",
"e. c #FDFAFF",
"f. c #FDFCFA",
"g. c #FDFBFC",
"h. c #FDF9FF",
"i. c #FCF8FF",
"j. c #FEFDF9",
"k. c #F8F8F0",
"l. c #FFFEFC",
"m. c #FAF7FE",
". + @ @ @ @ @ @ @ @ # # $ % & * = - ; > , ' ) ",
"! ~ { { { { { { { { ] ^ { / { { { ] { ( { { _ ",
"@ { _ _ _ _ _ _ _ _ _ : _ < _ < _ [ < _ _ } _ ",
"@ { | | 1 1 1 2 3 4 5 6 7 : 8 _ _ 9 _ _ [ 0 _ ",
"& a b | c d e f f g h h i j k l 9 _ 9 _ _ _ ",
"& m | n | o i p q r h h s t 8 u v _ 9 _ _ _ ",
"& m 9 w x h h h y z h h h h A e 9 _ _ _ _ _ ",
"& m B i C D E h h F h h G h h p f _ _ _ _ _ ",
"& H f I J h h h h K h h L h h M N _ _ _ _ _ ",
"& O P Q h h R h h S h h T h h U V _ e _ _ _ ",
"& O q W h h X h h Y h h Z h h ` P _ e _ _ _ ",
"& .f I ..h h h h g h h h h +.q _ _ j _ _ _ ",
"+ @.#.f f i $.%.P P M &.%.*.f _ _ =._ _ [ -.;.",
">.{ ,.'.).!.i ~.{.].e ^.#./.=.{.(._.:.;._ <._ ",
", { [.0 }.|.[.[.|.1.2.3.4.5.6.7.8.9.0.a.b.c._ ",
"# d.e.e.e.5 f.g.e.h.i.e.j.k.l.9 | m._ _ _ _ [ "};

View File

@ -0,0 +1,83 @@
/* XPM */
static char * tupdown_xpm[] = {
"21 21 59 1",
" c None",
". c #D5D6D5",
"+ c #FFFFFF",
"@ c #CBCBCB",
"# c #101010",
"$ c #D8D9D8",
"% c #D3D4D3",
"& c #D4D5D4",
"* c #DCDDDC",
"= c #A7A8A7",
"- c #000000",
"; c #D9DAD9",
"> c #C5C6C5",
", c #6F706F",
"' c #C6C7C6",
") c #727272",
"! c #D6D7D6",
"~ c #D7D8D7",
"{ c #DBDCDB",
"] c #C8C9C8",
"^ c #717271",
"/ c #E3E4E3",
"( c #C9CAC9",
"_ c #C4C5C4",
": c #BEBFBE",
"< c #787978",
"[ c #8B8B8B",
"} c #777777",
"| c #4E4F4E",
"1 c #454645",
"2 c #474747",
"3 c #4B4C4B",
"4 c #3C3D3C",
"5 c #666666",
"6 c #6B6B6B",
"7 c #6F6F6F",
"8 c #707070",
"9 c #747474",
"0 c #595959",
"a c #FAFBFA",
"b c #F7F8F7",
"c c #F8F8F8",
"d c #C9C9C9",
"e c #D2D3D2",
"f c #CDCECD",
"g c #868786",
"h c #DDDEDD",
"i c #E5E6E5",
"j c #AAABAA",
"k c #9C9D9C",
"l c #9FA09F",
"m c #A3A5A3",
"n c #7B7B7B",
"o c #080808",
"p c #070707",
"q c #050505",
"r c #040404",
"s c #030403",
"t c #0B0B0B",
".....................",
"..+++++++++++++++@#..",
"..+$%&&&&&&&&&&&*=-..",
"..+;&.....-....;>,#..",
"..+;&....---...;')#..",
"..+;&...-----..;')#..",
"..+;&..-------.;')#..",
"..+;!~~~~~~~~~~{]^#..",
"..+/(_>>>>>>>>>]:<#..",
"..[}|1222222222234#..",
"..5678888888888890-..",
"..+abccccccccccb+d#..",
"..+~e%%%%%%%%%%.fg#..",
"..+;&..-------.;>,#..",
"..+;&...-----..;')#..",
"..+;&....---...;')#..",
"..+;&.....-....;')#..",
"..+;~;;;;;;;;;;h(^#..",
"..+ijkllllllllllmn-..",
"..opqrrrrrrrrrrrqst..",
"....................."};

View File

@ -1245,6 +1245,15 @@ LazarusResources.Add('tscrollbox','XPM',[
+'.+@+@+@+.+.@.@@@@.",'#10'".@@#.@+@+@+@.@@#.@@@@.",'#10'"...................'
+'..."};'#10
]);
LazarusResources.Add('tshape','XPM',[
'/* XPM */'#10'static char * tshape_xpm[] = {'#10'"15 15 4 1",'#10'" '#9'c No'
+'ne",'#10'".'#9'c #D5D6D5",'#10'"+'#9'c #000000",'#10'"@'#9'c #FFFFFF",'#10
+'"...............",'#10'"..+++++++++++..",'#10'".++@@@@@@@@@++.",'#10'".+@@@'
+'@@@@@@@@+.",'#10'".+@@@@@@@@@@@+.",'#10'".+@@@@@@@@@@@+.",'#10'".+@@@@@@@@@'
+'@@+.",'#10'".+@@@@@@@@@@@+.",'#10'".+@@@@@@@@@@@+.",'#10'".+@@@@@@@@@@@+.",'
+#10'".+@@@@@@@@@@@+.",'#10'".+@@@@@@@@@@@+.",'#10'".++@@@@@@@@@++.",'#10'"..'
+'+++++++++++..",'#10'"..............."};'#10
]);
LazarusResources.Add('tspeedbutton','XPM',[
'/* XPM */'#10'static char * tspeedbutton_xpm[] = {'#10'"19 17 7 1",'#10'" '#9
+'c None",'#10'".'#9'c #FFFFFF",'#10'"+'#9'c #BEBEBE",'#10'"@'#9'c #000000",'
@ -1302,6 +1311,65 @@ LazarusResources.Add('tspinedit','XPM',[
+','#10'", { H 6 I J H H J K L M N O P Q R S T U V W _ ",'#10'"# X Y Y Y Z ` '
+' .Y ..+.Y @.#.$.b | %._ _ _ _ [ "};'#10
]);
LazarusResources.Add('tstatictext','XPM',[
'/* XPM */'#10'static char * tstatictext_xpm[] = {'#10'"23 16 144 2",'#10'" '
+#9'c None",'#10'". '#9'c #929292",'#10'"+ '#9'c #747474",'#10'"@ '#9'c #8181'
+'81",'#10'"# '#9'c #7C7C7C",'#10'"$ '#9'c #7D7D7D",'#10'"% '#9'c #777777",'
+#10'"& '#9'c #7E7E7E",'#10'"* '#9'c #878787",'#10'"= '#9'c #888888",'#10'"- '
+#9'c #7A7A7A",'#10'"; '#9'c #858585",'#10'"> '#9'c #7B7B7B",'#10'", '#9'c #8'
+'A8A8A",'#10'"'' '#9'c #868686",'#10'") '#9'c #787878",'#10'"! '#9'c #727272'
+'",'#10'"~ '#9'c #0B0B0B",'#10'"{ '#9'c #000000",'#10'"] '#9'c #030303",'#10
+'"^ '#9'c #050505",'#10'"/ '#9'c #0A0A0A",'#10'"( '#9'c #040404",'#10'"_ '#9
+'c #FFFFFF",'#10'": '#9'c #F9F9F9",'#10'"< '#9'c #FCFCFC",'#10'"[ '#9'c #FDF'
+'DFD",'#10'"} '#9'c #BEBEBE",'#10'"| '#9'c #FFFDFF",'#10'"1 '#9'c #FEFEFE",'
+#10'"2 '#9'c #FDFFFE",'#10'"3 '#9'c #FDFEFF",'#10'"4 '#9'c #FDFDFF",'#10'"5 '
+#9'c #FDFBFF",'#10'"6 '#9'c #FEFCFF",'#10'"7 '#9'c #FEFEFF",'#10'"8 '#9'c #F'
+'FFFFD",'#10'"9 '#9'c #FFFEFF",'#10'"0 '#9'c #C2C2C2",'#10'"a '#9'c #020003"'
+','#10'"b '#9'c #FFFAFF",'#10'"c '#9'c #FEFCFD",'#10'"d '#9'c #FBFBFB",'#10
+'"e '#9'c #FEFFFF",'#10'"f '#9'c #FCFFFF",'#10'"g '#9'c #F8F8FF",'#10'"h '#9
+'c #AA4747",'#10'"i '#9'c #FCFDFF",'#10'"j '#9'c #FEFFFD",'#10'"k '#9'c #FAF'
+'BF3",'#10'"l '#9'c #FFFFFA",'#10'"m '#9'c #010103",'#10'"n '#9'c #FFFBFF",'
+#10'"o '#9'c #FBFAFF",'#10'"p '#9'c #F6F9FF",'#10'"q '#9'c #FBFEFF",'#10'"r '
+#9'c #F9FAFF",'#10'"s '#9'c #FBF9FF",'#10'"t '#9'c #F6F8FF",'#10'"u '#9'c #F'
+'CFBF6",'#10'"v '#9'c #FAF5F9",'#10'"w '#9'c #EEECF9",'#10'"x '#9'c #FEFDFF"'
+','#10'"y '#9'c #F8FBFF",'#10'"z '#9'c #F2F2FF",'#10'"A '#9'c #F4F6FF",'#10
+'"B '#9'c #F5F5FD",'#10'"C '#9'c #FCFBFF",'#10'"D '#9'c #F1EFFF",'#10'"E '#9
+'c #F5F1FF",'#10'"F '#9'c #F5F7FF",'#10'"G '#9'c #F8F2FF",'#10'"H '#9'c #000'
+'105",'#10'"I '#9'c #F7FBFF",'#10'"J '#9'c #F4F3FF",'#10'"K '#9'c #F1F4FF",'
+#10'"L '#9'c #F5F3FF",'#10'"M '#9'c #F9FBFF",'#10'"N '#9'c #F2F5FF",'#10'"O '
+#9'c #000103",'#10'"P '#9'c #FBFFFF",'#10'"Q '#9'c #F4F8FF",'#10'"R '#9'c #F'
+'3EFFF",'#10'"S '#9'c #F3F6FF",'#10'"T '#9'c #F5F2FF",'#10'"U '#9'c #F8FAFF"'
+','#10'"V '#9'c #F0F6FF",'#10'"W '#9'c #F9FEFF",'#10'"X '#9'c #F8F1FF",'#10
+'"Y '#9'c #F1F1FF",'#10'"Z '#9'c #F7F1FF",'#10'"` '#9'c #F7F9FF",'#10'" .'#9
+'c #000201",'#10'"..'#9'c #FAFAFF",'#10'"+.'#9'c #F7F6FF",'#10'"@.'#9'c #050'
+'503",'#10'"#.'#9'c #FEFFFB",'#10'"$.'#9'c #FCFCFF",'#10'"%.'#9'c #FBFDFF",'
+#10'"&.'#9'c #FBFCFF",'#10'"*.'#9'c #F5F8FF",'#10'"=.'#9'c #FEFFF4",'#10'"-.'
+#9'c #C5C5C5",'#10'";.'#9'c #F8F8F8",'#10'">.'#9'c #8D8D8D",'#10'",.'#9'c #F'
+'DFEF9",'#10'"''.'#9'c #FCFEF9",'#10'").'#9'c #FDFDFB",'#10'"!.'#9'c #FCFEFD'
+'",'#10'"~.'#9'c #FCFEFB",'#10'"{.'#9'c #FCFFF2",'#10'"].'#9'c #FCFFF4",'#10
+'"^.'#9'c #F9FAFE",'#10'"/.'#9'c #FCFFF6",'#10'"(.'#9'c #FFFFF3",'#10'"_.'#9
+'c #FEFFF5",'#10'":.'#9'c #FFFFFB",'#10'"<.'#9'c #BCBCBC",'#10'"[.'#9'c #C2C'
+'2C0",'#10'"}.'#9'c #C3C0C7",'#10'"|.'#9'c #C2C1C6",'#10'"1.'#9'c #C2C0CB",'
+#10'"2.'#9'c #C2BFD0",'#10'"3.'#9'c #C3C1CE",'#10'"4.'#9'c #BEBFBA",'#10'"5.'
+#9'c #C9CBC0",'#10'"6.'#9'c #BBBCB7",'#10'"7.'#9'c #BEBEBC",'#10'"8.'#9'c #B'
+'9B8B4",'#10'"9.'#9'c #C2C3BE",'#10'"0.'#9'c #B7B7B5",'#10'"a.'#9'c #CACACA"'
+','#10'"b.'#9'c #B5B5B5",'#10'"c.'#9'c #BBBBBB",'#10'"d.'#9'c #FAFAFC",'#10
+'"e.'#9'c #FDFAFF",'#10'"f.'#9'c #FDFCFA",'#10'"g.'#9'c #FDFBFC",'#10'"h.'#9
+'c #FDF9FF",'#10'"i.'#9'c #FCF8FF",'#10'"j.'#9'c #FEFDF9",'#10'"k.'#9'c #F8F'
+'8F0",'#10'"l.'#9'c #FFFEFC",'#10'"m.'#9'c #FAF7FE",'#10'". + @ @ @ @ @ @ @ '
+'@ # # $ % & * = - ; > , '' ) ",'#10'"! ~ { { { { { { { { ] ^ { / { { { ] { '
+'( { { _ ",'#10'"@ { _ _ _ _ _ _ _ _ _ : _ < _ < _ [ < _ _ } _ ",'#10'"@ { |'
+' | 1 1 1 2 3 4 5 6 7 : 8 _ _ 9 _ _ [ 0 _ ",'#10'"& a b | c d e f f g h h i '
+'j k l 9 _ 9 _ _ _ ",'#10'"& m | n | o i p q r h h s t 8 u v _ 9 _ _ _ "'
+','#10'"& m 9 w x h h h y z h h h h A e 9 _ _ _ _ _ ",'#10'"& m B i C D E '
+'h h F h h G h h p f _ _ _ _ _ ",'#10'"& H f I J h h h h K h h L h h M N _'
+' _ _ _ _ ",'#10'"& O P Q h h R h h S h h T h h U V _ e _ _ _ ",'#10'"& '
+'O q W h h X h h Y h h Z h h ` P _ e _ _ _ ",'#10'"& .f I ..h h h h g h h'
+' h h +.q _ _ j _ _ _ ",'#10'"+ @.#.f f i $.%.P P M &.%.*.f _ _ =._ _ [ -.'
+';.",'#10'">.{ ,.''.).!.i ~.{.].e ^.#./.=.{.(._.:.;._ <._ ",'#10'", { [.0 }.'
+'|.[.[.|.1.2.3.4.5.6.7.8.9.0.a.b.c._ ",'#10'"# d.e.e.e.5 f.g.e.h.i.e.j.k.l.9'
+' | m._ _ _ _ [ "};'#10
]);
LazarusResources.Add('tstatusbar','XPM',[
'/* XPM */'#10'static char * tstatusbar_xpm[] = {'#10'"21 13 5 1",'#10'" '#9
+'c None",'#10'".'#9'c #000000",'#10'"+'#9'c #FFFFFF",'#10'"@'#9'c #C0C0C0",'
@ -1365,3 +1433,32 @@ LazarusResources.Add('ttreeview','XPM',[
+#10'".+@@@@@@@@@@@@@@@@@#@",'#10'".+@@@@@@@@@@@@@@@@@#@",'#10'".+###########'
+'#######@",'#10'".@@@@@@@@@@@@@@@@@@@@"};'#10
]);
LazarusResources.Add('tupdown','XPM',[
'/* XPM */'#10'static char * tupdown_xpm[] = {'#10'"21 21 59 1",'#10'" '#9'c '
+'None",'#10'".'#9'c #D5D6D5",'#10'"+'#9'c #FFFFFF",'#10'"@'#9'c #CBCBCB",'#10
+'"#'#9'c #101010",'#10'"$'#9'c #D8D9D8",'#10'"%'#9'c #D3D4D3",'#10'"&'#9'c #'
+'D4D5D4",'#10'"*'#9'c #DCDDDC",'#10'"='#9'c #A7A8A7",'#10'"-'#9'c #000000",'
+#10'";'#9'c #D9DAD9",'#10'">'#9'c #C5C6C5",'#10'",'#9'c #6F706F",'#10'"'''#9
+'c #C6C7C6",'#10'")'#9'c #727272",'#10'"!'#9'c #D6D7D6",'#10'"~'#9'c #D7D8D7'
+'",'#10'"{'#9'c #DBDCDB",'#10'"]'#9'c #C8C9C8",'#10'"^'#9'c #717271",'#10'"/'
+#9'c #E3E4E3",'#10'"('#9'c #C9CAC9",'#10'"_'#9'c #C4C5C4",'#10'":'#9'c #BEBF'
+'BE",'#10'"<'#9'c #787978",'#10'"['#9'c #8B8B8B",'#10'"}'#9'c #777777",'#10
+'"|'#9'c #4E4F4E",'#10'"1'#9'c #454645",'#10'"2'#9'c #474747",'#10'"3'#9'c #'
+'4B4C4B",'#10'"4'#9'c #3C3D3C",'#10'"5'#9'c #666666",'#10'"6'#9'c #6B6B6B",'
+#10'"7'#9'c #6F6F6F",'#10'"8'#9'c #707070",'#10'"9'#9'c #747474",'#10'"0'#9
+'c #595959",'#10'"a'#9'c #FAFBFA",'#10'"b'#9'c #F7F8F7",'#10'"c'#9'c #F8F8F8'
+'",'#10'"d'#9'c #C9C9C9",'#10'"e'#9'c #D2D3D2",'#10'"f'#9'c #CDCECD",'#10'"g'
+#9'c #868786",'#10'"h'#9'c #DDDEDD",'#10'"i'#9'c #E5E6E5",'#10'"j'#9'c #AAAB'
+'AA",'#10'"k'#9'c #9C9D9C",'#10'"l'#9'c #9FA09F",'#10'"m'#9'c #A3A5A3",'#10
+'"n'#9'c #7B7B7B",'#10'"o'#9'c #080808",'#10'"p'#9'c #070707",'#10'"q'#9'c #'
+'050505",'#10'"r'#9'c #040404",'#10'"s'#9'c #030403",'#10'"t'#9'c #0B0B0B",'
+#10'".....................",'#10'"..+++++++++++++++@#..",'#10'"..+$%&&&&&&&&'
+'&&&*=-..",'#10'"..+;&.....-....;>,#..",'#10'"..+;&....---...;'')#..",'#10'"'
+'..+;&...-----..;'')#..",'#10'"..+;&..-------.;'')#..",'#10'"..+;!~~~~~~~~~~'
+'{]^#..",'#10'"..+/(_>>>>>>>>>]:<#..",'#10'"..[}|1222222222234#..",'#10'"..5'
+'678888888888890-..",'#10'"..+abccccccccccb+d#..",'#10'"..+~e%%%%%%%%%%.fg#.'
+'.",'#10'"..+;&..-------.;>,#..",'#10'"..+;&...-----..;'')#..",'#10'"..+;&..'
+'..---...;'')#..",'#10'"..+;&.....-....;'')#..",'#10'"..+;~;;;;;;;;;;h(^#.."'
+','#10'"..+ijkllllllllllmn-..",'#10'"..opqrrrrrrrrrrrqst..",'#10'"..........'
+'..........."};'#10
]);