0.1.13.0: Renamed TPackageData -> TUpdatePackageData (GetMem)

Renamed TPackageFiles -> TUpdatePackageFiles (GetMem)
            Comment out Self.AutoAdjustLayout line in Form.Create (GetMem)
            Removed StrUtils from uses (minesadorada)
            Fixed memory leaks with CFG and slErrorList (minesadorada)

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@5419 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
gbamber
2016-12-05 11:04:45 +00:00
parent 5a75b7cac7
commit ca2e38be65
4 changed files with 109 additions and 82 deletions

View File

@ -24,7 +24,7 @@
<UseVersionInfo Value="True"/> <UseVersionInfo Value="True"/>
<AutoIncrementBuild Value="True"/> <AutoIncrementBuild Value="True"/>
<MinorVersionNr Value="1"/> <MinorVersionNr Value="1"/>
<RevisionNr Value="12"/> <RevisionNr Value="13"/>
<StringTable Comments="Buld configured for Win Linux and Darwin" FileDescription="An editor for OnlinePackageManager update JSON files" InternalName="jsoneditor" LegalCopyright="(c)2016 usernames lainz and minesadorada @ forum.lazarus.freepascal.org" LegalTrademarks="GPL code" OriginalFilename="jsoneditor" ProductName="Lazarus and Freepascal" ProductVersion="1.x and 3.x"/> <StringTable Comments="Buld configured for Win Linux and Darwin" FileDescription="An editor for OnlinePackageManager update JSON files" InternalName="jsoneditor" LegalCopyright="(c)2016 usernames lainz and minesadorada @ forum.lazarus.freepascal.org" LegalTrademarks="GPL code" OriginalFilename="jsoneditor" ProductName="Lazarus and Freepascal" ProductVersion="1.x and 3.x"/>
</VersionInfo> </VersionInfo>
<BuildModes Count="5"> <BuildModes Count="5">
@ -51,6 +51,7 @@
<Linking> <Linking>
<Debugging> <Debugging>
<GenerateDebugInfo Value="False"/> <GenerateDebugInfo Value="False"/>
<UseLineInfoUnit Value="False"/>
</Debugging> </Debugging>
<LinkSmart Value="True"/> <LinkSmart Value="True"/>
<Options> <Options>

View File

