* Some improvements for JSON Data viewer by Theo

- Fix: Double element creation
    - Fix: "Raw preview" update.
    - Fix: "New Document creates Object" option.
    - New: Visual and Raw is two way now. Changes in "Raw" (Editable now) will be taken over in "Visual" too.
    - New: Option: Save Formatted (readable) JSON.
    - Change: Make TSynJScriptSyn global.
    - New: German translations.

git-svn-id: trunk@62326 -
This commit is contained in:
michael 2019-12-05 16:24:50 +00:00
parent 0545e7c3cf
commit 470ce73096
4 changed files with 69 additions and 13 deletions

View File

@ -51,8 +51,8 @@ object MainForm: TMainForm
OnCreate = FormCreate OnCreate = FormCreate
OnDestroy = FormDestroy OnDestroy = FormDestroy
OnShow = FormShow OnShow = FormShow
SessionProperties = 'Height;Left;MIdocument.Checked;MIStrict.Checked;Top;Width;MICompact.Checked' SessionProperties = 'Height;Left;MICompact.Checked;MIdocument.Checked;MIStrict.Checked;Top;Width;MISaveFormatted.Checked'
LCLVersion = '1.9.0.0' LCLVersion = '2.1.0.0'
object TBJSON: TToolBar object TBJSON: TToolBar
Left = 0 Left = 0
Height = 26 Height = 26
@ -464,6 +464,11 @@ object MainForm: TMainForm
Caption = 'Quote string values' Caption = 'Quote string values'
OnClick = MIQuoteStringsClick OnClick = MIQuoteStringsClick
end end
object MISaveFormatted: TMenuItem
AutoCheck = True
Caption = 'Save Formatted JSON'
OnClick = MISaveFormattedClick
end
end end
object MFavourites: TMenuItem object MFavourites: TMenuItem
Caption = 'Favourites' Caption = 'Favourites'
@ -1178,6 +1183,11 @@ object MainForm: TMainForm
item item
Name = 'RestPanelHeight' Name = 'RestPanelHeight'
OnRestore = PSMainStoredValues7Restore OnRestore = PSMainStoredValues7Restore
end
item
Name = 'SaveFormatted'
Value = '0'
OnRestore = PSMainStoredValues8Restore
end> end>
Active = False Active = False
left = 384 left = 384
@ -1224,4 +1234,9 @@ object MainForm: TMainForm
Action = AExpandCurrentContainer Action = AExpandCurrentContainer
end end
end end
object SynJScriptSyn1: TSynJScriptSyn
Enabled = False
left = 373
top = 220
end
end end

View File

