mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-22 17:39:16 +02:00
IDE: update package last used times on load and async
git-svn-id: branches/fixes_1_4@47781 -
This commit is contained in:
parent
9efdbb5086
commit
09ef0e15cc
@ -40,7 +40,7 @@ interface
|
|||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, Laz2_XMLCfg, FileProcs, CodeToolManager, CodeToolsStructs,
|
Classes, SysUtils, Laz2_XMLCfg, FileProcs, CodeToolManager, CodeToolsStructs,
|
||||||
LCLProc, FileUtil, AvgLvlTree, lazutf8classes, LazFileUtils, MacroIntf,
|
LCLProc, Forms, FileUtil, AvgLvlTree, lazutf8classes, LazFileUtils, MacroIntf,
|
||||||
PackageIntf, IDEProcs, EnvironmentOpts, PackageDefs, LazConf, IDECmdLine;
|
PackageIntf, IDEProcs, EnvironmentOpts, PackageDefs, LazConf, IDECmdLine;
|
||||||
|
|
||||||
const
|
const
|
||||||
@ -132,6 +132,7 @@ type
|
|||||||
FDependencyOwnerGetPkgFilename: TDependencyOwnerGetPkgFilename;
|
FDependencyOwnerGetPkgFilename: TDependencyOwnerGetPkgFilename;
|
||||||
FGlobalLinks: TAvgLvlTree; // tree of global TPackageLink sorted for ID
|
FGlobalLinks: TAvgLvlTree; // tree of global TPackageLink sorted for ID
|
||||||
FChangeStamp: integer;
|
FChangeStamp: integer;
|
||||||
|
FQueueSaveUserLinks: boolean;
|
||||||
FSavedChangeStamp: integer;
|
FSavedChangeStamp: integer;
|
||||||
FUserLinksSortID: TAvgLvlTree; // tree of user TPackageLink sorted for ID
|
FUserLinksSortID: TAvgLvlTree; // tree of user TPackageLink sorted for ID
|
||||||
FUserLinksSortFile: TAvgLvlTree; // tree of user TPackageLink sorted for
|
FUserLinksSortFile: TAvgLvlTree; // tree of user TPackageLink sorted for
|
||||||
@ -150,6 +151,8 @@ type
|
|||||||
procedure IteratePackagesInTree(MustExist: boolean; LinkTree: TAvgLvlTree;
|
procedure IteratePackagesInTree(MustExist: boolean; LinkTree: TAvgLvlTree;
|
||||||
Event: TIteratePackagesEvent);
|
Event: TIteratePackagesEvent);
|
||||||
procedure SetModified(const AValue: boolean);
|
procedure SetModified(const AValue: boolean);
|
||||||
|
procedure SetQueueSaveUserLinks(AValue: boolean);
|
||||||
|
procedure OnAsyncSaveUserLinks(Data: PtrInt);
|
||||||
public
|
public
|
||||||
UserLinkLoadTime: longint;
|
UserLinkLoadTime: longint;
|
||||||
UserLinkLoadTimeValid: boolean;
|
UserLinkLoadTimeValid: boolean;
|
||||||
@ -166,7 +169,7 @@ type
|
|||||||
procedure BeginUpdate;
|
procedure BeginUpdate;
|
||||||
procedure EndUpdate;
|
procedure EndUpdate;
|
||||||
function IsUpdating: boolean;
|
function IsUpdating: boolean;
|
||||||
procedure SaveUserLinks;
|
procedure SaveUserLinks(Immediately: boolean = false);
|
||||||
function NeedSaveUserLinks(const ConfigFilename: string): boolean;
|
function NeedSaveUserLinks(const ConfigFilename: string): boolean;
|
||||||
procedure WriteLinkTree(LinkTree: TAvgLvlTree);
|
procedure WriteLinkTree(LinkTree: TAvgLvlTree);
|
||||||
function FindLinkWithPkgName(const PkgName: string;
|
function FindLinkWithPkgName(const PkgName: string;
|
||||||
@ -189,6 +192,7 @@ type
|
|||||||
property DependencyOwnerGetPkgFilename: TDependencyOwnerGetPkgFilename
|
property DependencyOwnerGetPkgFilename: TDependencyOwnerGetPkgFilename
|
||||||
read FDependencyOwnerGetPkgFilename
|
read FDependencyOwnerGetPkgFilename
|
||||||
write FDependencyOwnerGetPkgFilename;
|
write FDependencyOwnerGetPkgFilename;
|
||||||
|
property QueueSaveUserLinks: boolean read FQueueSaveUserLinks write SetQueueSaveUserLinks;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
var
|
var
|
||||||
@ -329,6 +333,11 @@ end;
|
|||||||
|
|
||||||
{ TPackageLinks }
|
{ TPackageLinks }
|
||||||
|
|
||||||
|
procedure TPackageLinks.OnAsyncSaveUserLinks(Data: PtrInt);
|
||||||
|
begin
|
||||||
|
SaveUserLinks(true);
|
||||||
|
end;
|
||||||
|
|
||||||
function TPackageLinks.FindLeftMostNode(LinkTree: TAvgLvlTree;
|
function TPackageLinks.FindLeftMostNode(LinkTree: TAvgLvlTree;
|
||||||
const PkgName: string): TAvgLvlTreeNode;
|
const PkgName: string): TAvgLvlTreeNode;
|
||||||
// find left most link with PkgName
|
// find left most link with PkgName
|
||||||
@ -351,14 +360,15 @@ end;
|
|||||||
destructor TPackageLinks.Destroy;
|
destructor TPackageLinks.Destroy;
|
||||||
begin
|
begin
|
||||||
Clear;
|
Clear;
|
||||||
FGlobalLinks.Free;
|
FreeAndNil(FGlobalLinks);
|
||||||
FUserLinksSortID.Free;
|
FreeAndNil(FUserLinksSortID);
|
||||||
FUserLinksSortFile.Free;
|
FreeAndNil(FUserLinksSortFile);
|
||||||
inherited Destroy;
|
inherited Destroy;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TPackageLinks.Clear;
|
procedure TPackageLinks.Clear;
|
||||||
begin
|
begin
|
||||||
|
QueueSaveUserLinks:=false;
|
||||||
ClearGlobalLinks;
|
ClearGlobalLinks;
|
||||||
FUserLinksSortID.FreeAndClear;
|
FUserLinksSortID.FreeAndClear;
|
||||||
FUserLinksSortFile.Clear;
|
FUserLinksSortFile.Clear;
|
||||||
@ -716,7 +726,7 @@ begin
|
|||||||
Result:=fUpdateLock>0;
|
Result:=fUpdateLock>0;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TPackageLinks.SaveUserLinks;
|
procedure TPackageLinks.SaveUserLinks(Immediately: boolean);
|
||||||
var
|
var
|
||||||
ConfigFilename: String;
|
ConfigFilename: String;
|
||||||
Path: String;
|
Path: String;
|
||||||
@ -728,11 +738,21 @@ var
|
|||||||
LazSrcDir: String;
|
LazSrcDir: String;
|
||||||
AFilename: String;
|
AFilename: String;
|
||||||
begin
|
begin
|
||||||
|
//debugln(['TPackageLinks.SaveUserLinks ']);
|
||||||
|
if (FUserLinksSortFile=nil) or (FUserLinksSortFile.Count=0) then exit;
|
||||||
ConfigFilename:=GetUserLinkFile;
|
ConfigFilename:=GetUserLinkFile;
|
||||||
|
|
||||||
// check if file needs saving
|
// check if file needs saving
|
||||||
if not NeedSaveUserLinks(ConfigFilename) then exit;
|
if not NeedSaveUserLinks(ConfigFilename) then exit;
|
||||||
//DebugLn(['TPackageLinks.SaveUserLinks saving ... ',ConfigFilename,' Modified=',Modified,' UserLinkLoadTimeValid=',UserLinkLoadTimeValid,' ',FileAgeUTF8(ConfigFilename)=UserLinkLoadTime]);
|
if ConsoleVerbosity>1 then
|
||||||
|
DebugLn(['TPackageLinks.SaveUserLinks saving ... ',ConfigFilename,' Modified=',Modified,' UserLinkLoadTimeValid=',UserLinkLoadTimeValid,' ',FileAgeUTF8(ConfigFilename)=UserLinkLoadTime,' Immediately=',Immediately]);
|
||||||
|
|
||||||
|
if Immediately then begin
|
||||||
|
QueueSaveUserLinks:=false;
|
||||||
|
end else begin
|
||||||
|
QueueSaveUserLinks:=true;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
LazSrcDir:=EnvironmentOptions.GetParsedLazarusDirectory;
|
LazSrcDir:=EnvironmentOptions.GetParsedLazarusDirectory;
|
||||||
|
|
||||||
@ -951,6 +971,17 @@ begin
|
|||||||
IncreaseChangeStamp;
|
IncreaseChangeStamp;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TPackageLinks.SetQueueSaveUserLinks(AValue: boolean);
|
||||||
|
begin
|
||||||
|
if FQueueSaveUserLinks=AValue then Exit;
|
||||||
|
FQueueSaveUserLinks:=AValue;
|
||||||
|
if Application=nil then exit;
|
||||||
|
if FQueueSaveUserLinks then
|
||||||
|
Application.QueueAsyncCall(@OnAsyncSaveUserLinks,0)
|
||||||
|
else
|
||||||
|
Application.RemoveAsyncCalls(Self);
|
||||||
|
end;
|
||||||
|
|
||||||
function TPackageLinks.FindLinkWithPkgName(const PkgName: string;
|
function TPackageLinks.FindLinkWithPkgName(const PkgName: string;
|
||||||
IgnoreFiles: TFilenameToStringTree; FirstUserLinks: boolean): TPackageLink;
|
IgnoreFiles: TFilenameToStringTree; FirstUserLinks: boolean): TPackageLink;
|
||||||
begin
|
begin
|
||||||
@ -1016,6 +1047,7 @@ begin
|
|||||||
and (OldLink.GetEffectiveFilename=APackage.Filename) then begin
|
and (OldLink.GetEffectiveFilename=APackage.Filename) then begin
|
||||||
Result:=OldLink;
|
Result:=OldLink;
|
||||||
Result.LastUsed:=Now;
|
Result.LastUsed:=Now;
|
||||||
|
IncreaseChangeStamp;
|
||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
RemoveUserLinks(APackage);
|
RemoveUserLinks(APackage);
|
||||||
|
@ -9,7 +9,7 @@ object PackageLinksDialog: TPackageLinksDialog
|
|||||||
OnCreate = FormCreate
|
OnCreate = FormCreate
|
||||||
OnDestroy = FormDestroy
|
OnDestroy = FormDestroy
|
||||||
Position = poScreenCenter
|
Position = poScreenCenter
|
||||||
LCLVersion = '1.1'
|
LCLVersion = '1.5'
|
||||||
object ScopeGroupBox: TGroupBox
|
object ScopeGroupBox: TGroupBox
|
||||||
Left = 0
|
Left = 0
|
||||||
Height = 144
|
Height = 144
|
||||||
@ -108,7 +108,7 @@ object PackageLinksDialog: TPackageLinksDialog
|
|||||||
Width = 659
|
Width = 659
|
||||||
Align = alTop
|
Align = alTop
|
||||||
Anchors = [akTop, akLeft, akRight, akBottom]
|
Anchors = [akTop, akLeft, akRight, akBottom]
|
||||||
ColCount = 6
|
ColCount = 7
|
||||||
ColumnClickSorts = True
|
ColumnClickSorts = True
|
||||||
Columns = <
|
Columns = <
|
||||||
item
|
item
|
||||||
@ -134,6 +134,9 @@ object PackageLinksDialog: TPackageLinksDialog
|
|||||||
item
|
item
|
||||||
ReadOnly = True
|
ReadOnly = True
|
||||||
Title.Caption = 'Filename'
|
Title.Caption = 'Filename'
|
||||||
|
end
|
||||||
|
item
|
||||||
|
Title.Caption = 'Last Opened'
|
||||||
end>
|
end>
|
||||||
FixedCols = 0
|
FixedCols = 0
|
||||||
Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goColSizing, goEditing, goTabs, goColSpanning, goDblClickAutoSize, goSmoothScroll]
|
Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goColSizing, goEditing, goTabs, goColSpanning, goDblClickAutoSize, goSmoothScroll]
|
||||||
@ -156,14 +159,16 @@ object PackageLinksDialog: TPackageLinksDialog
|
|||||||
AnchorSideRight.Side = asrBottom
|
AnchorSideRight.Side = asrBottom
|
||||||
AnchorSideBottom.Control = BtnPanel
|
AnchorSideBottom.Control = BtnPanel
|
||||||
AnchorSideBottom.Side = asrBottom
|
AnchorSideBottom.Side = asrBottom
|
||||||
Left = 592
|
Left = 591
|
||||||
Height = 28
|
Height = 28
|
||||||
Top = 7
|
Top = 7
|
||||||
Width = 60
|
Width = 61
|
||||||
Anchors = [akRight, akBottom]
|
Anchors = [akRight, akBottom]
|
||||||
AutoSize = True
|
AutoSize = True
|
||||||
BorderSpacing.Around = 6
|
BorderSpacing.Around = 6
|
||||||
|
Cancel = True
|
||||||
Caption = '&Close'
|
Caption = '&Close'
|
||||||
|
Default = True
|
||||||
Kind = bkClose
|
Kind = bkClose
|
||||||
ModalResult = 1
|
ModalResult = 1
|
||||||
TabOrder = 0
|
TabOrder = 0
|
||||||
|
@ -371,6 +371,7 @@ begin
|
|||||||
PkgStringGrid.Columns[3].Title.Caption:=lisGroup;
|
PkgStringGrid.Columns[3].Title.Caption:=lisGroup;
|
||||||
PkgStringGrid.Columns[4].Title.Caption:=lisOIPState;
|
PkgStringGrid.Columns[4].Title.Caption:=lisOIPState;
|
||||||
PkgStringGrid.Columns[5].Title.Caption:=lisA2PFilename2;
|
PkgStringGrid.Columns[5].Title.Caption:=lisA2PFilename2;
|
||||||
|
PkgStringGrid.Columns[6].Title.Caption:='Last opened';
|
||||||
|
|
||||||
i:=1;
|
i:=1;
|
||||||
Node:=FLinks.FindLowest;
|
Node:=FLinks.FindLowest;
|
||||||
@ -394,6 +395,7 @@ begin
|
|||||||
s:=lrsPLDInvalid;
|
s:=lrsPLDInvalid;
|
||||||
PkgStringGrid.Cells[4,i]:=s;
|
PkgStringGrid.Cells[4,i]:=s;
|
||||||
PkgStringGrid.Cells[5,i]:=Link.EffectiveFilename;
|
PkgStringGrid.Cells[5,i]:=Link.EffectiveFilename;
|
||||||
|
PkgStringGrid.Cells[6,i]:=DateTimeToStr(Link.LastUsed);
|
||||||
|
|
||||||
inc(i);
|
inc(i);
|
||||||
end;
|
end;
|
||||||
@ -504,6 +506,7 @@ begin
|
|||||||
LastCheck:=Link.LastCheck;
|
LastCheck:=Link.LastCheck;
|
||||||
LPKFileDateValid:=Link.LPKFileDateValid;
|
LPKFileDateValid:=Link.LPKFileDateValid;
|
||||||
LPKFileDate:=Link.LPKFileDate;
|
LPKFileDate:=Link.LPKFileDate;
|
||||||
|
LastUsed:=Link.LastUsed;
|
||||||
end;
|
end;
|
||||||
end else
|
end else
|
||||||
inherited Assign(Source);
|
inherited Assign(Source);
|
||||||
|
@ -215,7 +215,7 @@ type
|
|||||||
procedure ConnectSourceNotebookEvents; override;
|
procedure ConnectSourceNotebookEvents; override;
|
||||||
procedure SetupMainBarShortCuts; override;
|
procedure SetupMainBarShortCuts; override;
|
||||||
procedure SetRecentPackagesMenu; override;
|
procedure SetRecentPackagesMenu; override;
|
||||||
procedure AddFileToRecentPackages(const Filename: string);
|
procedure AddToMenuRecentPackages(const Filename: string; Save: boolean);
|
||||||
procedure SaveSettings; override;
|
procedure SaveSettings; override;
|
||||||
procedure UpdateVisibleComponentPalette; override;
|
procedure UpdateVisibleComponentPalette; override;
|
||||||
procedure ProcessCommand(Command: word; var Handled: boolean); override;
|
procedure ProcessCommand(Command: word; var Handled: boolean); override;
|
||||||
@ -3035,7 +3035,8 @@ begin
|
|||||||
EnvironmentOptions.RecentPackageFiles,@MainIDEitmOpenRecentPackageClicked);
|
EnvironmentOptions.RecentPackageFiles,@MainIDEitmOpenRecentPackageClicked);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TPkgManager.AddFileToRecentPackages(const Filename: string);
|
procedure TPkgManager.AddToMenuRecentPackages(const Filename: string;
|
||||||
|
Save: boolean);
|
||||||
begin
|
begin
|
||||||
AddToRecentList(Filename,EnvironmentOptions.RecentPackageFiles,
|
AddToRecentList(Filename,EnvironmentOptions.RecentPackageFiles,
|
||||||
EnvironmentOptions.MaxRecentPackageFiles,rltFile);
|
EnvironmentOptions.MaxRecentPackageFiles,rltFile);
|
||||||
@ -3297,6 +3298,7 @@ begin
|
|||||||
|
|
||||||
// save package file links
|
// save package file links
|
||||||
//DebugLn(['TPkgManager.AddPackageToGraph ',APackage.Name]);
|
//DebugLn(['TPkgManager.AddPackageToGraph ',APackage.Name]);
|
||||||
|
PkgLinks.AddUserLink(APackage);
|
||||||
PkgLinks.SaveUserLinks;
|
PkgLinks.SaveUserLinks;
|
||||||
|
|
||||||
Result:=mrOk;
|
Result:=mrOk;
|
||||||
@ -3515,6 +3517,7 @@ var
|
|||||||
AFilename: String;
|
AFilename: String;
|
||||||
begin
|
begin
|
||||||
AFilename:=APackage.Filename;
|
AFilename:=APackage.Filename;
|
||||||
|
//debugln(['TPkgManager.DoOpenPackage ',AFilename]);
|
||||||
|
|
||||||
// revert: if possible and wanted
|
// revert: if possible and wanted
|
||||||
if (pofRevert in Flags) and (FileExistsCached(AFilename)) then begin
|
if (pofRevert in Flags) and (FileExistsCached(AFilename)) then begin
|
||||||
@ -3530,9 +3533,7 @@ begin
|
|||||||
if (pofAddToRecent in Flags) then begin
|
if (pofAddToRecent in Flags) then begin
|
||||||
AFilename:=APackage.Filename;
|
AFilename:=APackage.Filename;
|
||||||
if FileExistsCached(AFilename) then begin
|
if FileExistsCached(AFilename) then begin
|
||||||
AddToRecentList(AFilename,EnvironmentOptions.RecentPackageFiles,
|
AddToMenuRecentPackages(AFilename,false);
|
||||||
EnvironmentOptions.MaxRecentPackageFiles,rltFile);
|
|
||||||
SetRecentPackagesMenu;
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -3612,9 +3613,7 @@ begin
|
|||||||
|
|
||||||
// add to recent packages
|
// add to recent packages
|
||||||
if pofAddToRecent in Flags then begin
|
if pofAddToRecent in Flags then begin
|
||||||
AddToRecentList(AFilename,EnvironmentOptions.RecentPackageFiles,
|
AddToMenuRecentPackages(AFilename,false);
|
||||||
EnvironmentOptions.MaxRecentPackageFiles,rltFile);
|
|
||||||
SetRecentPackagesMenu;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
OpenEditor:=not (pofDoNotOpenEditor in Flags);
|
OpenEditor:=not (pofDoNotOpenEditor in Flags);
|
||||||
@ -3793,7 +3792,7 @@ begin
|
|||||||
APackage.Modified:=false;
|
APackage.Modified:=false;
|
||||||
// add to recent
|
// add to recent
|
||||||
if (psfSaveAs in Flags) then begin
|
if (psfSaveAs in Flags) then begin
|
||||||
AddFileToRecentPackages(APackage.Filename);
|
AddToMenuRecentPackages(APackage.Filename,false);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
if APackage.Editor<>nil then
|
if APackage.Editor<>nil then
|
||||||
|
Loading…
Reference in New Issue
Block a user