unit uGUIBase; interface uses Forms, Controls, Contnrs, Classes; type TOnGetModifiedEvent = procedure (Sender: TObject; var Modified: Boolean) of object; TOnViewModifiedEvent = procedure (Sender: TObject) of object; IEmbeddedable = interface(IInterface) ['{A1668B17-B355-4688-A78A-B30AE3C8C81E}'] procedure Release; procedure ShowEmbedded; overload; procedure ShowEmbedded(const AParent : TWinControl); overload; end; IModificable = interface(IEmbeddedable) ['{7F75A327-4ACC-4E4A-8B3D-21C1241DAFBF}'] function GetModified: Boolean; procedure SetModified(const Value : Boolean); property Modified: Boolean read GetModified write SetModified; function GetOnGetModified: TOnGetModifiedEvent; procedure SetOnGetModified(const Value : TOnGetModifiedEvent); property OnGetModified: TOnGetModifiedEvent read GetOnGetModified write SetOnGetModified; function GetOnViewModified: TOnViewModifiedEvent; procedure SetOnViewModified(const Value : TOnViewModifiedEvent); property OnViewModified: TOnViewModifiedEvent read GetOnViewModified write SetOnViewModified; end; IReadOnly = interface(IModificable) ['{2549ECF9-270F-4F3C-9852-E488C518F590}'] function GetReadOnly: Boolean; procedure SetReadOnly(Value: Boolean); property ReadOnly: Boolean read GetReadOnly write SetReadOnly; end; IValidable = interface(IReadOnly) ['{A2562A5E-E3B2-4C1B-B8FE-13A410D8B3DB}'] function GetValid: Boolean; property Valid: Boolean read GetValid; end; IInstanceAware = interface(IValidable) ['{B6B2676A-1D8E-4597-ADDB-43734508E6F5}'] function GetInstance: TObject; function GetInstanceID: Integer; procedure SetInstanceID(Value: Integer); property InstanceID: Integer read GetInstanceID write SetInstanceID; end; ICustomEditor = interface(IInstanceAware) ['{07A3AB52-B2B0-4DE3-B470-379834BBE7DB}'] end; ICustomView = interface(IValidable) ['{98192DE2-19C5-4DA5-B4F4-F2B3782DB6E2}'] function CanFocus: Boolean; function Focused: Boolean; procedure SetFocus; procedure Update; end; IHostForm = interface(IInterface) ['{2091401E-1F9C-4F05-8574-E9E0532780D1}'] function GetWorkPanel: TWinControl; property WorkPanel: TWinControl read GetWorkPanel; procedure OnWorkPanelChanged(AEditor : ICustomEditor); procedure ShowEmbedded(AEditor : ICustomEditor); end; IGUIManager = interface(IInterface) ['{D0A5D2CC-36E1-4C61-8D3B-B6D00EBA3278}'] function FindInstance(const IID: TGUID): ICustomEditor; function GetActiveInstance: ICustomEditor; function GetActiveInstanceIndex: Integer; function GetInstance(Index : Integer): ICustomEditor; function GetWorkPanel: TWinControl; function RegisterInstance(AInstance : ICustomEditor): Boolean; procedure ReleaseInstance(AnInstance : ICustomEditor); procedure SetActiveInstance(Value: ICustomEditor); procedure SetActiveInstanceIndex(Value: Integer); procedure SetWorkPanel(const Value: TWinControl); property ActiveInstance: ICustomEditor read GetActiveInstance write SetActiveInstance; property ActiveInstanceIndex: Integer read GetActiveInstanceIndex write SetActiveInstanceIndex; property Instances[Index : Integer]: ICustomEditor read GetInstance; property WorkPanel: TWinControl read GetWorkPanel write SetWorkPanel; end; IObservable = interface; TObserverEvent = procedure (AObject : IObservable) of object; IObserver = interface(IInterface) ['{79175C66-8435-4F2F-A3E0-A53A24554A0E}'] function GetOnNotifyObserver: TObserverEvent; function GetOnObserverAttached: TObserverEvent; function GetOnObserverDettached: TObserverEvent; procedure NotifyObserver(const AObject: IObservable); procedure ObserverAttached(AObject : IObservable); procedure ObserverDettached(AObject : IObservable); procedure SetOnNotifyObserver(AValue: TObserverEvent); procedure SetOnObserverAttached(AValue: TObserverEvent); procedure SetOnObserverDettached(AValue: TObserverEvent); property OnNotifyObserver: TObserverEvent read GetOnNotifyObserver write SetOnNotifyObserver; property OnObserverAttached: TObserverEvent read GetOnObserverAttached write SetOnObserverAttached; property OnObserverDettached: TObserverEvent read GetOnObserverDettached write SetOnObserverDettached; end; IObservable = interface(IInterface) ['{1FF0F081-CBBA-4728-8689-D6F506652E80}'] procedure AddObserver(const AObserver: IObserver); procedure RemoveObserver(const AObserver: IObserver); end; implementation end.