@ -43,7 +43,8 @@ type
FQuoteStrings, FQuoteStrings,
FSortObjectMembers, FSortObjectMembers,
FCompact, FCompact,
FNewObject : Boolean; FNewObject,
FSaveFormatted: Boolean;
end; end;
TJSONTab = Class(TTabsheet) TJSONTab = Class(TTabsheet)
@ -59,6 +60,7 @@ type
FPageControl : TPageControl; FPageControl : TPageControl;
FSyn : TSynEdit; FSyn : TSynEdit;
procedure DoTabChange(Sender: TObject); procedure DoTabChange(Sender: TObject);
procedure JSONFromPreview;
procedure SetCurrentFind(AValue: TTreeNode); procedure SetCurrentFind(AValue: TTreeNode);
procedure SetDocNo(AValue: Integer); procedure SetDocNo(AValue: Integer);
procedure SetFileName(AValue: String); procedure SetFileName(AValue: String);
@ -120,6 +122,7 @@ type
MenuItem13: TMenuItem; MenuItem13: TMenuItem;
MenuItem14: TMenuItem; MenuItem14: TMenuItem;
MenuItem15: TMenuItem; MenuItem15: TMenuItem;
MISaveFormatted: TMenuItem;
MSepFavourites: TMenuItem; MSepFavourites: TMenuItem;
MFavourites: TMenuItem; MFavourites: TMenuItem;
MIGenCode: TMenuItem; MIGenCode: TMenuItem;
@ -167,6 +170,7 @@ type
MMJSON: TMainMenu; MMJSON: TMainMenu;
ODJSON: TOpenDialog; ODJSON: TOpenDialog;
SDJSON: TSaveDialog; SDJSON: TSaveDialog;
SynJScriptSyn1: TSynJScriptSyn;
TBJSON: TToolBar; TBJSON: TToolBar;
TBNew: TToolButton; TBNew: TToolButton;
TBNewButton: TToolButton; TBNewButton: TToolButton;
@ -228,6 +232,7 @@ type
procedure MICompactClick(Sender: TObject); procedure MICompactClick(Sender: TObject);
procedure MIdocumentClick(Sender: TObject); procedure MIdocumentClick(Sender: TObject);
procedure MIQuoteStringsClick(Sender: TObject); procedure MIQuoteStringsClick(Sender: TObject);
procedure MISaveFormattedClick(Sender: TObject);
procedure MISortMembersClick(Sender: TObject); procedure MISortMembersClick(Sender: TObject);
procedure MIStrictClick(Sender: TObject); procedure MIStrictClick(Sender: TObject);
procedure PCJSONCloseTabClicked(Sender: TObject); procedure PCJSONCloseTabClicked(Sender: TObject);
@ -237,6 +242,7 @@ type
procedure PSMainStoredValues3Restore(Sender: TStoredValue; var Value: TStoredType); procedure PSMainStoredValues3Restore(Sender: TStoredValue; var Value: TStoredType);
procedure PSMainStoredValues6Restore(Sender: TStoredValue; var Value: TStoredType); procedure PSMainStoredValues6Restore(Sender: TStoredValue; var Value: TStoredType);
procedure PSMainStoredValues7Restore(Sender: TStoredValue; var Value: TStoredType); procedure PSMainStoredValues7Restore(Sender: TStoredValue; var Value: TStoredType);
procedure PSMainStoredValues8Restore(Sender: TStoredValue; var Value: TStoredType);
procedure TBShowRestClick(Sender: TObject); procedure TBShowRestClick(Sender: TObject);
procedure TVJSONEdited(Sender: TObject; Node: TTreeNode; var S: string); procedure TVJSONEdited(Sender: TObject; Node: TTreeNode; var S: string);
procedure TVJSONEditing(Sender: TObject; Node: TTreeNode; procedure TVJSONEditing(Sender: TObject; Node: TTreeNode;
@ -358,10 +364,12 @@ begin
SetCaption; SetCaption;
end; end;
procedure TJSONTab.DoTabChange(Sender: TObject); procedure TJSONTab.DoTabChange(Sender: TObject);
begin begin
If (PageControl.ActivePageIndex=1) then If ((Sender as TPageControl).ActivePageIndex=1) then
ShowJSONDocumentText; ShowJSONDocumentText else JSONFromPreview;
end; end;
constructor TJSONTab.Create(AOwner: TComponent); constructor TJSONTab.Create(AOwner: TComponent);
@ -398,9 +406,8 @@ begin
FSyn:=TSynEdit.Create(Self.Owner); FSyn:=TSynEdit.Create(Self.Owner);
FSyn.align:=alClient; FSyn.align:=alClient;
FSyn.Parent:=TS; FSyn.Parent:=TS;
FSyn.Highlighter:=TSynJScriptSyn.Create(Self.Owner); FSyn.Highlighter:=MainForm.SynJScriptSyn1;
FSyn.Highlighter.Enabled:=True; FSyn.Highlighter.Enabled:=True;
FSyn.ReadOnly:=True;
SetCaption; SetCaption;
end; end;
@ -514,6 +521,12 @@ begin
FRestPanelHeight:=StrToIntDef(Value,0); FRestPanelHeight:=StrToIntDef(Value,0);
end; end;
procedure TMainForm.PSMainStoredValues8Restore(Sender: TStoredValue;
var Value: TStoredType);
begin
FOptions.FSaveFormatted:=StrToIntDef(Value,0)=1;
end;
procedure TMainForm.TBShowRestClick(Sender: TObject); procedure TMainForm.TBShowRestClick(Sender: TObject);
begin begin
if TBShowRest.Down then if TBShowRest.Down then
@ -673,6 +686,8 @@ begin
Result.DocNo:=DC; Result.DocNo:=DC;
Result.FileName:=''; Result.FileName:='';
Result.ImageIndex:=16; Result.ImageIndex:=16;
If FOptions.FNewObject then
Result.Root:=TJSONObject.Create;
end; end;
procedure TMainForm.SetCaption; procedure TMainForm.SetCaption;
@ -1204,8 +1219,8 @@ begin
P.ImageIndex:=ImageTypeMap[D.JSONType]; P.ImageIndex:=ImageTypeMap[D.JSONType];
P.SelectedIndex:=ImageTypeMap[D.JSONType]; P.SelectedIndex:=ImageTypeMap[D.JSONType];
P.MakeVisible; P.MakeVisible;
T.ShowJSONData(P,D);
end; end;
T.ShowJSONData(P,D);
end; end;
function TMainForm.CurrentNode: TTreeNode; function TMainForm.CurrentNode: TTreeNode;
@ -1245,6 +1260,8 @@ begin
F:=TFileStream.Create(AFileName,fmCreate); F:=TFileStream.Create(AFileName,fmCreate);
try try
If Assigned(CurrentJSONTab.Root) then If Assigned(CurrentJSONTab.Root) then
if FOptions.FSaveFormatted then
S:=CurrentJSONTab.Root.FormatJSON else
S:=CurrentJSONTab.Root.AsJSON; S:=CurrentJSONTab.Root.AsJSON;
If length(S)>0 then If length(S)>0 then
F.WriteBuffer(S[1],Length(S)); F.WriteBuffer(S[1],Length(S));
@ -1582,6 +1599,13 @@ begin
ShowJSONDocument; ShowJSONDocument;
end; end;
procedure TMainForm.MISaveFormattedClick(Sender: TObject);
begin
FOptions.FSaveFormatted :=(Sender as TMenuItem).Checked;
PSMain.StoredValue['SaveFormatted']:=IntToStr(Ord(FOptions.FSaveFormatted));
ShowJSONDocument;
end;
procedure TMainForm.MISortMembersClick(Sender: TObject); procedure TMainForm.MISortMembersClick(Sender: TObject);
begin begin
FOptions.FSortObjectMembers:=(Sender as TMenuItem).Checked; FOptions.FSortObjectMembers:=(Sender as TMenuItem).Checked;
@ -1605,8 +1629,6 @@ begin
try try
{$IF FPC_FULLVERSION>=30002} {$IF FPC_FULLVERSION>=30002}
P.Options:=P.Options+[joStrict]; P.Options:=P.Options+[joStrict];
{$ELSE}
P:=TJSONParser.Create(S);
{$ENDIF} {$ENDIF}
D:=P.Parse; D:=P.Parse;
finally finally
@ -1647,9 +1669,28 @@ begin
end; end;
end; end;
procedure TJSONTab.JSONFromPreview;
var P : TJSONParser;
D : TJSONData;
begin
try
{$IF FPC_FULLVERSION>=30002}
P:=TJSONParser.Create(FSyn.Text,[]);
P.Options:=P.Options+[joStrict, joComments];
{$ELSE}
P:=TJSONParser.Create(FSyn.Text);
{$ENDIF}
D:=P.Parse;
Root:=D;
Modified:=true;
finally
P.Free;
end;
end;
procedure TJSONTab.ShowJSONDocumentText; procedure TJSONTab.ShowJSONDocumentText;
begin begin
FSyn.Text:=Root.FormatJSON(); IF Assigned(Root) then FSyn.Text:=Root.FormatJSON();
end; end;
procedure TJSONTab.ShowJSONData(AParent : TTreeNode; Data : TJSONData); procedure TJSONTab.ShowJSONData(AParent : TTreeNode; Data : TJSONData);

Binary file not shown.

View File

@ -131,7 +131,7 @@ msgstr ""
#: tcreatecodeform.caption #: tcreatecodeform.caption
msgctxt "tcreatecodeform.caption" msgctxt "tcreatecodeform.caption"
msgid "Create pascal code" msgid "Create pascal code"
msgstr "" msgstr "Pascal Code erstellen"
#: tcreatecodeform.cgoptions.caption #: tcreatecodeform.cgoptions.caption
msgid "Other options" msgid "Other options"
@ -214,7 +214,7 @@ msgstr ""
#: tmainform.acreatecode.caption #: tmainform.acreatecode.caption
msgctxt "tmainform.acreatecode.caption" msgctxt "tmainform.acreatecode.caption"
msgid "Create pascal code" msgid "Create pascal code"
msgstr "" msgstr "Pascal Code erstellen"
#: tmainform.acut.caption #: tmainform.acut.caption
msgid "C&ut" msgid "C&ut"