@ -4,13 +4,13 @@
<PathDelim Value="\"/> <PathDelim Value="\"/>
<Version Value="10"/> <Version Value="10"/>
<BuildModes Active="Win64"/> <BuildModes Active="Win64"/>
<Units Count="13"> <Units Count="14">
<Unit0> <Unit0>
<Filename Value="jsonpackage.lpr"/> <Filename Value="jsonpackage.lpr"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<EditorIndex Value="3"/> <EditorIndex Value="4"/>
<CursorPos Y="30"/> <CursorPos Y="30"/>
<UsageCount Value="57"/> <UsageCount Value="61"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit0> </Unit0>
<Unit1> <Unit1>
@ -20,12 +20,12 @@
<HasResources Value="True"/> <HasResources Value="True"/>
<ResourceBaseClass Value="Form"/> <ResourceBaseClass Value="Form"/>
<IsVisibleTab Value="True"/> <IsVisibleTab Value="True"/>
<TopLine Value="730"/> <TopLine Value="349"/>
<CursorPos X="32" Y="770"/> <CursorPos X="3" Y="354"/>
<UsageCount Value="57"/> <UsageCount Value="61"/>
<Bookmarks Count="2"> <Bookmarks Count="2">
<Item0 Y="458" ID="1"/> <Item0 Y="473" ID="1"/>
<Item1 Y="728"/> <Item1 Y="742"/>
</Bookmarks> </Bookmarks>
<Loaded Value="True"/> <Loaded Value="True"/>
<LoadedDesigner Value="True"/> <LoadedDesigner Value="True"/>
@ -33,7 +33,7 @@
<Unit2> <Unit2>
<Filename Value="ugenericcollection.pas"/> <Filename Value="ugenericcollection.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UsageCount Value="57"/> <UsageCount Value="61"/>
</Unit2> </Unit2>
<Unit3> <Unit3>
<Filename Value="D:\Lazarusprojects\golfml\egacalculator\source\umainform.pas"/> <Filename Value="D:\Lazarusprojects\golfml\egacalculator\source\umainform.pas"/>
@ -100,138 +100,150 @@
<Unit11> <Unit11>
<Filename Value="C:\NewPascalDarwin\lazarus\lcl\grids.pas"/> <Filename Value="C:\NewPascalDarwin\lazarus\lcl\grids.pas"/>
<UnitName Value="Grids"/> <UnitName Value="Grids"/>
<EditorIndex Value="2"/> <EditorIndex Value="3"/>
<TopLine Value="10428"/> <TopLine Value="10428"/>
<CursorPos X="29" Y="10452"/> <CursorPos X="29" Y="10452"/>
<UsageCount Value="12"/> <UsageCount Value="13"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit11> </Unit11>
<Unit12> <Unit12>
<Filename Value="C:\NewPascalDarwin\fpc\rtl\objpas\classes\classesh.inc"/> <Filename Value="C:\NewPascalDarwin\fpc\rtl\objpas\classes\classesh.inc"/>
<EditorIndex Value="1"/> <EditorIndex Value="2"/>
<TopLine Value="517"/> <TopLine Value="517"/>
<CursorPos X="3" Y="478"/> <CursorPos X="3" Y="478"/>
<UsageCount Value="12"/> <UsageCount Value="13"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit12> </Unit12>
<Unit13>
<Filename Value="X:\MainForm\MainForm\umain.pas"/>
<EditorIndex Value="1"/>
<TopLine Value="200"/>
<CursorPos X="21" Y="383"/>
<UsageCount Value="11"/>
<Loaded Value="True"/>
</Unit13>
</Units> </Units>
<JumpHistory Count="29" HistoryIndex="28"> <JumpHistory Count="30" HistoryIndex="29">
<Position1> <Position1>
<Filename Value="umain.pas"/> <Filename Value="umain.pas"/>
<Caret Line="13" Column="50" TopLine="22"/> <Caret Line="188" Column="19" TopLine="148"/>
</Position1> </Position1>
<Position2> <Position2>
<Filename Value="umain.pas"/> <Filename Value="umain.pas"/>
<Caret Line="31" Column="50" TopLine="22"/> <Caret Line="189" Column="19" TopLine="149"/>
</Position2> </Position2>
<Position3> <Position3>
<Filename Value="umain.pas"/> <Filename Value="umain.pas"/>
<Caret Line="65" Column="20" TopLine="25"/> <Caret Line="190" Column="19" TopLine="150"/>
</Position3> </Position3>
<Position4> <Position4>
<Filename Value="umain.pas"/> <Filename Value="umain.pas"/>
<Caret Line="73" Column="79" TopLine="33"/> <Caret Line="214" Column="18" TopLine="174"/>
</Position4> </Position4>
<Position5> <Position5>
<Filename Value="umain.pas"/> <Filename Value="umain.pas"/>
<Caret Line="100" Column="23" TopLine="60"/> <Caret Line="397" Column="21" TopLine="357"/>
</Position5> </Position5>
<Position6> <Position6>
<Filename Value="umain.pas"/> <Filename Value="umain.pas"/>
<Caret Line="105" Column="22" TopLine="65"/> <Caret Line="403" Column="21" TopLine="363"/>
</Position6> </Position6>
<Position7> <Position7>
<Filename Value="umain.pas"/> <Filename Value="umain.pas"/>
<Caret Line="185" Column="19" TopLine="145"/> <Caret Line="464" Column="70" TopLine="424"/>
</Position7> </Position7>
<Position8> <Position8>
<Filename Value="umain.pas"/> <Filename Value="umain.pas"/>
<Caret Line="188" Column="19" TopLine="148"/> <Caret Line="486" Column="21" TopLine="446"/>
</Position8> </Position8>
<Position9> <Position9>
<Filename Value="umain.pas"/> <Filename Value="umain.pas"/>
<Caret Line="189" Column="19" TopLine="149"/> <Caret Line="598" Column="32" TopLine="558"/>
</Position9> </Position9>
<Position10> <Position10>
<Filename Value="umain.pas"/> <Filename Value="umain.pas"/>
<Caret Line="190" Column="19" TopLine="150"/> <Caret Line="600" Column="37" TopLine="560"/>
</Position10> </Position10>
<Position11> <Position11>
<Filename Value="umain.pas"/> <Filename Value="umain.pas"/>
<Caret Line="214" Column="18" TopLine="174"/> <Caret Line="601" Column="23" TopLine="561"/>
</Position11> </Position11>
<Position12> <Position12>
<Filename Value="umain.pas"/> <Filename Value="umain.pas"/>
<Caret Line="397" Column="21" TopLine="357"/> <Caret Line="620" Column="77" TopLine="580"/>
</Position12> </Position12>
<Position13> <Position13>
<Filename Value="umain.pas"/> <Filename Value="umain.pas"/>
<Caret Line="403" Column="21" TopLine="363"/> <Caret Line="623" Column="37" TopLine="583"/>
</Position13> </Position13>
<Position14> <Position14>
<Filename Value="umain.pas"/> <Filename Value="umain.pas"/>
<Caret Line="464" Column="70" TopLine="424"/> <Caret Line="624" Column="23" TopLine="585"/>
</Position14> </Position14>
<Position15> <Position15>
<Filename Value="umain.pas"/> <Filename Value="umain.pas"/>
<Caret Line="486" Column="21" TopLine="446"/> <Caret Line="628" Column="33" TopLine="589"/>
</Position15> </Position15>
<Position16> <Position16>
<Filename Value="umain.pas"/> <Filename Value="umain.pas"/>
<Caret Line="598" Column="32" TopLine="558"/> <Caret Line="629" Column="42" TopLine="590"/>
</Position16> </Position16>
<Position17> <Position17>
<Filename Value="umain.pas"/> <Filename Value="umain.pas"/>
<Caret Line="600" Column="37" TopLine="560"/> <Caret Line="631" Column="37" TopLine="592"/>
</Position17> </Position17>
<Position18> <Position18>
<Filename Value="umain.pas"/> <Filename Value="umain.pas"/>
<Caret Line="601" Column="23" TopLine="561"/> <Caret Line="632" Column="23" TopLine="593"/>
</Position18> </Position18>
<Position19> <Position19>
<Filename Value="umain.pas"/> <Filename Value="umain.pas"/>
<Caret Line="620" Column="77" TopLine="580"/> <Caret Line="636" Column="65" TopLine="597"/>
</Position19> </Position19>
<Position20> <Position20>
<Filename Value="umain.pas"/> <Filename Value="umain.pas"/>
<Caret Line="623" Column="37" TopLine="583"/> <Caret Line="638" Column="37" TopLine="599"/>
</Position20> </Position20>
<Position21> <Position21>
<Filename Value="umain.pas"/> <Filename Value="umain.pas"/>
<Caret Line="624" Column="23" TopLine="585"/> <Caret Line="639" Column="23" TopLine="600"/>
</Position21> </Position21>
<Position22> <Position22>
<Filename Value="umain.pas"/> <Filename Value="umain.pas"/>
<Caret Line="628" Column="33" TopLine="589"/> <Caret Line="710" Column="61" TopLine="670"/>
</Position22> </Position22>
<Position23> <Position23>
<Filename Value="umain.pas"/> <Filename Value="umain.pas"/>
<Caret Line="629" Column="42" TopLine="590"/> <Caret Line="397" TopLine="360"/>
</Position23> </Position23>
<Position24> <Position24>
<Filename Value="umain.pas"/> <Filename Value="umain.pas"/>
<Caret Line="631" Column="37" TopLine="592"/> <Caret Line="441" Column="5" TopLine="414"/>
</Position24> </Position24>
<Position25> <Position25>
<Filename Value="umain.pas"/> <Filename Value="umain.pas"/>
<Caret Line="632" Column="23" TopLine="593"/> <Caret Line="444" Column="42" TopLine="141"/>
</Position25> </Position25>
<Position26> <Position26>
<Filename Value="umain.pas"/> <Filename Value="umain.pas"/>
<Caret Line="636" Column="65" TopLine="597"/> <Caret Line="386" Column="27" TopLine="377"/>
</Position26> </Position26>
<Position27> <Position27>
<Filename Value="umain.pas"/> <Filename Value="umain.pas"/>
<Caret Line="638" Column="37" TopLine="599"/> <Caret Line="431" Column="18" TopLine="417"/>
</Position27> </Position27>
<Position28> <Position28>
<Filename Value="umain.pas"/> <Filename Value="umain.pas"/>
<Caret Line="639" Column="23" TopLine="600"/> <Caret Line="367" Column="18" TopLine="363"/>
</Position28> </Position28>
<Position29> <Position29>
<Filename Value="umain.pas"/> <Filename Value="umain.pas"/>
<Caret Line="710" Column="61" TopLine="670"/> <Caret Line="36" Column="71" TopLine="10"/>
</Position29> </Position29>
<Position30>
<Filename Value="umain.pas"/>
<Caret Line="700" TopLine="682"/>
</Position30>
</JumpHistory> </JumpHistory>
</ProjectSession> </ProjectSession>
</CONFIG> </CONFIG>

