📄 s2.view.ts2view.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 + -