@@ -118,7 +118,7 @@ TSetting = class(TInterfacedObject, ISetting)
118118
119119 public
120120 constructor Create(const _name : string; { } _state : TSettingState = ssInitialized;
121- { } _saveBehaviour : TSettingStoreBehaviours = [ssbStoreIfModified]); overload;
121+ { } _saveBehaviour : TSettingStoreBehaviours = [ssbStoreIfModified]); overload;
122122 procedure LoadFromPersister (); virtual ; abstract ;
123123 procedure StoreToPersister (const _section : string = ' ' ); virtual ; abstract ;
124124
@@ -166,7 +166,7 @@ TSettingVariant<T> = class(TSetting, ISettingVariant<T>, ISetting, IStreamReade
166166
167167 public
168168 constructor Create(const _name : string; const _value : T; { } _state : TSettingState = ssInitialized;
169- { } _saveBehaviour : TSettingStoreBehaviours = [ssbStoreIfModified]); overload;
169+ { } _saveBehaviour : TSettingStoreBehaviours = [ssbStoreIfModified]); overload;
170170 procedure Clear (); override;
171171 function CompareTo (Value : ISettingVariant<T>) : Integer;
172172 procedure Copy (_other : ISettingVariant<T>); reintroduce;
@@ -209,7 +209,9 @@ TIntegerSetting = class(TSettingVariant<integer>)
209209 function GetCount () : Integer;
210210 function GetItem (Index : Integer) : string;
211211 function GetSafeItem (index : Integer) : string;
212+ procedure RemoveDuplicates ();
212213 procedure SetItem (Index : Integer; const Value : string);
214+ procedure SetNewLength (const _len: Integer);
213215 procedure SetSafeItem (index : Integer; const Value : string);
214216
215217 property Count : Integer read GetCount;
@@ -228,10 +230,14 @@ TArraySetting = class(TSettingVariant<TArrayEx<string>>, IArraySetting)
228230 public
229231 procedure Add (const AItem : string);
230232 function AddIfNotContains (const AItem : string) : Integer;
233+ procedure Clear ; override;
234+ procedure RemoveDuplicates ;
231235 procedure Copy (_other : IArraySetting);
236+ function Equals (_other : IArraySetting) : Boolean; reintroduce;
232237 function GetValueFromString (const _strValue : string) : TArrayEx<string>; override;
233238
234239 function GetSettingType () : TSettingType; override;
240+ procedure SetNewLength (const _len: Integer);
235241 property Count : Integer read GetCount;
236242 property Item[index : Integer] : string read GetItem write SetItem; default;
237243 property SafeItem[index : Integer] : string read GetSafeItem write SetSafeItem;
@@ -251,8 +257,8 @@ implementation
251257 RipGrepper.Helper .StreamReaderWriter;
252258
253259constructor TSettingVariant<T>.Create(const _name : string; const _value : T;
254- { } _state : TSettingState = ssInitialized;
255- { } _saveBehaviour : TSettingStoreBehaviours = [ssbStoreIfModified]);
260+ { } _state : TSettingState = ssInitialized;
261+ { } _saveBehaviour : TSettingStoreBehaviours = [ssbStoreIfModified]);
256262begin
257263 inherited Create(_name, _state, _saveBehaviour);
258264 FValue := _value;
@@ -371,8 +377,8 @@ procedure TSettingVariant<T>.SetPersister(const Value : IFilePersister<T>);
371377end ;
372378
373379constructor TSetting.Create(const _name : string;
374- { } _state : TSettingState = ssInitialized;
375- { } _saveBehaviour : TSettingStoreBehaviours = [ssbStoreIfModified]);
380+ { } _state : TSettingState = ssInitialized;
381+ { } _saveBehaviour : TSettingStoreBehaviours = [ssbStoreIfModified]);
376382begin
377383 inherited Create();
378384 FName := _name;
@@ -591,12 +597,22 @@ function TArraySetting.AddIfNotContains(const AItem : string) : Integer;
591597 end ;
592598end ;
593599
600+ procedure TArraySetting.Clear ;
601+ begin
602+ inherited ;
603+ FValue.Clear;
604+ end ;
605+
594606procedure TArraySetting.Copy (_other : IArraySetting);
595607begin
596608 inherited Copy(_other);
597- if Assigned(_other) then begin
598- self.Value .SetItems(_other.Value .Items);
599- end ;
609+ Assert(_other.Equals(self));
610+ end ;
611+
612+ function TArraySetting.Equals (_other : IArraySetting) : Boolean;
613+ begin
614+ Result := (FState = _other.State);
615+ Result := Result and (Value = _other.Value );
600616end ;
601617
602618function TArraySetting.GetCount () : Integer;
@@ -624,11 +640,33 @@ function TArraySetting.GetValueFromString(const _strValue : string) : TArrayEx<s
624640 Result := _strValue.Split([ARRAY_SEPARATOR]);
625641end ;
626642
643+ procedure TArraySetting.RemoveDuplicates ;
644+ var
645+ unique : TArrayEx<string>;
646+ arr : TArrayEx<string>;
647+ begin
648+ for var item in self.Value do begin
649+ unique.AddIfNotContains(item);
650+ end ;
651+ arr.SetItems(unique.Items);
652+ if arr.Count = self.Value .Count then begin
653+ self.State := ssModified;
654+ end ;
655+ self.Value := arr;
656+ end ;
657+
627658procedure TArraySetting.SetItem (Index : Integer; const Value : string);
628659begin
629660 self.Value [index] := Value ;
630661end ;
631662
663+ procedure TArraySetting.SetNewLength (const _len: Integer);
664+ begin
665+ var items := Value .Items;
666+ SetLength(items, _len);
667+ Value := items;
668+ end ;
669+
632670procedure TArraySetting.SetSafeItem (index : Integer; const Value : string);
633671begin
634672 self.Value .SafeItem[index] := Value ;
0 commit comments