| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- unit ViewManager;
- interface
- uses
- SysUtils, InterfaceUI, Classes, Forms;
- type
- TViewManager = class(TInterfacedObject, IViewManager)
- private
- FClasses: TList;
- FSingleViews: TStringList;
- FOpenViews: TStringList;
- public
- constructor Create;
- destructor Destroy; override;
- class function Current: TViewManager;
- function GetView(AClassName: string): IUIForm;
- function GetSingleView(AClassName: string): IUIForm;
- function GetIDView(AClassName, AFormID: string): IUIIDForm;
- function FreeIDView(AClassName, AFormID: string): IUIIDForm;
- procedure RegisterClass(AClass: TFormClass);
- end;
- implementation
- var
- FViewManager: TViewManager;
- { TViewManager }
- constructor TViewManager.Create;
- begin
- FClasses := TList.Create;
- FSingleViews := TStringList.Create;
- FOpenViews := TStringList.Create;
- inherited;
- end;
- class function TViewManager.Current: TViewManager;
- begin
- if FViewManager = nil then
- FViewManager := TViewManager.Create;
- Result := FViewManager;
- end;
- destructor TViewManager.Destroy;
- begin
- FreeAndNil(FClasses);
- FreeAndNil(FOpenViews);
- FreeAndNil(FSingleViews);
- inherited;
- end;
- function TViewManager.FreeIDView(AClassName, AFormID: string): IUIIDForm;
- var
- i: Integer;
- begin
- i := FOpenViews.IndexOf(AClassName + AFormID);
- if i > -1 then
- FOpenViews.Delete(i);
- end;
- function TViewManager.GetIDView(AClassName, AFormID: string): IUIIDForm;
- var
- i: Integer;
- AClass: TFormClass;
- AForm: TForm;
- ColorForm: IChangeUIColor;
- begin
- i := FOpenViews.IndexOf(AClassName + AFormID);
- if i < 0 then
- begin
- for i := 0 to FClasses.Count - 1 do
- begin
- if TFormClass(FClasses[i]).ClassName = AClassName then
- begin
- AClass := TFormClass(FClasses[i]);
- AForm := AClass.Create(Application);
- if not AForm.GetInterface(IUIIDForm, Result) then
- begin
- Result := nil;
- Exit;
- end;
- Result.SetAutoFree(True);
- Result.SetFormID(AFormID);
- // if AForm.GetInterface(IChangeUIColor, ColorForm) then
- // ColorForm.ChangeUIColor(MainForm.FormColor);
- FOpenViews.AddObject(AClassName, AForm);
- Break;
- end;
- end;
- end
- else
- FOpenViews.Objects[i].GetInterface(IUIIDForm, Result);
- end;
- function TViewManager.GetSingleView(AClassName: string): IUIForm;
- var
- i: Integer;
- AClass: TFormClass;
- AForm: TForm;
- ColorForm: IChangeUIColor;
- begin
- i := FSingleViews.IndexOf(AClassName);
- if i < 0 then
- begin
- for i := 0 to FClasses.Count - 1 do
- begin
- if TCustomFormClass(FClasses[i]).ClassName = AClassName then
- begin
- AClass := TFormClass(FClasses[i]);
- AForm := AClass.Create(Application);
- if not AForm.GetInterface(IUIForm, Result) then
- begin
- Result := nil;
- Exit;
- end;
- Result.SetAutoFree(False);
- // if AForm.GetInterface(IChangeUIColor, ColorForm) then
- // ColorForm.ChangeUIColor(MainForm.FormColor);
- FSingleViews.AddObject(AClassName, AForm);
- Break;
- end;
- end;
- end
- else
- FSingleViews.Objects[i].GetInterface(IUIForm, Result);
- end;
- function TViewManager.GetView(AClassName: string): IUIForm;
- var
- i: Integer;
- AClass: TFormClass;
- AForm: TForm;
- // ColorForm: IChangeUIColor;
- begin
- for i := 0 to FClasses.Count - 1 do
- begin
- if TCustomFormClass(FClasses[i]).ClassName = AClassName then
- begin
- AClass := TFormClass(FClasses[i]);
- AForm := AClass.Create(Application);
- // if AForm.GetInterface(IChangeUIColor, ColorForm) then
- // ColorForm.ChangeUIColor(MainForm.FormColor);
- if not AForm.GetInterface(IUIForm, Result) then
- begin
- Result := nil;
- AForm.Free;
- end;
- // else
- // begin
- // Result.SetAutoFree(True);
- // FOpenViews.AddObject(IntToStr(AForm.Handle), AForm);
- // end;
- // Break;
- end;
- end;
- end;
- procedure TViewManager.RegisterClass(AClass: TFormClass);
- var
- i: Integer;
- begin
- i := FClasses.IndexOf(AClass);
- if i < 0 then
- FClasses.Add(AClass);
- end;
- initialization
- finalization
- // if FViewManager <> nil then
- // FreeAndNil(FViewManager);
-
- end.
|