source upload
This commit is contained in:
@@ -0,0 +1,155 @@
|
||||
unit fMain;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
||||
Dialogs, ExtCtrls, StdCtrls, Buttons, ActnList, StdActns, ImgList, Menus,
|
||||
ComCtrls,
|
||||
SynJSONTreeView,
|
||||
SynCommons;
|
||||
|
||||
type
|
||||
TfrmJSONEditor = class(TForm)
|
||||
Panel1: TPanel;
|
||||
ActionList1: TActionList;
|
||||
ImageList1: TImageList;
|
||||
EditPaste1: TEditPaste;
|
||||
EditClear1: TEditDelete;
|
||||
BitBtn1: TBitBtn;
|
||||
btnClear: TBitBtn;
|
||||
ActionToggleVisibleChildrenCounts: TAction;
|
||||
ActionToggleVisibleByteSizes: TAction;
|
||||
PopupMenu1: TPopupMenu;
|
||||
VisibleChildrenCounts1: TMenuItem;
|
||||
VisibleByteSizes1: TMenuItem;
|
||||
pnlJSONTreeView: TPanel;
|
||||
btnSaveJSON: TBitBtn;
|
||||
EditSave1: TAction;
|
||||
dlgSave: TSaveDialog;
|
||||
actEditLoad1: TAction;
|
||||
btnLoad: TBitBtn;
|
||||
dlgOpenJSONFile: TOpenDialog;
|
||||
procedure ActionToggleVisibleChildrenCountsExecute(Sender: TObject);
|
||||
procedure ActionToggleVisibleByteSizesExecute(Sender: TObject);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure EditPaste1Execute(Sender: TObject);
|
||||
procedure EditClear1Execute(Sender: TObject);
|
||||
procedure EditSave1Execute(Sender: TObject);
|
||||
procedure actEditLoad1Execute(Sender: TObject);
|
||||
private
|
||||
{ Private declarations }
|
||||
JSONTreeView1: TSynJSONTreeView;
|
||||
procedure DoOnCustomInput(Sender: TObject; Node: TSynJSONTreeNode;
|
||||
var Prompt: RawUTF8; var Value: Variant; var Handled: Boolean);
|
||||
procedure SetJSON(const aJSON: RawUTF8);
|
||||
procedure ToogleButtons;
|
||||
public
|
||||
{ Public declarations }
|
||||
end;
|
||||
|
||||
var
|
||||
frmJSONEditor: TfrmJSONEditor;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
Clipbrd,
|
||||
fLevel;
|
||||
|
||||
{$R *.dfm}
|
||||
|
||||
procedure TfrmJSONEditor.FormCreate(Sender: TObject);
|
||||
begin
|
||||
JSONTreeView1 := TSynJSONTreeView.Create(pnlJSONTreeView);
|
||||
JSONTreeView1.PopupMenu := PopupMenu1;
|
||||
JSONTreeView1.Align := alClient;
|
||||
JSONTreeView1.Parent := pnlJSONTreeView;
|
||||
JSONTreeView1.OnCustomInput := DoOnCustomInput;
|
||||
ActionToggleVisibleByteSizes.Checked := JSONTreeView1.VisibleByteSizes;
|
||||
ActionToggleVisibleChildrenCounts.Checked := JSONTreeView1.VisibleChildrenCounts;
|
||||
end;
|
||||
|
||||
procedure TfrmJSONEditor.ActionToggleVisibleByteSizesExecute(Sender: TObject);
|
||||
begin
|
||||
JSONTreeView1.VisibleByteSizes := not JSONTreeView1.VisibleByteSizes;
|
||||
end;
|
||||
|
||||
procedure TfrmJSONEditor.ActionToggleVisibleChildrenCountsExecute(Sender: TObject);
|
||||
begin
|
||||
JSONTreeView1.VisibleChildrenCounts := not JSONTreeView1.VisibleChildrenCounts;
|
||||
end;
|
||||
|
||||
procedure TfrmJSONEditor.EditClear1Execute(Sender: TObject);
|
||||
begin
|
||||
JSONTreeView1.ClearAll;
|
||||
ToogleButtons;
|
||||
end;
|
||||
|
||||
procedure TfrmJSONEditor.EditPaste1Execute(Sender: TObject);
|
||||
begin
|
||||
SetJSON(Clipboard.AsText);
|
||||
ToogleButtons;
|
||||
end;
|
||||
|
||||
procedure TfrmJSONEditor.EditSave1Execute(Sender: TObject);
|
||||
begin
|
||||
if dlgSave.Execute then
|
||||
JSONTreeView1.SaveToFile(dlgSave.FileName);
|
||||
end;
|
||||
|
||||
procedure TfrmJSONEditor.actEditLoad1Execute(Sender: TObject);
|
||||
begin
|
||||
if dlgOpenJSONFile.Execute then
|
||||
begin
|
||||
SetJSON(StringFromFile(dlgOpenJSONFile.FileName));
|
||||
ToogleButtons;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TfrmJSONEditor.SetJSON(const aJSON: RawUTF8);
|
||||
begin
|
||||
JSONTreeView1.JsonText := aJSON;
|
||||
|
||||
JSONTreeView1.Items.BeginUpdate;
|
||||
JSONTreeView1.LoadJSON;
|
||||
JSONTreeView1.Items.EndUpdate;
|
||||
end;
|
||||
|
||||
procedure TfrmJSONEditor.ToogleButtons;
|
||||
begin
|
||||
EditSave1.Enabled := (JSONTreeView1.Items.Count > 0);
|
||||
EditClear1.Enabled := (JSONTreeView1.Items.Count > 0);
|
||||
end;
|
||||
|
||||
procedure TfrmJSONEditor.DoOnCustomInput(Sender: TObject;
|
||||
Node: TSynJSONTreeNode; var Prompt: RawUTF8; var Value: Variant; var Handled: Boolean);
|
||||
|
||||
procedure ProcessLevel;
|
||||
begin
|
||||
if (TDocVariantData(Value).Kind <> dvArray) then
|
||||
begin
|
||||
MessageDlg('Level node is not an array', mtError, [mbOK], 0);
|
||||
Exit;
|
||||
end;
|
||||
|
||||
with TFrmLevel.Create(nil) do
|
||||
begin
|
||||
Caption := Prompt;
|
||||
FillListBox(Value);
|
||||
ShowModal;
|
||||
if (ModalResult = mrOK) then
|
||||
begin
|
||||
TDocVariantData(Value).Clear;
|
||||
TDocVariantData(Value).InitJSON(ToJSON);
|
||||
end;
|
||||
Handled := True;
|
||||
end;
|
||||
end;
|
||||
|
||||
begin
|
||||
if IdemPChar(pointer(Prompt), 'LEVEL') then
|
||||
ProcessLevel;
|
||||
end;
|
||||
|
||||
end.
|
Reference in New Issue
Block a user