summaryrefslogtreecommitdiff
path: root/extras/tiopf/demos/StringGridMediatorDemo/frm_personmaint.pas
diff options
context:
space:
mode:
Diffstat (limited to 'extras/tiopf/demos/StringGridMediatorDemo/frm_personmaint.pas')
-rw-r--r--extras/tiopf/demos/StringGridMediatorDemo/frm_personmaint.pas194
1 files changed, 194 insertions, 0 deletions
diff --git a/extras/tiopf/demos/StringGridMediatorDemo/frm_personmaint.pas b/extras/tiopf/demos/StringGridMediatorDemo/frm_personmaint.pas
new file mode 100644
index 00000000..00296e96
--- /dev/null
+++ b/extras/tiopf/demos/StringGridMediatorDemo/frm_personmaint.pas
@@ -0,0 +1,194 @@
+unit frm_personmaint;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ SysUtils, Classes, gfxbase, fpgfx, gui_edit,
+ gfx_widget, gui_form, gui_label, gui_button,
+ gui_listbox, gui_memo, gui_combobox, gui_basegrid, gui_grid,
+ gui_dialogs, gui_checkbox, gui_tree, gui_trackbar,
+ gui_progressbar, gui_radiobutton, gui_tab, gui_menu,
+ gui_panel, gui_popupcalendar, gui_gauge, model, model_view;
+
+type
+
+ TPersonMaintForm = class(TfpgForm)
+ private
+ FData: TPerson;
+ FMemento: TPersonMemento; // This form is the Caretaker
+ FmedName: TPerson_Name_TextEdit_View;
+ FmedAge: TPerson_Age_TextEdit_View;
+ procedure FormShow(Sender: TObject);
+ procedure SetData(const AValue: TPerson);
+ procedure SetupMediators;
+ public
+ {@VFD_HEAD_BEGIN: PersonMaintForm}
+ lblName1: TfpgLabel;
+ edtName: TfpgEdit;
+ lblName2: TfpgLabel;
+ edtAge: TfpgEdit;
+ btnOK: TfpgButton;
+ btnCancel: TfpgButton;
+ lblName3: TfpgLabel;
+ {@VFD_HEAD_END: PersonMaintForm}
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ procedure AfterCreate; override;
+ property Data: TPerson read FData write SetData;
+ end;
+
+
+procedure EditPerson(const AData: TPerson);
+
+{@VFD_NEWFORM_DECL}
+
+implementation
+
+procedure EditPerson(const AData: TPerson);
+var
+ frm: TPersonMaintForm;
+begin
+ frm := TPersonMaintForm.Create(nil);
+ try
+ frm.Data := AData;
+ if frm.ShowModal = 2 then // Cancel clicked
+ begin
+ // undo changes
+ AData.BeginUpdate;
+ AData.Memento := frm.FMemento;
+ AData.EndUpdate;
+ end;
+ finally
+ frm.Free;
+ end;
+end;
+
+{@VFD_NEWFORM_IMPL}
+
+procedure TPersonMaintForm.FormShow(Sender: TObject);
+begin
+ SetupMediators;
+end;
+
+procedure TPersonMaintForm.SetData(const AValue: TPerson);
+begin
+ if FData = AValue then
+ exit; //==>>
+ FData := AValue;
+ FreeAndNil(FMemento);
+ FMemento := FData.Memento;
+end;
+
+procedure TPersonMaintForm.SetupMediators;
+begin
+ FmedName := TPerson_Name_TextEdit_View.CreateCustom(edtName, FData, 'Name', 'Text');
+ FmedAge := TPerson_Age_TextEdit_View.CreateCustom(edtAge, FData, 'Age', 'Text');
+// edtName.Text := FData.Name;
+// edtAge.Text := IntToStr(FData.Age);
+
+ // Notify all observers to update themselves.
+ FData.NotifyObservers;
+end;
+
+constructor TPersonMaintForm.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ OnShow := @FormShow;
+end;
+
+destructor TPersonMaintForm.Destroy;
+begin
+ FmedName.Free;
+ FmedAge.Free;
+ inherited Destroy;
+end;
+
+procedure TPersonMaintForm.AfterCreate;
+begin
+ {@VFD_BODY_BEGIN: PersonMaintForm}
+ Name := 'PersonMaintForm';
+ SetPosition(418, 244, 232, 190);
+ WindowTitle := 'Edit Person...';
+
+ lblName1 := TfpgLabel.Create(self);
+ with lblName1 do
+ begin
+ Name := 'lblName1';
+ SetPosition(8, 8, 212, 15);
+ FontDesc := '#Label1';
+ Text := 'Name:';
+ end;
+
+ edtName := TfpgEdit.Create(self);
+ with edtName do
+ begin
+ Name := 'edtName';
+ SetPosition(8, 24, 212, 21);
+ TabOrder := 1;
+ Text := '';
+ FontDesc := '#Edit1';
+ end;
+
+ lblName2 := TfpgLabel.Create(self);
+ with lblName2 do
+ begin
+ Name := 'lblName2';
+ SetPosition(8, 56, 212, 15);
+ FontDesc := '#Label1';
+ Text := 'Age:';
+ end;
+
+ edtAge := TfpgEdit.Create(self);
+ with edtAge do
+ begin
+ Name := 'edtAge';
+ SetPosition(8, 72, 64, 21);
+ TabOrder := 3;
+ Text := '';
+ FontDesc := '#Edit1';
+ end;
+
+ btnOK := TfpgButton.Create(self);
+ with btnOK do
+ begin
+ Name := 'btnOK';
+ SetPosition(56, 159, 80, 23);
+ Anchors := [anRight,anBottom];
+ Text := 'OK';
+ FontDesc := '#Label1';
+ ImageName := '';
+ ModalResult := 1;
+ TabOrder := 4;
+ end;
+
+ btnCancel := TfpgButton.Create(self);
+ with btnCancel do
+ begin
+ Name := 'btnCancel';
+ SetPosition(140, 159, 80, 23);
+ Anchors := [anRight,anBottom];
+ Text := 'Cancel';
+ FontDesc := '#Label1';
+ ImageName := '';
+ ModalResult := 2;
+ TabOrder := 5;
+ end;
+
+ lblName3 := TfpgLabel.Create(self);
+ with lblName3 do
+ begin
+ Name := 'lblName3';
+ SetPosition(8, 108, 212, 39);
+ Anchors := [anLeft,anRight,anTop,anBottom];
+ FontDesc := '#Label1';
+ Text := 'Notice as you change the values they are updated in the MainForm''s Grid.';
+ WrapText := True;
+ end;
+
+ {@VFD_BODY_END: PersonMaintForm}
+end;
+
+
+end.