IDEIntf: started TDesignerMediator

git-svn-id: trunk@21601 -
This commit is contained in:
mattias 2009-09-07 13:43:44 +00:00
parent a1f53fabc8
commit 2291788a7c
2 changed files with 50 additions and 0 deletions

View File

@ -124,6 +124,7 @@ each control that's dropped onto the form
FDefineProperties: TAVLTree;// tree of TDefinePropertiesCacheItem
FStandardDefinePropertiesRegistered: Boolean;
FDesignerBaseClasses: TFPList; // list of TComponentClass
FDesignerMediatorClasses: TFPList;// list of TDesignerMediatorClass
function GetPropertyEditorHook: TPropertyEditorHook;
function FindDefinePropertyNode(const APersistentClassName: string
): TAVLTreeNode;
@ -217,6 +218,12 @@ each control that's dropped onto the form
function GetCurrentDesigner: TIDesigner; override;
function GetDesignerByComponent(AComponent: TComponent): TIDesigner; override;
// designer mediators
function GetDesignerMediators(Index: integer): TDesignerMediatorClass; override;
procedure RegisterDesignerMediator(MediatorClass: TDesignerMediatorClass); override;
procedure UnregisterDesignerMediator(MediatorClass: TDesignerMediatorClass); override;
function DesignerMediatorCount: integer; override;
// component editors
function GetComponentEditor(AComponent: TComponent): TBaseComponentEditor;
@ -864,6 +871,7 @@ begin
FNonFormForms := TAVLTree.Create(@CompareNonFormDesignerForms);
FSelection := TPersistentSelectionList.Create;
FDesignerBaseClasses:=TFPList.Create;
FDesignerMediatorClasses:=TFPList.Create;
for l:=Low(StandardDesignerBaseClasses) to High(StandardDesignerBaseClasses) do
FDesignerBaseClasses.Add(StandardDesignerBaseClasses[l]);
@ -888,6 +896,7 @@ begin
end;
FreeAndNil(JITFormList);
FreeAndNil(JITNonFormList);
FreeAndNil(FDesignerMediatorClasses);
FreeAndNil(FDesignerBaseClasses);
FreeAndNil(FComponentInterfaces);
FreeAndNil(FSelection);
@ -1496,6 +1505,29 @@ begin
Result:=AForm.Designer;
end;
function TCustomFormEditor.GetDesignerMediators(Index: integer
): TDesignerMediatorClass;
begin
Result:=TDesignerMediatorClass(FDesignerMediatorClasses[Index]);
end;
procedure TCustomFormEditor.RegisterDesignerMediator(
MediatorClass: TDesignerMediatorClass);
begin
FDesignerMediatorClasses.Add(MediatorClass);
end;
procedure TCustomFormEditor.UnregisterDesignerMediator(
MediatorClass: TDesignerMediatorClass);
begin
FDesignerMediatorClasses.Remove(MediatorClass);
end;
function TCustomFormEditor.DesignerMediatorCount: integer;
begin
Result:=FDesignerMediatorClasses.Count;
end;
function TCustomFormEditor.GetComponentEditor(AComponent: TComponent
): TBaseComponentEditor;
var

View File

@ -85,6 +85,17 @@ type
X,Y,W,H : Integer): TIComponentInterface; virtual; abstract;
end;
{ TDesignerMediator
To edit designer forms which do not use the LCL register a TDesignerMediator,
which will emulate the painting and handle the mouse. }
TDesignerMediator = class
public
class function FormClass: TComponentClass; virtual; abstract;
class function CreateMediator(Form: TComponent): TDesignerMediator; virtual; abstract;
end;
TDesignerMediatorClass = TDesignerMediator;
{ TAbstractFormEditor }
@ -92,6 +103,7 @@ type
protected
function GetDesignerBaseClasses(Index: integer): TComponentClass; virtual; abstract;
function GetDesigner(Index: integer): TIDesigner; virtual; abstract;
function GetDesignerMediators(Index: integer): TDesignerMediatorClass; virtual; abstract;
public
// components
function FindComponentByName(const Name: ShortString
@ -149,6 +161,12 @@ type
function CutSelectionToClipboard: Boolean; virtual; abstract;
function PasteSelectionFromClipboard(Flags: TComponentPasteSelectionFlags
): Boolean; virtual; abstract;
// mediators for non LCL forms
procedure RegisterDesignerMediator(MediatorClass: TDesignerMediatorClass); virtual; abstract;
procedure UnregisterDesignerMediator(MediatorClass: TDesignerMediatorClass); virtual; abstract;
function DesignerMediatorCount: integer; virtual; abstract;
property DesignerMediators[Index: integer]: TDesignerMediatorClass read GetDesignerMediators;
end;
type