mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-08 06:18:21 +02:00
* Compact display mode
git-svn-id: trunk@50009 -
This commit is contained in:
parent
a387dabeab
commit
50585ddd56
@ -4,7 +4,7 @@ object MainForm: TMainForm
|
||||
Top = 225
|
||||
Width = 695
|
||||
Caption = 'JSON Viewer'
|
||||
ClientHeight = 489
|
||||
ClientHeight = 480
|
||||
ClientWidth = 695
|
||||
Icon.Data = {
|
||||
7E04000000000100010010100000010020006804000016000000280000001000
|
||||
@ -49,8 +49,8 @@ object MainForm: TMainForm
|
||||
OnCloseQuery = FormCloseQuery
|
||||
OnCreate = FormCreate
|
||||
OnShow = FormShow
|
||||
SessionProperties = 'MIStrict.Checked;MIdocument.Checked;Top;Width;Left;Height'
|
||||
LCLVersion = '0.9.29'
|
||||
SessionProperties = 'Height;Left;MIdocument.Checked;MIStrict.Checked;Top;Width;MICompact.Checked'
|
||||
LCLVersion = '1.5'
|
||||
object TBJSON: TToolBar
|
||||
Left = 0
|
||||
Height = 26
|
||||
@ -78,6 +78,7 @@ object MainForm: TMainForm
|
||||
end
|
||||
object ToolButton4: TToolButton
|
||||
Left = 70
|
||||
Height = 22
|
||||
Top = 2
|
||||
Width = 8
|
||||
Caption = 'ToolButton4'
|
||||
@ -115,6 +116,7 @@ object MainForm: TMainForm
|
||||
end
|
||||
object ToolButton1: TToolButton
|
||||
Left = 216
|
||||
Height = 22
|
||||
Top = 2
|
||||
Width = 8
|
||||
Caption = 'ToolButton1'
|
||||
@ -128,11 +130,11 @@ object MainForm: TMainForm
|
||||
end
|
||||
object TVJSON: TTreeView
|
||||
Left = 0
|
||||
Height = 463
|
||||
Height = 454
|
||||
Top = 26
|
||||
Width = 695
|
||||
Align = alClient
|
||||
DefaultItemHeight = 16
|
||||
DefaultItemHeight = 28
|
||||
HideSelection = False
|
||||
Images = ILJSON
|
||||
TabOrder = 1
|
||||
@ -143,7 +145,7 @@ object MainForm: TMainForm
|
||||
object ActionList1: TActionList
|
||||
Images = ILJSON
|
||||
left = 88
|
||||
top = 104
|
||||
top = 128
|
||||
object ANew: TAction
|
||||
Category = 'File'
|
||||
Caption = '&New'
|
||||
@ -307,8 +309,8 @@ object MainForm: TMainForm
|
||||
end
|
||||
object MMJSON: TMainMenu
|
||||
Images = ILJSON
|
||||
left = 13
|
||||
top = 19
|
||||
left = 40
|
||||
top = 56
|
||||
object MFile: TMenuItem
|
||||
Caption = '&File'
|
||||
object MINew: TMenuItem
|
||||
@ -981,11 +983,16 @@ object MainForm: TMainForm
|
||||
Caption = 'Sort object members'
|
||||
OnClick = MISortMembersClick
|
||||
end
|
||||
object MICompact: TMenuItem
|
||||
AutoCheck = True
|
||||
Caption = 'Compact display'
|
||||
OnClick = MICompactClick
|
||||
end
|
||||
end
|
||||
end
|
||||
object ILJSON: TImageList
|
||||
left = 112
|
||||
top = 61
|
||||
left = 176
|
||||
top = 56
|
||||
Bitmap = {
|
||||
4C69100000001000000010000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
@ -1507,16 +1514,16 @@ object MainForm: TMainForm
|
||||
DefaultExt = '.json'
|
||||
Filter = 'JSON files|*.json|Javascript files|*.js|All files|*.*'
|
||||
Options = [ofFileMustExist, ofEnableSizing, ofViewDetail]
|
||||
left = 156
|
||||
top = 79
|
||||
left = 280
|
||||
top = 56
|
||||
end
|
||||
object SDJSON: TSaveDialog
|
||||
Title = 'Save JSON document to file'
|
||||
DefaultExt = '.json'
|
||||
Filter = 'JSON files|*.json|Javascript files|*.js|All files|*.*'
|
||||
Options = [ofPathMustExist, ofEnableSizing, ofViewDetail]
|
||||
left = 161
|
||||
top = 118
|
||||
left = 488
|
||||
top = 56
|
||||
end
|
||||
object PSMain: TIniPropStorage
|
||||
StoredValues = <
|
||||
@ -1534,15 +1541,19 @@ object MainForm: TMainForm
|
||||
Name = 'Sort'
|
||||
Value = '0'
|
||||
OnRestore = PSMainStoredValues2Restore
|
||||
end
|
||||
item
|
||||
Name = 'compact'
|
||||
OnRestore = PSMainStoredValues3Restore
|
||||
end>
|
||||
Active = False
|
||||
left = 196
|
||||
top = 96
|
||||
left = 384
|
||||
top = 56
|
||||
end
|
||||
object FDJSON: TFindDialog
|
||||
Options = [frDown, frHideUpDown, frDisableUpDown]
|
||||
OnFind = FDJSONFind
|
||||
left = 264
|
||||
top = 109
|
||||
left = 376
|
||||
top = 128
|
||||
end
|
||||
end
|
||||
|
@ -59,6 +59,7 @@ type
|
||||
MEDit: TMenuItem;
|
||||
MenuItem2: TMenuItem;
|
||||
MenuItem3: TMenuItem;
|
||||
MICompact: TMenuItem;
|
||||
MIFInd: TMenuItem;
|
||||
MIExpandCurrent: TMenuItem;
|
||||
MIExpandAll: TMenuItem;
|
||||
@ -136,6 +137,7 @@ type
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure FormShow(Sender: TObject);
|
||||
procedure HaveData(Sender: TObject);
|
||||
procedure MICompactClick(Sender: TObject);
|
||||
procedure MIdocumentClick(Sender: TObject);
|
||||
procedure MISortMembersClick(Sender: TObject);
|
||||
procedure MIStrictClick(Sender: TObject);
|
||||
@ -145,6 +147,8 @@ type
|
||||
var Value: TStoredType);
|
||||
procedure PSMainStoredValues2Restore(Sender: TStoredValue;
|
||||
var Value: TStoredType);
|
||||
procedure PSMainStoredValues3Restore(Sender: TStoredValue;
|
||||
var Value: TStoredType);
|
||||
procedure TVJSONEdited(Sender: TObject; Node: TTreeNode; var S: string);
|
||||
procedure TVJSONEditing(Sender: TObject; Node: TTreeNode;
|
||||
var AllowEdit: Boolean);
|
||||
@ -154,6 +158,7 @@ type
|
||||
FSortObjectMembers,
|
||||
FStrict,
|
||||
FNewObject,
|
||||
FCompact,
|
||||
FModified : Boolean;
|
||||
FCurrentFind : TTreeNode;
|
||||
procedure AddDataToContainer(const AMemberName: String; D: TJSONData);
|
||||
@ -225,6 +230,12 @@ begin
|
||||
FSortObjectMembers:=StrToIntDef(Value,0)=1;
|
||||
end;
|
||||
|
||||
procedure TMainForm.PSMainStoredValues3Restore(Sender: TStoredValue;
|
||||
var Value: TStoredType);
|
||||
begin
|
||||
FCompact:=StrToIntDef(Value,0)=1;
|
||||
end;
|
||||
|
||||
procedure TMainForm.TVJSONEdited(Sender: TObject; Node: TTreeNode; var S: string);
|
||||
|
||||
Var
|
||||
@ -424,23 +435,17 @@ begin
|
||||
begin
|
||||
P:=TJSONData(PN.Data);
|
||||
If P.JSONType=jtArray then
|
||||
TJSONArray(P).Remove(D)
|
||||
else If P.JSONType=jtObject then
|
||||
TJSONObject(P).Remove(D);
|
||||
PN:=PN.Parent;
|
||||
If PN<>Nil then
|
||||
begin
|
||||
TJSONArray(P).Remove(D);
|
||||
PN:=PN.Parent;
|
||||
If PN<>Nil then
|
||||
PN.DeleteChildren
|
||||
else
|
||||
TVJSON.Items.Clear;
|
||||
PN.DeleteChildren;
|
||||
ShowJSONData(PN,P);
|
||||
end
|
||||
else If P.JSONType=jtObject then
|
||||
begin
|
||||
TJSONObject(P).Remove(D);
|
||||
PN:=PN.Parent;
|
||||
If PN<>Nil then
|
||||
PN.DeleteChildren;
|
||||
ShowJSONData(PN,P);
|
||||
end;
|
||||
else
|
||||
ShowJSONDocument;
|
||||
end;
|
||||
Modify;
|
||||
end;
|
||||
@ -733,14 +738,18 @@ end;
|
||||
|
||||
Function TMainForm.CurrentData : TJSONData;
|
||||
|
||||
Var
|
||||
N : TTreeNode;
|
||||
|
||||
begin
|
||||
If (CurrentNode=Nil) then
|
||||
N:=CurrentNode;
|
||||
If (N=Nil) then
|
||||
Result:=Nil
|
||||
else
|
||||
begin
|
||||
Result:=TJSONData(CurrentNode.Data);
|
||||
If (Result=Nil) and (CurrentNode.Count=1) then
|
||||
Result:=TJSONData(CurrentNode.Items[0].Data);
|
||||
Result:=TJSONData(N.Data);
|
||||
If (Result=Nil) and (N.Count=1) then
|
||||
Result:=TJSONData(N.Items[0].Data);
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -920,6 +929,13 @@ begin
|
||||
(Sender as TAction).Enabled:=(FRoot<>Nil);
|
||||
end;
|
||||
|
||||
procedure TMainForm.MICompactClick(Sender: TObject);
|
||||
begin
|
||||
FCompact:=MICompact.Checked;
|
||||
PSMain.StoredValue['compact']:=IntToStr(Ord(Fstrict));
|
||||
ShowJSONDocument;
|
||||
end;
|
||||
|
||||
procedure TMainForm.MIdocumentClick(Sender: TObject);
|
||||
begin
|
||||
FNewObject:=(Sender as TMenuItem).Checked;
|
||||
@ -966,7 +982,7 @@ begin
|
||||
BeginUpdate;
|
||||
try
|
||||
TVJSON.Items.Clear;
|
||||
SHowJSONData(Nil,FRoot);
|
||||
ShowJSONData(Nil,FRoot);
|
||||
With TVJSON do
|
||||
If (Items.Count>0) and Assigned(Items[0]) then
|
||||
begin
|
||||
@ -989,50 +1005,58 @@ Var
|
||||
S : TStringList;
|
||||
|
||||
begin
|
||||
N:=Nil;
|
||||
if Assigned(Data) then
|
||||
begin
|
||||
Case Data.JSONType of
|
||||
jtArray,
|
||||
jtObject:
|
||||
begin
|
||||
If (Data.JSONType=jtArray) then
|
||||
C:=SArray
|
||||
else
|
||||
C:=SObject;
|
||||
N:=TVJSON.Items.AddChild(AParent,Format(C,[Data.Count]));
|
||||
S:=TstringList.Create;
|
||||
try
|
||||
For I:=0 to Data.Count-1 do
|
||||
If Data.JSONtype=jtArray then
|
||||
S.AddObject(IntToStr(I),Data.items[i])
|
||||
else
|
||||
S.AddObject(TJSONObject(Data).Names[i],Data.items[i]);
|
||||
If FSortObjectMembers and (Data.JSONType=jtObject) then
|
||||
S.Sort;
|
||||
For I:=0 to S.Count-1 do
|
||||
begin
|
||||
N2:=TVJSON.Items.AddChild(N,S[i]);
|
||||
D:=TJSONData(S.Objects[i]);
|
||||
N2.ImageIndex:=ImageTypeMap[D.JSONType];
|
||||
N2.SelectedIndex:=ImageTypeMap[D.JSONType];
|
||||
ShowJSONData(N2,D);
|
||||
end
|
||||
finally
|
||||
S.Free;
|
||||
end;
|
||||
end;
|
||||
jtNull:
|
||||
N:=TVJSON.Items.AddChild(AParent,SNull);
|
||||
else
|
||||
N:=TVJSON.Items.AddChild(AParent,Data.AsString);
|
||||
end;
|
||||
If Assigned(N) then
|
||||
if Not Assigned(Data) then
|
||||
exit;
|
||||
if FCompact and (AParent<>Nil) then
|
||||
N:=AParent
|
||||
else
|
||||
N:=TVJSON.Items.AddChild(AParent,'');
|
||||
Case Data.JSONType of
|
||||
jtArray,
|
||||
jtObject:
|
||||
begin
|
||||
N.ImageIndex:=ImageTypeMap[Data.JSONType];
|
||||
N.SelectedIndex:=ImageTypeMap[Data.JSONType];
|
||||
N.Data:=Data;
|
||||
If (Data.JSONType=jtArray) then
|
||||
C:=SArray
|
||||
else
|
||||
C:=SObject;
|
||||
C:=Format(C,[Data.Count]);
|
||||
S:=TstringList.Create;
|
||||
try
|
||||
For I:=0 to Data.Count-1 do
|
||||
If Data.JSONtype=jtArray then
|
||||
S.AddObject(IntToStr(I),Data.items[i])
|
||||
else
|
||||
S.AddObject(TJSONObject(Data).Names[i],Data.items[i]);
|
||||
If FSortObjectMembers and (Data.JSONType=jtObject) then
|
||||
S.Sort;
|
||||
For I:=0 to S.Count-1 do
|
||||
begin
|
||||
N2:=TVJSON.Items.AddChild(N,S[i]);
|
||||
D:=TJSONData(S.Objects[i]);
|
||||
N2.ImageIndex:=ImageTypeMap[D.JSONType];
|
||||
N2.SelectedIndex:=ImageTypeMap[D.JSONType];
|
||||
ShowJSONData(N2,D);
|
||||
end
|
||||
finally
|
||||
S.Free;
|
||||
end;
|
||||
end;
|
||||
jtNull:
|
||||
C:=SNull;
|
||||
else
|
||||
C:=Data.AsString;
|
||||
if (Data.JSONType=jtString) then
|
||||
C:='"'+C+'"';
|
||||
end;
|
||||
If Assigned(N) then
|
||||
begin
|
||||
If N.Text='' then
|
||||
N.Text:=C
|
||||
else
|
||||
N.Text:=N.Text+': '+C;
|
||||
N.ImageIndex:=ImageTypeMap[Data.JSONType];
|
||||
N.SelectedIndex:=ImageTypeMap[Data.JSONType];
|
||||
N.Data:=Data;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user