Index: VerpakkingsDefinitie/ApplicationContext.pas =================================================================== diff -u -r594 -r595 --- VerpakkingsDefinitie/ApplicationContext.pas (.../ApplicationContext.pas) (revision 594) +++ VerpakkingsDefinitie/ApplicationContext.pas (.../ApplicationContext.pas) (revision 595) @@ -8,7 +8,7 @@ uses ObserverPattern, - System.Generics.Collections, SysUtils; + System.Generics.Collections, SysUtils, ReadOnlyList; // SUB CONTEXTS: klassen die overeenkomen met bepaalde sub-context (bv. alles gerelateerd met authenticatie). @@ -94,17 +94,18 @@ FIsOK: Boolean; FErrorMessage: string; FInternalErrorMessage: string; + + procedure SetGeselecteerdProduct(ProductInformatie: TProductInformatie); + function GetProductenLijst: TReadOnlyList; public constructor Create(); - procedure Reset(); procedure NotifyChanged(); - property Producten: TList read FProducten; - { TODO : -Immutable list type retourneren en functie om item(s) toe te voegen (met Notify) -https://stackoverflow.com/questions/22693154/make-delphi-tlist-immutable } - property GeselecteerdProduct: TProductInformatie read FGeselecteerdProduct write FGeselecteerdProduct; - { TODO : GeselecteerdProduct setter hierop plaatsen en NotifyChanged() callen } + procedure Reset(Notify: Boolean = True); + property Producten: TReadOnlyList read GetProductenLijst; + procedure SetProducten(Collection: TEnumerable); + property GeselecteerdProduct: TProductInformatie read FGeselecteerdProduct write SetGeselecteerdProduct; + property IsOK: Boolean read FIsOK write FIsOK; property ErrorMessage: string read FErrorMessage write FErrorMessage; property InternalErrorMessage: string read FInternalErrorMessage write FInternalErrorMessage; @@ -187,7 +188,7 @@ property DefaultRichtingen: TList read FDefaultRichtingen; property Parameters: TList read FParameters; - { TODO : Immutable list } + { TODO : Immutable list } property DeelVanID: string read FDeelVanID write FDeelVanID; property DeelVanCaption: string read FDeelVanCaption write FDeelVanCaption; @@ -213,9 +214,9 @@ procedure NotifyChanged(); procedure Reset(); property ProductVerpakkingen: TList read FProductVerpakkingen; - { TODO : -Immutable list type retourneren en functie om item(s) toe te voegen (met Notify) -https://stackoverflow.com/questions/22693154/make-delphi-tlist-immutable } + { TODO : + Immutable list type retourneren en functie om item(s) toe te voegen (met Notify) + https://stackoverflow.com/questions/22693154/make-delphi-tlist-immutable } function GetDeelVanOpties(ProductVerpakking: TProductVerpakking): TList; property GeselecteerdeVerpakking: TProductVerpakking read FGeselecteerdeVerpakking write FGeselecteerdeVerpakking; { TODO : GeselecteerdeVerpakking setter hierop plaatsen en NotifyChanged() callen } @@ -279,14 +280,33 @@ self.Change(); end; +function TProductsContext.GetProductenLijst: TReadOnlyList; +begin + Result := TReadOnlyList.Create(FProducten); +end; + +procedure TProductsContext.SetProducten(Collection: TEnumerable); +begin + FProducten.Clear(); + FProducten.AddRange(Collection); + self.NotifyChanged(); +end; + +procedure TProductsContext.SetGeselecteerdProduct(ProductInformatie: TProductInformatie); +begin + FGeselecteerdProduct := ProductInformatie; + self.NotifyChanged(); +end; + // Enkel updaten wanneer nog niet op nil stond. -procedure TProductsContext.Reset(); +procedure TProductsContext.Reset(Notify: Boolean = True); begin if (GeselecteerdProduct <> nil) or (FProducten.Count > 0) then begin FProducten.Clear(); GeselecteerdProduct := nil; - NotifyChanged(); + if Notify then + NotifyChanged(); end; end; @@ -378,13 +398,13 @@ function TProductVerpakking.Equals(Obj: TObject): Boolean; begin if Obj = nil then - Result := false + Result := False else if not(Obj is TProductVerpakking) then - Result := false + Result := False else if (Obj as TProductVerpakking).ID = self.ID then - Result := true + Result := True else - Result := false; + Result := False; end; function TProductVerpakking.GetMetaCaptionDisplay(): string;