Adicionado recurso para voltar a tela anterior (GoBack)

This commit is contained in:
Julio Cesar 2021-12-15 22:15:30 -03:00
parent 3d708ba8b6
commit 574146d906
3 changed files with 47 additions and 0 deletions

View File

@ -42,6 +42,7 @@ type
FInstanteObject : iRouter4DComponent;
FListCacheOrder : TList<String>;
FIndexCache : Integer;
FMaxCacheHistory : Integer;
procedure CreateInstancePersistent( aPath : String);
//procedure CacheKeyNotify(Sender: TObject; const Key: string; Action: TCollectionNotification);
public
@ -72,6 +73,7 @@ type
function InstanteObject : iRouter4DComponent;
function GoBack : String;
function BreadCrumb(aDelimiter: char = '/') : String;
function addCacheHistory(aKey : String) : TRouter4DHistory;
function IndexCache : Integer;
end;
@ -225,6 +227,21 @@ begin
FListCache2.Add(aKey, CachePersistent);
end;
function TRouter4DHistory.addCacheHistory(aKey: String): TRouter4DHistory;
var
I: Integer;
begin
Result := Self;
for I := Pred(FListCacheOrder.Count) downto Succ(FIndexCache) do
FListCacheOrder.Delete(I);
if FListCacheOrder.Count > FMaxCacheHistory then
FListCacheOrder.Delete(0);
FListCacheOrder.Add(aKey);
FIndexCache := Pred(FListCacheOrder.Count);
end;
function TRouter4DHistory.AddHistory(aKey: String; aObject: TPersistentClass;
aSBKey : String; isVisible: Boolean): iRouter4DComponent;
var
@ -244,6 +261,8 @@ constructor TRouter4DHistory.Create;
begin
FListCache := TObjectDictionary<String, TObject>.Create;
FListCache2 := TDictionary<String, TCachePersistent>.Create;
FListCacheOrder := TList<String>.Create;
FMaxCacheHistory := 10;
{$IFDEF HAS_FMX}
FListCacheContainer := TObjectDictionary<String, TFMXObject>.Create;
{$ELSE}
@ -275,6 +294,7 @@ begin
FListCache.Free;
FListCache2.Free;
FListCacheContainer.Free;
FListCacheOrder.Free;
inherited;
end;

View File

@ -51,6 +51,7 @@ type
function &To ( aPatch : String; aProps : TProps; aKey : String = '') : iRouter4DLink; overload;
function &To ( aPatch : String; aNameContainer : String) : iRouter4DLink; overload;
function IndexLink ( aPatch : String ) : iRouter4DLink;
function GoBack : iRouter4DLink;
end;
iRouter4DRender = interface

View File

@ -38,6 +38,7 @@ type
function &To ( aPatch : String) : iRouter4DLink; overload;
function &To ( aPatch : String; aProps : TProps; aKey : String = '') : iRouter4DLink; overload;
function &To ( aPatch : String; aNameContainer : String) : iRouter4DLink; overload;
function GoBack : iRouter4DLink;
function IndexLink ( aPatch : String ) : iRouter4DLink;
end;
@ -66,6 +67,7 @@ begin
aComponent
.AddObject(
Router4DHistory
.addCacheHistory(aPatch)
.GetHistory(aPatch)
.Render
);
@ -85,6 +87,7 @@ begin
aComponent
.AddObject(
Router4DHistory
.addCacheHistory(aPatch)
.GetHistory(aPatch)
.Render
);
@ -111,6 +114,7 @@ begin
aContainer
.AddObject(
Router4DHistory
.addCacheHistory(aPatch)
.GetHistory(aPatch)
.Render
);
@ -131,6 +135,26 @@ begin
inherited;
end;
function TRouter4DLink.GoBack : iRouter4DLink;
begin
Result := Self;
{$IFDEF HAS_FMX}
Router4DHistory.MainRouter.RemoveObject(0);
{$ELSE}
Router4DHistory.MainRouter.RemoveObject;
{$ENDIF}
Router4DHistory.InstanteObject.UnRender;
Router4DHistory
.MainRouter
.AddObject(
Router4DHistory
.GetHistory(Router4DHistory.GoBack)
.Render
);
if Assigned(FAnimation) then
FAnimation(Router4DHistory.MainRouter);
end;
function TRouter4DLink.IndexLink(aPatch: String): iRouter4DLink;
begin
Result := Self;
@ -166,6 +190,7 @@ begin
.MainRouter
.AddObject(
Router4DHistory
.addCacheHistory(aPatch)
.GetHistory(aPatch)
.Render
);
@ -188,6 +213,7 @@ begin
.MainRouter
.AddObject(
Router4DHistory
.addCacheHistory(aPatch)
.GetHistory(aPatch)
.Render
);