summaryrefslogtreecommitdiff
path: root/extras
diff options
context:
space:
mode:
authorgraemeg <graemeg@ae50a9b5-8222-0410-bf8d-8a13f76226bf>2008-08-25 14:58:28 +0000
committergraemeg <graemeg@ae50a9b5-8222-0410-bf8d-8a13f76226bf>2008-08-25 14:58:28 +0000
commita88f8e00c7094d32411871d3993654f326563e3b (patch)
treea030e9a89fac72e6d01fc72a2b180a064c75b93c /extras
parent6106c289874b0205aaebbf37a78ccc23fb7ff5c4 (diff)
downloadfpGUI-a88f8e00c7094d32411871d3993654f326563e3b.tar.xz
* published OnEnter and OnExit it TfpgComboBox
* published OnEnter and OnExit it TfpgEditComboBox * published OnEnter and OnExit it TfpgTrackBar * Changed GUIFieldName in TMediatorComboBoxView to 'Text' to fix bug in mediator observing text property. * Changed GUIFieldName in TMediatorItemComboBoxView to 'FocusItem' * Added a public visible RegisterFallBackMediators procedure which can be called by the developer as a fallback for generic mediator handling. * Implemented the missing SetupGUIandObject in TMediatorComboBoxView which now makes it work. * tiOPF mediator demo: removed debug output * tiOPF mediator demo: cleaned up the Model_View unit. This removed a huge amount of code. Awesome! * tiOPF mediator demo: cleaned up the frmMain unit. This removed plenty of code. I also fixed up the package requirements or the project.
Diffstat (limited to 'extras')
-rw-r--r--extras/tiopf/demos/Common/Model.pas8
-rw-r--r--extras/tiopf/demos/Common/Model_View.pas168
-rw-r--r--extras/tiopf/demos/EditControlsDemo/editmediators.lpi8
-rw-r--r--extras/tiopf/demos/EditControlsDemo/frmMain.pas75
-rw-r--r--extras/tiopf/gui/tiMediators.pas70
5 files changed, 66 insertions, 263 deletions
diff --git a/extras/tiopf/demos/Common/Model.pas b/extras/tiopf/demos/Common/Model.pas
index 9d5dea39..7c60f58e 100644
--- a/extras/tiopf/demos/Common/Model.pas
+++ b/extras/tiopf/demos/Common/Model.pas
@@ -170,21 +170,21 @@ procedure TPerson.DoGetFieldBounds(const AFieldName: String; var MinValue,
begin
if AFieldName = 'Name' then
begin
- writeln(' Name - DoGetFieldBounds');
+// writeln(' Name - DoGetFieldBounds');
HasBounds := True;
MinValue := 1;
MaxValue := 25;
end
else if AFieldName = 'Age' then
begin
- writeln(' Age - DoGetFieldBounds');
+// writeln(' Age - DoGetFieldBounds');
HasBounds := True;
MinValue := 1;
- MaxValue := 95;
+ MaxValue := 100;
end
else
begin
- writeln(' unknown property <', AFieldName, '> - DoGetFieldBounds');
+// writeln(' unknown property <', AFieldName, '> - DoGetFieldBounds');
inherited DoGetFieldBounds(AFieldName, MinValue, MaxValue, HasBounds);
end;
end;
diff --git a/extras/tiopf/demos/Common/Model_View.pas b/extras/tiopf/demos/Common/Model_View.pas
index d50762fd..ad027534 100644
--- a/extras/tiopf/demos/Common/Model_View.pas
+++ b/extras/tiopf/demos/Common/Model_View.pas
@@ -7,109 +7,31 @@ unit Model_View;
interface
uses
- Classes, tiMediators
-// , tiListMediators
-// ,tiGenericEditMediators
-// ,tiGenericListMediators
+ Classes
+ ,tiMediators
;
type
- { TfpgEdit - Name }
- TPerson_Name_TextEdit_View = class(TMediatorEditView)
- private
- procedure OnTextChanged(Sender: TObject);
- protected
- procedure SetupGUIandObject; override;
- end;
-
- { TfpgEdit - Age }
- TPerson_Age_TextEdit_View = class(TMediatorEditView)
- private
- procedure OnTextChanged(Sender: TObject);
- protected
- procedure SetupGUIandObject; override;
- procedure DoGuiToObject; override;
- procedure DoObjectToGui; override;
- end;
-
-
- { TSpinEdit - Age }
-{
- TPerson_Age_SpinEdit_View = class(TMediatorSpinEditView)
- protected
- procedure SetupGUIandObject; override;
- end;
-}
-
- { TTrackBar - Age }
- TPerson_Age_TrackBar_Mediator = class(TMediatorTrackBarView)
- protected
- procedure SetupGUIandObject; override;
- end;
-
-
{ TMemo - Name }
TPerson_Name_Memo_Mediator = class(TMediatorMemoView)
protected
procedure SetupGUIandObject; override;
end;
-
- { TCombobox - Gender }
- TPerson_Gender_ComboBox_Mediator = class(TMediatorComboBoxView)
- protected
- procedure SetupGUIandObject; override;
- end;
-
-
- { TPersonList_ComboBox_Mediator }
-
- //TPersonList_ComboBox_Mediator = class(TComboBoxMediator)
- //protected
- //procedure SetupGUIandObject; override;
- //end;
-
-(*
- TPersonList_ListView_CompositeMediator = class(TCompositeListViewMediator)
- protected
- procedure SetupGUIandObject; override;
- end;
-*)
implementation
uses
- Model, SysUtils, tiBaseMediator, TypInfo, tiObject;
+ Model, tiBaseMediator;
procedure RegisterMediators;
begin
// Fallbacks (generic)
- gMediatorManager.RegisterMediator(TMediatorEditView,TTiObject,[tkSstring,tkAstring,tkinteger,tkFloat]);
- gMediatorManager.RegisterMediator(TMediatorCheckBoxView,TTiObject,[tkBool]);
- gMediatorManager.RegisterMediator(TMediatorComboboxView,TTiObject,[tkSString,tkAString]);
- gMediatorManager.RegisterMediator(TMediatorStaticTextView,TTiObject);
- gMediatorManager.RegisterMediator(TMediatorTrackBarView,TTiObject,[tkInteger]);
- gMediatorManager.RegisterMediator(TMediatorDynamicComboBoxView,TTiObject,[tkClass]);
- gMediatorManager.RegisterMediator(TMediatorMemoView,TTiObject,[tksString,tkAString]);
- // Specific
-// gMediatorManager.RegisterMediator(TMediatorCalendarComboView,TLeerling,'DateOfBirth');
-// gMediatorManager.RegisterMediator(TMediatorComboboxView,TLeerling,'Gender');
-end;
+ RegisterFallBackMediators;
-{ TPersonNameView }
-
-procedure TPerson_Name_TextEdit_View.OnTextChanged(Sender: TObject);
-begin
- GUIChanged;
-end;
-
-procedure TPerson_Name_TextEdit_View.SetupGUIandObject;
-begin
- inherited;
- { The Name field my only contain 25 characters max. }
- EditControl.MaxLength := 25;
- EditControl.OnChange := @OnTextChanged;
+ // Specific
+ gMediatorManager.RegisterMediator(TPerson_Name_Memo_Mediator, TPerson, 'Name');
end;
@@ -118,83 +40,7 @@ end;
procedure TPerson_Name_Memo_Mediator.SetupGUIandObject;
begin
inherited SetupGUIandObject;
- { The Name field my only contain 25 characters max. }
-// EditControl.ReadOnly := True;
- EditControl.Enabled := False;
-end;
-
-
-{ TPerson_Gender_ComboBox_Mediator }
-
-procedure TPerson_Gender_ComboBox_Mediator.SetupGUIandObject;
-begin
- inherited SetupGUIandObject;
-// EditControl.Style := csDropDownList;
-// TComboBox(EditControl).ReadOnly := True;
-end;
-
-
-{ TPersonList_ComboBox_Mediator }
-
-//procedure TPersonList_ComboBox_Mediator.SetupGUIandObject;
-//begin
- //inherited SetupGUIandObject;
-//// View.Style := csDropDownList;
-//// View.ReadOnly := True;
-//end;
-
-
-{ TPersonList_ListView_CompositeMediator }
-(*
-procedure TPersonList_ListView_CompositeMediator.SetupGUIandObject;
-begin
- inherited SetupGUIandObject;
-// View.OnCustomDrawItem := ListViewCustomDrawItem;
-end;
-*)
-
-{ TPerson_Age_SpinEdit_View }
-{
-procedure TPerson_Age_SpinEdit_View.SetupGUIandObject;
-begin
- inherited SetupGUIandObject;
- EditControl.MaxValue := 100;
-end;
-}
-{ TPerson_Age_TrackBar_Mediator }
-
-procedure TPerson_Age_TrackBar_Mediator.SetupGUIandObject;
-begin
- inherited SetupGUIandObject;
- EditControl.Max := 100;
-end;
-
-{ TPerson_Age_TextEdit_View }
-
-procedure TPerson_Age_TextEdit_View.OnTextChanged(Sender: TObject);
-begin
- GUIChanged;
-end;
-
-procedure TPerson_Age_TextEdit_View.SetupGUIandObject;
-begin
- inherited SetupGUIandObject;
- EditControl.MaxLength := 3;
- EditControl.OnChange := @OnTextChanged;
-end;
-
-procedure TPerson_Age_TextEdit_View.DoGuiToObject;
-begin
- inherited DoGuiToObject;
- // manual example without RTTI
-// TPerson(Subject).Age := StrToInt(EditControl.Text);
-end;
-
-procedure TPerson_Age_TextEdit_View.DoObjectToGui;
-begin
- inherited DoObjectToGui;
- // manual example without RTTI
-// EditControl.Text := IntToStr(TPerson(Subject).Age);
+ EditControl.Enabled := False; // fpGUI doesn't have a ReadOnly property yet
end;
diff --git a/extras/tiopf/demos/EditControlsDemo/editmediators.lpi b/extras/tiopf/demos/EditControlsDemo/editmediators.lpi
index 55dc6b9c..4b63bdd7 100644
--- a/extras/tiopf/demos/EditControlsDemo/editmediators.lpi
+++ b/extras/tiopf/demos/EditControlsDemo/editmediators.lpi
@@ -27,15 +27,11 @@
<LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
</local>
</RunParams>
- <RequiredPackages Count="2">
+ <RequiredPackages Count="1">
<Item1>
- <PackageName Value="fpgui_package"/>
- <MinVersion Minor="5" Valid="True"/>
- </Item1>
- <Item2>
<PackageName Value="tiOPFfpGUI"/>
<MinVersion Major="2" Release="3" Valid="True"/>
- </Item2>
+ </Item1>
</RequiredPackages>
<Units Count="5">
<Unit0>
diff --git a/extras/tiopf/demos/EditControlsDemo/frmMain.pas b/extras/tiopf/demos/EditControlsDemo/frmMain.pas
index d6e416de..7e85f4a2 100644
--- a/extras/tiopf/demos/EditControlsDemo/frmMain.pas
+++ b/extras/tiopf/demos/EditControlsDemo/frmMain.pas
@@ -17,7 +17,6 @@ type
Label1: TfpgLabel;
Label2: TfpgLabel;
edtName: TfpgEdit;
-// edtAge: TSpinEdit;
AgeTrackBar: TfpgTrackBar;
memMemo: TfpgMemo;
cbGender: TfpgComboBox;
@@ -27,23 +26,12 @@ type
FPerson: TPerson;
{ Form Mediator }
FMediator: TFormMediator;
- { Edit mediators }
-// FEditNameMediator: TMediatorEditView;
-//// FSpinEditAgeMediator: TMediatorSpinEditView;
-// FTrackBarAgeMediator: TMediatorTrackBarView;
-// FMemoNameMediator: TMediatorMemoView;
-// FComboBoxGenderMediator: TMediatorComboBoxView;
procedure btnCloseClick(Sender: TObject);
procedure btnShowModelClick(Sender: TObject);
procedure btnViaCodeClick(Sender: TObject);
- procedure edtNameChange(Sender: TObject);
- procedure edtAgeChange(Sender: TObject);
- procedure AgeTrackBarChange(Sender: TObject; APosition: integer);
- procedure cbGenderChange(Sender: TObject);
procedure InitializeComponents;
procedure SetupMediators;
- procedure SetupEventHandlers;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
@@ -76,27 +64,6 @@ begin
FPerson.Gender := genFemale;
end;
-procedure TMainForm.edtNameChange(Sender: TObject);
-begin
- //FEditNameMediator.GUIChanged;
-end;
-
-procedure TMainForm.edtAgeChange(Sender: TObject);
-begin
-// FSpinEditAgeMediator.GUIChanged;
-end;
-
-procedure TMainForm.AgeTrackBarChange(Sender: TObject; APosition: integer);
-begin
- //FTrackBarAgeMediator.GUIChanged;
-end;
-
-procedure TMainForm.cbGenderChange(Sender: TObject);
-begin
- //writeln('cbGenderChange');
- //FComboBoxGenderMediator.GUIChanged;
-end;
-
procedure TMainForm.InitializeComponents;
begin
Label1 := TfpgLabel.Create(self);
@@ -177,17 +144,6 @@ begin
TabOrder := 3;
end;
-{
- object edtAge: TSpinEdit
- Left = 64
- Height = 22
- Top = 40
- Width = 100
- MaxValue = 0
- TabOrder = 4
- end
-}
-
AgeTrackBar := TfpgTrackBar.Create(self);
with AgeTrackBar do
begin
@@ -195,10 +151,7 @@ begin
Height := 41;
Top := 72;
Width := 150;
-// ScrollStep := 10;
-// Frequency := 10;
Max := 100;
-// ScalePos := trTop;
ShowPosition := True;
TabOrder := 5;
end;
@@ -219,9 +172,6 @@ begin
Left := 264;
Height := 21;
Top := 96;
-// Width := 145;
-// AutoCompleteText = [cbactEndOfLineComplete, cbactSearchAscending];
-// MaxLength := 0;
TabOrder := 7;
end;
end;
@@ -229,16 +179,12 @@ end;
procedure TMainForm.SetupMediators;
begin
{
- FEditNameMediator := TPerson_Name_TextEdit_View.CreateCustom(edtName, FPerson, 'Name', 'Text');
-// FSpinEditAgeMediator := TPerson_Age_SpinEdit_View.CreateCustom(edtAge, FPerson, 'Age', 'Value');
- FTrackBarAgeMediator := TPerson_Age_TrackBar_Mediator.CreateCustom(AgeTrackBar, FPerson, 'Age', 'Position');
- FMemoNameMediator := TPerson_Name_Memo_Mediator.CreateCustom(memMemo, FPerson, 'Name', '');
FComboBoxGenderMediator := TPerson_Gender_ComboBox_Mediator.CreateCustom(cbGender, FPerson, 'GenderGUI', 'Text');
}
if not Assigned(FMediator) then
begin
FMediator := TFormMediator.Create(self);
- FMediator.Name := 'DemoMediator';
+ FMediator.Name := 'DemoFormMediator';
FMediator.AddProperty('Name', edtName);
FMediator.AddProperty('Age', AgeTrackBar);
FMediator.AddProperty('Name', memMemo);
@@ -248,15 +194,6 @@ begin
FMediator.Active := True;
end;
-procedure TMainForm.SetupEventHandlers;
-begin
- { Setup generic OnChange event for all GUI controls. }
- edtName.OnChange := @edtNameChange;
-// edtAge.OnChange := @edtAgeChange;
- AgeTrackBar.OnChange := @AgeTrackBarChange;
- cbGender.OnChange := @cbGenderChange;
-end;
-
constructor TMainForm.Create(AOwner: TComponent);
var
i: TGender;
@@ -279,13 +216,7 @@ end;
destructor TMainForm.Destroy;
begin
- { free mediators - they will detach themselves }
-// FEditNameMediator.Free;
-//// FSpinEditAgeMediator.Free;
-// FTrackBarAgeMediator.Free;
-// FMemoNameMediator.Free;
-// FComboBoxGenderMediator.Free;
-
+ // TFormMediator (FMediator) get free'd automatically because it's a TComponent
FPerson.Free;
inherited Destroy;
end;
@@ -296,7 +227,7 @@ begin
{ The only trick here is to not let the OnChange events fire
before the mediators are not set up!! }
SetupMediators;
- SetupEventHandlers;
+
// This will cause all components to update at once
FPerson.NotifyObservers;
end;
diff --git a/extras/tiopf/gui/tiMediators.pas b/extras/tiopf/gui/tiMediators.pas
index 5c7ccb3a..6881b58c 100644
--- a/extras/tiopf/gui/tiMediators.pas
+++ b/extras/tiopf/gui/tiMediators.pas
@@ -97,6 +97,7 @@ type
end;
}
+
{ Base class to handle TfpgTrackBar controls }
TMediatorTrackBarView = class(TMediatorView)
private
@@ -118,22 +119,25 @@ type
private
FEditControl: TfpgComboBox;
function GetGUIControl: TComponent; override;
- procedure SetGUIControl(const AValue: TComponent);override;
+ procedure SetGUIControl(const AValue: TComponent); override;
protected
+ procedure SetupGUIandObject; override;
procedure UpdateGuiValidStatus(pErrors: TtiObjectErrors); override;
procedure DoObjectToGui; override;
public
- Constructor Create; override;
+ constructor Create; override;
property EditControl: TfpgComboBox read FEditControl write FEditControl;
class function ComponentClass: TClass; override;
end;
- // Sets ItemIndex based on integer property
+ { Sets ItemIndex based on integer property }
TMediatorItemComboBoxView = class(TMediatorComboBoxView)
- Protected
- Procedure DoGUIToObject; override;
- Procedure DoObjectToGUI; override;
+ protected
+ Procedure DoGUIToObject; override;
+ Procedure DoObjectToGUI; override;
+ public
+ constructor Create; override;
end;
@@ -182,6 +186,10 @@ type
end;
+// Registering generic mediators which can handle most cases by default.
+procedure RegisterFallBackMediators;
+
+
implementation
uses
SysUtils
@@ -196,16 +204,27 @@ const
cErrorListHasNotBeenAssigned = 'List has not been assigned';
+procedure RegisterFallBackMediators;
+begin
+ gMediatorManager.RegisterMediator(TMediatorEditView, TtiObject, [tkSstring,tkAstring,tkinteger,tkFloat]);
+ gMediatorManager.RegisterMediator(TMediatorCheckBoxView, TtiObject, [tkBool]);
+ gMediatorManager.RegisterMediator(TMediatorComboboxView, TtiObject, [tkSString,tkAString]);
+ gMediatorManager.RegisterMediator(TMediatorStaticTextView, TtiObject);
+ gMediatorManager.RegisterMediator(TMediatorTrackBarView, TtiObject, [tkInteger]);
+ gMediatorManager.RegisterMediator(TMediatorDynamicComboBoxView, TtiObject, [tkClass]);
+ gMediatorManager.RegisterMediator(TMediatorMemoView, TtiObject, [tksString,tkAString]);
+end;
+
{ TMediatorEditView }
function TMediatorEditView.GetGUIControl: TComponent;
begin
- Result:=FeditControl;
+ Result := FEditControl;
end;
procedure TMediatorEditView.SetGUIControl(const AValue: TComponent);
begin
- FEditControl:=AValue as TfpgEdit;
+ FEditControl := AValue as TfpgEdit;
Inherited;
end;
@@ -347,18 +366,17 @@ end;
function TMediatorTrackBarView.GetGUIControl: TComponent;
begin
- Result:=FEditControl;
+ Result := FEditControl;
end;
procedure TMediatorTrackBarView.SetGUIControl(const AValue: TComponent);
begin
- FEditControl:=AValue as TfpgTrackBar;
- Inherited;
+ FEditControl := AValue as TfpgTrackBar;
+ inherited;
end;
procedure TMediatorTrackBarView.DoTrackBarChanged(Sender: TObject; APosition: integer);
begin
-// writeln(' executing - DoTrackBarChanged');
GUIChanged;
end;
@@ -373,12 +391,9 @@ begin
FEditControl.Max := Ma;
end;
if ObjectUpdateMoment in [ouOnChange,ouCustom] then
- begin
-// writeln(' Trackbar: setting OnChange event handler');
- FEditControl.OnChange := @DoTrackBarChanged;
- end;
-// else
-// FeditControl.OnExit := @DoOnChange;
+ FEditControl.OnChange := @DoTrackBarChanged
+ else
+ FeditControl.OnExit := @DoOnChange;
end;
constructor TMediatorTrackBarView.Create;
@@ -411,6 +426,15 @@ begin
inherited;
end;
+procedure TMediatorComboBoxView.SetupGUIandObject;
+begin
+ inherited SetupGUIandObject;
+ if ObjectUpdateMoment in [ouOnChange,ouCustom] then
+ FEditControl.OnChange := @DoOnChange
+ else
+ FEditControl.OnExit := @DoOnChange;
+end;
+
procedure TMediatorComboBoxView.UpdateGuiValidStatus(pErrors: TtiObjectErrors);
var
oError: TtiObjectError;
@@ -433,7 +457,7 @@ end;
constructor TMediatorComboBoxView.Create;
begin
inherited Create;
- GuiFieldName:='FocusItem';
+ GuiFieldName := 'Text'; //'FocusItem';
end;
procedure TMediatorComboBoxView.DoObjectToGui;
@@ -710,7 +734,13 @@ end;
procedure TMediatorItemComboBoxView.DoObjectToGUI;
begin
- EditCOntrol.FocusItem:=GetOrdProp(Subject,FieldName);
+ EditCOntrol.FocusItem := GetOrdProp(Subject,FieldName);
+end;
+
+constructor TMediatorItemComboBoxView.Create;
+begin
+ inherited Create;
+ GuiFieldName := 'FocusItem';
end;
end.