unit FmTestMain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, StdCtrls,
ExtCtrls, ComCtrls,
CS.Database.IO.Native,
CS.Database.Main,
CS.Database.Types,
CS.SourceCode.Languages,
CS.Utils.Dates;
type
TForm1 = class(TForm)
pcMain: TPageControl;
tsSnippetEdit: TTabSheet;
edTitle: TLabeledEdit;
lblDesc: TLabel;
edDesc: TMemo;
lblLanguage: TLabel;
cbLanguage: TComboBox;
lblSnippets: TLabel;
lvSnippets: TListView;
btnAdd: TButton;
btnUpdate: TButton;
btnDelete: TButton;
lblIDDesc: TLabel;
stID: TStaticText;
btnNew: TButton;
lblSource: TLabel;
edSource: TMemo;
btnSave: TButton;
procedure btnNewClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btnAddClick(Sender: TObject);
procedure btnUpdateClick(Sender: TObject);
procedure btnDeleteClick(Sender: TObject);
procedure lvSnippetsDblClick(Sender: TObject);
procedure btnSaveClick(Sender: TObject);
private
fCurrentSnippet: ISnippet;
procedure SelectLanguage(const Lang: TSourceCodeLanguageID);
procedure UpdateEditControls;
procedure ClearEditControls;
procedure UpdateCurrentSnuppet;
procedure PopulateLV;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses
CS.Markup,
UStrUtils;
{$R *.dfm}
procedure TForm1.btnAddClick(Sender: TObject);
begin
UpdateCurrentSnuppet;
TDatabase.InsertSnippet(fCurrentSnippet);
PopulateLV;
end;
procedure TForm1.btnDeleteClick(Sender: TObject);
var
LI: TLIstItem;
begin
LI := lvSnippets.Selected;
if LI = nil then
Exit;
TDatabase.DeleteSnippet(
TDBSnippetID.Create(LI.Caption)
);
PopulateLV;
fCurrentSnippet := nil;
ClearEditControls;
end;
procedure TForm1.btnNewClick(Sender: TObject);
begin
fCurrentSnippet := TDatabase.NewSnippet;
UpdateEditControls;
end;
procedure TForm1.btnSaveClick(Sender: TObject);
begin
TDatabase.Save;
end;
procedure TForm1.btnUpdateClick(Sender: TObject);
begin
UpdateCurrentSnuppet;
TDatabase.UpdateSnippet(fCurrentSnippet);
PopulateLV;
end;
procedure TForm1.ClearEditControls;
begin
stID.Caption := '';
edTitle.Text := '';
edDesc.Text := '';
edSource.Text := '';
end;
procedure TForm1.FormCreate(Sender: TObject);
var
D: TUTCDateTime;
begin
D := TUTCDateTime.CreateFromISO8601String('2000-01-01T12:34:57Z');
edSource.Lines.Add('2000-01-01T12:34:57Z');
edSource.Lines.Add(D.ToISO8601String(False));
edSource.Lines.Add(D.ToISO8601String(True));
edSource.Lines.Add('');
D := TUTCDateTime.CreateFromISO8601String('2000-01-01T12:34:57.567Z');
edSource.Lines.Add('2000-01-01T12:34:57.567Z');
edSource.Lines.Add(D.ToISO8601String);
edSource.Lines.Add(D.ToISO8601String(True));
edSource.Lines.Add('');
edSource.Lines.Add(BoolToStr(D.IsNull, True));
D := TUTCDateTime.CreateNull;
edSource.Lines.Add(BoolToStr(D.IsNull, True));
D := TUTCDateTime.Now;
edSource.Lines.Add(D.ToISO8601String(False));
edSource.Lines.Add(D.ToISO8601String(True));
D := TUTCDateTime.Create(Now);
edSource.Lines.Add(D.ToISO8601String);
edSource.Lines.Add('');
D := TUTCDateTime.CreateNull;
edSource.Lines.Add('NULL');
edSource.Lines.Add(D.ToISO8601String);
end;
procedure TForm1.lvSnippetsDblClick(Sender: TObject);
var
LI: TLIstItem;
begin
LI := lvSnippets.Selected;
if LI = nil then
Exit;
fCurrentSnippet := TDatabase.GetSnippet(
TDBSnippetID.Create(LI.Caption)
);
UpdateEditControls;
end;
procedure TForm1.PopulateLV;
var
SnippetIDs: IDBSnippetIDList;
ID: TDBSnippetID;
Snippet: IReadOnlySnippet;
LI: TListItem;
begin
lvSnippets.Items.BeginUpdate;
try
lvSnippets.Clear;
SnippetIDs := TDatabase.GetSnippetIDs(
TDelegatedDBFilter.Create(
function (ASnippet: IReadOnlySnippet): Boolean
begin
Result := True;
end,
[spID]
)
);
for ID in SnippetIDs do
begin
Snippet := TDatabase.GetReadOnlySnippet(ID, [spTitle, spModified]);
LI := lvSnippets.Items.Add;
LI.Caption := Snippet.ID.ToString;
LI.SubItems.Add(Snippet.Title);
LI.SubItems.Add(Snippet.Modified.ToString('c'));
end;
finally
lvSnippets.Items.EndUpdate;
end;
end;
procedure TForm1.SelectLanguage(const Lang: TSourceCodeLanguageID);
var
Idx: Integer;
begin
Idx := cbLanguage.Items.IndexOf(Lang.ToString);
cbLanguage.ItemIndex := Idx;
end;
procedure TForm1.UpdateCurrentSnuppet;
begin
fCurrentSnippet.Title := StrTrim(edTitle.Text);
fCurrentSnippet.Description := TMarkup.Create(edDesc.Text, mkPlainText);
fCurrentSnippet.SourceCode := StrTrimRight(edSource.Text);
fCurrentSnippet.LanguageID := TSourceCodeLanguageID.Create(
cbLanguage.Items[cbLanguage.ItemIndex]
);
end;
procedure TForm1.UpdateEditControls;
begin
stID.Caption := fCurrentSnippet.ID.ToString;
edTitle.Text := fCurrentSnippet.Title;
edDesc.Text := fCurrentSnippet.Description.Source;
edSource.Text := fCurrentSnippet.SourceCode;
SelectLanguage(fCurrentSnippet.LanguageID);
end;
end.