По мотивам - И ещё про "примеси". Только код
https://bitbucket.org/ingword/mindstream/src/b43af5d8e14b393491618198fbfd92dab64dd087/msDiagramms.pas?at=MS-7_Lulin_Upgrade
Было:
Стало:
https://bitbucket.org/ingword/mindstream/src/4a018ef0ba8d5c7ae8f8ee8bbde32c4803702337/msInvalidators.pas?at=master
https://bitbucket.org/ingword/mindstream/src/4a018ef0ba8d5c7ae8f8ee8bbde32c4803702337/msDiagramms.pas?at=master
msIvalidator.mixin.pas:
msDiagramms:
https://bitbucket.org/ingword/mindstream/src/b43af5d8e14b393491618198fbfd92dab64dd087/msDiagramms.pas?at=MS-7_Lulin_Upgrade
Было:
unit msDiagramms;
interface
uses
msDiagramm,
System.Types,
FMX.Objects,
System.Classes,
msCoreObjects,
msWatchedObjectInstance,
msInterfacedNonRefcounted,
msShape,
msCustomDiagramms,
Data.DBXJSONReflect
;
type
TmsDiagramms = class(TmsCustomDiagramms, ImsIvalidator)
private
[JSONMarshalled(True)]
f_CurrentDiagramm : Integer;
[JSONMarshalled(False)]
f_Image: TPaintBox;
function pm_GetCurrentDiagramm: TmsDiagramm;
procedure InvalidateDiagramm(aDiagramm: TmsDiagramm);
public
constructor Create(anImage: TPaintBox; aList: TStrings);
procedure AfterConstruction; override;
procedure ProcessClick(const aStart: TPointF);
procedure Clear;
procedure SelectShape(aList: TStrings; anIndex: Integer);
procedure AllowedShapesToList(aList: TStrings);
procedure AddDiagramm(aList: TStrings);
function CurrentDiagrammIndex: Integer;
procedure SelectDiagramm(anIndex: Integer);
function CurrentShapeClassIndex: Integer;
procedure Serialize;
procedure DeSerialize;
property CurrentDiagramm: TmsDiagramm read pm_GetCurrentDiagramm;
procedure Assign(anOther: TmsDiagramms);
destructor Destroy; override;
end;//TmsDiagramms
implementation
uses
System.SysUtils,
FMX.Graphics,
System.UITypes,
msDiagrammsMarshal,
msRegisteredShapes,
msInvalidators
;
// TmsDiagramms
constructor TmsDiagramms.Create(anImage: TPaintBox; aList: TStrings);
begin
inherited Create;
f_Image := anImage;
AddDiagramm(aList);
end;
procedure TmsDiagramms.AfterConstruction;
begin
TmsInvalidators.Subscribe(Self);
inherited;
end;
destructor TmsDiagramms.Destroy;
begin
TmsInvalidators.UnSubscribe(Self);
inherited;
end;
function TmsDiagramms.pm_GetCurrentDiagramm: TmsDiagramm;
begin
Result := Items[f_CurrentDiagramm].toObject As TmsDiagramm;
end;
procedure TmsDiagramms.InvalidateDiagramm(aDiagramm: TmsDiagramm);
var
l_Canvas : TCanvas;
begin
if (f_Image <> nil) then
if (aDiagramm = CurrentDiagramm) then
f_Image.Repaint;
end;
procedure TmsDiagramms.AddDiagramm(aList: TStrings);
var
l_D : ImsDiagramm;
begin
l_D := TmsDiagramm.Create('Диаграмма №' + IntToStr(Items.Count + 1));
Items.Add(l_D);
f_CurrentDiagramm := Items.IndexOf(l_D);
if (aList <> nil) then
aList.Add(l_D.Name);
end;
function TmsDiagramms.CurrentDiagrammIndex: Integer;
begin
Result := f_CurrentDiagramm;
end;
procedure TmsDiagramms.SelectDiagramm(anIndex: Integer);
begin
if (anIndex < 0) OR (anIndex >= Items.Count) then
Exit;
f_CurrentDiagramm := anIndex;
CurrentDiagramm.Invalidate;
end;
const
c_FileName = 'All.json';
procedure TmsDiagramms.DeSerialize;
begin
TmsDiagrammsMarshal.DeSerialize(c_FileName, self);
end;
procedure TmsDiagramms.Assign(anOther: TmsDiagramms);
var
l_D : ImsDiagramm;
begin
inherited Assign(anOther);
for l_D in Items do
begin
(l_D.toObject As TmsDiagramm).CurrentClass := TmsRegisteredShapes.Instance.First;
end;//for l_D
Self.f_CurrentDiagramm := anOther.CurrentDiagrammIndex;
CurrentDiagramm.Invalidate;
end;
procedure TmsDiagramms.ProcessClick(const aStart: TPointF);
begin
CurrentDiagramm.ProcessClick(aStart);
end;
procedure TmsDiagramms.Clear;
begin
CurrentDiagramm.Clear;
end;
procedure TmsDiagramms.SelectShape(aList: TStrings; anIndex: Integer);
begin
CurrentDiagramm.SelectShape(aList, anIndex);
end;
procedure TmsDiagramms.Serialize;
begin
TmsDiagrammsMarshal.Serialize(c_FileName, self);
end;
procedure TmsDiagramms.AllowedShapesToList(aList: TStrings);
begin
CurrentDiagramm.AllowedShapesToList(aList);
end;
function TmsDiagramms.CurrentShapeClassIndex: Integer;
begin
Result := CurrentDiagramm.CurrentShapeClassIndex;
end;
end.
Стало:
https://bitbucket.org/ingword/mindstream/src/4a018ef0ba8d5c7ae8f8ee8bbde32c4803702337/msInvalidators.pas?at=master
https://bitbucket.org/ingword/mindstream/src/4a018ef0ba8d5c7ae8f8ee8bbde32c4803702337/msDiagramms.pas?at=master
msIvalidator.mixin.pas:
{$IfNDef TmsIvalidator_intf}
// interface
{$Define TmsIvalidator_intf}
// uses
msDiagramm
{$Else TmsIvalidator_intf}
{$IfNDef TmsMixIn_intf}
// http://programmingmindstream.blogspot.ru/2014/12/generic-2.html
TmsIvalidator = class(TmsIvalidatorParent, ImsIvalidator)
private
procedure InvalidateDiagramm(aDiagramm: TmsDiagramm);
protected
procedure DoInvalidateDiagramm(aDiagramm: TmsDiagramm); virtual; abstract;
public
procedure AfterConstruction; override;
destructor Destroy; override;
end;//TmsIvalidator
{$Define TmsMixIn_intf}
{$Else TmsMixIn_intf}
// implementation
{$IfNDef TmsIvalidator_impl}
// uses
{$Define TmsIvalidator_impl}
{$Else TmsIvalidator_impl}
// TmsIvalidator
procedure TmsIvalidator.InvalidateDiagramm(aDiagramm: TmsDiagramm);
begin
DoInvalidateDiagramm(aDiagramm);
end;
procedure TmsIvalidator.AfterConstruction;
begin
TmsInvalidators.Subscribe(Self);
inherited;
end;
destructor TmsIvalidator.Destroy;
begin
TmsInvalidators.UnSubscribe(Self);
inherited;
end;
{$EndIf TmsIvalidator_impl}
{$EndIf TmsMixIn_intf}
{$EndIf TmsIvalidator_intf}
msDiagramms:
unit msDiagramms;
interface
uses
{$Include msIvalidator.mixin.pas}
,
System.Types,
FMX.Objects,
System.Classes,
msCoreObjects,
msWatchedObjectInstance,
msInterfacedNonRefcounted,
msShape,
msCustomDiagramms,
Data.DBXJSONReflect
;
type
TmsIvalidatorParent = TmsCustomDiagramms;
{$Include msIvalidator.mixin.pas}
TmsDiagramms = class(TmsIvalidator)
private
[JSONMarshalled(True)]
f_CurrentDiagramm : Integer;
[JSONMarshalled(False)]
f_Image: TPaintBox;
function pm_GetCurrentDiagramm: TmsDiagramm;
procedure DoInvalidateDiagramm(aDiagramm: TmsDiagramm); override;
public
constructor Create(anImage: TPaintBox; aList: TStrings);
procedure ProcessClick(const aStart: TPointF);
procedure Clear;
procedure SelectShape(aList: TStrings; anIndex: Integer);
procedure AllowedShapesToList(aList: TStrings);
procedure AddDiagramm(aList: TStrings);
function CurrentDiagrammIndex: Integer;
procedure SelectDiagramm(anIndex: Integer);
function CurrentShapeClassIndex: Integer;
procedure Serialize;
procedure DeSerialize;
property CurrentDiagramm: TmsDiagramm read pm_GetCurrentDiagramm;
procedure Assign(anOther: TmsDiagramms);
end;//TmsDiagramms
implementation
uses
{$Include msIvalidator.mixin.pas}
System.SysUtils,
FMX.Graphics,
System.UITypes,
msDiagrammsMarshal,
msRegisteredShapes,
msInvalidators
;
{$Include msIvalidator.mixin.pas}
// TmsDiagramms
constructor TmsDiagramms.Create(anImage: TPaintBox; aList: TStrings);
begin
inherited Create;
f_Image := anImage;
AddDiagramm(aList);
end;
function TmsDiagramms.pm_GetCurrentDiagramm: TmsDiagramm;
begin
Result := Items[f_CurrentDiagramm].toObject As TmsDiagramm;
end;
procedure TmsDiagramms.DoInvalidateDiagramm(aDiagramm: TmsDiagramm);
var
l_Canvas : TCanvas;
begin
if (f_Image <> nil) then
if (aDiagramm = CurrentDiagramm) then
f_Image.Repaint;
end;
procedure TmsDiagramms.AddDiagramm(aList: TStrings);
var
l_D : ImsDiagramm;
begin
l_D := TmsDiagramm.Create('Диаграмма №' + IntToStr(Items.Count + 1));
Items.Add(l_D);
f_CurrentDiagramm := Items.IndexOf(l_D);
if (aList <> nil) then
aList.Add(l_D.Name);
end;
function TmsDiagramms.CurrentDiagrammIndex: Integer;
begin
Result := f_CurrentDiagramm;
end;
procedure TmsDiagramms.SelectDiagramm(anIndex: Integer);
begin
if (anIndex < 0) OR (anIndex >= Items.Count) then
Exit;
f_CurrentDiagramm := anIndex;
CurrentDiagramm.Invalidate;
end;
const
c_FileName = 'All.json';
procedure TmsDiagramms.DeSerialize;
begin
TmsDiagrammsMarshal.DeSerialize(c_FileName, self);
end;
procedure TmsDiagramms.Assign(anOther: TmsDiagramms);
var
l_D : ImsDiagramm;
begin
inherited Assign(anOther);
for l_D in Items do
begin
(l_D.toObject As TmsDiagramm).CurrentClass := TmsRegisteredShapes.Instance.First;
end;//for l_D
Self.f_CurrentDiagramm := anOther.CurrentDiagrammIndex;
CurrentDiagramm.Invalidate;
end;
procedure TmsDiagramms.ProcessClick(const aStart: TPointF);
begin
CurrentDiagramm.ProcessClick(aStart);
end;
procedure TmsDiagramms.Clear;
begin
CurrentDiagramm.Clear;
end;
procedure TmsDiagramms.SelectShape(aList: TStrings; anIndex: Integer);
begin
CurrentDiagramm.SelectShape(aList, anIndex);
end;
procedure TmsDiagramms.Serialize;
begin
TmsDiagrammsMarshal.Serialize(c_FileName, self);
end;
procedure TmsDiagramms.AllowedShapesToList(aList: TStrings);
begin
CurrentDiagramm.AllowedShapesToList(aList);
end;
function TmsDiagramms.CurrentShapeClassIndex: Integer;
begin
Result := CurrentDiagramm.CurrentShapeClassIndex;
end;
end.
"Почувствуйте разницу", что называется.
Мало кому понравится.
Я знаю.
Комментариев нет:
Отправить комментарий