939 lines
31 KiB
ObjectPascal
939 lines
31 KiB
ObjectPascal
|
|
{********************************************************************}
|
|||
|
|
{ }
|
|||
|
|
{ Developer Express Visual Component Library }
|
|||
|
|
{ ExpressScheduler }
|
|||
|
|
{ }
|
|||
|
|
{ Copyright (c) 2003-2009 Developer Express Inc. }
|
|||
|
|
{ ALL RIGHTS RESERVED }
|
|||
|
|
{ }
|
|||
|
|
{ The entire contents of this file is protected by U.S. and }
|
|||
|
|
{ International Copyright Laws. Unauthorized reproduction, }
|
|||
|
|
{ reverse-engineering, and distribution of all or any portion of }
|
|||
|
|
{ the code contained in this file is strictly prohibited and may }
|
|||
|
|
{ result in severe civil and criminal penalties and will be }
|
|||
|
|
{ prosecuted to the maximum extent possible under the law. }
|
|||
|
|
{ }
|
|||
|
|
{ RESTRICTIONS }
|
|||
|
|
{ }
|
|||
|
|
{ THIS SOURCE CODE AND ALL RESULTING INTERMEDIATE FILES }
|
|||
|
|
{ (DCU, OBJ, DLL, ETC.) ARE CONFIDENTIAL AND PROPRIETARY TRADE }
|
|||
|
|
{ SECRETS OF DEVELOPER EXPRESS INC. THE REGISTERED DEVELOPER IS }
|
|||
|
|
{ LICENSED TO DISTRIBUTE THE EXPRESSSCHEDULER AND ALL ACCOMPANYING }
|
|||
|
|
{ VCL CONTROLS AS PART OF AN EXECUTABLE PROGRAM ONLY. }
|
|||
|
|
{ }
|
|||
|
|
{ THE SOURCE CODE CONTAINED WITHIN THIS FILE AND ALL RELATED }
|
|||
|
|
{ FILES OR ANY PORTION OF ITS CONTENTS SHALL AT NO TIME BE }
|
|||
|
|
{ COPIED, TRANSFERRED, SOLD, DISTRIBUTED, OR OTHERWISE MADE }
|
|||
|
|
{ AVAILABLE TO OTHER INDIVIDUALS WITHOUT EXPRESS WRITTEN CONSENT }
|
|||
|
|
{ AND PERMISSION FROM DEVELOPER EXPRESS INC. }
|
|||
|
|
{ }
|
|||
|
|
{ CONSULT THE END USER LICENSE AGREEMENT FOR INFORMATION ON }
|
|||
|
|
{ ADDITIONAL RESTRICTIONS. }
|
|||
|
|
{ }
|
|||
|
|
{********************************************************************}
|
|||
|
|
|
|||
|
|
unit cxSchedulerDBStorage;
|
|||
|
|
|
|||
|
|
{$I cxVer.inc}
|
|||
|
|
|
|||
|
|
interface
|
|||
|
|
|
|||
|
|
uses
|
|||
|
|
Windows, Classes, SysUtils, Graphics, DB, cxDB, cxDBData, cxSchedulerStorage,
|
|||
|
|
cxCustomData, cxDataUtils;
|
|||
|
|
|
|||
|
|
type
|
|||
|
|
TcxSchedulerDBStorage = class;
|
|||
|
|
TcxFieldName = type string;
|
|||
|
|
|
|||
|
|
{ TcxSchedulerDBStorageDataController }
|
|||
|
|
|
|||
|
|
TcxSchedulerDBStorageDataController = class(TcxDBDataController)
|
|||
|
|
private
|
|||
|
|
function GetStorage: TcxSchedulerDBStorage;
|
|||
|
|
protected
|
|||
|
|
procedure UpdateControl(AInfo: TcxUpdateControlInfo); override;
|
|||
|
|
property Storage: TcxSchedulerDBStorage read GetStorage;
|
|||
|
|
public
|
|||
|
|
function GetItem(Index: Integer): TObject; override;
|
|||
|
|
function GetItemValueSource(AItemIndex: Integer): TcxDataEditValueSource; override;
|
|||
|
|
function GetItemID(AItem: TObject): Integer; override;
|
|||
|
|
procedure UpdateData; override;
|
|||
|
|
procedure UpdateItemIndexes; override;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
{ TcxSchedulerDBStorageField }
|
|||
|
|
|
|||
|
|
TcxSchedulerDBStorageField = class(TcxCustomSchedulerStorageField)
|
|||
|
|
private
|
|||
|
|
function GetDataController: TcxSchedulerDBStorageDataController;
|
|||
|
|
function GetDataSource: TDataSource;
|
|||
|
|
function GetFieldName: string;
|
|||
|
|
procedure SetFieldName(const AValue: string);
|
|||
|
|
protected
|
|||
|
|
function GetDisplayName: string; override;
|
|||
|
|
|
|||
|
|
property DataController: TcxSchedulerDBStorageDataController read GetDataController;
|
|||
|
|
public
|
|||
|
|
property DataSource: TDataSource read GetDataSource;
|
|||
|
|
published
|
|||
|
|
property FieldName: string read GetFieldName write SetFieldName;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
{ TcxSchedulerDBStorageFields }
|
|||
|
|
|
|||
|
|
TcxSchedulerDBStorageFields = class(TcxCustomSchedulerStorageFields)
|
|||
|
|
private
|
|||
|
|
function GetItem(AIndex: Integer): TcxSchedulerDBStorageField;
|
|||
|
|
procedure SetItem(AIndex: Integer; const AValue: TcxSchedulerDBStorageField);
|
|||
|
|
protected
|
|||
|
|
function FindFieldByName(const AName: string): TcxCustomSchedulerStorageField; override;
|
|||
|
|
public
|
|||
|
|
function Add: TcxSchedulerDBStorageField;
|
|||
|
|
function ItemByFieldName(const AFieldName: string): TcxSchedulerDBStorageField;
|
|||
|
|
|
|||
|
|
property Items[Index: Integer]: TcxSchedulerDBStorageField read GetItem write SetItem;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
{ TcxSchedulerDBStorageFieldNames }
|
|||
|
|
|
|||
|
|
TcxSchedulerDBStorageFieldNames = class(TPersistent)
|
|||
|
|
private
|
|||
|
|
FOwner: TcxSchedulerDBStorage;
|
|||
|
|
function GetDataController: TcxSchedulerDBStorageDataController;
|
|||
|
|
function GetKeyFieldName: TcxFieldName;
|
|||
|
|
procedure SetKeyFieldName(const AValue: TcxFieldName);
|
|||
|
|
protected
|
|||
|
|
function GetFieldName(AIndex: Integer): TcxFieldName;
|
|||
|
|
function GetOwner: TPersistent; override;
|
|||
|
|
procedure SetFieldName(AIndex: Integer; const AValue: TcxFieldName);
|
|||
|
|
property ReminderTime: TcxFieldName index 10 read GetFieldName write SetFieldName;
|
|||
|
|
public
|
|||
|
|
constructor Create(AOwner: TcxSchedulerDBStorage); virtual;
|
|||
|
|
procedure Assign(Source: TPersistent); override;
|
|||
|
|
property Storage: TcxSchedulerDBStorage read FOwner;
|
|||
|
|
property DataController: TcxSchedulerDBStorageDataController read GetDataController;
|
|||
|
|
published
|
|||
|
|
property Caption: TcxFieldName index 0 read GetFieldName write SetFieldName;
|
|||
|
|
property EventType: TcxFieldName index 1 read GetFieldName write SetFieldName;
|
|||
|
|
property Finish: TcxFieldName index 2 read GetFieldName write SetFieldName;
|
|||
|
|
property ID: TcxFieldName read GetKeyFieldName write SetKeyFieldName;
|
|||
|
|
property LabelColor: TcxFieldName index 3 read GetFieldName write SetFieldName;
|
|||
|
|
property Location: TcxFieldName index 4 read GetFieldName write SetFieldName;
|
|||
|
|
property Message: TcxFieldName index 5 read GetFieldName write SetFieldName;
|
|||
|
|
property Options: TcxFieldName index 6 read GetFieldName write SetFieldName;
|
|||
|
|
property ParentID: TcxFieldName index 7 read GetFieldName write SetFieldName;
|
|||
|
|
property RecurrenceIndex: TcxFieldName index 8 read GetFieldName write SetFieldName;
|
|||
|
|
property RecurrenceInfo: TcxFieldName index 9 read GetFieldName write SetFieldName;
|
|||
|
|
property ResourceID: TcxFieldName index 11 read GetFieldName write SetFieldName;
|
|||
|
|
property Start: TcxFieldName index 12 read GetFieldName write SetFieldName;
|
|||
|
|
property State: TcxFieldName index 13 read GetFieldName write SetFieldName;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
{ TcxSchedulerDBStorageResourceDataController }
|
|||
|
|
|
|||
|
|
TcxSchedulerDBStorageResourceDataController = class(TcxDBDataController)
|
|||
|
|
protected
|
|||
|
|
procedure UpdateControl(AInfo: TcxUpdateControlInfo); override;
|
|||
|
|
public
|
|||
|
|
function GetItem(AIndex: Integer): TObject; override;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
{ TcxSchedulerDBStorageResources }
|
|||
|
|
|
|||
|
|
TcxSchedulerDBStorageResources = class(TcxSchedulerStorageResources)
|
|||
|
|
private
|
|||
|
|
FDataController: TcxSchedulerDBStorageResourceDataController;
|
|||
|
|
FDataItems: TcxSchedulerStorageResourceItems;
|
|||
|
|
FResourceColorField: TcxDBDataField;
|
|||
|
|
FResourceColorFieldName: TcxFieldName;
|
|||
|
|
FResourceIDField: TcxDBDataField;
|
|||
|
|
FResourceIDFieldName: TcxFieldName;
|
|||
|
|
FResourceNameField: TcxDBDataField;
|
|||
|
|
FResourceNameFieldName: TcxFieldName;
|
|||
|
|
function GetDataSource: TDataSource;
|
|||
|
|
procedure SetDataSource(AValue: TDataSource);
|
|||
|
|
procedure SetResourceColorFieldName(const AValue: TcxFieldName);
|
|||
|
|
procedure SetResourceIDFieldName(const AValue: TcxFieldName);
|
|||
|
|
procedure SetResourceNameFieldName(const AValue: TcxFieldName);
|
|||
|
|
protected
|
|||
|
|
function CreateDataController: TcxSchedulerDBStorageResourceDataController; virtual;
|
|||
|
|
function GetResourceItems: TcxSchedulerStorageResourceItems; override;
|
|||
|
|
function GetValueDef(ARecordIndex: Integer; AField: TcxDBDataField;
|
|||
|
|
const DefValue: Variant): Variant;
|
|||
|
|
procedure InitDataItem(AItem: TcxSchedulerStorageResourceItem; AIndex: Integer); virtual;
|
|||
|
|
procedure SetInternalFieldName(var AFieldName: TcxFieldName; const AValue: TcxFieldName; var AField: TcxDBDataField);
|
|||
|
|
procedure UpdateResourceItems; virtual;
|
|||
|
|
property DataController: TcxSchedulerDBStorageResourceDataController read FDataController;
|
|||
|
|
property ResourceColorField: TcxDBDataField read FResourceColorField;
|
|||
|
|
property ResourceIDField: TcxDBDataField read FResourceIDField;
|
|||
|
|
property ResourceNameField: TcxDBDataField read FResourceNameField;
|
|||
|
|
public
|
|||
|
|
constructor Create(AOwner: TcxCustomSchedulerStorage); override;
|
|||
|
|
destructor Destroy; override;
|
|||
|
|
procedure Assign(Source: TPersistent); override;
|
|||
|
|
property DataItems: TcxSchedulerStorageResourceItems read FDataItems;
|
|||
|
|
published
|
|||
|
|
property DataSource: TDataSource read GetDataSource write SetDataSource;
|
|||
|
|
property ResourceColor: TcxFieldName read FResourceColorFieldName write SetResourceColorFieldName;
|
|||
|
|
property ResourceID: TcxFieldName read FResourceIDFieldName write SetResourceIDFieldName;
|
|||
|
|
property ResourceName: TcxFieldName read FResourceNameFieldName write SetResourceNameFieldName;
|
|||
|
|
property Items;
|
|||
|
|
property OnGetResourceName;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
TcxSchedulerGetEventGeneratedIDEvent = procedure(Sender: TcxSchedulerDBStorage;
|
|||
|
|
AEvent: TcxSchedulerEvent; var EventID: Variant) of object;
|
|||
|
|
|
|||
|
|
{ TcxSchedulerDBStorage }
|
|||
|
|
|
|||
|
|
TcxSchedulerDBStorage = class(TcxCustomSchedulerStorage)
|
|||
|
|
private
|
|||
|
|
FFieldNames: TcxSchedulerDBStorageFieldNames;
|
|||
|
|
FGenerateGUIDForID: Boolean;
|
|||
|
|
FOnGetEventGeneratedID: TcxSchedulerGetEventGeneratedIDEvent;
|
|||
|
|
function GetDataController: TcxSchedulerDBStorageDataController;
|
|||
|
|
function GetDataSource: TDataSource;
|
|||
|
|
function GetFields: TcxSchedulerDBStorageFields;
|
|||
|
|
function GetResources: TcxSchedulerDBStorageResources;
|
|||
|
|
procedure SetDataSource(AValue: TDataSource);
|
|||
|
|
procedure SetFields(const AValue: TcxSchedulerDBStorageFields);
|
|||
|
|
procedure SetFieldNames(AValue: TcxSchedulerDBStorageFieldNames);
|
|||
|
|
procedure SetResources(AValue: TcxSchedulerDBStorageResources);
|
|||
|
|
protected
|
|||
|
|
FIDField: TField;
|
|||
|
|
procedure AddRecord; override;
|
|||
|
|
function CreateFieldNames: TcxSchedulerDBStorageFieldNames; virtual;
|
|||
|
|
function CreateFields: TcxCustomSchedulerStorageFields; override;
|
|||
|
|
function CreateResources: TcxSchedulerStorageResources; override;
|
|||
|
|
procedure CreateSubClasses; override;
|
|||
|
|
procedure DestroySubClasses; override;
|
|||
|
|
function DoGetEventGeneratedID(AEvent: TcxSchedulerEvent; const AEventID: Variant): Variant; virtual;
|
|||
|
|
function GetDataControllerClass: TcxCustomDataControllerClass; override;
|
|||
|
|
function GetIDField: TField;
|
|||
|
|
function GetField(AIndex: Integer): TField;
|
|||
|
|
function GetFieldValueBeforePost(ARecordIndex, AFieldIndex: Integer): Variant; override;
|
|||
|
|
function GetFocusedRecordID(ARecordIndex: Integer): Variant; override;
|
|||
|
|
function IsDataSettingsValid: Boolean; override;
|
|||
|
|
function IsFieldValid(AField: TcxCustomSchedulerStorageField): Boolean;
|
|||
|
|
function MakeFocused(AEvent: TcxSchedulerEvent): Boolean;
|
|||
|
|
procedure PostEvent(AEvent: TcxSchedulerEvent); override;
|
|||
|
|
procedure PostEditingData(AEvent: TcxSchedulerEvent); override;
|
|||
|
|
procedure SetFieldValueBeforePost(ARecordIndex, AFieldIndex: Integer; const AValue: Variant); override;
|
|||
|
|
procedure SetValue(ARecordIndex, AItemIndex: Integer; const AValue: Variant); override;
|
|||
|
|
|
|||
|
|
function IsReminderAvailable: Boolean; override;
|
|||
|
|
|
|||
|
|
procedure AfterUpdate; override;
|
|||
|
|
procedure BeforeUpdate; override;
|
|||
|
|
|
|||
|
|
property DataController: TcxSchedulerDBStorageDataController read GetDataController;
|
|||
|
|
property IDField: TField read GetIDField;
|
|||
|
|
public
|
|||
|
|
procedure Assign(Source: TPersistent); override;
|
|||
|
|
function CheckRequiredFields: Boolean; override;
|
|||
|
|
procedure Clear; override;
|
|||
|
|
function IsActive: Boolean; override;
|
|||
|
|
function IsCaptionAvailable: Boolean; override;
|
|||
|
|
function IsLabelColorAvailable: Boolean; override;
|
|||
|
|
function IsLocationAvailable: Boolean; override;
|
|||
|
|
function IsMessageAvailable: Boolean; override;
|
|||
|
|
function IsRecurrenceAvailable: Boolean; override;
|
|||
|
|
function IsStateAvailable: Boolean; override;
|
|||
|
|
published
|
|||
|
|
property GenerateGUIDForID: Boolean read FGenerateGUIDForID write FGenerateGUIDForID default False;
|
|||
|
|
property Resources: TcxSchedulerDBStorageResources read GetResources write SetResources;
|
|||
|
|
property CustomFields: TcxSchedulerDBStorageFields read GetFields write SetFields;
|
|||
|
|
property DataSource: TDataSource read GetDataSource write SetDataSource;
|
|||
|
|
property FieldNames: TcxSchedulerDBStorageFieldNames read FFieldNames write SetFieldNames;
|
|||
|
|
property OnEventDeleted;
|
|||
|
|
property OnEventInserted;
|
|||
|
|
property OnEventModified;
|
|||
|
|
property OnGetEventGeneratedID: TcxSchedulerGetEventGeneratedIDEvent read FOnGetEventGeneratedID write FOnGetEventGeneratedID;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
implementation
|
|||
|
|
|
|||
|
|
uses
|
|||
|
|
{$IFDEF DELPHI6}
|
|||
|
|
Variants,
|
|||
|
|
{$ENDIF}
|
|||
|
|
cxVariants, cxSchedulerStrs, cxSchedulerUtils;
|
|||
|
|
|
|||
|
|
{$IFNDEF DELPHI6}
|
|||
|
|
function CoCreateGuid(out guid: TGUID): HResult; stdcall;
|
|||
|
|
external 'ole32.dll' name 'CoCreateGuid';
|
|||
|
|
|
|||
|
|
function StringFromCLSID(const clsid: TGUID; out psz: PWideChar): HResult; stdcall;
|
|||
|
|
external 'ole32.dll' name 'StringFromCLSID';
|
|||
|
|
|
|||
|
|
procedure CoTaskMemFree(pv: Pointer); stdcall;
|
|||
|
|
external 'ole32.dll' name 'CoTaskMemFree';
|
|||
|
|
|
|||
|
|
function CreateGUID(out Guid: TGUID): HResult;
|
|||
|
|
begin
|
|||
|
|
Result := CoCreateGuid(Guid);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function GUIDToString(const GUID: TGUID): string;
|
|||
|
|
var
|
|||
|
|
P: PWideChar;
|
|||
|
|
begin
|
|||
|
|
if not Succeeded(StringFromCLSID(GUID, P)) then
|
|||
|
|
raise EAbort.Create('');
|
|||
|
|
Result := P;
|
|||
|
|
CoTaskMemFree(P);
|
|||
|
|
end;
|
|||
|
|
{$ENDIF}
|
|||
|
|
|
|||
|
|
function CreateGUIDForID: string;
|
|||
|
|
var
|
|||
|
|
G: TGUID;
|
|||
|
|
begin
|
|||
|
|
CreateGUID(G);
|
|||
|
|
Result := GUIDToString(G);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure CheckAndSetFieldValue(AField: TField; const AValue: Variant);
|
|||
|
|
begin
|
|||
|
|
if (AField <> nil) and not VarEqualsSoft(AField.Value, AValue) then
|
|||
|
|
SetFieldValue(AField, AValue);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
{ TcxSchedulerDBStorageDataController }
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorageDataController.GetItem(
|
|||
|
|
Index: Integer): TObject;
|
|||
|
|
begin
|
|||
|
|
Result := Storage.FFields[Index];
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorageDataController.GetItemValueSource(
|
|||
|
|
AItemIndex: Integer): TcxDataEditValueSource;
|
|||
|
|
begin
|
|||
|
|
Result := evsValue;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorageDataController.GetItemID(
|
|||
|
|
AItem: TObject): Integer;
|
|||
|
|
begin
|
|||
|
|
if AItem is TcxCustomSchedulerStorageField then
|
|||
|
|
Result := TcxCustomSchedulerStorageField(AItem).Index
|
|||
|
|
else
|
|||
|
|
Result := -1;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TcxSchedulerDBStorageDataController.UpdateData;
|
|||
|
|
begin
|
|||
|
|
Storage.UpdateData;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TcxSchedulerDBStorageDataController.UpdateItemIndexes;
|
|||
|
|
begin
|
|||
|
|
Storage.UpdateItemIndexes;
|
|||
|
|
inherited UpdateItemIndexes;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TcxSchedulerDBStorageDataController.UpdateControl(
|
|||
|
|
AInfo: TcxUpdateControlInfo);
|
|||
|
|
begin
|
|||
|
|
Storage.UpdateControl(AInfo);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorageDataController.GetStorage: TcxSchedulerDBStorage;
|
|||
|
|
begin
|
|||
|
|
Result := TcxSchedulerDBStorage(GetOwner)
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
{ TcxSchedulerDBStorageField }
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorageField.GetDisplayName: string;
|
|||
|
|
begin
|
|||
|
|
Result := FieldName;
|
|||
|
|
if Result = '' then
|
|||
|
|
Result := inherited GetDisplayName;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorageField.GetDataController: TcxSchedulerDBStorageDataController;
|
|||
|
|
begin
|
|||
|
|
Result := TcxSchedulerDBStorageDataController(inherited DataController);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorageField.GetDataSource: TDataSource;
|
|||
|
|
begin
|
|||
|
|
Result := DataController.DataSource;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorageField.GetFieldName: string;
|
|||
|
|
begin
|
|||
|
|
Result := DataController.GetItemFieldName(Index);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TcxSchedulerDBStorageField.SetFieldName(
|
|||
|
|
const AValue: string);
|
|||
|
|
begin
|
|||
|
|
TcxSchedulerDBStorageDataController(DataController).ChangeFieldName(Index, AValue);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
{ TcxSchedulerDBStorageFields }
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorageFields.Add: TcxSchedulerDBStorageField;
|
|||
|
|
begin
|
|||
|
|
Result := TcxSchedulerDBStorageField(inherited Add)
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorageFields.ItemByFieldName(
|
|||
|
|
const AFieldName: string): TcxSchedulerDBStorageField;
|
|||
|
|
begin
|
|||
|
|
Result := TcxSchedulerDBStorageField(FindFieldByName(AFieldName));
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorageFields.FindFieldByName(
|
|||
|
|
const AName: string): TcxCustomSchedulerStorageField;
|
|||
|
|
var
|
|||
|
|
I: Integer;
|
|||
|
|
begin
|
|||
|
|
for I := 0 to Count - 1 do
|
|||
|
|
begin
|
|||
|
|
Result := TcxSchedulerStorageField(inherited Items[I]);
|
|||
|
|
if AnsiSameText(AName, TcxSchedulerDBStorageField(Result).FieldName) then Exit;
|
|||
|
|
end;
|
|||
|
|
Result := nil;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorageFields.GetItem(
|
|||
|
|
AIndex: Integer): TcxSchedulerDBStorageField;
|
|||
|
|
begin
|
|||
|
|
Result := TcxSchedulerDBStorageField(inherited Items[AIndex])
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TcxSchedulerDBStorageFields.SetItem(
|
|||
|
|
AIndex: Integer; const AValue: TcxSchedulerDBStorageField);
|
|||
|
|
begin
|
|||
|
|
Items[AIndex].Assign(AValue);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
{ TcxSchedulerDBStorageFieldNames }
|
|||
|
|
|
|||
|
|
constructor TcxSchedulerDBStorageFieldNames.Create(
|
|||
|
|
AOwner: TcxSchedulerDBStorage);
|
|||
|
|
begin
|
|||
|
|
FOwner := AOwner;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TcxSchedulerDBStorageFieldNames.Assign(
|
|||
|
|
Source: TPersistent);
|
|||
|
|
var
|
|||
|
|
I: Integer;
|
|||
|
|
begin
|
|||
|
|
if Source is TcxSchedulerDBStorageFieldNames then
|
|||
|
|
begin
|
|||
|
|
for I := 0 to Storage.InternalFields.Count - 1 do
|
|||
|
|
SetFieldName(I, TcxSchedulerDBStorageFieldNames(Source).GetFieldName(I));
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorageFieldNames.GetDataController: TcxSchedulerDBStorageDataController;
|
|||
|
|
begin
|
|||
|
|
Result := FOwner.DataController;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorageFieldNames.GetFieldName(
|
|||
|
|
AIndex: Integer): TcxFieldName;
|
|||
|
|
begin
|
|||
|
|
Result := TcxSchedulerDBStorageField(
|
|||
|
|
Storage.InternalFields.Items[AIndex]).FieldName;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorageFieldNames.GetOwner: TPersistent;
|
|||
|
|
begin
|
|||
|
|
Result := FOwner;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TcxSchedulerDBStorageFieldNames.SetFieldName(
|
|||
|
|
AIndex: Integer; const AValue: TcxFieldName);
|
|||
|
|
begin
|
|||
|
|
TcxSchedulerDBStorageField(
|
|||
|
|
Storage.InternalFields.Items[AIndex]).FieldName := AValue;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorageFieldNames.GetKeyFieldName: TcxFieldName;
|
|||
|
|
begin
|
|||
|
|
Result := DataController.KeyFieldNames;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TcxSchedulerDBStorageFieldNames.SetKeyFieldName(
|
|||
|
|
const AValue: TcxFieldName);
|
|||
|
|
begin
|
|||
|
|
DataController.KeyFieldNames := AValue;
|
|||
|
|
Storage.FIDField := nil;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
{ TcxSchedulerDBStorageResourceDataController }
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorageResourceDataController.GetItem(
|
|||
|
|
AIndex: Integer): TObject;
|
|||
|
|
begin
|
|||
|
|
Result := nil;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TcxSchedulerDBStorageResourceDataController.UpdateControl(
|
|||
|
|
AInfo: TcxUpdateControlInfo);
|
|||
|
|
begin
|
|||
|
|
if (AInfo is TcxDataChangedInfo) or (AInfo is TcxUpdateRecordInfo) then
|
|||
|
|
TcxSchedulerDBStorage(GetOwner).Resources.UpdateResourceItems;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
{ TcxSchedulerDBStorageResources }
|
|||
|
|
|
|||
|
|
constructor TcxSchedulerDBStorageResources.Create(
|
|||
|
|
AOwner: TcxCustomSchedulerStorage);
|
|||
|
|
begin
|
|||
|
|
inherited Create(AOwner);
|
|||
|
|
FDataController := CreateDataController;
|
|||
|
|
FDataItems := CreateItems;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
destructor TcxSchedulerDBStorageResources.Destroy;
|
|||
|
|
begin
|
|||
|
|
FDataItems.Free;
|
|||
|
|
FreeAndNil(FResourceColorField);
|
|||
|
|
FreeAndNil(FResourceIDField);
|
|||
|
|
FreeAndNil(FResourceNameField);
|
|||
|
|
FreeAndNil(FDataController);
|
|||
|
|
inherited Destroy;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TcxSchedulerDBStorageResources.Assign(
|
|||
|
|
Source: TPersistent);
|
|||
|
|
begin
|
|||
|
|
inherited Assign(Source);
|
|||
|
|
if Source is TcxSchedulerDBStorageResources then
|
|||
|
|
begin
|
|||
|
|
DataSource := TcxSchedulerDBStorageResources(Source).DataSource;
|
|||
|
|
ResourceColor := TcxSchedulerDBStorageResources(Source).ResourceColor;
|
|||
|
|
ResourceID := TcxSchedulerDBStorageResources(Source).ResourceID;
|
|||
|
|
ResourceName := TcxSchedulerDBStorageResources(Source).ResourceName;
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorageResources.CreateDataController: TcxSchedulerDBStorageResourceDataController;
|
|||
|
|
begin
|
|||
|
|
Result := TcxSchedulerDBStorageResourceDataController.Create(Storage);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorageResources.GetResourceItems: TcxSchedulerStorageResourceItems;
|
|||
|
|
begin
|
|||
|
|
if DataItems.Count > 0 then
|
|||
|
|
Result := DataItems
|
|||
|
|
else
|
|||
|
|
Result := Items;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TcxSchedulerDBStorageResources.InitDataItem(
|
|||
|
|
AItem: TcxSchedulerStorageResourceItem; AIndex: Integer);
|
|||
|
|
begin
|
|||
|
|
AItem.ResourceID := GetValueDef(AIndex, ResourceIDField, Null);
|
|||
|
|
AItem.Name := GetValueDef(AIndex, ResourceNameField, '');
|
|||
|
|
AItem.Color := GetValueDef(AIndex, ResourceColorField, clDefault);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorageResources.GetValueDef(ARecordIndex: Integer;
|
|||
|
|
AField: TcxDBDataField; const DefValue: Variant): Variant;
|
|||
|
|
begin
|
|||
|
|
if AField <> nil then
|
|||
|
|
begin
|
|||
|
|
Result := DataController.GetInternalValue(ARecordIndex, AField);
|
|||
|
|
if VarIsNull(Result) then
|
|||
|
|
Result := DefValue
|
|||
|
|
end
|
|||
|
|
else
|
|||
|
|
Result := DefValue
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TcxSchedulerDBStorageResources.SetInternalFieldName(
|
|||
|
|
var AFieldName: TcxFieldName; const AValue: TcxFieldName;
|
|||
|
|
var AField: TcxDBDataField);
|
|||
|
|
begin
|
|||
|
|
if AFieldName <> AValue then
|
|||
|
|
begin
|
|||
|
|
AFieldName := AValue;
|
|||
|
|
DataController.UpdateInternalKeyFields(AValue, AField);
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TcxSchedulerDBStorageResources.UpdateResourceItems;
|
|||
|
|
var
|
|||
|
|
I, J: Integer;
|
|||
|
|
APrevItems: TcxSchedulerStorageResourceItems;
|
|||
|
|
begin
|
|||
|
|
APrevItems := FDataItems;
|
|||
|
|
FDataItems := CreateItems;
|
|||
|
|
try
|
|||
|
|
for I := 0 to DataController.RecordCount - 1 do
|
|||
|
|
InitDataItem(FDataItems.Add, I);
|
|||
|
|
for I := 0 to FDataItems.Count - 1 do
|
|||
|
|
for J := 0 to APrevItems.Count - 1 do
|
|||
|
|
if VarEquals(FDataItems[I].ResourceID, APrevItems[J].ResourceID) then
|
|||
|
|
with FDataItems[I] do
|
|||
|
|
begin
|
|||
|
|
Assign(APrevItems[J]);
|
|||
|
|
ResourceID := GetValueDef(I, ResourceIDField, ResourceID);
|
|||
|
|
Name := GetValueDef(I, ResourceNameField, Name);
|
|||
|
|
Color := GetValueDef(I, ResourceColorField, Color);
|
|||
|
|
end;
|
|||
|
|
finally
|
|||
|
|
APrevItems.Free;
|
|||
|
|
Changed;
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorageResources.GetDataSource: TDataSource;
|
|||
|
|
begin
|
|||
|
|
Result := DataController.DataSource;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TcxSchedulerDBStorageResources.SetDataSource(
|
|||
|
|
AValue: TDataSource);
|
|||
|
|
begin
|
|||
|
|
DataController.DataSource := AValue;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TcxSchedulerDBStorageResources.SetResourceColorFieldName(
|
|||
|
|
const AValue: TcxFieldName);
|
|||
|
|
begin
|
|||
|
|
SetInternalFieldName(FResourceColorFieldName, AValue, FResourceColorField);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TcxSchedulerDBStorageResources.SetResourceIDFieldName(
|
|||
|
|
const AValue: TcxFieldName);
|
|||
|
|
begin
|
|||
|
|
SetInternalFieldName(FResourceIDFieldName, AValue, FResourceIDField);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TcxSchedulerDBStorageResources.SetResourceNameFieldName(
|
|||
|
|
const AValue: TcxFieldName);
|
|||
|
|
begin
|
|||
|
|
SetInternalFieldName(FResourceNameFieldName, AValue, FResourceNameField);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
{ TcxSchedulerDBStorage }
|
|||
|
|
|
|||
|
|
procedure TcxSchedulerDBStorage.Assign(Source: TPersistent);
|
|||
|
|
begin
|
|||
|
|
if Source is TcxSchedulerDBStorage then
|
|||
|
|
begin
|
|||
|
|
FieldNames := TcxSchedulerDBStorage(Source).FieldNames;
|
|||
|
|
DataSource := TcxSchedulerDBStorage(Source).DataSource;
|
|||
|
|
end;
|
|||
|
|
inherited Assign(Source);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorage.CheckRequiredFields: Boolean;
|
|||
|
|
var
|
|||
|
|
S: string;
|
|||
|
|
begin
|
|||
|
|
Result := IsDataSettingsValid;
|
|||
|
|
if not Result then
|
|||
|
|
begin
|
|||
|
|
S := '';
|
|||
|
|
if (FieldNames.ID = '') then
|
|||
|
|
S := S + ' <20> ID'#13#10;
|
|||
|
|
if not IsFieldValid(FEventTypeField) then
|
|||
|
|
S := S + ' <20> EventType'#13#10;
|
|||
|
|
if not IsFieldValid(FStartField) then
|
|||
|
|
S := S + ' <20> Start'#13#10;
|
|||
|
|
if not IsFieldValid(FFinishField) then
|
|||
|
|
S := S + ' <20> Finish'#13#10;
|
|||
|
|
if not IsFieldValid(FOptionsField) then
|
|||
|
|
S := S + ' <20> Options'#13#10;
|
|||
|
|
|
|||
|
|
cxSchedulerError(scxRequiredFieldsNeeded, [S]);
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TcxSchedulerDBStorage.Clear;
|
|||
|
|
begin
|
|||
|
|
DataController.BeginUpdate;
|
|||
|
|
try
|
|||
|
|
DataController.Cancel;
|
|||
|
|
if IsActive then
|
|||
|
|
begin
|
|||
|
|
DataSource.DataSet.DisableControls;
|
|||
|
|
try
|
|||
|
|
while DataSource.DataSet.RecordCount > 0 do
|
|||
|
|
DataSource.DataSet.Delete;
|
|||
|
|
finally
|
|||
|
|
DataSource.DataSet.EnableControls;
|
|||
|
|
end;
|
|||
|
|
DataController.RecordCount := 0;
|
|||
|
|
end;
|
|||
|
|
finally
|
|||
|
|
DataController.EndUpdate;
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorage.IsActive: Boolean;
|
|||
|
|
begin
|
|||
|
|
Result := (DataSource <> nil) and (DataSource.DataSet <> nil) and
|
|||
|
|
DataSource.DataSet.Active
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorage.IsCaptionAvailable: Boolean;
|
|||
|
|
begin
|
|||
|
|
Result := IsFieldValid(FCaptionField);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorage.IsLabelColorAvailable: Boolean;
|
|||
|
|
begin
|
|||
|
|
Result := IsFieldValid(FLabelColorField);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorage.IsLocationAvailable: Boolean;
|
|||
|
|
begin
|
|||
|
|
Result := IsFieldValid(FLocationField);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorage.IsMessageAvailable: Boolean;
|
|||
|
|
begin
|
|||
|
|
Result := IsFieldValid(FMessageField);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorage.IsRecurrenceAvailable: Boolean;
|
|||
|
|
begin
|
|||
|
|
Result := IsFieldValid(FRecurrenceInfoField) and
|
|||
|
|
IsFieldValid(FRecurrenceIndexField);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorage.IsStateAvailable: Boolean;
|
|||
|
|
begin
|
|||
|
|
Result := IsFieldValid(FStateField);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorage.IsReminderAvailable: Boolean;
|
|||
|
|
begin
|
|||
|
|
Result := IsFieldValid(FReminderTimeField);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TcxSchedulerDBStorage.AfterUpdate;
|
|||
|
|
begin
|
|||
|
|
if not DataController.DataModeController.SmartRefresh then
|
|||
|
|
DataController.DataSet.EnableControls;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TcxSchedulerDBStorage.BeforeUpdate;
|
|||
|
|
begin
|
|||
|
|
if not DataController.DataModeController.SmartRefresh then
|
|||
|
|
DataController.DataSet.DisableControls;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TcxSchedulerDBStorage.AddRecord;
|
|||
|
|
begin
|
|||
|
|
DataController.Append;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorage.CreateFieldNames: TcxSchedulerDBStorageFieldNames;
|
|||
|
|
begin
|
|||
|
|
Result := TcxSchedulerDBStorageFieldNames.Create(Self);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorage.CreateFields: TcxCustomSchedulerStorageFields;
|
|||
|
|
begin
|
|||
|
|
Result := TcxSchedulerDBStorageFields.Create(TcxSchedulerDBStorageField);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorage.CreateResources: TcxSchedulerStorageResources;
|
|||
|
|
begin
|
|||
|
|
Result := TcxSchedulerDBStorageResources.Create(Self);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TcxSchedulerDBStorage.CreateSubClasses;
|
|||
|
|
begin
|
|||
|
|
inherited CreateSubClasses;
|
|||
|
|
FFieldNames := CreateFieldNames;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TcxSchedulerDBStorage.DestroySubClasses;
|
|||
|
|
begin
|
|||
|
|
inherited DestroySubClasses;
|
|||
|
|
FFieldNames.Free;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorage.DoGetEventGeneratedID(AEvent: TcxSchedulerEvent;
|
|||
|
|
const AEventID: Variant): Variant;
|
|||
|
|
begin
|
|||
|
|
Result := AEventID;
|
|||
|
|
if Assigned(FOnGetEventGeneratedID) then
|
|||
|
|
FOnGetEventGeneratedID(Self, AEvent, Result);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorage.GetDataControllerClass: TcxCustomDataControllerClass;
|
|||
|
|
begin
|
|||
|
|
Result := TcxSchedulerDBStorageDataController;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorage.GetField(
|
|||
|
|
AIndex: Integer): TField;
|
|||
|
|
begin
|
|||
|
|
Result := DataController.GetItemField(AIndex);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorage.GetIDField: TField;
|
|||
|
|
begin
|
|||
|
|
if FIDField = nil then
|
|||
|
|
FIDField := DataController.DataSet.FieldByName(FieldNames.ID);
|
|||
|
|
Result := FIDField;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorage.GetFieldValueBeforePost(
|
|||
|
|
ARecordIndex, AFieldIndex: Integer): Variant;
|
|||
|
|
var
|
|||
|
|
AField: TField;
|
|||
|
|
begin
|
|||
|
|
AField := GetField(AFieldIndex);
|
|||
|
|
if (AField <> nil) then
|
|||
|
|
Result := GetFieldValue(AField)
|
|||
|
|
else
|
|||
|
|
Result := Null;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorage.GetFocusedRecordID(ARecordIndex: Integer): Variant;
|
|||
|
|
begin
|
|||
|
|
Result := DataSource.DataSet.FieldByName(FieldNames.ID).Value;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorage.IsDataSettingsValid: Boolean;
|
|||
|
|
begin
|
|||
|
|
Result := IsActive and (FieldNames.ID <> '') {and IsFieldValid(FParentIDField)} and
|
|||
|
|
IsFieldValid(FEventTypeField) and IsFieldValid(FOptionsField) and
|
|||
|
|
IsFieldValid(FStartField) and IsFieldValid(FFinishField);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorage.IsFieldValid(
|
|||
|
|
AField: TcxCustomSchedulerStorageField): Boolean;
|
|||
|
|
begin
|
|||
|
|
Result := GetField(AField.Index) <> nil;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TcxSchedulerDBStorage.SetFieldValueBeforePost(
|
|||
|
|
ARecordIndex, AFieldIndex: Integer; const AValue: Variant);
|
|||
|
|
begin
|
|||
|
|
CheckAndSetFieldValue(GetField(AFieldIndex), AValue);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TcxSchedulerDBStorage.SetValue(
|
|||
|
|
ARecordIndex, AItemIndex: Integer; const AValue: Variant);
|
|||
|
|
begin
|
|||
|
|
SetFieldValue(DataController.GetItemField(AItemIndex), AValue);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorage.MakeFocused(
|
|||
|
|
AEvent: TcxSchedulerEvent): Boolean;
|
|||
|
|
begin
|
|||
|
|
DataController.FocusedRecordIndex := AEvent.RecordIndex;
|
|||
|
|
Result := DataController.FocusedRecordIndex = AEvent.RecordIndex;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TcxSchedulerDBStorage.PostEvent(AEvent: TcxSchedulerEvent);
|
|||
|
|
var
|
|||
|
|
AIndex: Integer;
|
|||
|
|
begin
|
|||
|
|
if not CheckRequiredFields then
|
|||
|
|
begin
|
|||
|
|
AEvent.Free;
|
|||
|
|
Exit;
|
|||
|
|
end;
|
|||
|
|
BeginUpdate;
|
|||
|
|
try
|
|||
|
|
AIndex := FNewEvents.Remove(AEvent);
|
|||
|
|
if AIndex <> -1 then
|
|||
|
|
begin
|
|||
|
|
FEventsList.Add(AEvent);
|
|||
|
|
SetEventRecordInfo(AEvent, -1, Null);
|
|||
|
|
if DoEventInserted(AEvent) then Exit;
|
|||
|
|
AddRecord;
|
|||
|
|
AEvent.EndEditing;
|
|||
|
|
end;
|
|||
|
|
finally
|
|||
|
|
EndUpdate;
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TcxSchedulerDBStorage.PostEditingData(
|
|||
|
|
AEvent: TcxSchedulerEvent);
|
|||
|
|
var
|
|||
|
|
AEventID: Variant;
|
|||
|
|
AFieldIndex: Integer;
|
|||
|
|
begin
|
|||
|
|
if DoEventModified(AEvent) or not IsDataSettingsValid then Exit;
|
|||
|
|
if (AEvent.RecordIndex <> -1) and (not DataController.IsEditing or
|
|||
|
|
(AEvent.RecordIndex <> DataController.EditingRecordIndex)) then
|
|||
|
|
begin
|
|||
|
|
if not MakeFocused(AEvent) then Exit;
|
|||
|
|
DataController.Edit;
|
|||
|
|
end;
|
|||
|
|
for AFieldIndex := 0 to AEvent.ValueCount - 1 do
|
|||
|
|
SetPostFieldValue(AEvent, AFieldIndex);
|
|||
|
|
if AEvent.RecordIndex = - 1 then
|
|||
|
|
begin
|
|||
|
|
if GenerateGUIDForID then
|
|||
|
|
begin
|
|||
|
|
AEventID := CreateGUIDForID;
|
|||
|
|
IDField.Value := AEventID;
|
|||
|
|
end;
|
|||
|
|
DataController.Post;
|
|||
|
|
if not GenerateGUIDForID then
|
|||
|
|
AEventID := DoGetEventGeneratedID(AEvent, IDField.Value);
|
|||
|
|
SetEventRecordInfo(AEvent, -1, AEventID);
|
|||
|
|
end
|
|||
|
|
else
|
|||
|
|
DataController.Post;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorage.GetDataController: TcxSchedulerDBStorageDataController;
|
|||
|
|
begin
|
|||
|
|
Result := TcxSchedulerDBStorageDataController(inherited DataController);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorage.GetDataSource: TDataSource;
|
|||
|
|
begin
|
|||
|
|
Result := TcxSchedulerDBStorageDataController(DataController).DataSource;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorage.GetFields: TcxSchedulerDBStorageFields;
|
|||
|
|
begin
|
|||
|
|
Result := TcxSchedulerDBStorageFields(inherited Fields);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TcxSchedulerDBStorage.GetResources: TcxSchedulerDBStorageResources;
|
|||
|
|
begin
|
|||
|
|
Result := TcxSchedulerDBStorageResources(inherited Resources);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TcxSchedulerDBStorage.SetDataSource(
|
|||
|
|
AValue: TDataSource);
|
|||
|
|
begin
|
|||
|
|
DataController.DataSource := AValue;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TcxSchedulerDBStorage.SetFields(
|
|||
|
|
const AValue: TcxSchedulerDBStorageFields);
|
|||
|
|
begin
|
|||
|
|
Fields.Assign(AValue);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TcxSchedulerDBStorage.SetFieldNames(
|
|||
|
|
AValue: TcxSchedulerDBStorageFieldNames);
|
|||
|
|
begin
|
|||
|
|
FFieldNames.Assign(AValue);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TcxSchedulerDBStorage.SetResources(
|
|||
|
|
AValue: TcxSchedulerDBStorageResources);
|
|||
|
|
begin
|
|||
|
|
Resources.Assign(AValue);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
end.
|
|||
|
|
|