unit Aer_Model; (* Aer_Model.pas *)
{$MODE ObjFPC}
{$H+}
interface
uses
Contnrs, SysUtils,
(* project units *)
Aer_Definitions;
type
TAerModelClass = class (TObject)
private
_id: TAerModelId;
public
property Id: TAerModelId read _id write _id;
public
function ToString: WideString;
end;
TAerModelList = class(TObject)
private
_objectList: TFPObjectList;
private
function GetObjectCount: Integer;
public
constructor Create;
destructor Destroy; override;
public
property Count: Integer read GetObjectCount;
end;
TSiteHeader = class(TAerModelClass)
private
_name: WideString;
private
function GetNameAndId: WideString;
public
property Name: WideString read _name write _name;
property NameAndId: WideString read GetNameAndId;
public
function ToString: WideString;
end;
TSite = class(TSiteHeader)
private
_text: WideString;
_optionFlags: TSiteOptionFlags;
public
property Text: WideString read _text write _text;
property OptionFlags: TSiteOptionFlags read _optionFlags write _optionFlags;
public
function ToString: WideString;
end;
TSites = class(TAerModelList)
protected
function GetItem(index: Integer): TSite;
public
property Items[index: Integer]: TSite read GetItem;
public
function Add(site: TSite): Integer;
procedure Remove(site: TSite);
end;
{ TSiteAction }
TSiteAction = class(TAerModelClass)
private
_siteId: TAerModelId;
_priority: Integer;
_actionType: ESiteActionType;
_actionObject: TAerModelId;
_actionData: WideString;
public
property SiteId: TAerModelId read _siteId write _siteId;
property Priority: Integer read _priority write _priority;
property ActionType: ESiteActionType read _actionType write _actionType;
property ActionObject: TAerModelId read _actionObject write _actionObject;
property ActionData: WideString read _actionData write _actionData;
public
function ToString: WideString;
end;
TSiteActions = class(TAerModelList)
protected
function GetItem(index: Integer): TSiteAction;
public
property Items[index: Integer]: TSiteAction read GetItem;
public
function Add(siteAction: TSiteAction): Integer;
procedure Exchange(index1, index2: Integer);
procedure Remove(siteAction: TSiteAction);
end;
{ TSiteExit }
TSiteExit = class(TAerModelClass)
private
_siteId: TAerModelId;
_gotoSite: TAerModelId;
_title: WideString;
public
property SiteId: TAerModelId read _siteId write _siteId;
property GotoSite: TAerModelId read _gotoSite write _gotoSite;
property Title: WideString read _title write _title;
public
function ToString: WideString;
end;
TSiteExits = class(TAerModelList)
protected
function GetItem(index: Integer): TSiteExit;
public
property Items[index: Integer]: TSiteExit read GetItem;
public
function Add(siteExit: TSiteExit): Integer;
procedure Remove(siteExit: TSiteExit);
end;
{ TSiteExitCondition }
TSiteExitCondition = class(TAerModelClass)
private
_siteExitId: TAerModelId;
_conditionType: ESiteExitConditionType;
_conditionObject: TAerModelId;
_conditionData: WideString;
public
property SiteExitId: TAerModelId read _siteExitId write _siteExitId;
property ConditionType: ESiteExitConditionType read _conditionType write _conditionType;
property ConditionObject: TAerModelId read _conditionObject write _conditionObject;
property ConditionData: WideString read _conditionData write _conditionData;
public
function ToString: WideString;
end;
TSiteExitConditions = class(TAerModelList)
protected
function GetItem(index: Integer): TSiteExitCondition;
public
property Items[index: Integer]: TSiteExitCondition read GetItem;
public
function Add(siteExitCondition: TSiteExitCondition): Integer;
procedure Remove(siteExitCondition: TSiteExitCondition);
end;
(* Inventory not yet implemented *)
(* =============================
TInventoryGroup = class(TAerModelClass)
private
_name: WideString;
_optionFlags: TInventoryGroupOptionFlags;
public
property Name: WideString read _name write _name;
property OptionFlags: TInventoryGroupOptionFlags read _optionFlags write _optionFlags;
end;
TInventoryItem = class(TAerModelClass)
private
_groupId: TAerModelId;
_title: WideString;
_optionFlags: TInventoryItemOptionFlags;
_unitTitle: WideString;
public
property GroupId: TAerModelId read _groupId write _groupId;
property Title: WideString read _title write _title;
property OptionFlags: TInventoryItemOptionFlags read _optionFlags write _optionFlags;
property UnitTitle: WideString read _unitTitle write _unitTitle;
end;
*)
implementation
(* TSiteHeader *)
function TSiteHeader.GetNameAndId: WideString;
var
buildString: WideString;
begin
buildString:= _name + '(' + (_id) + ')';
Result:= buildString;
end;
function TSiteHeader.ToString: WideString;
begin
Result:= (inherited ToString) + System.LineEnding + _name;
end;
(* TAerModelList *)
constructor TAerModelList.Create;
begin
inherited Create;
_objectList:= TFPObjectList.Create;
end;
destructor TAerModelList.Destroy;
begin
FreeAndNil(_objectList);
inherited Destroy;
end;
function TAerModelList.GetObjectCount: Integer;
begin
GetObjectCount:= _objectList.Count;
end;
(* TSites *)
function TSites.GetItem(index: Integer): TSite;
begin
Result:= TSite(_objectList.Items[index]);
end;
function TSites.Add(site: TSite): Integer;
begin
Result:= _objectList.Add(site);
end;
procedure TSites.Remove(site: TSite);
begin
_objectList.Remove(site);
end;
(* TSiteActions *)
function TSiteActions.GetItem(index: Integer): TSiteAction;
begin
Result:= TSiteAction(_objectList.Items[index]);
end;
function TSiteActions.Add(siteAction: TSiteAction): Integer;
begin
Result:= _objectList.Add(siteAction);
siteAction.Priority:= Result;
end;
procedure TSiteActions.Exchange(index1, index2: Integer);
// SiteActions is the only class, which proxy the TFPObjectList.Exchange method.
// This is needed, because of the Priority property, which is equal to the index
// of the SiteAction in the list.
begin
_objectList.Exchange(index1, index2);
// set the Priority field to the new index
TSiteAction(_objectList.Items[index1]).Priority:= index1;
TSiteAction(_objectList.Items[index2]).Priority:= index2;
end;
procedure TSiteActions.Remove(siteAction: TSiteAction);
var
actualCursor: Integer;
begin
_objectList.Remove(siteAction);
// go through all remaining SiteActions an aset the Priority field to their
// actual index
for actualCursor:= 0 to( _objectList.Count-1) do
TSiteAction(_objectList.Items[actualCursor]).Priority:= actualCursor;
end;
(* TSiteExits *)
function TSiteExits.GetItem(index: Integer): TSiteExit;
begin
Result:= TSiteExit(_objectList.Items[index]);
end;
function TSiteExits.Add(siteExit: TSiteExit): Integer;
begin
Result:= _objectList.Add(siteExit);
end;
procedure TSiteExits.Remove(siteExit: TSiteExit);
begin
_objectList.Remove(siteExit);
end;
(* TSiteExitConditions *)
function TSiteExitConditions.GetItem(index: Integer): TSiteExitCondition;
begin
Result:= TSiteExitCondition(_objectList.Items[index]);
end;
function TSiteExitConditions.Add(siteExitCondition: TSiteExitCondition): Integer;
begin
Result:= _objectList.Add(siteExitCondition);
end;
procedure TSiteExitConditions.Remove(siteExitCondition: TSiteExitCondition);
begin
_objectList.Remove(siteExitCondition);
end;
(* TAerModelClass *)
function TAerModelClass.ToString: WideString;
begin
Result:= _id;
end;
(* TSite *)
function TSite.ToString: WideString;
begin
Result:= (inherited ToString) + System.LineEnding + _text;
end;
(* TSiteAction *)
function TSiteAction.ToString: WideString;
begin
Result:= (inherited ToString) + System.LineEnding
+ 'Site: ' + _siteId + System.LineEnding
+ 'Action: ' + EnumToString(_actionType) + '(' + _actionObject + ', ' + _actionData + ');';
end;
(* TSiteExit *)
function TSiteExit.ToString: WideString;
begin
Result:= (inherited ToString) + System.LineEnding
+ 'Title: ' + _title + System.LineEnding
+ 'Site: ' + _siteId + System.LineEnding
+ 'Goto Site:' + _gotoSite;
end;
(* TSiteExitCondition *)
function TSiteExitCondition.ToString: WideString;
begin
Result:= (inherited ToString) + System.LineEnding
+ 'SiteExit: ' + _siteExitId + System.LineEnding
+ 'ConditionType: ' + EnumToString(_conditionType) + '(' + _conditionObject + ',' + _conditionData + ');' + System.LineEnding;
end;
end.