mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-08 00:02:03 +02:00
auto clean/create .lrs file on creating custom .lfm file
git-svn-id: trunk@7209 -
This commit is contained in:
parent
7a200176dc
commit
1917ac9586
@ -2031,7 +2031,7 @@ begin
|
||||
Exclude(fStateFlags, sfIgnoreNextChar);
|
||||
{$IFDEF SYN_LAZARUS}
|
||||
// Key was handled anyway, so eat it!
|
||||
// MG: the comment was right, the implmentation not consequently enough
|
||||
// MG: the comment was right, the implementation not consequent enough
|
||||
Key:=#0;
|
||||
{$ENDIF}
|
||||
end;
|
||||
|
@ -198,7 +198,7 @@ procedure CheckList(List: TList; TestListNil, TestDoubles, TestNils: boolean);
|
||||
procedure CheckEmptyListCut(List1, List2: TList);
|
||||
function AnsiSearchInStringList(List: TStrings; const s: string): integer;
|
||||
procedure ReverseList(List: TList);
|
||||
|
||||
procedure FreeListObjects(List: TList; FreeList: boolean);
|
||||
|
||||
implementation
|
||||
|
||||
@ -1199,6 +1199,17 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure FreeListObjects(List: TList; FreeList: boolean);
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
for i:=0 to List.Count-1 do
|
||||
TObject(List[i]).Free;
|
||||
List.Clear;
|
||||
if FreeList then
|
||||
List.Free;
|
||||
end;
|
||||
|
||||
{-------------------------------------------------------------------------------
|
||||
function TrimSearchPath(const SearchPath, BaseDirectory: string): boolean;
|
||||
|
||||
|
12
ide/main.pp
12
ide/main.pp
@ -4761,6 +4761,15 @@ begin
|
||||
NewBuffer.Source:=BeautifySrc(NewSource)
|
||||
else
|
||||
NewBuffer.Source:=NewSource;
|
||||
if (NewFileDescriptor.ResourceClass<>nil)
|
||||
or (CompareFileExt(NewBuffer.Filename,'.lfm')=0) then begin
|
||||
// create/clean the .lrs file
|
||||
NewResBuffer:=CodeToolBoss.CreateFile(
|
||||
ChangeFileExt(NewFilename,ResourceFileExt));
|
||||
if NewResBuffer=nil then begin
|
||||
RaiseException('TMainIDE.DoNewEditorFile Internal error');
|
||||
end;
|
||||
end;
|
||||
NewUnitInfo.Modified:=true;
|
||||
end;
|
||||
|
||||
@ -11626,6 +11635,9 @@ end.
|
||||
|
||||
{ =============================================================================
|
||||
$Log$
|
||||
Revision 1.869 2005/05/28 11:25:17 mattias
|
||||
auto clean/create .lrs file on creating custom .lfm file
|
||||
|
||||
Revision 1.868 2005/05/27 21:08:31 mattias
|
||||
implemented automatic update of TUnitInfo.HasResource on save project
|
||||
|
||||
|
@ -1827,10 +1827,11 @@ function TProject.NewUniqueComponentName(const AComponentPrefix: string
|
||||
var i: integer;
|
||||
begin
|
||||
Result:=true;
|
||||
if GetClass(AComponentName)<>nil then exit;
|
||||
for i:=0 to UnitCount-1 do begin
|
||||
if (Units[i].Component<>nil) then begin
|
||||
if AnsiCompareText(Units[i].Component.Name,AComponentName)=0 then exit;
|
||||
if AnsiCompareText(Units[i].Component.ClassName,'T'+AComponentName)=0
|
||||
if CompareText(Units[i].Component.Name,AComponentName)=0 then exit;
|
||||
if CompareText(Units[i].Component.ClassName,'T'+AComponentName)=0
|
||||
then exit;
|
||||
end else if (Units[i].ComponentName<>'')
|
||||
and ((Units[i].IsPartOfProject) or (Units[i].Loaded)) then begin
|
||||
@ -3175,6 +3176,9 @@ end.
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.185 2005/05/28 11:25:17 mattias
|
||||
auto clean/create .lrs file on creating custom .lfm file
|
||||
|
||||
Revision 1.184 2005/05/26 20:17:49 mattias
|
||||
added TLazProject.ProjectInfoFile, fixed saving editor files if deleted
|
||||
|
||||
|
@ -648,7 +648,7 @@ begin
|
||||
FDefaultResourceName:=''
|
||||
else begin
|
||||
FDefaultResourceName:=
|
||||
copy(FResourceClass.ClassName,2,length(FResourceClass.ClassName)-1);
|
||||
copy(FResourceClass.ClassName,2,length(FResourceClass.ClassName)-1)+'1';
|
||||
end;
|
||||
end;
|
||||
|
||||
|
@ -45,6 +45,11 @@ uses
|
||||
PackageDefs, PackageSystem;
|
||||
|
||||
type
|
||||
TOnCheckInstallPackageList =
|
||||
procedure(PkgIDs: TList; var Ok: boolean) of object;
|
||||
|
||||
{ TInstallPkgSetDialog }
|
||||
|
||||
TInstallPkgSetDialog = class(TForm)
|
||||
AddToInstallButton: TButton;
|
||||
AvailableListBox: TListBox;
|
||||
@ -71,6 +76,7 @@ type
|
||||
private
|
||||
FNewInstalledPackages: TList;
|
||||
FOldInstalledPackages: TPkgDependency;
|
||||
FOnCheckInstallPackageList: TOnCheckInstallPackageList;
|
||||
fPackages: TAVLTree;// tree of TLazPackageID (all available packages and links)
|
||||
FRebuildIDE: boolean;
|
||||
procedure SetOldInstalledPackages(const AValue: TPkgDependency);
|
||||
@ -93,15 +99,19 @@ type
|
||||
write SetOldInstalledPackages;
|
||||
property NewInstalledPackages: TList read FNewInstalledPackages;
|
||||
property RebuildIDE: boolean read FRebuildIDE write FRebuildIDE;
|
||||
property OnCheckInstallPackageList: TOnCheckInstallPackageList
|
||||
read FOnCheckInstallPackageList write FOnCheckInstallPackageList;
|
||||
end;
|
||||
|
||||
function ShowEditInstallPkgsDialog(OldInstalledPackages: TPkgDependency;
|
||||
CheckInstallPackageList: TOnCheckInstallPackageList;
|
||||
var NewInstalledPackages: TList; // list of TLazPackageID (must be freed)
|
||||
var RebuildIDE: boolean): TModalResult;
|
||||
|
||||
implementation
|
||||
|
||||
function ShowEditInstallPkgsDialog(OldInstalledPackages: TPkgDependency;
|
||||
CheckInstallPackageList: TOnCheckInstallPackageList;
|
||||
var NewInstalledPackages: TList; // list of TLazPackageID
|
||||
var RebuildIDE: boolean): TModalResult;
|
||||
var
|
||||
@ -112,6 +122,7 @@ begin
|
||||
InstallPkgSetDialog.OldInstalledPackages:=OldInstalledPackages;
|
||||
InstallPkgSetDialog.UpdateAvailablePackages;
|
||||
InstallPkgSetDialog.UpdateButtonStates;
|
||||
InstallPkgSetDialog.OnCheckInstallPackageList:=CheckInstallPackageList;
|
||||
Result:=InstallPkgSetDialog.ShowModal;
|
||||
NewInstalledPackages:=InstallPkgSetDialog.GetNewInstalledPackages;
|
||||
finally
|
||||
@ -255,6 +266,7 @@ begin
|
||||
FNewInstalledPackages.Add(Additions[i]);
|
||||
Additions.Clear;
|
||||
UpdateNewInstalledPackages;
|
||||
UpdateButtonStates;
|
||||
finally
|
||||
// clean up
|
||||
NewPackageID.Free;
|
||||
@ -332,6 +344,7 @@ begin
|
||||
OldPackageID.Free;
|
||||
end;
|
||||
UpdateNewInstalledPackages;
|
||||
UpdateButtonStates;
|
||||
finally
|
||||
Deletions.Free;
|
||||
end;
|
||||
@ -440,8 +453,7 @@ end;
|
||||
|
||||
function TInstallPkgSetDialog.CheckSelection: boolean;
|
||||
begin
|
||||
Result:=false;
|
||||
// TODO
|
||||
OnCheckInstallPackageList(FNewInstalledPackages,Result);
|
||||
end;
|
||||
|
||||
procedure TInstallPkgSetDialog.UpdateButtonStates;
|
||||
@ -598,9 +610,16 @@ begin
|
||||
end;
|
||||
|
||||
function TInstallPkgSetDialog.GetNewInstalledPackages: TList;
|
||||
var
|
||||
i: Integer;
|
||||
NewPackageID: TLazPackageID;
|
||||
begin
|
||||
Result:=FNewInstalledPackages;
|
||||
FNewInstalledPackages:=TList.Create;
|
||||
Result:=TList.Create;
|
||||
for i:=0 to FNewInstalledPackages.Count-1 do begin
|
||||
NewPackageID:=TLazPackageID.Create;
|
||||
NewPackageID.AssignID(TLazPackageID(FNewInstalledPackages[i]));
|
||||
Result.Add(NewPackageID);
|
||||
end;
|
||||
end;
|
||||
|
||||
initialization
|
||||
|
@ -241,10 +241,12 @@ type
|
||||
);
|
||||
|
||||
TPkgDependencyList = (
|
||||
pdlUsedBy,
|
||||
pdlRequires
|
||||
pdlRequires,
|
||||
pdlUsedBy
|
||||
);
|
||||
|
||||
{ TPkgDependency }
|
||||
|
||||
TPkgDependency = class
|
||||
private
|
||||
FFlags: TPkgDependencyFlags;
|
||||
@ -279,6 +281,7 @@ type
|
||||
const Version: TPkgVersion): boolean;
|
||||
function Compare(Dependency2: TPkgDependency): integer;
|
||||
procedure Assign(Source: TPkgDependency);
|
||||
procedure Assign(Source: TLazPackageID);
|
||||
procedure ConsistencyCheck;
|
||||
function IsCompatible(Pkg: TLazPackageID): boolean;
|
||||
procedure MakeCompatible(const PkgName: string; const Version: TPkgVersion);
|
||||
@ -823,6 +826,11 @@ procedure LoadPkgDependencyList(XMLConfig: TXMLConfig; const ThePath: string;
|
||||
HoldPackages: boolean);
|
||||
procedure SavePkgDependencyList(XMLConfig: TXMLConfig; const ThePath: string;
|
||||
First: TPkgDependency; ListType: TPkgDependencyList);
|
||||
procedure ListPkgIDToDependencyList(ListOfTLazPackageID: TList;
|
||||
var First: TPkgDependency; ListType: TPkgDependencyList; Owner: TObject;
|
||||
HoldPackages: boolean);
|
||||
procedure FreeDependencyList(var First: TPkgDependency;
|
||||
ListType: TPkgDependencyList);
|
||||
|
||||
function FindDependencyByNameInList(First: TPkgDependency;
|
||||
ListType: TPkgDependencyList; const Name: string): TPkgDependency;
|
||||
@ -946,6 +954,37 @@ begin
|
||||
XMLConfig.SetDeleteValue(ThePath+'Count',i,0);
|
||||
end;
|
||||
|
||||
procedure ListPkgIDToDependencyList(ListOfTLazPackageID: TList;
|
||||
var First: TPkgDependency; ListType: TPkgDependencyList; Owner: TObject;
|
||||
HoldPackages: boolean);
|
||||
var
|
||||
NewDependency: TPkgDependency;
|
||||
i: Integer;
|
||||
PkgID: TLazPackageID;
|
||||
begin
|
||||
First:=nil;
|
||||
for i:=ListOfTLazPackageID.Count-1 downto 0 do begin
|
||||
PkgID:=TLazPackageID(ListOfTLazPackageID[i]);
|
||||
NewDependency:=TPkgDependency.Create;
|
||||
NewDependency.Assign(PkgID);
|
||||
NewDependency.Owner:=Owner;
|
||||
NewDependency.HoldPackage:=HoldPackages;
|
||||
NewDependency.AddToList(First,ListType);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure FreeDependencyList(var First: TPkgDependency;
|
||||
ListType: TPkgDependencyList);
|
||||
var
|
||||
NextDependency: TPkgDependency;
|
||||
begin
|
||||
while First<>nil do begin
|
||||
NextDependency:=First.NextDependency[ListType];
|
||||
First.Free;
|
||||
First:=NextDependency;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure SortDependencyList(Dependencies: TList);
|
||||
var
|
||||
Count: Integer;
|
||||
@ -1612,6 +1651,13 @@ begin
|
||||
MaxVersion.Assign(Source.MaxVersion);
|
||||
end;
|
||||
|
||||
procedure TPkgDependency.Assign(Source: TLazPackageID);
|
||||
begin
|
||||
PackageName:=Source.Name;
|
||||
Flags:=[pdfMinVersion];
|
||||
MinVersion.Assign(Source.Version);
|
||||
end;
|
||||
|
||||
procedure TPkgDependency.ConsistencyCheck;
|
||||
begin
|
||||
|
||||
|
@ -141,6 +141,7 @@ type
|
||||
var Description: string);
|
||||
procedure GetWritablePkgOutputDirectory(APackage: TLazPackage;
|
||||
var AnOutDirectory: string);
|
||||
procedure OnCheckInstallPackageList(PkgIDList: TList; var Ok: boolean);
|
||||
private
|
||||
FirstAutoInstallDependency: TPkgDependency;
|
||||
// helper functions
|
||||
@ -350,22 +351,47 @@ end;
|
||||
procedure TPkgManager.MainIDEitmPkgEditInstallPkgsClick(Sender: TObject);
|
||||
var
|
||||
RebuildIDE: Boolean;
|
||||
i: Integer;
|
||||
List: TList;
|
||||
PkgIDList: TList;
|
||||
NewFirstAutoInstallDependency: TPkgDependency;
|
||||
BuildIDEFlags: TBuildLazarusFlags;
|
||||
ok: boolean;
|
||||
begin
|
||||
RebuildIDE:=false;
|
||||
List:=nil;
|
||||
PkgIDList:=nil;
|
||||
NewFirstAutoInstallDependency:=nil;
|
||||
try
|
||||
if ShowEditInstallPkgsDialog(FirstAutoInstallDependency,List,RebuildIDE)
|
||||
<>mrOk
|
||||
if ShowEditInstallPkgsDialog(FirstAutoInstallDependency,
|
||||
@OnCheckInstallPackageList,PkgIDList,RebuildIDE)<>mrOk
|
||||
then exit;
|
||||
// TODO: rebuild auto install list
|
||||
// TODO: rebuild IDE
|
||||
finally
|
||||
if List<>nil then begin
|
||||
for i:=0 to List.Count-1 do TObject(List[i]).Free;
|
||||
List.Free;
|
||||
|
||||
OnCheckInstallPackageList(PkgIDList,ok);
|
||||
if not ok then exit;
|
||||
|
||||
// create new auto install dependency PkgIDList
|
||||
ListPkgIDToDependencyList(PkgIDList,NewFirstAutoInstallDependency,
|
||||
pdlRequires,Self,true);
|
||||
|
||||
// replace install list
|
||||
FreeDependencyList(FirstAutoInstallDependency,pdlRequires);
|
||||
FirstAutoInstallDependency:=NewFirstAutoInstallDependency;
|
||||
NewFirstAutoInstallDependency:=nil;
|
||||
|
||||
// save package list
|
||||
SortAutoInstallDependencies;
|
||||
SaveAutoInstallDependencies(true);
|
||||
|
||||
// save IDE build configs, so user can build IDE on command line
|
||||
BuildIDEFlags:=[blfWithStaticPackages,blfDontClean,blfOnlyIDE];
|
||||
if MainIDE.DoSaveBuildIDEConfigs(BuildIDEFlags)<>mrOk then exit;
|
||||
|
||||
if RebuildIDE then begin
|
||||
// rebuild Lazarus
|
||||
if MainIDE.DoBuildLazarus(BuildIDEFlags)<>mrOk then exit;
|
||||
end;
|
||||
|
||||
finally
|
||||
if PkgIDList<>nil then FreeListObjects(PkgIDList,true);
|
||||
FreeDependencyList(NewFirstAutoInstallDependency,pdlRequires);
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -446,6 +472,57 @@ begin
|
||||
debugln('TPkgManager.GetWritablePkgOutputDirectory APackage=',APackage.IDAsString,' AnOutDirectory="',AnOutDirectory,'"');
|
||||
end;
|
||||
|
||||
procedure TPkgManager.OnCheckInstallPackageList(PkgIDList: TList;
|
||||
var Ok: boolean);
|
||||
var
|
||||
NewFirstAutoInstallDependency: TPkgDependency;
|
||||
CurDependency: TPkgDependency;
|
||||
OpenResult: TLoadPackageResult;
|
||||
PkgList: TList;
|
||||
i: Integer;
|
||||
APackage: TLazPackage;
|
||||
begin
|
||||
Ok:=false;
|
||||
try
|
||||
// create new auto install dependency PkgIDList
|
||||
ListPkgIDToDependencyList(PkgIDList,NewFirstAutoInstallDependency,
|
||||
pdlRequires,Self,true);
|
||||
|
||||
// load all packages
|
||||
CurDependency:=NewFirstAutoInstallDependency;
|
||||
while CurDependency<>nil do begin
|
||||
OpenResult:=PackageGraph.OpenDependency(CurDependency);
|
||||
if OpenResult<>lprSuccess then begin
|
||||
MessageDlg('Error',
|
||||
'Unable to load package "'+CurDependency.AsString+'"',
|
||||
mtError,[mbCancel],0);
|
||||
exit;
|
||||
end;
|
||||
CurDependency:=CurDependency.NextRequiresDependency;
|
||||
end;
|
||||
|
||||
// get all required packages
|
||||
PackageGraph.GetAllRequiredPackages(NewFirstAutoInstallDependency,PkgList);
|
||||
|
||||
// check if any package is a runtime package
|
||||
for i:=0 to PkgList.Count-1 do begin
|
||||
APackage:=TLazPackage(PkgList[i]);
|
||||
if APackage.PackageType=lptRunTime then begin
|
||||
MessageDlg(lisPkgMangPackageIsNoDesigntimePackage,
|
||||
Format(lisPkgMangThePackageIsARuntimeOnlyPackageRuntimeOnlyPackages, [
|
||||
APackage.IDAsString, #13]),
|
||||
mtError,[mbCancel],0);
|
||||
exit;
|
||||
end;
|
||||
end;
|
||||
|
||||
Ok:=true;
|
||||
finally
|
||||
FreeDependencyList(NewFirstAutoInstallDependency,pdlRequires);
|
||||
PkgList.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TPkgManager.MainIDEitmPkgAddCurUnitToPkgClick(Sender: TObject);
|
||||
begin
|
||||
DoAddActiveUnitToAPackage;
|
||||
@ -3269,34 +3346,35 @@ begin
|
||||
NeedSaving:=true;
|
||||
end;
|
||||
end;
|
||||
if NeedSaving then begin
|
||||
SortAutoInstallDependencies;
|
||||
SaveAutoInstallDependencies(true);
|
||||
end;
|
||||
|
||||
// save IDE build configs, so user can build IDE on command line
|
||||
BuildIDEFlags:=[blfWithStaticPackages,blfDontClean,blfOnlyIDE];
|
||||
Result:=MainIDE.DoSaveBuildIDEConfigs(BuildIDEFlags);
|
||||
if Result<>mrOk then exit;
|
||||
|
||||
// ask user to rebuilt Lazarus now
|
||||
Result:=MessageDlg(lisPkgMangRebuildLazarus,
|
||||
Format(lisPkgMangThePackageWasMarkedForInstallationCurrentlyLazarus, [
|
||||
'"', APackage.IDAsString, '"', #13, #13, #13]),
|
||||
mtConfirmation,[mbYes,mbNo],0);
|
||||
if Result=mrNo then begin
|
||||
Result:=mrOk;
|
||||
exit;
|
||||
end;
|
||||
|
||||
// rebuild Lazarus
|
||||
Result:=MainIDE.DoBuildLazarus(BuildIDEFlags);
|
||||
if Result<>mrOk then exit;
|
||||
|
||||
finally
|
||||
PackageGraph.EndUpdate;
|
||||
PkgList.Free;
|
||||
end;
|
||||
|
||||
if NeedSaving then begin
|
||||
SortAutoInstallDependencies;
|
||||
SaveAutoInstallDependencies(true);
|
||||
end;
|
||||
|
||||
// save IDE build configs, so user can build IDE on command line
|
||||
BuildIDEFlags:=[blfWithStaticPackages,blfDontClean,blfOnlyIDE];
|
||||
Result:=MainIDE.DoSaveBuildIDEConfigs(BuildIDEFlags);
|
||||
if Result<>mrOk then exit;
|
||||
|
||||
// ask user to rebuilt Lazarus now
|
||||
Result:=MessageDlg(lisPkgMangRebuildLazarus,
|
||||
Format(lisPkgMangThePackageWasMarkedForInstallationCurrentlyLazarus, [
|
||||
'"', APackage.IDAsString, '"', #13, #13, #13]),
|
||||
mtConfirmation,[mbYes,mbNo],0);
|
||||
if Result=mrNo then begin
|
||||
Result:=mrOk;
|
||||
exit;
|
||||
end;
|
||||
|
||||
// rebuild Lazarus
|
||||
Result:=MainIDE.DoBuildLazarus(BuildIDEFlags);
|
||||
if Result<>mrOk then exit;
|
||||
|
||||
Result:=mrOk;
|
||||
end;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user