IDE: update package last used times on load and async

git-svn-id: branches/fixes_1_4@47781 -
This commit is contained in:
mattias 2015-02-14 11:37:15 +00:00
parent 9efdbb5086
commit 09ef0e15cc
4 changed files with 59 additions and 20 deletions

View File

@ -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);

View File

@ -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

View File

@ -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);

View File

@ -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