⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 s2.view.ts2view.pas

📁 轉載的程序應用框架
💻 PAS
字号:
unit S2.View.TS2View;

interface

uses
  Classes, S2.Core.IS2Object, S2.Core.IS2Security, S2.Form.TS2Frame, S2.Model.TS2Model,
  S2.View.IS2View, S2.Tools.IS2Time, S2.Core.IS2SystemObject, S2.Model.TS2SystemObject, S2.Tools.TS2Object,
  S2.Tools.TS2Time;

type
  TS2View = class;

  TS2ViewClass = class of TS2View;

  IS2ViewFactory = interface
    function GetItemsView(ModelClass: TS2ModelClass): TS2View;
    function GetReportView(ModelClass: TS2ModelClass): TS2View;
    function GetChartView(ModelClass: TS2ModelClass): TS2View;
    function GetItemView(ModelClass: TS2ModelClass): TS2View;
  end;

  IS2ViewsController = interface
    function CreateView(ViewClass: TS2ViewClass): TS2View;
    function GetActiveView: TS2View;
    function GetView(ViewClass: TS2ViewClass): TS2View;
    function GetViewCount: Integer;
    procedure DeleteAllView();
    procedure RefreshAllView();
  end;

  TS2ViewsControllerDynArray = array of IS2ViewsController;

  TS2View = class(TS2Frame, IS2Security, IS2View, IS2Object)
  private
    _Model: TS2Model;
    _SystemObject: TS2SystemObject;
    _CreateTime: TS2Time;
  private
    procedure FreeModel;
  protected
    function GetController: TS2ViewsControllerDynArray;
    function GetControllerCount: Integer;
    function GetSystemObject: TS2SystemObject; virtual;
    procedure FreeView; virtual;
    procedure InitView; virtual;
  public  //  S2.Core.IS2Security
    function GetCreateTime: IS2Time; virtual;
  public  //  S2.Core.IS2Object
    function GetObjectName: string; virtual;
    function ToString: string; virtual;
    function IsActive: Boolean; virtual;
    function IsValid: Boolean; virtual;
  public  //  S2.View.IS2View
    function GetCaption: string; virtual;
    function GetModel: TS2Model; virtual;
    function IsReadOnly: Boolean; virtual;
    procedure CloseView; virtual;
    procedure OpenView(O: TS2Object); virtual;
    procedure RefreshView; virtual;
    procedure SetModel(Model: TS2Model); overload; virtual;
  private
    procedure SetModel(Model: TObject); overload; virtual;
  public
    constructor Create(Owner: TComponent; SystemObject: TS2SystemObject); reintroduce;
    destructor Destroy; override;
  end;

  TS2ViewDynArray = array of TS2View;

implementation

uses
  SysUtils, 
  S2.Error.S2CallException, S2.Error.S2InitException, S2.Error.S2AbstractException,
  S2.Controller.TS2ViewsController, S2.Error.S2Exception, S2.Model.TS2ServerDataModelFactory;

{$R *.dfm}

{ TS2View }

procedure TS2View.CloseView;
begin

end;

constructor TS2View.Create(Owner: TComponent; SystemObject: TS2SystemObject);
begin
  inherited Create(Owner);

  _Model := nil;
  _SystemObject := SystemObject;
  _CreateTime := TS2Time.Create;
  Name := GetObjectName;

  try
    InitView;
  except
    on E: Exception do
      raise S2InitException.Create(ClassName, E.Message);
  end;
end;

destructor TS2View.Destroy;
begin
  CloseView;
  FreeModel;
  FreeView;
  if Assigned(_CreateTime) then FreeAndNil(_CreateTime);
  inherited;
end;

procedure TS2View.FreeModel;
var
  Index: Integer;
  ServerDataModelFactory: TS2ServerDataModelFactory;
begin
  for Index := 0 to ComponentCount - 1 do
    if Components[Index] is TS2Model then
    begin
      ServerDataModelFactory := GetGlobalSystemObject.GetServerDataModelFactory as TS2ServerDataModelFactory;
      ServerDataModelFactory.FreeModel(TS2ModelClass(_Model));
    end;
end;

procedure TS2View.FreeView;
var
  I: Integer;
  View: TS2View;
begin
	for I := 0 to ComponentCount - 1 do
  	if Components[I] is TS2View then
    begin
    	View := (Components[I] as TS2View);
      FreeAndNil(View);
    end;
end;

function TS2View.GetCaption: string;
begin
  raise S2AbstractException.Create(ClassName, 'GetCaption');
end;

function TS2View.GetController: TS2ViewsControllerDynArray;
var
  I: Integer;
begin
  SetLength(Result, 0);
  for I := 0 to ComponentCount - 1 do
    if Components[I] is TS2ViewsController then
    begin
      SetLength(Result, Length(Result) + 1);
      Result[High(Result)] := Components[I] as TS2ViewsController;
    end;
end;

function TS2View.GetControllerCount: Integer;
var
  Controllers: TS2ViewsControllerDynArray;
begin
  Controllers := GetController;
  Result := Length(Controllers);
  SetLength(Controllers, 0);
end;

function TS2View.GetCreateTime: IS2Time;
begin
  Result := _CreateTime;
end;

function TS2View.GetModel: TS2Model;
begin
  Result := _Model;
end;

function TS2View.GetObjectName: string;
begin
  Result := ClassName;
end;

function TS2View.GetSystemObject: TS2SystemObject;
begin
  Result := GetGlobalSystemObject;
end;

procedure TS2View.InitView;
begin

end;

function TS2View.IsActive: Boolean;
begin
  Result := GetModel.IsActive;
end;

function TS2View.IsReadOnly: Boolean;
var
  I: Integer;
begin
  Result := True;
  Result := GetModel.IsReadOnly;
  I := 0;
  while (I < ComponentCount) and Result do
  begin
    if Components[I] is TS2View then
      Result := Result and (Components[I] as TS2View).IsReadOnly;
    if not Result then Exit;
    Inc(I);
  end;
end;

function TS2View.IsValid: Boolean;
begin
  Result := GetModel.IsValid;
end;

procedure TS2View.OpenView(O: TS2Object);
begin
  GetModel.OpenModel(O);  
end;

procedure TS2View.RefreshView;
var
  I: Integer;
begin
  for I := 0 to ComponentCount - 1 do
    if Components[I] is TS2View then
      (Components[I] as TS2View).RefreshView;
end;

procedure TS2View.SetModel(Model: TS2Model);
begin
  _Model := Model;
end;

procedure TS2View.SetModel(Model: TObject);
begin
  if Model is TS2Model then
    SetModel(Model as TS2Model)
  else
    raise S2Exception.Create(ClassName, 'SetModel', 'Model的类型错误!');
end;

function TS2View.ToString: string;
begin
  Result := GetCaption;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -