From: <ob...@us...> - 2006-05-21 15:34:47
|
Revision: 10615 Author: obones Date: 2006-05-21 08:34:38 -0700 (Sun, 21 May 2006) ViewCVS: http://svn.sourceforge.net/jvcl/?rev=10615&view=rev Log Message: ----------- Mantis 3680: Only add an extension to FileName if there is not already one. Modified Paths: -------------- trunk/jvcl/run/JvAppStorage.pas Modified: trunk/jvcl/run/JvAppStorage.pas =================================================================== --- trunk/jvcl/run/JvAppStorage.pas 2006-05-21 10:08:42 UTC (rev 10614) +++ trunk/jvcl/run/JvAppStorage.pas 2006-05-21 15:34:38 UTC (rev 10615) @@ -3135,7 +3135,8 @@ procedure TJvCustomAppMemoryFileStorage.SetFileName(const Value: TFileName); begin - if FFileName <> PathAddExtension(Value, DefaultExtension) then + // Mantis 3680: only add an extension if there is not already one. + if (Length(ExtractFileExt(Value)) = 0) then begin if not (csLoading in ComponentState) and not IsUpdating then Flush; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ob...@us...> - 2006-05-22 09:04:22
|
Revision: 10616 Author: obones Date: 2006-05-22 02:01:51 -0700 (Mon, 22 May 2006) ViewCVS: http://svn.sourceforge.net/jvcl/?rev=10616&view=rev Log Message: ----------- Now sets the filename correctly Modified Paths: -------------- trunk/jvcl/run/JvAppStorage.pas Modified: trunk/jvcl/run/JvAppStorage.pas =================================================================== --- trunk/jvcl/run/JvAppStorage.pas 2006-05-21 15:34:38 UTC (rev 10615) +++ trunk/jvcl/run/JvAppStorage.pas 2006-05-22 09:01:51 UTC (rev 10616) @@ -3135,12 +3135,21 @@ procedure TJvCustomAppMemoryFileStorage.SetFileName(const Value: TFileName); begin - // Mantis 3680: only add an extension if there is not already one. - if (Length(ExtractFileExt(Value)) = 0) then + if Value <> FileName then begin if not (csLoading in ComponentState) and not IsUpdating then Flush; - FFileName := PathAddExtension(Value, DefaultExtension); + + // Mantis 3680: only add an extension if there is not already one. + if (Length(ExtractFileExt(Value)) = 0) then + begin + FFileName := PathAddExtension(Value, DefaultExtension); + end + else + begin + FFileName := Value; + end; + FPhysicalReadOnly := FileExists(FullFileName) and FileIsReadOnly(FullFileName); if not (csLoading in ComponentState) and not IsUpdating then Reload; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ob...@us...> - 2006-06-08 07:17:54
|
Revision: 10658 Author: obones Date: 2006-06-08 00:17:48 -0700 (Thu, 08 Jun 2006) ViewCVS: http://svn.sourceforge.net/jvcl/?rev=10658&view=rev Log Message: ----------- Mantis 3728: Introduced StoreDefaultValues Modified Paths: -------------- trunk/jvcl/run/JvAppStorage.pas Modified: trunk/jvcl/run/JvAppStorage.pas =================================================================== --- trunk/jvcl/run/JvAppStorage.pas 2006-06-07 16:48:23 UTC (rev 10657) +++ trunk/jvcl/run/JvAppStorage.pas 2006-06-08 07:17:48 UTC (rev 10658) @@ -667,6 +667,8 @@ FFloatAsString: Boolean; FDefaultIfReadConvertError: Boolean; FDefaultIfValueNotExists: Boolean; + FStoreDefaultValues: Boolean; + procedure SetStoreDefaultValues(const Value: Boolean); protected procedure SetBooleanAsString(Value: Boolean); virtual; procedure SetBooleanStringTrueValues(Value: string); virtual; @@ -700,6 +702,8 @@ write SetDefaultIfReadConvertError default False; property DefaultIfValueNotExists: Boolean read FDefaultIfValueNotExists write SetDefaultIfValueNotExists default True; + property StoreDefaultValues: Boolean read FStoreDefaultValues + write SetStoreDefaultValues default False; end; TJvAppStorageOptions = class(TJvCustomAppStorageOptions) @@ -714,6 +718,7 @@ property FloatAsString; property DefaultIfReadConvertError; property DefaultIfValueNotExists; + property StoreDefaultValues; end; TJvAppSubStorages = class(TOwnedCollection) @@ -1031,6 +1036,7 @@ DateTimeAsString := True; DefaultIfReadConvertError := False; DefaultIfValueNotExists := True; + StoreDefaultValues := False; end; function TJvCustomAppStorageOptions.IsValueListString(const AValue, AList: string): Boolean; @@ -1106,6 +1112,12 @@ FSetAsStr := Value; end; +procedure TJvCustomAppStorageOptions.SetStoreDefaultValues( + const Value: Boolean); +begin + FStoreDefaultValues := Value; +end; + procedure TJvCustomAppStorageOptions.SetDateTimeAsStr(Value: Boolean); begin FDateTimeAsString := Value; @@ -2466,38 +2478,66 @@ begin if not Assigned(PersObj) then Exit; + + P := GetPropInfo(PersObj, PropName, tkAny); + + // If not storing the default values, then do not do anything if the property + // is read only, write only or its "stored" function returns False. + // Note: we do not add a call to IsDefaultPropertyValue here because it would + // return True for any sub component which is not desirable as we want to + // always store sub classes whether they are components or not. + if not StorageOptions.StoreDefaultValues and + (not Assigned(P^.GetProc) or not Assigned(P^.SetProc) or + not IsStoredProp(PersObj, P)) then + Exit; + case PropType(PersObj, PropName) of tkLString, tkWString, tkString: - WriteString(Path, GetStrProp(PersObj, PropName)); + if StorageOptions.StoreDefaultValues or not IsDefaultPropertyValue(PersObj, P, nil) then + WriteString(Path, GetStrProp(PersObj, PropName)); tkEnumeration: begin - TmpValue := GetOrdProp(PersObj, PropName); - WriteEnumeration(Path, GetPropInfo(PersObj, PropName).PropType{$IFNDEF CLR}^{$ENDIF}, TmpValue); + if StorageOptions.StoreDefaultValues or not IsDefaultPropertyValue(PersObj, P, nil) then + begin + TmpValue := GetOrdProp(PersObj, PropName); + WriteEnumeration(Path, P^.PropType{$IFNDEF CLR}^{$ENDIF}, TmpValue); + end; end; tkSet: begin - TmpValue := GetOrdProp(PersObj, PropName); - WriteSet(Path, GetPropInfo(PersObj, PropName).PropType{$IFNDEF CLR}^{$ENDIF}, TmpValue); + if StorageOptions.StoreDefaultValues or not IsDefaultPropertyValue(PersObj, P, nil) then + begin + TmpValue := GetOrdProp(PersObj, PropName); + WriteSet(Path, P^.PropType{$IFNDEF CLR}^{$ENDIF}, TmpValue); + end; end; tkChar, tkInteger: begin - if StorageOptions.TypedIntegerAsString then + if StorageOptions.StoreDefaultValues or not IsDefaultPropertyValue(PersObj, P, nil) then begin - TmpValue := GetOrdProp(PersObj, PropName); - WriteEnumeration(Path, GetPropInfo(PersObj, PropName).PropType{$IFNDEF CLR}^{$ENDIF}, TmpValue); - end - else - WriteInteger(Path, GetOrdProp(PersObj, PropName)); + if StorageOptions.TypedIntegerAsString then + begin + TmpValue := GetOrdProp(PersObj, PropName); + WriteEnumeration(Path, P^.PropType{$IFNDEF CLR}^{$ENDIF}, TmpValue); + end + else + begin + WriteInteger(Path, GetOrdProp(PersObj, PropName)); + end; + end; end; tkInt64: - WriteString(Path, IntToStr(GetInt64Prop(PersObj, PropName))); + if StorageOptions.StoreDefaultValues or not IsDefaultPropertyValue(PersObj, P, nil) then + WriteString(Path, IntToStr(GetInt64Prop(PersObj, PropName))); tkFloat: begin - P := GetPropInfo(PersObj, PropName, tkAny); - if (P <> nil) and (P.PropType <> nil) and (P.PropType{$IFNDEF CLR}^{$ENDIF} = TypeInfo(TDateTime)) then - WriteDateTime(Path, GetFloatProp(PersObj, PropName)) - else - WriteFloat(Path, GetFloatProp(PersObj, PropName)); + if StorageOptions.StoreDefaultValues or not IsDefaultPropertyValue(PersObj, P, nil) then + begin + if (P <> nil) and (P.PropType <> nil) and (P.PropType{$IFNDEF CLR}^{$ENDIF} = TypeInfo(TDateTime)) then + WriteDateTime(Path, GetFloatProp(PersObj, PropName)) + else + WriteFloat(Path, GetFloatProp(PersObj, PropName)); + end; end; tkClass: begin @@ -2505,12 +2545,19 @@ if Assigned(RegisteredAppStoragePropertyEngineList) and Recursive and RegisteredAppStoragePropertyEngineList.WriteProperty(Self, Path, PersObj, SubObj, Recursive) then + begin // Do nothing else, the handling is done in the WriteProperty procedure + end else + begin if SubObj is TStrings then + begin WriteStringList(Path, TStrings(SubObj)) + end else + begin if (SubObj is TPersistent) and Recursive then + begin if SubObj is TJvCustomPropertyStore then begin TJvCustomPropertyStore(SubObj).AppStoragePath := Path; @@ -2518,10 +2565,15 @@ TJvCustomPropertyStore(SubObj).StoreProperties; end else + begin if SubObj is TCollection then WriteCollection(Path, TCollection(SubObj)) else WritePersistent(Path, TPersistent(SubObj), Recursive, nil); + end; + end; + end; + end; end; end; end; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jfu...@us...> - 2006-08-23 20:30:23
|
Revision: 10912 Author: jfudickar Date: 2006-08-23 13:30:12 -0700 (Wed, 23 Aug 2006) ViewCVS: http://svn.sourceforge.net/jvcl/?rev=10912&view=rev Log Message: ----------- Mantis 0003864: JvAppStorage: OnGetFileName does not get called (Mantis #0003864) Modified Paths: -------------- trunk/jvcl/run/JvAppStorage.pas Modified: trunk/jvcl/run/JvAppStorage.pas =================================================================== --- trunk/jvcl/run/JvAppStorage.pas 2006-08-23 11:47:20 UTC (rev 10911) +++ trunk/jvcl/run/JvAppStorage.pas 2006-08-23 20:30:12 UTC (rev 10912) @@ -597,9 +597,6 @@ WideString; procedure WriteWideString(const Path: string; const Value: WideString); {$ENDIF} - //1 The current Translateengine which should be used for all operations. It's the internal translateengine, or the assigned property TranslateStringEngine - property ActiveTranslateStringEngine: TJvTranslateString read - GetActiveTranslateStringEngine; { Root of any values to be read/written. This value is combined with the path given in one of the Read*/Write* methods to determine the actual key used. It's always relative to the value of Root (which is an absolute path) } @@ -614,6 +611,9 @@ to keep backward compatibility } property FlushOnDestroy: Boolean read FFlushOnDestroy write SetFlushOnDestroy default True; published + //1 The current Translateengine which should be used for all operations. It's the internal translateengine, or the assigned property TranslateStringEngine + property ActiveTranslateStringEngine: TJvTranslateString read + GetActiveTranslateStringEngine; property StorageOptions: TJvCustomAppStorageOptions read FStorageOptions write SetStorageOptions; //1 This engine gives you the possibility to translate Strings with %-Replacements property TranslateStringEngine: TJvTranslateString read FTranslateStringEngine @@ -3279,6 +3279,7 @@ {$ENDIF UNIX} end; end; + FPhysicalReadOnly := FileExists(FullFileName) and FileIsReadOnly(FullFileName); end; procedure TJvCustomAppMemoryFileStorage.Reload; @@ -3323,7 +3324,6 @@ end; RecalculateFullFileName; - FPhysicalReadOnly := FileExists(FullFileName) and FileIsReadOnly(FullFileName); if not (csLoading in ComponentState) and not IsUpdating then Reload; end; @@ -3334,7 +3334,7 @@ if not (csLoading in ComponentState) and not IsUpdating then Flush; FOnGetFileName := Value; - FPhysicalReadOnly := FileExists(FullFileName) and FileIsReadOnly(FullFileName); + RecalculateFullFileName; if not (csLoading in ComponentState) and not IsUpdating then Reload; end; @@ -3347,7 +3347,6 @@ Flush; FLocation := Value; RecalculateFullFileName; - FPhysicalReadOnly := FileExists(FullFileName) and FileIsReadOnly(FullFileName); if not (csLoading in ComponentState) and not IsUpdating then Reload; end; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ob...@us...> - 2007-12-24 22:20:25
|
Revision: 11643 http://jvcl.svn.sourceforge.net/jvcl/?rev=11643&view=rev Author: obones Date: 2007-12-24 14:20:17 -0800 (Mon, 24 Dec 2007) Log Message: ----------- missing begin..end block, for clarity Modified Paths: -------------- trunk/jvcl/run/JvAppStorage.pas Modified: trunk/jvcl/run/JvAppStorage.pas =================================================================== --- trunk/jvcl/run/JvAppStorage.pas 2007-12-24 22:20:02 UTC (rev 11642) +++ trunk/jvcl/run/JvAppStorage.pas 2007-12-24 22:20:17 UTC (rev 11643) @@ -3429,7 +3429,9 @@ TransFileName: string; begin if (FileName = '') and (Location <> flCustom) then - FFullFileName := '' + begin + FFullFileName := ''; + end else begin TransFileName := ActiveTranslateStringEngine.TranslateString(FileName); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jfu...@us...> - 2008-01-22 01:18:28
|
Revision: 11698 http://jvcl.svn.sourceforge.net/jvcl/?rev=11698&view=rev Author: jfudickar Date: 2008-01-21 17:18:25 -0800 (Mon, 21 Jan 2008) Log Message: ----------- Fixed ReadEnumerationInt when the content is not valid Modified Paths: -------------- trunk/jvcl/run/JvAppStorage.pas Modified: trunk/jvcl/run/JvAppStorage.pas =================================================================== --- trunk/jvcl/run/JvAppStorage.pas 2008-01-21 21:07:30 UTC (rev 11697) +++ trunk/jvcl/run/JvAppStorage.pas 2008-01-22 01:18:25 UTC (rev 11698) @@ -2320,7 +2320,11 @@ // Usage of an invalid identifier to signal the value does not exist OrdValue := GetEnumValue(TypeInfo, ReadStringInt(Path, cInvalidIdentifier)); if OrdValue = -1 then + begin OrdValue := ReadIntegerInt(Path, OrdValue); + if OrdValue = -1 then + CopyEnumValue(Default, OrdValue, GetTypeData(TypeInfo).OrdType) + end; end else {$IFDEF CLR} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jfu...@us...> - 2008-05-28 20:37:46
|
Revision: 11809 http://jvcl.svn.sourceforge.net/jvcl/?rev=11809&view=rev Author: jfudickar Date: 2008-05-28 13:37:33 -0700 (Wed, 28 May 2008) Log Message: ----------- 0004358: Add support for TWideStringList in JvAppStrorage (Mantis #0004358) Modified Paths: -------------- trunk/jvcl/run/JvAppStorage.pas Modified: trunk/jvcl/run/JvAppStorage.pas =================================================================== --- trunk/jvcl/run/JvAppStorage.pas 2008-05-28 20:31:51 UTC (rev 11808) +++ trunk/jvcl/run/JvAppStorage.pas 2008-05-28 20:37:33 UTC (rev 11809) @@ -94,6 +94,9 @@ Windows, {$ENDIF COMPILER9_UP} {$ENDIF CLR} + {$IFDEF COMPILER10_UP} + WideStrings, + {$ENDIF COMPILER10_UP} SysUtils, Classes, TypInfo, JclBase, JvVCL5Utils, JvComponentBase, JvTypes, JvTranslateString; @@ -250,6 +253,17 @@ { ObjectList item deleter used by WriteObjectList in the call to WriteList. } procedure DeleteObjectListItem(Sender: TJvCustomAppStorage; const Path: string; const List: TObject; const First, Last: Integer; const ItemName: string); + {$IFDEF COMPILER10_UP} + { StringList item reader used by ReadWideStringList in the call to ReadList. } + procedure ReadWideStringListItem(Sender: TJvCustomAppStorage; const Path: string; + const List: TObject; const Index: Integer; const ItemName: string); + { StringList item writer used by WriteStringList in the call to WriteList. } + procedure WriteWideStringListItem(Sender: TJvCustomAppStorage; const Path: string; + const List: TObject; const Index: Integer; const ItemName: string); + { StringList item deleter used by WriteStringList in the call to WriteList. } + procedure DeleteWideStringListItem(Sender: TJvCustomAppStorage; const Path: string; + const List: TObject; const First, Last: Integer; const ItemName: string); + {$ENDIF} { StringList item reader used by ReadStringObjectList in the call to ReadList. } procedure ReadStringObjectListItem(Sender: TJvCustomAppStorage; const Path: string; @@ -561,6 +575,16 @@ { Stores a string list. Uses WriteList with internally provided methods to do the actual storing. } procedure WriteStringList(const Path: string; const SL: TStrings; const ItemName: string = cItem); + {$IFDEF COMPILER10_UP} + { Retrieves a wide string list. The string list is optionally cleared before reading starts. The + result value is the number of items read. Uses ReadList with internally provided methods to + do the actual reading. } + function ReadWideStringList(const Path: string; const SL: TWideStrings; + const ClearFirst: Boolean = True; const ItemName: string = cItem): Integer; + { Stores a WideString list. Uses WriteList with internally provided methods to do the actual + storing. } + procedure WriteWideStringList(const Path: string; const SL: TWideStrings; const ItemName: string = cItem); + {$ENDIF} { Retrieves an enumeration. If the value is not found, the Default will be returned. } procedure ReadEnumeration(const Path: string; TypeInfo: PTypeInfo; const Default; out Value); @@ -1411,6 +1435,32 @@ Sender.DeleteValue(ConcatPaths([Path, ItemName + IntToStr(I)])); end; +{$IFDEF COMPILER10_UP} +procedure TJvCustomAppStorage.ReadWideStringListItem(Sender: TJvCustomAppStorage; + const Path: string; const List: TObject; const Index: Integer; const ItemName: string); +begin + if List is TWideStrings then + TWideStrings(List).Add(Sender.ReadWideString(ConcatPaths([Path, ItemName + IntToStr(Index)]))); +end; + +procedure TJvCustomAppStorage.WriteWideStringListItem(Sender: TJvCustomAppStorage; + const Path: string; const List: TObject; const Index: Integer; const ItemName: string); +begin + if List is TWideStrings then + Sender.WriteWideString(ConcatPaths([Path, ItemName + IntToStr(Index)]), TWideStrings(List)[Index]); +end; + +procedure TJvCustomAppStorage.DeleteWideStringListItem(Sender: TJvCustomAppStorage; + const Path: string; const List: TObject; const First, Last: Integer; const ItemName: string); +var + I: Integer; +begin + if List is TWideStrings then + for I := First to Last do + Sender.DeleteValue(ConcatPaths([Path, ItemName + IntToStr(I)])); +end; +{$ENDIF} + function TJvCustomAppStorage.DefaultObjectListItemCreateEvent(Sender: TJvCustomAppStorage; const Path: string; Index: Integer): TPersistent; var @@ -2218,6 +2268,34 @@ end; end; +{$IFDEF COMPILER10_UP} +function TJvCustomAppStorage.ReadWideStringList(const Path: string; const SL: TWideStrings; + const ClearFirst: Boolean = True; const ItemName: string = cItem): Integer; +begin + if not ListStored(Path) and StorageOptions.DefaultIfValueNotExists then + Result := SL.Count + else + begin + SL.BeginUpdate; + try + if ClearFirst then + SL.Clear; + ReadPersistent(Path,SL,True,False); + Result := ReadList(Path, SL, ReadWideStringListItem, ItemName); + finally + SL.EndUpdate; + end; + end; +end; + +procedure TJvCustomAppStorage.WriteWideStringList(const Path: string; + const SL: TWideStrings; const ItemName: string = cItem); +begin + WriteList(Path, SL, SL.Count, WriteWideStringListItem, DeleteWideStringListItem, ItemName); + WritePersistent(Path,SL); +end; +{$ENDIF} + function TJvCustomAppStorage.ReadStringObjectList(const Path: string; const SL: TStrings; const ClearFirst: Boolean = True; const ItemName: string = cItem): Integer; begin This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jfu...@us...> - 2006-05-29 23:00:28
|
Revision: 10626 Author: jfudickar Date: 2006-05-29 15:50:40 -0700 (Mon, 29 May 2006) ViewCVS: http://svn.sourceforge.net/jvcl/?rev=10626&view=rev Log Message: ----------- Moved TJvCustomAppMemoryFileStorage.FileName and TJvCustomAppMemoryFileStorage.Location to public Modified Paths: -------------- trunk/jvcl/run/JvAppStorage.pas Modified: trunk/jvcl/run/JvAppStorage.pas =================================================================== --- trunk/jvcl/run/JvAppStorage.pas 2006-05-29 16:46:33 UTC (rev 10625) +++ trunk/jvcl/run/JvAppStorage.pas 2006-05-29 22:50:40 UTC (rev 10626) @@ -794,9 +794,6 @@ function GetFullFileName: TFileName; property AsString: string read GetAsString write SetAsString; - property FileName: TFileName read FFileName write SetFileName; - property Location: TFileLocation read FLocation write SetLocation default flExeFile; - // OnGetFileName triggered on Location = flCustom property OnGetFileName: TJvAppStorageGetFileNameEvent read FOnGetFileName write SetOnGetFileName; @@ -807,7 +804,10 @@ procedure Reload; override; function ReloadNeeded: Boolean; override; + property FileName: TFileName read FFileName write SetFileName; property FullFileName: TFileName read GetFullFileName; + property Location: TFileLocation read FLocation write SetLocation default + flExeFile; published property ReadOnly; end; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ob...@us...> - 2006-06-08 10:59:28
|
Revision: 10663 Author: obones Date: 2006-06-08 02:35:28 -0700 (Thu, 08 Jun 2006) ViewCVS: http://svn.sourceforge.net/jvcl/?rev=10663&view=rev Log Message: ----------- Mantis 3728: Default value is True for StoreDefaultValues to keep backward compatibility Modified Paths: -------------- trunk/jvcl/run/JvAppStorage.pas Modified: trunk/jvcl/run/JvAppStorage.pas =================================================================== --- trunk/jvcl/run/JvAppStorage.pas 2006-06-08 09:33:28 UTC (rev 10662) +++ trunk/jvcl/run/JvAppStorage.pas 2006-06-08 09:35:28 UTC (rev 10663) @@ -703,7 +703,7 @@ property DefaultIfValueNotExists: Boolean read FDefaultIfValueNotExists write SetDefaultIfValueNotExists default True; property StoreDefaultValues: Boolean read FStoreDefaultValues - write SetStoreDefaultValues default False; + write SetStoreDefaultValues default True; end; TJvAppStorageOptions = class(TJvCustomAppStorageOptions) @@ -1036,7 +1036,7 @@ DateTimeAsString := True; DefaultIfReadConvertError := False; DefaultIfValueNotExists := True; - StoreDefaultValues := False; + StoreDefaultValues := True; end; function TJvCustomAppStorageOptions.IsValueListString(const AValue, AList: string): Boolean; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ob...@us...> - 2006-06-09 16:34:39
|
Revision: 10693 Author: obones Date: 2006-06-09 09:34:33 -0700 (Fri, 09 Jun 2006) ViewCVS: http://svn.sourceforge.net/jvcl/?rev=10693&view=rev Log Message: ----------- C5/D5 compatibility Modified Paths: -------------- trunk/jvcl/run/JvAppStorage.pas Modified: trunk/jvcl/run/JvAppStorage.pas =================================================================== --- trunk/jvcl/run/JvAppStorage.pas 2006-06-09 16:34:18 UTC (rev 10692) +++ trunk/jvcl/run/JvAppStorage.pas 2006-06-09 16:34:33 UTC (rev 10693) @@ -2487,6 +2487,45 @@ TmpValue: Integer; SubObj: TObject; P: PPropInfo; + + function IsDefaultOrdProp(PropInfo: PPropInfo): Boolean; + var + Value: Longint; + Default: LongInt; + begin + Value := GetOrdProp(PersObj, PropInfo); + Default := PPropInfo(PropInfo)^.Default; + Result := (Default <> LongInt($80000000)) and (Value = Default); + end; + + function IsDefaultStrProp(PropInfo: PPropInfo): Boolean; + var + Value: WideString; + begin + {$IFDEF COMPILER6_UP} + Value := GetWideStrProp(PersObj, PropInfo); + {$ELSE} + Value := GetStrProp(PersObj, PropInfo); + {$ENDIF COMPILER6_UP} + Result := Value = ''; + end; + + function IsDefaultInt64Prop(PropInfo: PPropInfo): Boolean; + var + Value: Int64; + begin + Value := GetInt64Prop(PersObj, PropInfo); + Result := Value = 0; + end; + + function IsDefaultFloatProp(PropInfo: PPropInfo): Boolean; + var + Value: Extended; + begin + Value := GetFloatProp(PersObj, PropInfo); + Result := Value = 0; + end; + begin if not Assigned(PersObj) then Exit; @@ -2505,11 +2544,11 @@ case PropType(PersObj, PropName) of tkLString, tkWString, tkString: - if StorageOptions.StoreDefaultValues or not IsDefaultPropertyValue(PersObj, P, nil) then + if StorageOptions.StoreDefaultValues or not IsDefaultStrProp(P) then WriteString(Path, GetStrProp(PersObj, PropName)); tkEnumeration: begin - if StorageOptions.StoreDefaultValues or not IsDefaultPropertyValue(PersObj, P, nil) then + if StorageOptions.StoreDefaultValues or not IsDefaultOrdProp(P) then begin TmpValue := GetOrdProp(PersObj, PropName); WriteEnumeration(Path, P^.PropType{$IFNDEF CLR}^{$ENDIF}, TmpValue); @@ -2517,7 +2556,7 @@ end; tkSet: begin - if StorageOptions.StoreDefaultValues or not IsDefaultPropertyValue(PersObj, P, nil) then + if StorageOptions.StoreDefaultValues or not IsDefaultOrdProp(P) then begin TmpValue := GetOrdProp(PersObj, PropName); WriteSet(Path, P^.PropType{$IFNDEF CLR}^{$ENDIF}, TmpValue); @@ -2525,7 +2564,7 @@ end; tkChar, tkInteger: begin - if StorageOptions.StoreDefaultValues or not IsDefaultPropertyValue(PersObj, P, nil) then + if StorageOptions.StoreDefaultValues or not IsDefaultOrdProp(P) then begin if StorageOptions.TypedIntegerAsString then begin @@ -2539,11 +2578,11 @@ end; end; tkInt64: - if StorageOptions.StoreDefaultValues or not IsDefaultPropertyValue(PersObj, P, nil) then + if StorageOptions.StoreDefaultValues or not IsDefaultInt64Prop(P) then WriteString(Path, IntToStr(GetInt64Prop(PersObj, PropName))); tkFloat: begin - if StorageOptions.StoreDefaultValues or not IsDefaultPropertyValue(PersObj, P, nil) then + if StorageOptions.StoreDefaultValues or not IsDefaultFloatProp(P) then begin if (P <> nil) and (P.PropType <> nil) and (P.PropType{$IFNDEF CLR}^{$ENDIF} = TypeInfo(TDateTime)) then WriteDateTime(Path, GetFloatProp(PersObj, PropName)) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ob...@us...> - 2006-07-13 08:00:19
|
Revision: 10814 Author: obones Date: 2006-07-13 00:59:46 -0700 (Thu, 13 Jul 2006) ViewCVS: http://svn.sourceforge.net/jvcl/?rev=10814&view=rev Log Message: ----------- Mantis 3803: Fixed GetStoredValues with aeoReportRelative in Options Modified Paths: -------------- trunk/jvcl/run/JvAppStorage.pas Modified: trunk/jvcl/run/JvAppStorage.pas =================================================================== --- trunk/jvcl/run/JvAppStorage.pas 2006-07-13 07:52:13 UTC (rev 10813) +++ trunk/jvcl/run/JvAppStorage.pas 2006-07-13 07:59:46 UTC (rev 10814) @@ -2744,19 +2744,30 @@ var SearchPath: string; I: Integer; + OptimizedSearchPath: string; begin Strings.BeginUpdate; try Strings.Clear; SearchPath := OptimizePaths([Path]); + if aeoReportRelative in Options then - InternalGetStoredValues('', SearchPath, Strings, Options) + begin + InternalGetStoredValues('', SearchPath, Strings, Options); + end else - InternalGetStoredValues(OptimizePaths([Self.Path, SearchPath]) + + begin + OptimizedSearchPath := OptimizePaths([Self.Path, SearchPath]); + InternalGetStoredValues(OptimizedSearchPath + PathDelim, SearchPath, Strings, Options); - I := Strings.IndexOf(OptimizePaths([Self.Path, SearchPath])); - if I > -1 then - Strings.Delete(I); + + // Mantis 3803: Only remove the path if ReportRelative was not asked. + // If not, then with \F1\R1 and \F1\F1 we would only return the values + // in \F1\R1 in "relative mode" which is not correct + I := Strings.IndexOf(OptimizedSearchPath); + if I > -1 then + Strings.Delete(I); + end; finally Strings.EndUpdate; end; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jfu...@us...> - 2006-12-17 21:31:00
|
Revision: 11096 http://svn.sourceforge.net/jvcl/?rev=11096&view=rev Author: jfudickar Date: 2006-12-17 13:30:57 -0800 (Sun, 17 Dec 2006) Log Message: ----------- 0004014: Fix incomplete storage of collections + TStrings (Mantis #4014) Modified Paths: -------------- trunk/jvcl/run/JvAppStorage.pas Modified: trunk/jvcl/run/JvAppStorage.pas =================================================================== --- trunk/jvcl/run/JvAppStorage.pas 2006-12-17 11:42:11 UTC (rev 11095) +++ trunk/jvcl/run/JvAppStorage.pas 2006-12-17 21:30:57 UTC (rev 11096) @@ -2081,6 +2081,7 @@ List.BeginUpdate; if ClearFirst then List.Clear; + ReadPersistent(Path,List,True,False); Result := ReadList(Path, List, ReadCollectionItem, ItemName); finally List.EndUpdate; @@ -2091,6 +2092,7 @@ List: TCollection; const ItemName: string = cItem); begin WriteList(Path, List, List.Count, WriteCollectionItem, DeleteCollectionItem, ItemName); + WritePersistent(Path,List); end; function TJvCustomAppStorage.ReadStringList(const Path: string; const SL: TStrings; @@ -2104,6 +2106,7 @@ try if ClearFirst then SL.Clear; + ReadPersistent(Path,SL,True,False); Result := ReadList(Path, SL, ReadStringListItem, ItemName); finally SL.EndUpdate; @@ -2115,6 +2118,7 @@ const SL: TStrings; const ItemName: string = cItem); begin WriteList(Path, SL, SL.Count, WriteStringListItem, DeleteStringListItem, ItemName); + WritePersistent(Path,SL); end; function TJvCustomAppStorage.ReadStringObjectList(const Path: string; const SL: TStrings; @@ -2140,6 +2144,7 @@ Delete(TargetPath, Length(TargetPath) - 1, 2); if ClearFirst then SL.Clear; + ReadPersistent(Path,SL,True,False); Result := TargetStore.ReadList(TargetPath, SL, TargetStore.ReadStringObjectListItem, ItemName); finally SL.EndUpdate; @@ -2157,6 +2162,7 @@ Delete(TargetPath, Length(TargetPath) - 1, 2); TargetStore.WriteList(TargetPath, SL, SL.Count, TargetStore.WriteStringObjectListItem, TargetStore.DeleteStringObjectListItem, ItemName); + WritePersistent(Path,SL); end; procedure TJvCustomAppStorage.ReadEnumerationInt(const Path: string; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jfu...@us...> - 2007-01-30 23:03:41
|
Revision: 11173 http://svn.sourceforge.net/jvcl/?rev=11173&view=rev Author: jfudickar Date: 2007-01-30 15:03:38 -0800 (Tue, 30 Jan 2007) Log Message: ----------- Mantis 0004039: JvAppStorage ReadWideString; Make second parameter optional (Mantis #0004039) Modified Paths: -------------- trunk/jvcl/run/JvAppStorage.pas Modified: trunk/jvcl/run/JvAppStorage.pas =================================================================== --- trunk/jvcl/run/JvAppStorage.pas 2007-01-30 09:14:09 UTC (rev 11172) +++ trunk/jvcl/run/JvAppStorage.pas 2007-01-30 23:03:38 UTC (rev 11173) @@ -607,7 +607,7 @@ { Returns the current state if Property-Value Cryption is enabled } function IsPropertyValueCryptEnabled: Boolean; {$IFDEF COMPILER6_UP} - function ReadWideString(const Path: string; const Default: WideString): + function ReadWideString(const Path: string; const Default: WideString = ''): WideString; procedure WriteWideString(const Path: string; const Value: WideString); {$ENDIF} @@ -2945,7 +2945,7 @@ {$IFDEF COMPILER6_UP} function TJvCustomAppStorage.ReadWideString(const Path: string; - const Default: WideString): WideString; + const Default: WideString = ''): WideString; begin Result := UTF8Decode(ReadString(Path, UTF8Encode(Default))); end; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jfu...@us...> - 2007-03-02 22:06:41
|
Revision: 11194 http://svn.sourceforge.net/jvcl/?rev=11194&view=rev Author: jfudickar Date: 2007-03-02 14:06:25 -0800 (Fri, 02 Mar 2007) Log Message: ----------- Mantis 0004063 : TJvAppStorage fails when saving a stringlist (Mantis #0004063) Modified Paths: -------------- trunk/jvcl/run/JvAppStorage.pas Modified: trunk/jvcl/run/JvAppStorage.pas =================================================================== --- trunk/jvcl/run/JvAppStorage.pas 2007-02-23 07:51:59 UTC (rev 11193) +++ trunk/jvcl/run/JvAppStorage.pas 2007-03-02 22:06:25 UTC (rev 11194) @@ -1335,7 +1335,7 @@ const Path: string; const List: TObject; const Index: Integer; const ItemName: string); begin if List is TStrings then - Sender.WriteStringInt(ConcatPaths([Path, ItemName + IntToStr(Index)]), TStrings(List)[Index]); + Sender.WriteString(ConcatPaths([Path, ItemName + IntToStr(Index)]), TStrings(List)[Index]); end; procedure TJvCustomAppStorage.DeleteStringListItem(Sender: TJvCustomAppStorage; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jfu...@us...> - 2007-09-10 23:04:04
|
Revision: 11500 http://jvcl.svn.sourceforge.net/jvcl/?rev=11500&view=rev Author: jfudickar Date: 2007-09-10 16:04:00 -0700 (Mon, 10 Sep 2007) Log Message: ----------- Fixed 0004180: AV in TjvAppStorage.ReadObjectList ReadProperty + WriteProperty supports now Variants (Mantis #0004180) Modified Paths: -------------- trunk/jvcl/run/JvAppStorage.pas Modified: trunk/jvcl/run/JvAppStorage.pas =================================================================== --- trunk/jvcl/run/JvAppStorage.pas 2007-09-06 15:54:42 UTC (rev 11499) +++ trunk/jvcl/run/JvAppStorage.pas 2007-09-10 23:04:00 UTC (rev 11500) @@ -405,6 +405,8 @@ property SubStorages: TJvAppSubStorages read FSubStorages write SetSubStorages; procedure Loaded; override; procedure DoError(const msg: string); + property CurrentInstanceCreateEvent: TJvAppStorageObjectListItemCreateEvent + read FCurrentInstanceCreateEvent; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; @@ -1365,11 +1367,14 @@ var NewItem: TPersistent; NewPath: string; + TargetStore: TJvCustomAppStorage; + TargetPath: string; begin if List is TList then try NewPath := ConcatPaths([Path, ItemName + IntToStr(Index)]); - NewItem := FCurrentInstanceCreateEvent(Sender, NewPath, Index); + ResolvePath(NewPath, TargetStore, TargetPath); // Only needed for assigning the event + NewItem := TargetStore.CurrentInstanceCreateEvent(Sender, NewPath, Index); TList(List).Add(NewItem); Sender.ReadPersistent(NewPath, NewItem); except @@ -1400,11 +1405,14 @@ NewItem: TPersistent; NewPath: string; NewName: string; + TargetStore: TJvCustomAppStorage; + TargetPath: string; begin if List is TStrings then try NewPath := ConcatPaths([Path, ItemName + IntToStr(Index)]); - NewItem := FCurrentInstanceCreateEvent(Sender, ConcatPaths([NewPath, cObject]), Index); + ResolvePath(NewPath, TargetStore, TargetPath); // Only needed for assigning the event + NewItem := TargetStore.CurrentInstanceCreateEvent(Sender, ConcatPaths([NewPath, cObject]), Index); NewName := Sender.ReadString(ConcatPaths([NewPath, cItemName])); TStrings(List).AddObject(NewName, NewItem); if NewItem is TJvCustomPropertyStore then @@ -2476,6 +2484,8 @@ ReadEnumeration(Path, GetPropInfo(PersObj, PropName).PropType{$IFNDEF CLR}^{$ENDIF}, TmpValue, TmpValue); SetOrdProp(PersObj, PropName, TmpValue); end; + tkVariant: + SetStrProp(PersObj, PropName, ReadString(Path, GetVariantProp (PersObj, PropName))); tkSet: begin TmpValue := GetOrdProp(PersObj, PropName); @@ -2598,6 +2608,9 @@ {$ELSE} WriteString(Path, GetStrProp(PersObj, PropName)); {$ENDIF COMPILER6_UP} + tkVariant: + if StorageOptions.StoreDefaultValues or not IsDefaultStrProp(P) then + WriteString(Path, GetVariantProp(PersObj, PropName)); tkEnumeration: begin if StorageOptions.StoreDefaultValues or not IsDefaultOrdProp(P) then This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jfu...@us...> - 2007-09-17 22:37:29
|
Revision: 11511 http://jvcl.svn.sourceforge.net/jvcl/?rev=11511&view=rev Author: jfudickar Date: 2007-09-17 15:37:27 -0700 (Mon, 17 Sep 2007) Log Message: ----------- TJvCustomAppStorage.ReadStringList fixed Modified Paths: -------------- trunk/jvcl/run/JvAppStorage.pas Modified: trunk/jvcl/run/JvAppStorage.pas =================================================================== --- trunk/jvcl/run/JvAppStorage.pas 2007-09-17 22:33:36 UTC (rev 11510) +++ trunk/jvcl/run/JvAppStorage.pas 2007-09-17 22:37:27 UTC (rev 11511) @@ -2137,7 +2137,7 @@ if not ListStored(Path) then begin if ValueStored(Path) then - Sl.Text; + Sl.Text := ReadString(Path); Result := SL.Count end else This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jfu...@us...> - 2008-01-28 22:15:00
|
Revision: 11708 http://jvcl.svn.sourceforge.net/jvcl/?rev=11708&view=rev Author: jfudickar Date: 2008-01-28 14:14:56 -0800 (Mon, 28 Jan 2008) Log Message: ----------- Removed empty exception handlers (Mantis #0004334) Modified Paths: -------------- trunk/jvcl/run/JvAppStorage.pas Modified: trunk/jvcl/run/JvAppStorage.pas =================================================================== --- trunk/jvcl/run/JvAppStorage.pas 2008-01-26 15:25:05 UTC (rev 11707) +++ trunk/jvcl/run/JvAppStorage.pas 2008-01-28 22:14:56 UTC (rev 11708) @@ -1436,13 +1436,12 @@ TargetPath: string; begin if List is TList then - try + begin NewPath := ConcatPaths([Path, ItemNameIndexPath (ItemName, Index)]); ResolvePath(NewPath, TargetStore, TargetPath); // Only needed for assigning the event NewItem := TargetStore.CurrentInstanceCreateEvent(Sender, NewPath, Index); TList(List).Add(NewItem); Sender.ReadPersistent(NewPath, NewItem); - except end; end; @@ -1474,7 +1473,7 @@ TargetPath: string; begin if List is TStrings then - try + begin NewPath := ConcatPaths([Path, ItemNameIndexPath (ItemName, Index)]); ResolvePath(NewPath, TargetStore, TargetPath); // Only needed for assigning the event NewItem := TargetStore.CurrentInstanceCreateEvent(Sender, ConcatPaths([NewPath, cObject]), Index); @@ -1485,7 +1484,6 @@ True, True, TJvCustomPropertyStore(NewItem).CombinedIgnoreProperties) else Sender.ReadPersistent(ConcatPaths([NewPath, cObject]), NewItem); - except end; end; @@ -1526,7 +1524,7 @@ NewPath: string; begin if List is TCollection then - try + begin NewPath := ConcatPaths([Path, ItemNameIndexPath (ItemName, Index)]); NewItem := TCollection(List).Add; if NewItem is TJvCustomPropertyStore then @@ -1534,7 +1532,6 @@ TJvCustomPropertyStore(NewItem).CombinedIgnoreProperties) else Sender.ReadPersistent(NewPath, NewItem); - except end; end; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |