mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-22 18:22:57 +02:00
Added FPDoc Updater: a GUI tool for updating FPDoc files
git-svn-id: trunk@12302 -
This commit is contained in:
parent
1e240ab866
commit
1f1b6ec141
9
.gitattributes
vendored
9
.gitattributes
vendored
@ -1092,6 +1092,15 @@ doceditor/fmmakeskel.lfm svneol=native#text/plain
|
||||
doceditor/fmmakeskel.lrs svneol=native#text/pascal
|
||||
doceditor/fmmakeskel.pp svneol=native#text/pascal
|
||||
doceditor/fpdeutil.pp svneol=native#text/pascal
|
||||
doceditor/fpdocupdater/fpdocfiles.pas svneol=native#text/pascal
|
||||
doceditor/fpdocupdater/fpdocupdater.lpi svneol=native#text/plain
|
||||
doceditor/fpdocupdater/fpdocupdater.lpr svneol=native#text/pascal
|
||||
doceditor/fpdocupdater/mainunit.lfm svneol=native#text/plain
|
||||
doceditor/fpdocupdater/mainunit.lrs svneol=native#text/pascal
|
||||
doceditor/fpdocupdater/mainunit.pas svneol=native#text/pascal
|
||||
doceditor/fpdocupdater/unitmove.lfm svneol=native#text/plain
|
||||
doceditor/fpdocupdater/unitmove.lrs svneol=native#text/pascal
|
||||
doceditor/fpdocupdater/unitmove.pas svneol=native#text/pascal
|
||||
doceditor/frmabout.lfm svneol=native#text/plain
|
||||
doceditor/frmabout.lrs svneol=native#text/pascal
|
||||
doceditor/frmabout.pp svneol=native#text/pascal
|
||||
|
4
.gitignore
vendored
4
.gitignore
vendored
@ -186,6 +186,10 @@ designer/jitform/*.bak
|
||||
designer/jitform/units
|
||||
designer/units
|
||||
doceditor/*.bak
|
||||
doceditor/fpdocupdater/*.bak
|
||||
doceditor/fpdocupdater/units
|
||||
doceditor/fpdocupdater/units/*.bak
|
||||
doceditor/fpdocupdater/units/units
|
||||
doceditor/images/*.bak
|
||||
doceditor/images/units
|
||||
doceditor/units
|
||||
|
549
doceditor/fpdocupdater/fpdocfiles.pas
Normal file
549
doceditor/fpdocupdater/fpdocfiles.pas
Normal file
@ -0,0 +1,549 @@
|
||||
{
|
||||
***************************************************************************
|
||||
* *
|
||||
* This source is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This code is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
|
||||
* General Public License for more details. *
|
||||
* *
|
||||
* A copy of the GNU General Public License is available on the World *
|
||||
* Wide Web at <http://www.gnu.org/copyleft/gpl.html>. You can also *
|
||||
* obtain it by writing to the Free Software Foundation, *
|
||||
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||
* *
|
||||
***************************************************************************
|
||||
|
||||
Author: Tom Gregorovic
|
||||
}
|
||||
unit FPDocFiles;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, Contnrs, DOM, XMLWrite, XMLRead;
|
||||
|
||||
type
|
||||
{ TFPDocNode }
|
||||
|
||||
TFPDocNode = class
|
||||
private
|
||||
FName: String;
|
||||
FNode: TDOMNode;
|
||||
function GetNodeValue(const AName: String): String;
|
||||
function GetDescription: String;
|
||||
function GetShort: String;
|
||||
procedure SetNodeValue(const AName, AValue: String);
|
||||
procedure SetDescription(const AValue: String);
|
||||
procedure SetShort(const AValue: String);
|
||||
public
|
||||
constructor Create(ANode: TDOMNode);
|
||||
procedure Assign(ASource: TFPDocNode);
|
||||
public
|
||||
property Name: String read FName;
|
||||
property Description: String read GetDescription write SetDescription;
|
||||
property Short: String read GetShort write SetShort;
|
||||
end;
|
||||
|
||||
{ TFPDocElement }
|
||||
|
||||
TFPDocElement = class(TFPDocNode)
|
||||
function GetEmpty: Boolean;
|
||||
private
|
||||
function GetErrors: String;
|
||||
function GetSeaAlso: String;
|
||||
procedure SetErrors(const AValue: String);
|
||||
procedure SetSeaAlso(const AValue: String);
|
||||
public
|
||||
procedure Assign(ASource: TFPDocElement);
|
||||
public
|
||||
property Errors: String read GetErrors write SetErrors;
|
||||
property SeaAlso: String read GetSeaAlso write SetSeaAlso;
|
||||
property Empty: Boolean read GetEmpty;
|
||||
end;
|
||||
|
||||
{ TFPDocModule }
|
||||
|
||||
TFPDocModule = class(TFPDocNode)
|
||||
private
|
||||
FElements: TObjectList;
|
||||
FNames: TStringList;
|
||||
function GetCount: Integer;
|
||||
function GetElement(Index: Integer): TFPDocElement;
|
||||
function GetElementByName(const Index: String): TFPDocElement;
|
||||
public
|
||||
constructor Create(ANode: TDOMNode);
|
||||
destructor Destroy; override;
|
||||
procedure ParseElements;
|
||||
procedure Add(const AElement: TFPDocElement);
|
||||
public
|
||||
property Elements[Index: Integer]: TFPDocElement read GetElement;
|
||||
property ElementsByName[const Index: String]: TFPDocElement read GetElementByName;
|
||||
property Count: Integer read GetCount;
|
||||
property Names: TStringList read FNames;
|
||||
end;
|
||||
|
||||
{ TFPDocPackage }
|
||||
|
||||
TFPDocPackage = class(TFPDocNode)
|
||||
private
|
||||
FModules: TObjectList;
|
||||
FNames: TStringList;
|
||||
function GetCount: Integer;
|
||||
function GetModule(Index: Integer): TFPDocModule;
|
||||
function GetModuleByName(const Index: String): TFPDocModule;
|
||||
public
|
||||
constructor Create(ANode: TDOMNode);
|
||||
destructor Destroy; override;
|
||||
procedure ParseModules;
|
||||
public
|
||||
property Modules[Index: Integer]: TFPDocModule read GetModule;
|
||||
property ModulesByName[const Index: String]: TFPDocModule read GetModuleByName;
|
||||
property Count: Integer read GetCount;
|
||||
property Names: TStringList read FNames;
|
||||
end;
|
||||
|
||||
TMoveElementEvent = procedure (const SrcPackage: TFPDocPackage;
|
||||
const SrcModule: TFPDocModule; const Src: TFPDocElement;
|
||||
const DestList: TStrings; var Dest: String) of object;
|
||||
|
||||
{ TFPDocFile }
|
||||
|
||||
TFPDocFile = class
|
||||
private
|
||||
FDocument: TXMLDocument;
|
||||
FPackages: TObjectList;
|
||||
FNames: TStringList;
|
||||
function GetCount: Integer;
|
||||
function GetPackage(Index: Integer): TFPDocPackage;
|
||||
function GetPackageByName(const Index: String): TFPDocPackage;
|
||||
public
|
||||
constructor Create(const FileName: String);
|
||||
constructor Create(Stream: TStream);
|
||||
destructor Destroy; override;
|
||||
procedure ParsePackages;
|
||||
procedure SaveToFile(const FileName: String);
|
||||
procedure AssignToSkeleton(const SkeletonFile: TFPDocFile;
|
||||
OnMoveElement: TMoveElementEvent);
|
||||
public
|
||||
property Packages[Index: Integer]: TFPDocPackage read GetPackage;
|
||||
property PackagesByName[const Index: String]: TFPDocPackage read GetPackageByName;
|
||||
property Count: Integer read GetCount;
|
||||
property Names: TStringList read FNames;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
uses LCLProc;
|
||||
|
||||
{ TFPDocNode }
|
||||
|
||||
function TFPDocNode.GetNodeValue(const AName: String): String;
|
||||
var
|
||||
N: TDOMNode;
|
||||
S: TStringStream;
|
||||
begin
|
||||
Result := '';
|
||||
N := FNode.FindNode(AName);
|
||||
if N = nil then Exit;
|
||||
if N.FirstChild = nil then Exit;
|
||||
|
||||
S := TStringStream.Create('');
|
||||
try
|
||||
WriteXML(N.FirstChild, S);
|
||||
Result := S.DataString;
|
||||
finally
|
||||
S.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TFPDocNode.GetDescription: String;
|
||||
begin
|
||||
Result := GetNodeValue('descr');
|
||||
end;
|
||||
|
||||
function TFPDocNode.GetShort: String;
|
||||
begin
|
||||
Result := GetNodeValue('short');
|
||||
end;
|
||||
|
||||
procedure TFPDocNode.SetNodeValue(const AName, AValue: String);
|
||||
var
|
||||
N: TDOMNode;
|
||||
S: TStringStream;
|
||||
begin
|
||||
N := FNode.FindNode(AName);
|
||||
|
||||
if N = nil then
|
||||
begin
|
||||
if AValue = '' then Exit;
|
||||
N := FNode.OwnerDocument.CreateElement(AName);
|
||||
FNode.AppendChild(N);
|
||||
end;
|
||||
|
||||
while N.FirstChild <> nil do N.RemoveChild(N.FirstChild);
|
||||
|
||||
S := TStringStream.Create(AValue);
|
||||
try
|
||||
ReadXMLFragment(N, S);
|
||||
finally
|
||||
S.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TFPDocNode.SetDescription(const AValue: String);
|
||||
begin
|
||||
SetNodeValue('descr', AValue);
|
||||
end;
|
||||
|
||||
procedure TFPDocNode.SetShort(const AValue: String);
|
||||
begin
|
||||
SetNodeValue('short', AValue);
|
||||
end;
|
||||
|
||||
constructor TFPDocNode.Create(ANode: TDOMNode);
|
||||
begin
|
||||
FNode := ANode;
|
||||
FName := FNode.Attributes.GetNamedItem('name').NodeValue;
|
||||
end;
|
||||
|
||||
procedure TFPDocNode.Assign(ASource: TFPDocNode);
|
||||
begin
|
||||
Description := ASource.Description;
|
||||
Short := ASource.Short;
|
||||
end;
|
||||
|
||||
{ TFPDocElement }
|
||||
|
||||
function TFPDocElement.GetEmpty: Boolean;
|
||||
begin
|
||||
Result := (Description = '') and (Short = '') and (Errors = '') and
|
||||
(SeaAlso = '');
|
||||
end;
|
||||
|
||||
function TFPDocElement.GetErrors: String;
|
||||
begin
|
||||
Result := GetNodeValue('errors');
|
||||
end;
|
||||
|
||||
function TFPDocElement.GetSeaAlso: String;
|
||||
begin
|
||||
Result := GetNodeValue('seaalso');
|
||||
end;
|
||||
|
||||
procedure TFPDocElement.SetErrors(const AValue: String);
|
||||
begin
|
||||
SetNodeValue('errors', AValue);
|
||||
end;
|
||||
|
||||
procedure TFPDocElement.SetSeaAlso(const AValue: String);
|
||||
begin
|
||||
SetNodeValue('seaalso', AValue);
|
||||
end;
|
||||
|
||||
|
||||
procedure TFPDocElement.Assign(ASource: TFPDocElement);
|
||||
begin
|
||||
inherited Assign(ASource);
|
||||
|
||||
Errors := ASource.Errors;
|
||||
SeaAlso := ASource.SeaAlso;
|
||||
end;
|
||||
|
||||
{ TFPDocModule }
|
||||
|
||||
function TFPDocModule.GetCount: Integer;
|
||||
begin
|
||||
Result := FElements.Count;
|
||||
end;
|
||||
|
||||
function TFPDocModule.GetElement(Index: Integer): TFPDocElement;
|
||||
begin
|
||||
Result := FElements[Index] as TFPDocElement;
|
||||
end;
|
||||
|
||||
function TFPDocModule.GetElementByName(const Index: String): TFPDocElement;
|
||||
var
|
||||
I: Integer;
|
||||
begin
|
||||
I := FNames.IndexOf(Index);
|
||||
if I = -1 then
|
||||
Result := nil
|
||||
else
|
||||
Result := FNames.Objects[I] as TFPDocElement;
|
||||
end;
|
||||
|
||||
constructor TFPDocModule.Create(ANode: TDOMNode);
|
||||
begin
|
||||
inherited;
|
||||
|
||||
FElements := TObjectList.Create(True);
|
||||
FNames := TStringList.Create;
|
||||
FNames.Sorted := True;
|
||||
|
||||
ParseElements;
|
||||
end;
|
||||
|
||||
destructor TFPDocModule.Destroy;
|
||||
begin
|
||||
FNames.Free;
|
||||
FElements.Free;
|
||||
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
procedure TFPDocModule.ParseElements;
|
||||
var
|
||||
I: TDOMNode;
|
||||
E: TFPDocElement;
|
||||
begin
|
||||
FElements.Clear;
|
||||
FNames.Clear;
|
||||
|
||||
I := FNode.FirstChild;
|
||||
while I <> nil do
|
||||
begin
|
||||
if I.NodeName = 'element' then
|
||||
begin
|
||||
E := TFPDocElement.Create(I);
|
||||
FElements.Add(E);
|
||||
FNames.AddObject(E.Name, E);
|
||||
end;
|
||||
|
||||
I := I.NextSibling;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TFPDocModule.Add(const AElement: TFPDocElement);
|
||||
var
|
||||
E: TFPDocElement;
|
||||
N: TDOMElement;
|
||||
begin
|
||||
E := ElementsByName[AElement.Name];
|
||||
|
||||
if E = nil then
|
||||
begin
|
||||
N := FNode.OwnerDocument.CreateElement('element');
|
||||
N.AttribStrings['name'] := AElement.Name;
|
||||
|
||||
E := TFPDocElement.Create(FNode.AppendChild(N));
|
||||
FElements.Add(E);
|
||||
FNames.AddObject(E.Name, E);
|
||||
end;
|
||||
|
||||
E.Assign(AElement);
|
||||
end;
|
||||
|
||||
{ TFPDocPackage }
|
||||
|
||||
function TFPDocPackage.GetCount: Integer;
|
||||
begin
|
||||
Result := FModules.Count;
|
||||
end;
|
||||
|
||||
function TFPDocPackage.GetModule(Index: Integer): TFPDocModule;
|
||||
begin
|
||||
Result := FModules[Index] as TFPDocModule;
|
||||
end;
|
||||
|
||||
function TFPDocPackage.GetModuleByName(const Index: String): TFPDocModule;
|
||||
var
|
||||
I: Integer;
|
||||
begin
|
||||
I := FNames.IndexOf(Index);
|
||||
if I = -1 then
|
||||
Result := nil
|
||||
else
|
||||
Result := FNames.Objects[I] as TFPDocModule;
|
||||
end;
|
||||
|
||||
constructor TFPDocPackage.Create(ANode: TDOMNode);
|
||||
begin
|
||||
inherited;
|
||||
|
||||
FModules := TObjectList.Create(True);
|
||||
FNames := TStringList.Create;
|
||||
FNames.Sorted := True;
|
||||
|
||||
ParseModules;
|
||||
end;
|
||||
|
||||
destructor TFPDocPackage.Destroy;
|
||||
begin
|
||||
FNames.Free;
|
||||
FModules.Free;
|
||||
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
procedure TFPDocPackage.ParseModules;
|
||||
var
|
||||
I: TDOMNode;
|
||||
M: TFPDocModule;
|
||||
begin
|
||||
FModules.Clear;
|
||||
|
||||
I := FNode.FirstChild;
|
||||
while I <> nil do
|
||||
begin
|
||||
if I.NodeName = 'module' then
|
||||
begin
|
||||
M := TFPDocModule.Create(I);
|
||||
FModules.Add(M);
|
||||
FNames.AddObject(M.Name, M);
|
||||
end;
|
||||
|
||||
I := I.NextSibling;
|
||||
end;
|
||||
end;
|
||||
|
||||
{ TFPDocFile }
|
||||
|
||||
function TFPDocFile.GetCount: Integer;
|
||||
begin
|
||||
Result := FPackages.Count;
|
||||
end;
|
||||
|
||||
function TFPDocFile.GetPackage(Index: Integer): TFPDocPackage;
|
||||
begin
|
||||
Result := FPackages[Index] as TFPDocPackage;
|
||||
end;
|
||||
|
||||
function TFPDocFile.GetPackageByName(const Index: String): TFPDocPackage;
|
||||
var
|
||||
I: Integer;
|
||||
begin
|
||||
I := FNames.IndexOf(Index);
|
||||
if I = -1 then
|
||||
Result := nil
|
||||
else
|
||||
Result := FNames.Objects[I] as TFPDocPackage;
|
||||
end;
|
||||
|
||||
constructor TFPDocFile.Create(const FileName: String);
|
||||
var
|
||||
F: TFileStream;
|
||||
begin
|
||||
F := TFileStream.Create(FileName, fmOpenRead);
|
||||
try
|
||||
Create(F);
|
||||
finally
|
||||
F.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
constructor TFPDocFile.Create(Stream: TStream);
|
||||
begin
|
||||
ReadXMLFile(FDocument, Stream);
|
||||
|
||||
FPackages := TObjectList.Create(True);
|
||||
FNames := TStringList.Create;
|
||||
FNames.Sorted := True;
|
||||
|
||||
ParsePackages;
|
||||
end;
|
||||
|
||||
destructor TFPDocFile.Destroy;
|
||||
begin
|
||||
FNames.Free;
|
||||
FPackages.Free;
|
||||
FDocument.Free;
|
||||
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
procedure TFPDocFile.ParsePackages;
|
||||
var
|
||||
I, R: TDOMNode;
|
||||
P: TFPDocPackage;
|
||||
begin
|
||||
FPackages.Clear;
|
||||
|
||||
R := FDocument.FindNode('fpdoc-descriptions');
|
||||
if R = nil then
|
||||
raise Exception.Create('Invalid FPDoc file!');
|
||||
|
||||
I := R.FirstChild;
|
||||
while I <> nil do
|
||||
begin
|
||||
if I.NodeName = 'package' then
|
||||
begin
|
||||
P := TFPDocPackage.Create(I);
|
||||
FPackages.Add(P);
|
||||
FNames.AddObject(P.Name, P);
|
||||
end;
|
||||
|
||||
I := I.NextSibling;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TFPDocFile.SaveToFile(const FileName: String);
|
||||
begin
|
||||
WriteXMLFile(FDocument, FileName);
|
||||
end;
|
||||
|
||||
procedure TFPDocFile.AssignToSkeleton(const SkeletonFile: TFPDocFile;
|
||||
OnMoveElement: TMoveElementEvent);
|
||||
var
|
||||
I, J, K: Integer;
|
||||
P1, P2: TFPDocPackage;
|
||||
M1, M2: TFPDocModule;
|
||||
E1, E2: TFPDocElement;
|
||||
DestList: TStringList;
|
||||
Dest: String;
|
||||
begin
|
||||
for I := 0 to Count - 1 do
|
||||
begin
|
||||
P1 := Packages[I];
|
||||
P2 := SkeletonFile.PackagesByName[P1.Name];
|
||||
P2.Assign(P1);
|
||||
|
||||
for J := 0 to P1.Count - 1 do
|
||||
begin
|
||||
M1 := P1.Modules[J];
|
||||
M2 := P2.ModulesByName[M1.Name];
|
||||
M2.Assign(M1);
|
||||
|
||||
DestList := TStringList.Create;
|
||||
try
|
||||
for K := 0 to M2.Count - 1 do
|
||||
begin
|
||||
E2 := M2.Elements[K];
|
||||
if M1.ElementsByName[E2.Name] = nil then DestList.Add(E2.Name);
|
||||
end;
|
||||
|
||||
for K := 0 to M1.Count - 1 do
|
||||
begin
|
||||
E1 := M1.Elements[K];
|
||||
if E1.Empty then Continue;
|
||||
|
||||
E2 := M2.ElementsByName[E1.Name];
|
||||
|
||||
if E2 = nil then
|
||||
begin
|
||||
Dest := '';
|
||||
if Assigned(OnMoveElement) then
|
||||
OnMoveElement(P1, M1, E1, DestList, Dest);
|
||||
|
||||
E2 := M2.ElementsByName[Dest];
|
||||
if E2 <> nil then E2.Assign(E1);
|
||||
end
|
||||
else
|
||||
E2.Assign(E1);
|
||||
end;
|
||||
finally
|
||||
DestList.Free;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
end.
|
||||
|
119
doceditor/fpdocupdater/fpdocupdater.lpi
Normal file
119
doceditor/fpdocupdater/fpdocupdater.lpi
Normal file
@ -0,0 +1,119 @@
|
||||
<?xml version="1.0"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<PathDelim Value="\"/>
|
||||
<Version Value="5"/>
|
||||
<General>
|
||||
<MainUnit Value="0"/>
|
||||
<IconPath Value="./"/>
|
||||
<TargetFileExt Value=".exe"/>
|
||||
<ActiveEditorIndexAtStart Value="2"/>
|
||||
</General>
|
||||
<VersionInfo>
|
||||
<ProjectVersion Value=""/>
|
||||
<Language Value=""/>
|
||||
<CharSet Value=""/>
|
||||
</VersionInfo>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
<IgnoreBinaries Value="False"/>
|
||||
<IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
|
||||
<ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<local>
|
||||
<FormatVersion Value="1"/>
|
||||
<LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
|
||||
</local>
|
||||
</RunParams>
|
||||
<RequiredPackages Count="1">
|
||||
<Item1>
|
||||
<PackageName Value="LCL"/>
|
||||
</Item1>
|
||||
</RequiredPackages>
|
||||
<Units Count="5">
|
||||
<Unit0>
|
||||
<Filename Value="fpdocupdater.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="FPDocUpdater"/>
|
||||
<CursorPos X="47" Y="16"/>
|
||||
<TopLine Value="1"/>
|
||||
<UsageCount Value="32"/>
|
||||
</Unit0>
|
||||
<Unit1>
|
||||
<Filename Value="mainunit.pas"/>
|
||||
<ComponentName Value="Form1"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<ResourceFilename Value="mainunit.lrs"/>
|
||||
<UnitName Value="MainUnit"/>
|
||||
<CursorPos X="1" Y="1"/>
|
||||
<TopLine Value="1"/>
|
||||
<EditorIndex Value="0"/>
|
||||
<UsageCount Value="32"/>
|
||||
<Loaded Value="True"/>
|
||||
</Unit1>
|
||||
<Unit2>
|
||||
<Filename Value="fpdocfiles.pas"/>
|
||||
<UnitName Value="FPDocFiles"/>
|
||||
<CursorPos X="30" Y="301"/>
|
||||
<TopLine Value="297"/>
|
||||
<EditorIndex Value="1"/>
|
||||
<UsageCount Value="14"/>
|
||||
<Loaded Value="True"/>
|
||||
</Unit2>
|
||||
<Unit3>
|
||||
<Filename Value=""/>
|
||||
<UsageCount Value="10"/>
|
||||
</Unit3>
|
||||
<Unit4>
|
||||
<Filename Value="unitmove.pas"/>
|
||||
<ComponentName Value="FormMove"/>
|
||||
<HasResources Value="True"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<ResourceFilename Value="unitmove.lrs"/>
|
||||
<UnitName Value="UnitMove"/>
|
||||
<CursorPos X="1" Y="1"/>
|
||||
<TopLine Value="1"/>
|
||||
<EditorIndex Value="2"/>
|
||||
<UsageCount Value="20"/>
|
||||
<Loaded Value="True"/>
|
||||
</Unit4>
|
||||
</Units>
|
||||
<JumpHistory Count="1" HistoryIndex="0">
|
||||
<Position1>
|
||||
<Filename Value="mainunit.pas"/>
|
||||
<Caret Line="213" Column="43" TopLine="198"/>
|
||||
</Position1>
|
||||
</JumpHistory>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="5"/>
|
||||
<PathDelim Value="\"/>
|
||||
<SearchPaths>
|
||||
<UnitOutputDirectory Value="units"/>
|
||||
</SearchPaths>
|
||||
<CodeGeneration>
|
||||
<Generate Value="Faster"/>
|
||||
</CodeGeneration>
|
||||
<Linking>
|
||||
<Options>
|
||||
<Win32>
|
||||
<GraphicApplication Value="True"/>
|
||||
</Win32>
|
||||
</Options>
|
||||
</Linking>
|
||||
<Other>
|
||||
<CompilerPath Value="$(CompPath)"/>
|
||||
</Other>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions Count="2">
|
||||
<Item1>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item2>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
19
doceditor/fpdocupdater/fpdocupdater.lpr
Normal file
19
doceditor/fpdocupdater/fpdocupdater.lpr
Normal file
@ -0,0 +1,19 @@
|
||||
program FPDocUpdater;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
uses
|
||||
{$IFDEF UNIX}{$IFDEF UseCThreads}
|
||||
cthreads,
|
||||
{$ENDIF}{$ENDIF}
|
||||
Interfaces, // this includes the LCL widgetset
|
||||
Forms
|
||||
{ add your units here }, MainUnit, UnitMove;
|
||||
|
||||
begin
|
||||
Application.Initialize;
|
||||
Application.CreateForm(TForm1, Form1);
|
||||
Application.CreateForm(TFormMove, FormMove);
|
||||
Application.Run;
|
||||
end.
|
||||
|
220
doceditor/fpdocupdater/mainunit.lfm
Normal file
220
doceditor/fpdocupdater/mainunit.lfm
Normal file
@ -0,0 +1,220 @@
|
||||
object Form1: TForm1
|
||||
Left = 253
|
||||
Height = 484
|
||||
Top = 156
|
||||
Width = 531
|
||||
HorzScrollBar.Page = 530
|
||||
VertScrollBar.Page = 483
|
||||
ActiveControl = EditDocs
|
||||
Caption = 'FPDoc Updater'
|
||||
ClientHeight = 484
|
||||
ClientWidth = 531
|
||||
Constraints.MinHeight = 464
|
||||
Constraints.MinWidth = 300
|
||||
OnCreate = FormCreate
|
||||
OnDestroy = FormDestroy
|
||||
OnShow = FormShow
|
||||
object LabelDocs: TLabel
|
||||
Left = 12
|
||||
Height = 14
|
||||
Top = 18
|
||||
Width = 82
|
||||
Caption = 'FPDoc files path:'
|
||||
ParentColor = False
|
||||
end
|
||||
object LabelUnits: TLabel
|
||||
Left = 12
|
||||
Height = 14
|
||||
Top = 51
|
||||
Width = 54
|
||||
Caption = 'Units path:'
|
||||
ParentColor = False
|
||||
end
|
||||
object LabelBackup: TLabel
|
||||
Left = 395
|
||||
Height = 14
|
||||
Top = 246
|
||||
Width = 89
|
||||
Anchors = [akTop, akRight]
|
||||
Caption = 'Backup extension:'
|
||||
ParentColor = False
|
||||
end
|
||||
object LabelPackage: TLabel
|
||||
Left = 395
|
||||
Height = 14
|
||||
Top = 161
|
||||
Width = 45
|
||||
Anchors = [akTop, akRight]
|
||||
Caption = 'Package:'
|
||||
ParentColor = False
|
||||
end
|
||||
object LabelMakeSkel: TLabel
|
||||
Left = 11
|
||||
Height = 14
|
||||
Top = 124
|
||||
Width = 95
|
||||
Caption = 'MakeSkel tool path:'
|
||||
ParentColor = False
|
||||
end
|
||||
object LabelInclude: TLabel
|
||||
Left = 11
|
||||
Height = 14
|
||||
Top = 90
|
||||
Width = 87
|
||||
Caption = 'Include files path:'
|
||||
ParentColor = False
|
||||
end
|
||||
object EditDocs: TDirectoryEdit
|
||||
Left = 126
|
||||
Height = 23
|
||||
Top = 12
|
||||
Width = 347
|
||||
Directory = 'D:\Projects\Lazarus\Docs\xml\lcl\'
|
||||
OnAcceptDirectory = EditDocsAcceptDirectory
|
||||
ButtonWidth = 45
|
||||
NumGlyphs = 1
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
ParentColor = False
|
||||
TabOrder = 0
|
||||
OnEditingDone = EditDocsEditingDone
|
||||
end
|
||||
object EditUnits: TDirectoryEdit
|
||||
Left = 126
|
||||
Height = 23
|
||||
Top = 48
|
||||
Width = 347
|
||||
Directory = 'D:\Projects\Lazarus\LCL\'
|
||||
OnAcceptDirectory = EditUnitsAcceptDirectory
|
||||
ButtonWidth = 45
|
||||
NumGlyphs = 1
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
ParentColor = False
|
||||
TabOrder = 1
|
||||
OnEditingDone = EditDocsEditingDone
|
||||
end
|
||||
object ButtonUpdate: TButton
|
||||
Left = 395
|
||||
Height = 25
|
||||
Top = 354
|
||||
Width = 122
|
||||
Anchors = [akTop, akRight]
|
||||
BorderSpacing.InnerBorder = 4
|
||||
Caption = 'Update'
|
||||
OnClick = ButtonUpdateClick
|
||||
TabOrder = 2
|
||||
end
|
||||
object ButtonUpdateAll: TButton
|
||||
Left = 395
|
||||
Height = 25
|
||||
Top = 426
|
||||
Width = 122
|
||||
Anchors = [akTop, akRight]
|
||||
BorderSpacing.InnerBorder = 4
|
||||
Caption = 'Update All'
|
||||
OnClick = ButtonUpdateAllClick
|
||||
TabOrder = 3
|
||||
end
|
||||
object ButtonUpdateNew: TButton
|
||||
Left = 395
|
||||
Height = 25
|
||||
Top = 390
|
||||
Width = 122
|
||||
Anchors = [akTop, akRight]
|
||||
BorderSpacing.InnerBorder = 4
|
||||
Caption = 'Update New'
|
||||
Font.Color = clRed
|
||||
OnClick = ButtonUpdateNewClick
|
||||
TabOrder = 4
|
||||
end
|
||||
object ButtonRefresh: TButton
|
||||
Left = 395
|
||||
Height = 25
|
||||
Top = 312
|
||||
Width = 122
|
||||
Anchors = [akTop, akRight]
|
||||
BorderSpacing.InnerBorder = 4
|
||||
Caption = 'Refresh'
|
||||
OnClick = ButtonRefreshClick
|
||||
TabOrder = 5
|
||||
end
|
||||
object ListBox: TListBox
|
||||
Left = 12
|
||||
Height = 295
|
||||
Top = 156
|
||||
Width = 371
|
||||
Anchors = [akTop, akLeft, akRight, akBottom]
|
||||
MultiSelect = True
|
||||
OnDrawItem = ListBoxDrawItem
|
||||
Style = lbOwnerDrawFixed
|
||||
TabOrder = 6
|
||||
end
|
||||
object CheckBoxBackup: TCheckBox
|
||||
Left = 395
|
||||
Height = 13
|
||||
Top = 222
|
||||
Width = 114
|
||||
Anchors = [akTop, akRight]
|
||||
Caption = 'Backup FPDoc files'
|
||||
Checked = True
|
||||
State = cbChecked
|
||||
TabOrder = 7
|
||||
end
|
||||
object EditBackup: TEdit
|
||||
Left = 407
|
||||
Height = 23
|
||||
Top = 270
|
||||
Width = 80
|
||||
Anchors = [akTop, akRight]
|
||||
TabOrder = 8
|
||||
Text = 'bak'
|
||||
end
|
||||
object EditPackage: TEdit
|
||||
Left = 407
|
||||
Height = 23
|
||||
Top = 186
|
||||
Width = 80
|
||||
Anchors = [akTop, akRight]
|
||||
TabOrder = 9
|
||||
Text = 'LCL'
|
||||
end
|
||||
object EditMakeSkel: TFileNameEdit
|
||||
Left = 125
|
||||
Height = 23
|
||||
Top = 120
|
||||
Width = 347
|
||||
FileName = 'D:\Projects\fpcbeta\bin\i386-win32\makeskel'
|
||||
ButtonWidth = 45
|
||||
NumGlyphs = 1
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
ParentColor = False
|
||||
TabOrder = 10
|
||||
end
|
||||
object EditInclude: TDirectoryEdit
|
||||
Left = 125
|
||||
Height = 23
|
||||
Top = 84
|
||||
Width = 348
|
||||
Directory = 'D:\Projects\Lazarus\LCL\Include'
|
||||
OnAcceptDirectory = EditIncludeAcceptDirectory
|
||||
ButtonWidth = 45
|
||||
NumGlyphs = 1
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
ParentColor = False
|
||||
TabOrder = 11
|
||||
OnEditingDone = EditDocsEditingDone
|
||||
end
|
||||
object StatusBar: TStatusBar
|
||||
Height = 20
|
||||
Top = 464
|
||||
Width = 531
|
||||
Panels = <>
|
||||
end
|
||||
object OpenDialog: TOpenDialog
|
||||
Title = 'Open FPDoc file'
|
||||
DefaultExt = '.xml'
|
||||
Filter = 'FPDoc file (*.xml)|*.xml|All files|*.*'
|
||||
Options = [ofFileMustExist, ofEnableSizing, ofViewDetail]
|
||||
left = 24
|
||||
top = 168
|
||||
end
|
||||
end
|
68
doceditor/fpdocupdater/mainunit.lrs
Normal file
68
doceditor/fpdocupdater/mainunit.lrs
Normal file
@ -0,0 +1,68 @@
|
||||
{ This is an automatically generated lazarus resource file }
|
||||
|
||||
LazarusResources.Add('TForm1','FORMDATA',[
|
||||
'TPF0'#6'TForm1'#5'Form1'#4'Left'#3#253#0#6'Height'#3#228#1#3'Top'#3#156#0#5
|
||||
+'Width'#3#19#2#18'HorzScrollBar.Page'#3#18#2#18'VertScrollBar.Page'#3#227#1
|
||||
+#13'ActiveControl'#7#8'EditDocs'#7'Caption'#6#13'FPDoc Updater'#12'ClientHei'
|
||||
+'ght'#3#228#1#11'ClientWidth'#3#19#2#21'Constraints.MinHeight'#3#208#1#20'Co'
|
||||
+'nstraints.MinWidth'#3','#1#8'OnCreate'#7#10'FormCreate'#9'OnDestroy'#7#11'F'
|
||||
+'ormDestroy'#6'OnShow'#7#8'FormShow'#0#6'TLabel'#9'LabelDocs'#4'Left'#2#12#6
|
||||
+'Height'#2#14#3'Top'#2#18#5'Width'#2'R'#7'Caption'#6#17'FPDoc files path:'#11
|
||||
+'ParentColor'#8#0#0#6'TLabel'#10'LabelUnits'#4'Left'#2#12#6'Height'#2#14#3'T'
|
||||
+'op'#2'3'#5'Width'#2'6'#7'Caption'#6#11'Units path:'#11'ParentColor'#8#0#0#6
|
||||
+'TLabel'#11'LabelBackup'#4'Left'#3#139#1#6'Height'#2#14#3'Top'#3#246#0#5'Wid'
|
||||
+'th'#2'Y'#7'Anchors'#11#5'akTop'#7'akRight'#0#7'Caption'#6#17'Backup extensi'
|
||||
+'on:'#11'ParentColor'#8#0#0#6'TLabel'#12'LabelPackage'#4'Left'#3#139#1#6'Hei'
|
||||
+'ght'#2#14#3'Top'#3#161#0#5'Width'#2'-'#7'Anchors'#11#5'akTop'#7'akRight'#0#7
|
||||
+'Caption'#6#8'Package:'#11'ParentColor'#8#0#0#6'TLabel'#13'LabelMakeSkel'#4
|
||||
+'Left'#2#11#6'Height'#2#14#3'Top'#2'|'#5'Width'#2'_'#7'Caption'#6#19'MakeSke'
|
||||
+'l tool path:'#11'ParentColor'#8#0#0#6'TLabel'#12'LabelInclude'#4'Left'#2#11
|
||||
+#6'Height'#2#14#3'Top'#2'Z'#5'Width'#2'W'#7'Caption'#6#19'Include files path'
|
||||
+':'#11'ParentColor'#8#0#0#14'TDirectoryEdit'#8'EditDocs'#4'Left'#2'~'#6'Heig'
|
||||
+'ht'#2#23#3'Top'#2#12#5'Width'#3'['#1#9'Directory'#6'!D:\Projects\Lazarus\Do'
|
||||
+'cs\xml\lcl\'#17'OnAcceptDirectory'#7#23'EditDocsAcceptDirectory'#11'ButtonW'
|
||||
+'idth'#2'-'#9'NumGlyphs'#2#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#11
|
||||
+'ParentColor'#8#8'TabOrder'#2#0#13'OnEditingDone'#7#19'EditDocsEditingDone'#0
|
||||
+#0#14'TDirectoryEdit'#9'EditUnits'#4'Left'#2'~'#6'Height'#2#23#3'Top'#2'0'#5
|
||||
+'Width'#3'['#1#9'Directory'#6#24'D:\Projects\Lazarus\LCL\'#17'OnAcceptDirect'
|
||||
+'ory'#7#24'EditUnitsAcceptDirectory'#11'ButtonWidth'#2'-'#9'NumGlyphs'#2#1#7
|
||||
+'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#11'ParentColor'#8#8'TabOrder'#2
|
||||
+#1#13'OnEditingDone'#7#19'EditDocsEditingDone'#0#0#7'TButton'#12'ButtonUpdat'
|
||||
+'e'#4'Left'#3#139#1#6'Height'#2#25#3'Top'#3'b'#1#5'Width'#2'z'#7'Anchors'#11
|
||||
+#5'akTop'#7'akRight'#0#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#6'Upda'
|
||||
+'te'#7'OnClick'#7#17'ButtonUpdateClick'#8'TabOrder'#2#2#0#0#7'TButton'#15'Bu'
|
||||
+'ttonUpdateAll'#4'Left'#3#139#1#6'Height'#2#25#3'Top'#3#170#1#5'Width'#2'z'#7
|
||||
+'Anchors'#11#5'akTop'#7'akRight'#0#25'BorderSpacing.InnerBorder'#2#4#7'Capti'
|
||||
+'on'#6#10'Update All'#7'OnClick'#7#20'ButtonUpdateAllClick'#8'TabOrder'#2#3#0
|
||||
+#0#7'TButton'#15'ButtonUpdateNew'#4'Left'#3#139#1#6'Height'#2#25#3'Top'#3#134
|
||||
+#1#5'Width'#2'z'#7'Anchors'#11#5'akTop'#7'akRight'#0#25'BorderSpacing.InnerB'
|
||||
+'order'#2#4#7'Caption'#6#10'Update New'#10'Font.Color'#7#5'clRed'#7'OnClick'
|
||||
+#7#20'ButtonUpdateNewClick'#8'TabOrder'#2#4#0#0#7'TButton'#13'ButtonRefresh'
|
||||
+#4'Left'#3#139#1#6'Height'#2#25#3'Top'#3'8'#1#5'Width'#2'z'#7'Anchors'#11#5
|
||||
+'akTop'#7'akRight'#0#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#7'Refres'
|
||||
+'h'#7'OnClick'#7#18'ButtonRefreshClick'#8'TabOrder'#2#5#0#0#8'TListBox'#7'Li'
|
||||
+'stBox'#4'Left'#2#12#6'Height'#3''''#1#3'Top'#3#156#0#5'Width'#3's'#1#7'Anch'
|
||||
+'ors'#11#5'akTop'#6'akLeft'#7'akRight'#8'akBottom'#0#11'MultiSelect'#9#10'On'
|
||||
+'DrawItem'#7#15'ListBoxDrawItem'#5'Style'#7#16'lbOwnerDrawFixed'#8'TabOrder'
|
||||
+#2#6#0#0#9'TCheckBox'#14'CheckBoxBackup'#4'Left'#3#139#1#6'Height'#2#13#3'To'
|
||||
+'p'#3#222#0#5'Width'#2'r'#7'Anchors'#11#5'akTop'#7'akRight'#0#7'Caption'#6#18
|
||||
+'Backup FPDoc files'#7'Checked'#9#5'State'#7#9'cbChecked'#8'TabOrder'#2#7#0#0
|
||||
+#5'TEdit'#10'EditBackup'#4'Left'#3#151#1#6'Height'#2#23#3'Top'#3#14#1#5'Widt'
|
||||
+'h'#2'P'#7'Anchors'#11#5'akTop'#7'akRight'#0#8'TabOrder'#2#8#4'Text'#6#3'bak'
|
||||
+#0#0#5'TEdit'#11'EditPackage'#4'Left'#3#151#1#6'Height'#2#23#3'Top'#3#186#0#5
|
||||
+'Width'#2'P'#7'Anchors'#11#5'akTop'#7'akRight'#0#8'TabOrder'#2#9#4'Text'#6#3
|
||||
+'LCL'#0#0#13'TFileNameEdit'#12'EditMakeSkel'#4'Left'#2'}'#6'Height'#2#23#3'T'
|
||||
+'op'#2'x'#5'Width'#3'['#1#8'FileName'#6'+D:\Projects\fpcbeta\bin\i386-win32\'
|
||||
+'makeskel'#11'ButtonWidth'#2'-'#9'NumGlyphs'#2#1#7'Anchors'#11#5'akTop'#6'ak'
|
||||
+'Left'#7'akRight'#0#11'ParentColor'#8#8'TabOrder'#2#10#0#0#14'TDirectoryEdit'
|
||||
+#11'EditInclude'#4'Left'#2'}'#6'Height'#2#23#3'Top'#2'T'#5'Width'#3'\'#1#9'D'
|
||||
+'irectory'#6#31'D:\Projects\Lazarus\LCL\Include'#17'OnAcceptDirectory'#7#26
|
||||
+'EditIncludeAcceptDirectory'#11'ButtonWidth'#2'-'#9'NumGlyphs'#2#1#7'Anchors'
|
||||
+#11#5'akTop'#6'akLeft'#7'akRight'#0#11'ParentColor'#8#8'TabOrder'#2#11#13'On'
|
||||
+'EditingDone'#7#19'EditDocsEditingDone'#0#0#10'TStatusBar'#9'StatusBar'#6'He'
|
||||
+'ight'#2#20#3'Top'#3#208#1#5'Width'#3#19#2#6'Panels'#14#0#0#0#11'TOpenDialog'
|
||||
+#10'OpenDialog'#5'Title'#6#15'Open FPDoc file'#10'DefaultExt'#6#4'.xml'#6'Fi'
|
||||
+'lter'#6'&FPDoc file (*.xml)|*.xml|All files|*.*'#7'Options'#11#15'ofFileMus'
|
||||
+'tExist'#14'ofEnableSizing'#12'ofViewDetail'#0#4'left'#2#24#3'top'#3#168#0#0
|
||||
+#0#0
|
||||
]);
|
474
doceditor/fpdocupdater/mainunit.pas
Normal file
474
doceditor/fpdocupdater/mainunit.pas
Normal file
@ -0,0 +1,474 @@
|
||||
{
|
||||
***************************************************************************
|
||||
* *
|
||||
* This source is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This code is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
|
||||
* General Public License for more details. *
|
||||
* *
|
||||
* A copy of the GNU General Public License is available on the World *
|
||||
* Wide Web at <http://www.gnu.org/copyleft/gpl.html>. You can also *
|
||||
* obtain it by writing to the Free Software Foundation, *
|
||||
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||
* *
|
||||
***************************************************************************
|
||||
|
||||
Author: Tom Gregorovic
|
||||
}
|
||||
unit MainUnit;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs,
|
||||
FPDocFiles, StdCtrls, ComCtrls, Masks, FileUtil, ExtCtrls,
|
||||
LCLIntf, LCLType, LCLProc, Process, EditBtn, XMLCfg;
|
||||
|
||||
type
|
||||
|
||||
{ TForm1 }
|
||||
|
||||
TForm1 = class(TForm)
|
||||
ButtonRefresh: TButton;
|
||||
ButtonUpdateNew: TButton;
|
||||
ButtonUpdate: TButton;
|
||||
ButtonUpdateAll: TButton;
|
||||
CheckBoxBackup: TCheckBox;
|
||||
EditInclude: TDirectoryEdit;
|
||||
EditMakeSkel: TFileNameEdit;
|
||||
EditPackage: TEdit;
|
||||
EditBackup: TEdit;
|
||||
EditUnits: TDirectoryEdit;
|
||||
EditDocs: TDirectoryEdit;
|
||||
Label1: TLabel;
|
||||
LabelInclude: TLabel;
|
||||
LabelMakeSkel: TLabel;
|
||||
LabelPackage: TLabel;
|
||||
LabelBackup: TLabel;
|
||||
LabelUnits: TLabel;
|
||||
LabelDocs: TLabel;
|
||||
ListBox: TListBox;
|
||||
OpenDialog: TOpenDialog;
|
||||
StatusBar: TStatusBar;
|
||||
procedure ButtonRefreshClick(Sender: TObject);
|
||||
procedure ButtonUpdateAllClick(Sender: TObject);
|
||||
procedure ButtonUpdateClick(Sender: TObject);
|
||||
procedure ButtonUpdateNewClick(Sender: TObject);
|
||||
procedure EditDocsAcceptDirectory(Sender: TObject; var Value: String);
|
||||
procedure EditDocsEditingDone(Sender: TObject);
|
||||
procedure EditIncludeAcceptDirectory(Sender: TObject; var Value: String);
|
||||
procedure EditUnitsAcceptDirectory(Sender: TObject; var Value: String);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure FormDestroy(Sender: TObject);
|
||||
procedure FormShow(Sender: TObject);
|
||||
procedure ListBoxDrawItem(Control: TWinControl; Index: Integer;
|
||||
ARect: TRect; State: TOwnerDrawState);
|
||||
private
|
||||
{ private declarations }
|
||||
public
|
||||
procedure BeginUpdate;
|
||||
procedure EndUpdate;
|
||||
procedure UpdateList;
|
||||
procedure UpdateFile(const AFileName: String);
|
||||
procedure BackupFile(const AFileName: String);
|
||||
procedure WriteStatus(const S: String);
|
||||
|
||||
procedure MoveElement(const SrcPackage: TFPDocPackage;
|
||||
const SrcModule: TFPDocModule; const Src: TFPDocElement;
|
||||
const DestList: TStrings; var Dest: String);
|
||||
end;
|
||||
|
||||
var
|
||||
Form1: TForm1;
|
||||
XMLConfig: TXMLConfig;
|
||||
BackupList: TStringList;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
UnitMove;
|
||||
|
||||
function FindFiles(const Path, Mask: String; WithPath: Boolean = True;
|
||||
WithExt: Boolean = True): TStringList;
|
||||
var
|
||||
MaskList: TMaskList;
|
||||
Info: TSearchRec;
|
||||
S: String;
|
||||
begin
|
||||
Result := TStringList.Create;
|
||||
MaskList := TMaskList.Create(Mask);
|
||||
try
|
||||
if SysUtils.FindFirst(Path + GetAllFilesMask, faAnyFile, Info) = 0 then
|
||||
repeat
|
||||
if MaskList.Matches(Info.Name) then
|
||||
begin
|
||||
if WithPath then S := Path
|
||||
else S := '';
|
||||
if WithExt then S := S + Info.Name
|
||||
else S := S + ExtractFileNameOnly(Info.Name);
|
||||
|
||||
Result.Add(S);
|
||||
end;
|
||||
until SysUtils.FindNext(Info) <> 0;
|
||||
|
||||
SysUtils.FindClose(Info);
|
||||
finally
|
||||
MaskList.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
{ TForm1 }
|
||||
|
||||
procedure TForm1.FormShow(Sender: TObject);
|
||||
begin
|
||||
UpdateList;
|
||||
end;
|
||||
|
||||
procedure TForm1.ListBoxDrawItem(Control: TWinControl; Index: Integer;
|
||||
ARect: TRect; State: TOwnerDrawState);
|
||||
begin
|
||||
if (Index < 0) or (Index >= ListBox.Items.Count) then Exit;
|
||||
|
||||
with ListBox.Canvas do
|
||||
begin
|
||||
if odSelected in State then
|
||||
Brush.Color := clHighlight
|
||||
else
|
||||
begin
|
||||
Brush.Color := ListBox.Color;
|
||||
case Integer(ListBox.Items.Objects[Index]) of
|
||||
0: SetTextColor(ListBox.Canvas.Handle, ListBox.Canvas.Font.Color); // normal
|
||||
1: SetTextColor(ListBox.Canvas.Handle, clRed); // new
|
||||
end;
|
||||
end;
|
||||
|
||||
FillRect(ARect);
|
||||
TextRect(ARect, ARect.Left + 8, ARect.Top, ExtractFileNameOnly(ListBox.Items[Index]));
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TForm1.BeginUpdate;
|
||||
begin
|
||||
BackupList := TStringList.Create;
|
||||
BackupList.Sorted := True;
|
||||
WriteStatus('Updating started.');
|
||||
end;
|
||||
|
||||
procedure TForm1.EndUpdate;
|
||||
begin
|
||||
BackupList.Free;
|
||||
UpdateList;
|
||||
WriteStatus('Updating done.');
|
||||
Sleep(1000);
|
||||
WriteStatus('');
|
||||
end;
|
||||
|
||||
procedure TForm1.ButtonRefreshClick(Sender: TObject);
|
||||
begin
|
||||
UpdateList;
|
||||
end;
|
||||
|
||||
procedure TForm1.ButtonUpdateAllClick(Sender: TObject);
|
||||
var
|
||||
I: Integer;
|
||||
begin
|
||||
BeginUpdate;
|
||||
try
|
||||
for I := 0 to ListBox.Items.Count - 1 do
|
||||
UpdateFile(ListBox.Items[I]);
|
||||
finally
|
||||
EndUpdate;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TForm1.ButtonUpdateClick(Sender: TObject);
|
||||
var
|
||||
I: Integer;
|
||||
begin
|
||||
BeginUpdate;
|
||||
try
|
||||
for I := 0 to ListBox.Items.Count - 1 do
|
||||
if ListBox.Selected[I] then UpdateFile(ListBox.Items[I]);
|
||||
finally
|
||||
EndUpdate;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TForm1.ButtonUpdateNewClick(Sender: TObject);
|
||||
var
|
||||
I: Integer;
|
||||
begin
|
||||
BeginUpdate;
|
||||
try
|
||||
for I := 0 to ListBox.Items.Count - 1 do
|
||||
if Integer(ListBox.items.Objects[I]) = 1 then UpdateFile(ListBox.Items[I]);
|
||||
finally
|
||||
EndUpdate;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TForm1.EditDocsAcceptDirectory(Sender: TObject; var Value: String);
|
||||
begin
|
||||
EditDocs.Directory := AppendPathDelim(Value);
|
||||
EditDocs.SetFocus;
|
||||
UpdateList;
|
||||
Value := '';
|
||||
end;
|
||||
|
||||
procedure TForm1.EditDocsEditingDone(Sender: TObject);
|
||||
begin
|
||||
UpdateList;
|
||||
end;
|
||||
|
||||
procedure TForm1.EditIncludeAcceptDirectory(Sender: TObject; var Value: String);
|
||||
begin
|
||||
Value := AppendPathDelim(Value);
|
||||
end;
|
||||
|
||||
procedure TForm1.EditUnitsAcceptDirectory(Sender: TObject; var Value: String);
|
||||
begin
|
||||
EditUnits.Directory := AppendPathDelim(Value);
|
||||
EditUnits.SetFocus;
|
||||
UpdateList;
|
||||
Value := '';
|
||||
end;
|
||||
|
||||
procedure TForm1.FormCreate(Sender: TObject);
|
||||
begin
|
||||
XMLConfig := TXMLConfig.Create(nil);
|
||||
XMLConfig.RootName := 'Config';
|
||||
XMLConfig.Filename := 'FPDocUpdater.xml';
|
||||
|
||||
EditDocs.Directory := XMLConfig.GetValue('FPDocsPath/Value', 'D:\Projects\lazarus\docs\xml\lcl\');
|
||||
EditUnits.Directory := XMLConfig.GetValue('UnitsPath/Value', 'D:\Projects\lazarus\lcl\');
|
||||
EditInclude.Directory := XMLConfig.GetValue('IncludePath/Value', 'D:\Projects\lazarus\lcl\include\');
|
||||
EditMakeSkel.FileName := XMLConfig.GetValue('MakeSkelPath/Value', 'D:\Projects\fpcbeta\bin\i386-win32\makeskel.exe');
|
||||
CheckBoxBackup.Checked := XMLConfig.GetValue('BackupFPDocs/Value', True);
|
||||
EditBackup.Text := XMLConfig.GetValue('BackupExt/Value', 'bak');
|
||||
EditPackage.Text := XMLConfig.GetValue('Package/Value', 'LCL');
|
||||
end;
|
||||
|
||||
procedure TForm1.FormDestroy(Sender: TObject);
|
||||
begin
|
||||
XMLConfig.Clear;
|
||||
XMLConfig.SetValue('FPDocsPath/Value', EditDocs.Directory);
|
||||
XMLConfig.SetValue('UnitsPath/Value', EditUnits.Directory);
|
||||
XMLConfig.SetValue('IncludePath/Value', EditInclude.Directory);
|
||||
XMLConfig.SetValue('MakeSkelPath/Value', EditMakeSkel.FileName);
|
||||
XMLConfig.SetValue('BackupFPDocs/Value', CheckBoxBackup.Checked);
|
||||
XMLConfig.SetValue('BackupExt/Value', EditBackup.Text);
|
||||
XMLConfig.SetValue('Package/Value', EditPackage.Text);
|
||||
|
||||
XMLConfig.Free;
|
||||
end;
|
||||
|
||||
procedure TForm1.UpdateList;
|
||||
var
|
||||
Docs, Units: TStringList;
|
||||
I: Integer;
|
||||
N: String;
|
||||
State: Integer;
|
||||
begin
|
||||
ListBox.Items.BeginUpdate;
|
||||
try
|
||||
ListBox.Items.Clear;
|
||||
|
||||
Docs := FindFiles(EditDocs.Directory, '*.xml', False, False);
|
||||
Units := FindFiles(EditUnits.Directory, '*.pas;*.pp');
|
||||
try
|
||||
Units.Sorted := True;
|
||||
for I := 0 to Units.Count - 1 do
|
||||
begin
|
||||
N := ExtractFileNameOnly(Units[I]);
|
||||
|
||||
if Docs.IndexOf(N) = -1 then State := 1
|
||||
else
|
||||
State := 0;
|
||||
|
||||
ListBox.Items.AddObject(Units[I], TObject(State));
|
||||
end;
|
||||
finally
|
||||
Units.Free;
|
||||
Docs.Free;
|
||||
end;
|
||||
finally
|
||||
ListBox.Items.EndUpdate;
|
||||
end;
|
||||
ListBox.SetFocus;
|
||||
end;
|
||||
|
||||
procedure ShowError(const S: String);
|
||||
begin
|
||||
DebugLn(S);
|
||||
raise Exception.Create(S);
|
||||
end;
|
||||
|
||||
procedure TForm1.UpdateFile(const AFileName: String);
|
||||
var
|
||||
DocFileName: String;
|
||||
MakeSkelPath: String;
|
||||
AProcess: TProcess;
|
||||
AStringList: TStringList;
|
||||
M: TMemoryStream;
|
||||
N, BytesRead: LongInt;
|
||||
OldDoc, NewDoc: TFPDocFile;
|
||||
const
|
||||
READ_BYTES = 2048;
|
||||
|
||||
begin
|
||||
if not FileExists(AFileName) then
|
||||
begin
|
||||
ShowError('Update ' + AFileName + ' failed!');
|
||||
Exit;
|
||||
end;
|
||||
|
||||
MakeSkelPath := FindDefaultExecutablePath(EditMakeSkel.FileName);
|
||||
|
||||
if not FileIsExecutable(MakeSkelPath) then
|
||||
ShowError('Unable to find MakeSkel tool executable "' + EditMakeSkel.Text +'"!');
|
||||
|
||||
DocFileName := EditDocs.Directory + ExtractFileNameOnly(AFileName) + '.xml';
|
||||
|
||||
if CheckBoxBackup.Checked then BackupFile(DocFileName);
|
||||
|
||||
WriteStatus('Updating ' + AFileName);
|
||||
|
||||
AProcess := TProcess.Create(nil);
|
||||
AStringList := TStringList.Create;
|
||||
M := TMemoryStream.Create;
|
||||
try
|
||||
AProcess.CommandLine :=
|
||||
Format(MakeSkelPath + ' --package="%s" --input="%s -Fi%s"',
|
||||
[EditPackage.Text, AFileName, EditInclude.Directory]);
|
||||
AProcess.Options := AProcess.Options + [poUsePipes];
|
||||
AProcess.Execute;
|
||||
|
||||
BytesRead := 0;
|
||||
while AProcess.Running do
|
||||
begin
|
||||
M.SetSize(BytesRead + READ_BYTES);
|
||||
N := AProcess.Output.Read((M.Memory + BytesRead)^, READ_BYTES);
|
||||
if N > 0 then Inc(BytesRead, N)
|
||||
else Sleep(100);
|
||||
end;
|
||||
|
||||
repeat
|
||||
M.SetSize(BytesRead + READ_BYTES);
|
||||
N := AProcess.Output.Read((M.Memory + BytesRead)^, READ_BYTES);
|
||||
if N > 0 then Inc(BytesRead, N);
|
||||
until N <= 0;
|
||||
M.SetSize(BytesRead);
|
||||
|
||||
AStringList.LoadFromStream(M);
|
||||
if AStringList.Strings[AStringList.Count - 1] <> 'Done.' then
|
||||
begin
|
||||
ShowError('Update ' + AFileName + ' failed! ' + AStringList.Strings[AStringList.Count - 1]);
|
||||
Exit;
|
||||
end;
|
||||
|
||||
while (AStringList.Count > 0) and
|
||||
(AStringList.Strings[AStringList.Count - 1] <> '</fpdoc-descriptions>') do
|
||||
AStringList.Delete(AStringList.Count - 1);
|
||||
|
||||
M.Clear;
|
||||
AStringList.SaveToStream(M);
|
||||
M.Position := 0;
|
||||
NewDoc := TFPDocFile.Create(M);
|
||||
if FileExists(DocFileName) then OldDoc := TFPDocFile.Create(DocFileName)
|
||||
else OldDoc := nil;
|
||||
try
|
||||
if OldDoc <> nil then OldDoc.AssignToSkeleton(NewDoc, @MoveElement);
|
||||
NewDoc.SaveToFile(DocFileName);
|
||||
finally
|
||||
if OldDoc <> nil then OldDoc.Free;
|
||||
NewDoc.Free;
|
||||
end;
|
||||
|
||||
WriteStatus('Update ' + AFileName + ' in ' + DocFileName + ' succeeds!');
|
||||
finally
|
||||
M.Free;
|
||||
AStringList.Free;
|
||||
AProcess.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TForm1.BackupFile(const AFileName: String);
|
||||
var
|
||||
BackupFileName: String;
|
||||
begin
|
||||
if not FileExists(AFileName) then Exit;
|
||||
|
||||
if BackupList.IndexOf(AFileName) = -1 then
|
||||
begin
|
||||
BackupFileName := ChangeFileExt(AFileName, '.' + EditBackup.Text);
|
||||
|
||||
if CopyFile(AFileName, BackupFileName, True) then
|
||||
begin
|
||||
WriteStatus('Backup ' + AFileName + ' to ' + BackupFileName + ' succeeds.');
|
||||
BackupList.Add(AFileName);
|
||||
end
|
||||
else
|
||||
ShowError('Backup ' + AFileName + ' to ' + BackupFileName + ' failed!');
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TForm1.WriteStatus(const S: String);
|
||||
begin
|
||||
DebugLn(S);
|
||||
StatusBar.SimpleText := S;
|
||||
end;
|
||||
|
||||
procedure TForm1.MoveElement(const SrcPackage: TFPDocPackage;
|
||||
const SrcModule: TFPDocModule; const Src: TFPDocElement;
|
||||
const DestList: TStrings; var Dest: String);
|
||||
var
|
||||
F: TFPDocFile;
|
||||
begin
|
||||
FormMove.LabelSrc.Caption := Format('Package: %sModule: %s',
|
||||
[SrcPackage.Name + LineEnding, SrcModule.Name]);
|
||||
FormMove.LabelSrcElement.Caption := 'Element: ' + Src.Name;
|
||||
|
||||
FormMove.ComboBoxDest.Items.Assign(DestList);
|
||||
FormMove.ComboBoxDest.Sorted := True;
|
||||
|
||||
case FormMove.ShowModal of
|
||||
mrYes:
|
||||
Dest := FormMove.ComboBoxDest.Text;
|
||||
mrCancel:
|
||||
begin // Move to another file
|
||||
OpenDialog.InitialDir := ExtractFileDir(EditDocs.Directory);
|
||||
if OpenDialog.Execute then
|
||||
begin
|
||||
if CheckBoxBackup.Checked then BackupFile(OpenDialog.FileName);
|
||||
|
||||
F := TFPDocFile.Create(OpenDialog.FileName);
|
||||
try
|
||||
F.PackagesByName[EditPackage.Text].Modules[0].Add(Src);
|
||||
F.SaveToFile(OpenDialog.FileName);
|
||||
|
||||
WriteStatus('Move Element: ' + SrcPackage.Name + '\' + SrcModule.Name +
|
||||
'\' + Src.Name + ' Dest file: ' + OpenDialog.FileName);
|
||||
Exit;
|
||||
finally
|
||||
F.Free;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
WriteStatus('Move Element: ' + SrcPackage.Name + '\' + SrcModule.Name + '\' + Src.Name +
|
||||
' Dest: ' + Dest);
|
||||
end;
|
||||
|
||||
initialization
|
||||
{$I mainunit.lrs}
|
||||
|
||||
end.
|
||||
|
92
doceditor/fpdocupdater/unitmove.lfm
Normal file
92
doceditor/fpdocupdater/unitmove.lfm
Normal file
@ -0,0 +1,92 @@
|
||||
object FormMove: TFormMove
|
||||
Left = 299
|
||||
Height = 235
|
||||
Top = 153
|
||||
Width = 400
|
||||
HorzScrollBar.Page = 399
|
||||
VertScrollBar.Page = 234
|
||||
ActiveControl = ButtonYes
|
||||
BorderIcons = [biSystemMenu, biMinimize]
|
||||
BorderStyle = bsSingle
|
||||
Caption = 'Move Element'
|
||||
ChildSizing.LeftRightSpacing = 10
|
||||
ChildSizing.TopBottomSpacing = 10
|
||||
ClientHeight = 235
|
||||
ClientWidth = 400
|
||||
object LabelSrc: TLabel
|
||||
Left = 10
|
||||
Height = 42
|
||||
Top = 66
|
||||
Width = 379
|
||||
AutoSize = False
|
||||
ParentColor = False
|
||||
end
|
||||
object LabelDest: TLabel
|
||||
Left = 10
|
||||
Height = 14
|
||||
Top = 156
|
||||
Width = 100
|
||||
Caption = 'Destination element:'
|
||||
ParentColor = False
|
||||
end
|
||||
object LabelSrcElement: TLabel
|
||||
Left = 10
|
||||
Height = 18
|
||||
Top = 120
|
||||
Width = 42
|
||||
Font.Style = [fsBold]
|
||||
ParentColor = False
|
||||
end
|
||||
object ButtonYes: TButton
|
||||
Left = 66
|
||||
Height = 25
|
||||
Top = 199
|
||||
Width = 75
|
||||
Anchors = [akRight, akBottom]
|
||||
BorderSpacing.InnerBorder = 4
|
||||
Caption = 'Yes'
|
||||
ModalResult = 6
|
||||
TabOrder = 0
|
||||
end
|
||||
object ButtonNo: TButton
|
||||
Left = 150
|
||||
Height = 25
|
||||
Top = 199
|
||||
Width = 75
|
||||
Anchors = [akRight, akBottom]
|
||||
BorderSpacing.InnerBorder = 4
|
||||
Caption = 'No'
|
||||
ModalResult = 7
|
||||
TabOrder = 1
|
||||
end
|
||||
object StaticText: TStaticText
|
||||
Left = 10
|
||||
Height = 42
|
||||
Top = 10
|
||||
Width = 380
|
||||
Align = alTop
|
||||
Caption = 'The following FPDoc element is not present in the skeleton. Move its contents into different one?'
|
||||
Color = clBtnFace
|
||||
Font.Style = [fsBold]
|
||||
end
|
||||
object ComboBoxDest: TComboBox
|
||||
Left = 132
|
||||
Height = 21
|
||||
Top = 150
|
||||
Width = 258
|
||||
AutoCompleteText = [cbactEndOfLineComplete, cbactSearchAscending]
|
||||
ItemHeight = 13
|
||||
Style = csDropDownList
|
||||
TabOrder = 2
|
||||
end
|
||||
object ButtonMove: TButton
|
||||
Left = 234
|
||||
Height = 25
|
||||
Top = 199
|
||||
Width = 155
|
||||
BorderSpacing.InnerBorder = 4
|
||||
Caption = 'Move to another file...'
|
||||
OnClick = ButtonMoveClick
|
||||
TabOrder = 3
|
||||
end
|
||||
end
|
31
doceditor/fpdocupdater/unitmove.lrs
Normal file
31
doceditor/fpdocupdater/unitmove.lrs
Normal file
@ -0,0 +1,31 @@
|
||||
{ This is an automatically generated lazarus resource file }
|
||||
|
||||
LazarusResources.Add('TFormMove','FORMDATA',[
|
||||
'TPF0'#9'TFormMove'#8'FormMove'#4'Left'#3'+'#1#6'Height'#3#235#0#3'Top'#3#153
|
||||
+#0#5'Width'#3#144#1#18'HorzScrollBar.Page'#3#143#1#18'VertScrollBar.Page'#3
|
||||
+#234#0#13'ActiveControl'#7#9'ButtonYes'#11'BorderIcons'#11#12'biSystemMenu'
|
||||
+#10'biMinimize'#0#11'BorderStyle'#7#8'bsSingle'#7'Caption'#6#12'Move Element'
|
||||
+#28'ChildSizing.LeftRightSpacing'#2#10#28'ChildSizing.TopBottomSpacing'#2#10
|
||||
+#12'ClientHeight'#3#235#0#11'ClientWidth'#3#144#1#0#6'TLabel'#8'LabelSrc'#4
|
||||
+'Left'#2#10#6'Height'#2'*'#3'Top'#2'B'#5'Width'#3'{'#1#8'AutoSize'#8#11'Pare'
|
||||
+'ntColor'#8#0#0#6'TLabel'#9'LabelDest'#4'Left'#2#10#6'Height'#2#14#3'Top'#3
|
||||
+#156#0#5'Width'#2'd'#7'Caption'#6#20'Destination element:'#11'ParentColor'#8
|
||||
+#0#0#6'TLabel'#15'LabelSrcElement'#4'Left'#2#10#6'Height'#2#18#3'Top'#2'x'#5
|
||||
+'Width'#2'*'#10'Font.Style'#11#6'fsBold'#0#11'ParentColor'#8#0#0#7'TButton'#9
|
||||
+'ButtonYes'#4'Left'#2'B'#6'Height'#2#25#3'Top'#3#199#0#5'Width'#2'K'#7'Ancho'
|
||||
+'rs'#11#7'akRight'#8'akBottom'#0#25'BorderSpacing.InnerBorder'#2#4#7'Caption'
|
||||
+#6#3'Yes'#11'ModalResult'#2#6#8'TabOrder'#2#0#0#0#7'TButton'#8'ButtonNo'#4'L'
|
||||
+'eft'#3#150#0#6'Height'#2#25#3'Top'#3#199#0#5'Width'#2'K'#7'Anchors'#11#7'ak'
|
||||
+'Right'#8'akBottom'#0#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#2'No'#11
|
||||
+'ModalResult'#2#7#8'TabOrder'#2#1#0#0#11'TStaticText'#10'StaticText'#4'Left'
|
||||
+#2#10#6'Height'#2'*'#3'Top'#2#10#5'Width'#3'|'#1#5'Align'#7#5'alTop'#7'Capti'
|
||||
+'on'#6'aThe following FPDoc element is not present in the skeleton. Move its'
|
||||
+' contents into different one?'#5'Color'#7#9'clBtnFace'#10'Font.Style'#11#6
|
||||
+'fsBold'#0#0#0#9'TComboBox'#12'ComboBoxDest'#4'Left'#3#132#0#6'Height'#2#21#3
|
||||
+'Top'#3#150#0#5'Width'#3#2#1#16'AutoCompleteText'#11#22'cbactEndOfLineComple'
|
||||
+'te'#20'cbactSearchAscending'#0#10'ItemHeight'#2#13#5'Style'#7#14'csDropDown'
|
||||
+'List'#8'TabOrder'#2#2#0#0#7'TButton'#10'ButtonMove'#4'Left'#3#234#0#6'Heigh'
|
||||
+'t'#2#25#3'Top'#3#199#0#5'Width'#3#155#0#25'BorderSpacing.InnerBorder'#2#4#7
|
||||
+'Caption'#6#23'Move to another file...'#7'OnClick'#7#15'ButtonMoveClick'#8'T'
|
||||
+'abOrder'#2#3#0#0#0
|
||||
]);
|
69
doceditor/fpdocupdater/unitmove.pas
Normal file
69
doceditor/fpdocupdater/unitmove.pas
Normal file
@ -0,0 +1,69 @@
|
||||
{
|
||||
***************************************************************************
|
||||
* *
|
||||
* This source is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This code is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
|
||||
* General Public License for more details. *
|
||||
* *
|
||||
* A copy of the GNU General Public License is available on the World *
|
||||
* Wide Web at <http://www.gnu.org/copyleft/gpl.html>. You can also *
|
||||
* obtain it by writing to the Free Software Foundation, *
|
||||
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||
* *
|
||||
***************************************************************************
|
||||
|
||||
Author: Tom Gregorovic
|
||||
}
|
||||
unit UnitMove;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls,
|
||||
ExtCtrls;
|
||||
|
||||
type
|
||||
|
||||
{ TFormMove }
|
||||
|
||||
TFormMove = class(TForm)
|
||||
ButtonMove: TButton;
|
||||
ButtonYes: TButton;
|
||||
ButtonNo: TButton;
|
||||
ComboBoxDest: TComboBox;
|
||||
LabelSrcElement: TLabel;
|
||||
LabelDest: TLabel;
|
||||
LabelSrc: TLabel;
|
||||
StaticText: TStaticText;
|
||||
procedure ButtonMoveClick(Sender: TObject);
|
||||
private
|
||||
{ private declarations }
|
||||
public
|
||||
{ public declarations }
|
||||
end;
|
||||
|
||||
var
|
||||
FormMove: TFormMove;
|
||||
|
||||
implementation
|
||||
|
||||
{ TFormMove }
|
||||
|
||||
procedure TFormMove.ButtonMoveClick(Sender: TObject);
|
||||
begin
|
||||
ModalResult := mrCancel;
|
||||
end;
|
||||
|
||||
initialization
|
||||
{$I unitmove.lrs}
|
||||
|
||||
end.
|
||||
|
Loading…
Reference in New Issue
Block a user