View File

@ -28,7 +28,12 @@ unit umain;
0.1.9.0: Error check for duplicate lpk entries (minesadorada) 0.1.9.0: Error check for duplicate lpk entries (minesadorada)
0.1.10.0: Exception handling for Load + Save (minesadorada) 0.1.10.0: Exception handling for Load + Save (minesadorada)
0.1.11.0: Cleaned up code formatting etc. (minesadorada) 0.1.11.0: Cleaned up code formatting etc. (minesadorada)
0.1.12.0: Renamed DownloadURL to DownloadZipURL (minesadorada) 0.1.12.0: Rename Global DownloadURL to DownloadZipURL (minesadorada)
0.1.13.0: Renamed TPackageData -> TUpdatePackageData (GetMem)
Renamed TPackageFiles -> TUpdatePackageFiles (GetMem)
Comment out Self.AutoAdjustLayout line in Form.Create (GetMem)
Removed StrUtils from uses (minesadorada)
Fixed memory leaks with CFG and slErrorList (minesadorada)
} }
{$mode objfpc}{$H+} {$mode objfpc}{$H+}
@ -38,16 +43,16 @@ interface
uses uses
Classes, Forms, Controls, StdCtrls, Menus, ActnList, StdActns, Grids, Classes, Forms, Controls, StdCtrls, Menus, ActnList, StdActns, Grids,
Graphics, Buttons, fileutil, LazFileUtils, fileinfo, ugenericcollection, fpjsonrtti, Graphics, Buttons, fileutil, LazFileUtils, fileinfo, ugenericcollection, fpjsonrtti,
Dialogs, StrUtils, LCLTranslator, PopupNotifier, SysUtils, inifiles, Dialogs, LCLTranslator, PopupNotifier, SysUtils, inifiles,
lclintf, lclVersion; lclintf, lclVersion;
type type
{ TPackage } { TPackage }
{ TPackageFiles } { TUpdatePackageFiles }
TPackageFiles = class(TCollectionItem) TUpdatePackageFiles = class(TCollectionItem)
private private
FName: string; FName: string;
FVersion: string; FVersion: string;
@ -56,11 +61,11 @@ type
property Version: string read FVersion write FVersion; property Version: string read FVersion write FVersion;
end; end;
TPackageFilesList = specialize TGenericCollection<TPackageFiles>; TPackageFilesList = specialize TGenericCollection<TUpdatePackageFiles>;
{ TPackageData } { TUpdatePackageData }
TPackageData = class(TPersistent) TUpdatePackageData = class(TPersistent)
private private
FDownloadZipURL: string; FDownloadZipURL: string;
FForceUpdate: boolean; FForceUpdate: boolean;
@ -75,7 +80,7 @@ type
TPackage = class(TPersistent) TPackage = class(TPersistent)
private private
FPackage: TPackageData; FPackage: TUpdatePackageData;
FPackageFiles: TPackageFilesList; FPackageFiles: TPackageFilesList;
public public
constructor Create; constructor Create;
@ -83,7 +88,7 @@ type
function LoadFromFile(AFileName: string): boolean; function LoadFromFile(AFileName: string): boolean;
function SaveToFile(AFileName: string): boolean; function SaveToFile(AFileName: string): boolean;
published published
property Package: TPackageData read FPackage write FPackage; property Package: TUpdatePackageData read FPackage write FPackage;
property PackageFiles: TPackageFilesList read FPackageFiles write FPackageFiles; property PackageFiles: TPackageFilesList read FPackageFiles write FPackageFiles;
end; end;
@ -145,14 +150,16 @@ type
bForceSaveAs, bShowPopupHints, bDisableWarnings, bDirty, bIsVirgin: boolean; bForceSaveAs, bShowPopupHints, bDisableWarnings, bDirty, bIsVirgin: boolean;
sJSONFilePath: string; sJSONFilePath: string;
sUpdateDirectory, sZipDirectory: string; sUpdateDirectory, sZipDirectory: string;
CFG: TIniFile;
slErrorList: TStrings; slErrorList: TStrings;
CFG: TIniFile;
INIFilePath:String;
function ValidationFailed: boolean; function ValidationFailed: boolean;
procedure CtrlShowPopup(Sender: TObject); procedure CtrlShowPopup(Sender: TObject);
procedure CtrlHidePopup(Sender: TObject); procedure CtrlHidePopup(Sender: TObject);
procedure CtrlSetUpPopupHandlers; procedure CtrlSetUpPopupHandlers;
procedure CtrlMakeDirty(Sender: TObject); procedure CtrlMakeDirty(Sender: TObject);
function FoundADuplicateLPK: boolean; function FoundADuplicateLPK: boolean;
Function CreateUniqueINI(var aCount: integer):Boolean;
public public
{ public declarations } { public declarations }
end; end;
@ -205,9 +212,9 @@ resourcestring
rsThereAreOneO = '- There are one or more .lpk entries with the same name.%s' rsThereAreOneO = '- There are one or more .lpk entries with the same name.%s'
+ '- Every .lpk entry must have a unique name.'; + '- Every .lpk entry must have a unique name.';
{ TPackageData } { TUpdatePackageData }
constructor TPackageData.Create; constructor TUpdatePackageData.Create;
begin begin
FName := ''; FName := '';
FForceUpdate := False; FForceUpdate := False;
@ -356,42 +363,48 @@ end;
procedure TfrmMain.FormClose(Sender: TObject; var CloseAction: TCloseAction); procedure TfrmMain.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin begin
CFG.WriteBool('Options', 'Virgin', False);
CFG.WriteBool('Options', 'DiableWarnings', bDisableWarnings);
end; end;
procedure TfrmMain.FormCloseQuery(Sender: TObject; var CanClose: boolean); procedure TfrmMain.FormCloseQuery(Sender: TObject; var CanClose: boolean);
begin begin
CanClose := True; CanClose := True;
if bDisableWarnings = True then if ((bDirty = True) AND (bDisableWarnings=FALSE)) then
exit;
if bDirty = True then
begin begin
if MessageDlg(rsFileMayBeUns, mtConfirmation, [mbYes, mbNo], 0, mbNo) = mrNo then if MessageDlg(rsFileMayBeUns, mtConfirmation, [mbYes, mbNo], 0, mbNo) = mrNo then
CanClose := False; CanClose := False;
end; end;
CFG.WriteBool('Options', 'Virgin', False);
CFG.WriteBool('Options', 'DiableWarnings', bDisableWarnings);
CFG.UpdateFile;
Application.ProcessMessages;
CFG.Free;
slErrorList.Free;
end;
function TfrmMain.CreateUniqueINI(var aCount: integer):Boolean;
// Recursively loop until correct INI found, or new one created
begin
Result:=FALSE;
INIFilePath := GetAppConfigFile(False) + IntToStr(aCount);
CFG := TIniFile.Create(INIFilePath);
CFG.CacheUpdates:=TRUE;
if CFG.ReadString('Options', 'AppPath', ProgramDirectory) <> ProgramDirectory then
begin
FreeAndNil(CFG); // Ditch the old one
Inc(aCount);
Result:=TRUE;
CreateUniqueINI(aCount); // Make a new one
end;
end; end;
procedure TfrmMain.FormCreate(Sender: TObject); procedure TfrmMain.FormCreate(Sender: TObject);
var var
sLang, INIFilePath: string; sLang: string;
iIniCount:Integer;
procedure CreateUniqueINI(aCount: integer);
// Recursively loop until correct INI found, or new one created
begin
INIFilePath := GetAppConfigFile(False) + IntToStr(aCount);
CFG := TIniFile.Create(INIFilePath);
if CFG.ReadString('Options', 'AppPath', ProgramDirectory) <> ProgramDirectory then
begin
CFG.Free; // Ditch the old one
Inc(aCount);
CreateUniqueINI(aCount); // Make a new one
end;
end;
begin begin
{
Self.AutoAdjustLayout(lapAutoAdjustForDPI, Self.DesignTimeDPI, Self.AutoAdjustLayout(lapAutoAdjustForDPI, Self.DesignTimeDPI,
Screen.PixelsPerInch, Self.Width, ScaleX(Self.Width, Self.DesignTimeDPI)); Screen.PixelsPerInch, Self.Width, ScaleX(Self.Width, Self.DesignTimeDPI));
}
// Enable AutoSize again to get correct Height // Enable AutoSize again to get correct Height
editName.AutoSize := True; editName.AutoSize := True;
editDownloadZipURL.AutoSize := True; editDownloadZipURL.AutoSize := True;
@ -404,9 +417,9 @@ begin
stringPackageFiles.Columns[0].Title.Caption := rsLpkFileName; stringPackageFiles.Columns[0].Title.Caption := rsLpkFileName;
stringPackageFiles.Columns[1].Title.Caption := rsVersion0000; stringPackageFiles.Columns[1].Title.Caption := rsVersion0000;
// Defaults // Defaults
slErrorList := TStringList.Create;
bForceSaveAs := True; bForceSaveAs := True;
bShowPopupHints := True; bShowPopupHints := True;
slErrorList := TStringList.Create;
// Encourage the user to maintain an updates folder // Encourage the user to maintain an updates folder
sUpdateDirectory := ProgramDirectory + 'updates'; sUpdateDirectory := ProgramDirectory + 'updates';
if not FileExistsUTF8(sUpdateDirectory) then if not FileExistsUTF8(sUpdateDirectory) then
@ -415,9 +428,11 @@ begin
// Enable options persistence // Enable options persistence
// If program location is different, create a new CFG file // If program location is different, create a new CFG file
// Because each component's location might be different // Because each component's location might be different
CreateUniqueINI(0); iIniCount:=0;
CFG.WriteString('Options', 'AppPath', ProgramDirectory); If CreateUniqueINI(iIniCount) then
CFG.WriteString('Options', 'AppPath', ProgramDirectory);
CFG.UpdateFile;
ShowMessageFmt('Inifile=%s, Count=%d',[INIFilePath,iIniCount]);
// Pop-up hints (show on first run, then not again unless the user chooses) // Pop-up hints (show on first run, then not again unless the user chooses)
bIsVirgin := CFG.ReadBool('Options', 'Virgin', True); bIsVirgin := CFG.ReadBool('Options', 'Virgin', True);
bShowPopupHints := bIsVirgin; bShowPopupHints := bIsVirgin;
@ -682,7 +697,6 @@ end;
procedure TfrmMain.SaveAsItemClick(Sender: TObject); procedure TfrmMain.SaveAsItemClick(Sender: TObject);
var var
i: integer; i: integer;
s: string;
begin begin
if ValidationFailed then if ValidationFailed then
begin begin
@ -780,7 +794,7 @@ end;
constructor TPackage.Create; constructor TPackage.Create;
begin begin
FPackage := TPackageData.Create; FPackage := TUpdatePackageData.Create;
FPackageFiles := TPackageFilesList.Create; FPackageFiles := TPackageFilesList.Create;
end; end;