diff --git a/components/synedit/synedit.pp b/components/synedit/synedit.pp index e6a1ff2e16..24376afaa5 100644 --- a/components/synedit/synedit.pp +++ b/components/synedit/synedit.pp @@ -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; diff --git a/ide/ideprocs.pp b/ide/ideprocs.pp index f46e6c979b..cf2e45da81 100644 --- a/ide/ideprocs.pp +++ b/ide/ideprocs.pp @@ -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; diff --git a/ide/main.pp b/ide/main.pp index 35c32cbf43..9c69fdd408 100644 --- a/ide/main.pp +++ b/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 diff --git a/ide/project.pp b/ide/project.pp index c8466a60f0..7f2e9ecc09 100644 --- a/ide/project.pp +++ b/ide/project.pp @@ -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 diff --git a/ideintf/projectintf.pas b/ideintf/projectintf.pas index 54f4be4d87..57b0cda30c 100644 --- a/ideintf/projectintf.pas +++ b/ideintf/projectintf.pas @@ -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; diff --git a/packager/installpkgsetdlg.pas b/packager/installpkgsetdlg.pas index 40c8ff9e11..2e13f49948 100644 --- a/packager/installpkgsetdlg.pas +++ b/packager/installpkgsetdlg.pas @@ -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 diff --git a/packager/packagedefs.pas b/packager/packagedefs.pas index 0c29e0a87e..b7e843388e 100644 --- a/packager/packagedefs.pas +++ b/packager/packagedefs.pas @@ -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 diff --git a/packager/pkgmanager.pas b/packager/pkgmanager.pas index 7d48e111d6..18997402a3 100644 --- a/packager/pkgmanager.pas +++ b/packager/pkgmanager.pas @@ -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;