1446 lines
52 KiB
ObjectPascal
1446 lines
52 KiB
ObjectPascal
{*******************************************************************}
|
|
{ }
|
|
{ ExpressWeb Framework by Developer Express }
|
|
{ Visual Web Controls Library }
|
|
{ }
|
|
{ Copyright (c) 2000-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 EXPRESSWEB FRAMEWORK AND ALL }
|
|
{ ACCOMPANYING VCL CLASSES AS PART OF AN EXECUTABLE WEB }
|
|
{ APPLICATION 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 cxWebDBLookup;
|
|
|
|
{$I cxVer.inc}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, DB, DBConsts, TypInfo,
|
|
cxWebIntf, cxWebClasses, cxWebControls, cxWebStdCtrls, cxWebData,
|
|
cxWebDataCtrls, cxWebTypes, cxWebRender, cxWebImgList;
|
|
|
|
type
|
|
TcxCustomWebDBLookupDataBinding = class(TcxWebDataBinding)
|
|
private
|
|
FKeyFieldName: string;
|
|
FListSource: TcxCustomWebDataSource;
|
|
|
|
procedure SetKeyFieldName(Value: string);
|
|
procedure SetListSource(Value: TcxCustomWebDataSource);
|
|
protected
|
|
procedure SetDataSource(Value: TcxCustomWebDataSource); override;
|
|
public
|
|
destructor Destroy; override;
|
|
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
|
|
|
|
function KeyField: TcxCustomWebDataField;
|
|
function KeyFieldIndex: Integer;
|
|
published
|
|
property KeyFieldName: string read FKeyFieldName write SetKeyFieldName;
|
|
property ListSource: TcxCustomWebDataSource read FListSource write SetListSource;
|
|
end;
|
|
|
|
TcxCustomWebDBLookup = class(TcxCustomWebComboBox)
|
|
published
|
|
property OnChange;
|
|
end;
|
|
|
|
TcxWebDBLookup = class;
|
|
|
|
TcxWebLookupDataBinding = class(TcxCustomWebDBLookupDataBinding)
|
|
private
|
|
FListFieldName: string;
|
|
|
|
function GetWebDBLookup: TcxWebDBLookup;
|
|
procedure SetListFieldName(Value: string);
|
|
protected
|
|
{ IcxWebDataSourceSupport }
|
|
procedure ChangedDataLayout(Sender: TcxCustomWebDataSource); override;
|
|
public
|
|
function ListField: TcxCustomWebDataField;
|
|
function ListFieldIndex: Integer;
|
|
|
|
property WebDBLookup: TcxWebDBLookup read GetWebDBLookup;
|
|
published
|
|
property ListFieldName: string read FListFieldName write SetListFieldName;
|
|
end;
|
|
|
|
|
|
TcxWebDBLookup = class(TcxCustomWebDBLookup, IcxWebDataSourceSupport,
|
|
IcxWebViewDataSupport, IcxWebUpdateDataSupport)
|
|
private
|
|
FDataBinding: TcxWebLookupDataBinding;
|
|
procedure SetDataBinding(Value: TcxWebLookupDataBinding);
|
|
protected
|
|
procedure Loaded; override;
|
|
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
|
|
{ IcxWebProvidersSupport }
|
|
procedure ImplGetProviders(AList: TList); override;
|
|
{ IcxWebViewDataSupport }
|
|
procedure SetData(Value: Variant; DisplayText: string);
|
|
{ IcxWebUpdeteDataSupport }
|
|
function CanGetData: Boolean;
|
|
function GetData: Variant;
|
|
function GetDataTypes: TcxWebDataTypes;
|
|
{ renderers }
|
|
procedure RegisterRenderers; override;
|
|
{ scripts }
|
|
procedure ScriptsSubscription; override;
|
|
public
|
|
constructor Create(AOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
published
|
|
property DataBinding: TcxWebLookupDataBinding read FDataBinding write SetDataBinding
|
|
implements IcxWebDataSourceSupport, IcxWebViewDataSupport;
|
|
end;
|
|
|
|
TcxWebDBLookupRenderer = class(TcxWebComboBoxRenderer)
|
|
public
|
|
procedure WriteScripts; override;
|
|
class procedure GetScriptFiles(AList: TStrings); override;
|
|
end;
|
|
|
|
TcxWebDBLookupNS4Renderer = class(TcxWebComboBoxNS4Renderer)
|
|
public
|
|
procedure WriteScripts; override;
|
|
class procedure GetScriptFiles(AList: TStrings); override;
|
|
end;
|
|
|
|
TcxWebDBLookupOperaRenderer = class(TcxWebComboBoxOperaRenderer)
|
|
public
|
|
procedure WriteScripts; override;
|
|
class procedure GetScriptFiles(AList: TStrings); override;
|
|
end;
|
|
|
|
TcxWebExtDBLookup = class;
|
|
TcxWebExtLookupDataBinding = class(TcxCustomWebDBLookupDataBinding)
|
|
private
|
|
FListFieldIndex: Integer;
|
|
FListFieldNames: string;
|
|
FListFieldsList: TStrings;
|
|
|
|
function GetListFieldCount: Integer;
|
|
function GetListField(Index: Integer): TcxCustomWebDataField;
|
|
function GetWebExtDBLookup: TcxWebExtDBLookup;
|
|
procedure SetListFieldIndex(Value: Integer);
|
|
procedure SetListFieldNames(Value: string);
|
|
protected
|
|
procedure UpdateFieldsList; virtual;
|
|
{ IcxWebDataSourceSupport }
|
|
procedure ChangedDataLayout(Sender: TcxCustomWebDataSource); override;
|
|
public
|
|
constructor Create(AComponent: TComponent); override;
|
|
destructor Destroy; override;
|
|
function ListField: TcxCustomWebDataField;
|
|
|
|
property ListFieldCount: Integer read GetListFieldCount;
|
|
property ListFields[Index: Integer]: TcxCustomWebDataField read GetListField;
|
|
property WebExtDBLookup: TcxWebExtDBLookup read GetWebExtDBLookup;
|
|
published
|
|
property ListFieldIndex: Integer read FListFieldIndex write SetListFieldIndex;
|
|
property ListFieldNames: string read FListFieldNames write SetListFieldNames;
|
|
end;
|
|
|
|
TcxWebExtDBLookupEvent = (eleOnChange);
|
|
|
|
TcxWebExtDBLookupEventsHelper = class(TcxWebScriptEventsHelper)
|
|
protected
|
|
function EventName(const AEvent: Integer): string; override;
|
|
function EventProcParams(const AEvent: Integer): string; override;
|
|
function ScriptObject: string; override;
|
|
public
|
|
function EventTypeInfo: PTypeInfo; override;
|
|
end;
|
|
|
|
TcxWebExtDBLookup = class(TcxWebDBLookup, IcxWebDataSourceSupport)
|
|
private
|
|
FButtonImageIndex: Integer;
|
|
FButtonWidth: Integer;
|
|
FButtonStyles: TcxWebStyles;
|
|
FDataBinding: TcxWebExtLookupDataBinding;
|
|
FEditorStyles: TcxWebStyles;
|
|
FImages: TcxWebImageList;
|
|
FLookupHeight: Integer;
|
|
FLookupWidth: Integer;
|
|
FTextHeight: Integer;
|
|
|
|
function GetButtonStyles: TcxWebStyles;
|
|
function GetEditorStyles: TcxWebStyles;
|
|
procedure SetButtonStyles(AValue: TcxWebStyles);
|
|
procedure SetButtonWidth(AValue: Integer);
|
|
procedure SetEditorStyles(AValue: TcxWebStyles);
|
|
procedure SetDataBinding(Value: TcxWebExtLookupDataBinding);
|
|
procedure SetImages(Value: TcxWebImageList);
|
|
protected
|
|
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
|
|
|
|
procedure CalcTextHeight;
|
|
function GetDefaultHorzBordersSize: Integer; override;
|
|
function GetDefaultVertBordersSize: Integer; override;
|
|
function GetMaxHeight: Integer; override;
|
|
function GetMinHeight: Integer; override;
|
|
{ events }
|
|
function GetWebEventsHelper: TcxWebExtDBLookupEventsHelper;
|
|
class function GetWebEventsHelperClass: TcxWebEventsHelperClass; override;
|
|
property WebEventsHelper: TcxWebExtDBLookupEventsHelper read GetWebEventsHelper;
|
|
{ renderers }
|
|
procedure RegisterRenderers; override;
|
|
{ values }
|
|
procedure DoSetValues; override;
|
|
procedure RegisterValues; override;
|
|
public
|
|
constructor Create(AOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
published
|
|
property ButtonImageIndex: Integer read FButtonImageIndex write FButtonImageIndex;
|
|
property ButtonWidth: Integer read FButtonWidth write SetButtonWidth;
|
|
property ButtonStyles: TcxWebStyles read GetButtonStyles write SetButtonStyles;
|
|
property DataBinding: TcxWebExtLookupDataBinding read FDataBinding write SetDataBinding
|
|
implements IcxWebDataSourceSupport;
|
|
property EditorStyles: TcxWebStyles read GetEditorStyles write SetEditorStyles;
|
|
property Images: TcxWebImageList read FImages write SetImages;
|
|
property LookupHeight: Integer read FLookupHeight write FLookupHeight;
|
|
property LookupWidth: Integer read FLookupWidth write FLookupWidth;
|
|
end;
|
|
|
|
TcxWebExtDBLookupRenderer = class(TcxWebControlRenderer)
|
|
private
|
|
function GetWebExtDBLookup: TcxWebExtDBLookup;
|
|
function GetListSource: TcxCustomWebDataSource;
|
|
|
|
function ButtonColor: TcxWebColor;
|
|
function ButtonBottomWidth: Integer;
|
|
function ButtonBottomColor: TcxWebColor;
|
|
function ButtonLeftWidth: Integer;
|
|
function ButtonLeftColor: TcxWebColor;
|
|
function ButtonRightWidth: Integer;
|
|
function ButtonRightColor: TcxWebColor;
|
|
function ButtonTopWidth: Integer;
|
|
function ButtonTopColor: TcxWebColor;
|
|
protected
|
|
procedure WriteEditorButton; virtual;
|
|
procedure WriteLookup; virtual;
|
|
procedure WriteLookupTable; virtual;
|
|
procedure WriteLookupCell(ARecordIndex, AItemIndex: Integer); virtual;
|
|
procedure WriteLookupCellContent(ARecordIndex, AItemIndex: Integer); virtual;
|
|
procedure WriteLookupHeader; virtual;
|
|
procedure WriteTextEdit; virtual;
|
|
public
|
|
class procedure GetScriptFiles(AList: TStrings); override;
|
|
procedure WriteHiddenFormElements; override;
|
|
procedure WriteHTML; override;
|
|
procedure WriteScripts; override;
|
|
|
|
property ListSource: TcxCustomWebDataSource read GetListSource;
|
|
property WebExtDBLookup: TcxWebExtDBLookup read GetWebExtDBLookup;
|
|
end;
|
|
|
|
TcxWebExtDBLookupNS4Renderer = class(TcxWebExtDBLookupRenderer)
|
|
protected
|
|
procedure WriteLookup; override;
|
|
procedure WriteLookupCell(ARecordIndex, AItemIndex: Integer); override;
|
|
procedure WriteLookupHeader; override;
|
|
procedure WriteLookupTable; override;
|
|
public
|
|
class function IsBrowserSupported(AWebBrowser: TcxWebBrowserClass): Boolean; override;
|
|
procedure WriteHTML; override;
|
|
procedure WriteOutOfFormHTML; override;
|
|
end;
|
|
|
|
TcxWebExtDBLookupOperaRenderer = class(TcxWebExtDBLookupRenderer)
|
|
protected
|
|
procedure WriteLookup; override;
|
|
procedure WriteLookupCell(ARecordIndex, AItemIndex: Integer); override;
|
|
procedure WriteLookupTable; override;
|
|
public
|
|
class function IsBrowserSupported(AWebBrowser: TcxWebBrowserClass): Boolean; override;
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses SysUtils, Variants,
|
|
{$IFDEF VCL}
|
|
Graphics,
|
|
{$ENDIF}
|
|
cxWebColors, cxWebGraphics, cxWebUtils, cxWebDataUtils,
|
|
cxWebScriptFactory, cxWebConsts;
|
|
|
|
{ TcxCustomWebDBLookupDataBinding }
|
|
|
|
destructor TcxCustomWebDBLookupDataBinding.Destroy;
|
|
begin
|
|
ListSource := nil;
|
|
inherited;
|
|
end;
|
|
|
|
procedure TcxCustomWebDBLookupDataBinding.Notification(AComponent: TComponent; Operation: TOperation);
|
|
begin
|
|
inherited;
|
|
if (Operation = opRemove) and (AComponent = ListSource) then
|
|
ListSource := nil;
|
|
end;
|
|
|
|
function TcxCustomWebDBLookupDataBinding.KeyField: TcxCustomWebDataField;
|
|
begin
|
|
if ListSource <> nil then
|
|
Result := ListSource.FieldByName(KeyFieldName)
|
|
else Result := nil;
|
|
end;
|
|
|
|
function TcxCustomWebDBLookupDataBinding.KeyFieldIndex: Integer;
|
|
begin
|
|
if KeyField <> nil then
|
|
Result := KeyField.Index
|
|
else Result := -1;
|
|
end;
|
|
|
|
procedure TcxCustomWebDBLookupDataBinding.SetDataSource(Value: TcxCustomWebDataSource);
|
|
begin
|
|
if (ListSource <> nil) and (ListSource = Value) then
|
|
DatabaseError(SCircularDataLink);
|
|
inherited SetDataSource(Value);
|
|
end;
|
|
|
|
procedure TcxCustomWebDBLookupDataBinding.SetKeyFieldName(Value: string);
|
|
begin
|
|
if FKeyFieldName <> Value then
|
|
begin
|
|
FKeyFieldName := Value;
|
|
ChangedDataLayout(ListSource);
|
|
end;
|
|
end;
|
|
|
|
procedure TcxCustomWebDBLookupDataBinding.SetListSource(Value: TcxCustomWebDataSource);
|
|
begin
|
|
if FListSource <> Value then
|
|
begin
|
|
if (DataSource <> nil) and (DataSource = Value) then
|
|
DatabaseError(SCircularDataLink);
|
|
if (FListSource <> nil) and not (csDestroying in FListSource.ComponentState) then
|
|
begin
|
|
FListSource.UnRegisterClient(Component);
|
|
FListSource.RemoveFreeNotification(Component);
|
|
end;
|
|
FListSource := Value;
|
|
if FListSource <> nil then
|
|
begin
|
|
FListSource.FreeNotification(Component);
|
|
FListSource.RegisterClient(Component);
|
|
end;
|
|
ChangedDataLayout(FListSource);
|
|
end;
|
|
end;
|
|
|
|
{ TcxWebLookupDataBinding }
|
|
|
|
function TcxWebLookupDataBinding.ListField: TcxCustomWebDataField;
|
|
begin
|
|
if ListSource <> nil then
|
|
Result := ListSource.FieldByName(ListFieldName)
|
|
else Result := nil;
|
|
end;
|
|
|
|
function TcxWebLookupDataBinding.ListFieldIndex: Integer;
|
|
begin
|
|
if ListField <> nil then
|
|
Result := ListField.Index
|
|
else Result := -1;
|
|
end;
|
|
|
|
function TcxWebLookupDataBinding.GetWebDBLookup: TcxWebDBLookup;
|
|
begin
|
|
Result := Component as TcxWebDBLookup;
|
|
end;
|
|
|
|
procedure TcxWebLookupDataBinding.SetListFieldName(Value: string);
|
|
begin
|
|
if FListFieldName <> Value then
|
|
begin
|
|
FListFieldName := Value;
|
|
ChangedDataLayout(ListSource);
|
|
end;
|
|
end;
|
|
|
|
procedure TcxWebLookupDataBinding.ChangedDataLayout(Sender: TcxCustomWebDataSource);
|
|
var
|
|
I: Integer;
|
|
begin
|
|
if Sender = ListSource then
|
|
begin
|
|
WebDBLookup.Items.Clear;
|
|
if (ListField <> nil) and (KeyField <> nil) then
|
|
for I := 0 to ListSource.RecordCount - 1 do
|
|
with WebDBLookup.Items.Add do
|
|
begin
|
|
Text := ListSource.DisplayTexts[I, ListFieldIndex];
|
|
Value := ListSource.DisplayTexts[I, KeyFieldIndex];
|
|
end;
|
|
end;
|
|
inherited;
|
|
end;
|
|
|
|
{ TcxWebDBLookup }
|
|
|
|
constructor TcxWebDBLookup.Create(AOwner: TComponent);
|
|
begin
|
|
inherited;
|
|
FDataBinding := TcxWebLookupDataBinding.Create(Self);
|
|
end;
|
|
|
|
destructor TcxWebDBLookup.Destroy;
|
|
begin
|
|
FreeAndNil(FDataBinding);
|
|
inherited;
|
|
end;
|
|
|
|
procedure TcxWebDBLookup.ImplGetProviders(AList: TList);
|
|
begin
|
|
inherited ImplGetProviders(AList);
|
|
if DataBinding <> nil then
|
|
begin
|
|
if DataBinding.DataSource <> nil then AList.Add(DataBinding.DataSource);
|
|
if DataBinding.ListSource <> nil then AList.Add(DataBinding.ListSource);
|
|
end;
|
|
end;
|
|
|
|
procedure TcxWebDBLookup.Loaded;
|
|
begin
|
|
inherited;
|
|
DataBinding.Loaded;
|
|
end;
|
|
|
|
procedure TcxWebDBLookup.Notification(AComponent: TComponent; Operation: TOperation);
|
|
begin
|
|
inherited Notification(AComponent, Operation);
|
|
if DataBinding <> nil then
|
|
DataBinding.Notification(AComponent, Operation);
|
|
end;
|
|
|
|
procedure TcxWebDBLookup.RegisterRenderers;
|
|
begin
|
|
WebRenderHelper.RegisterRenderer(TcxWebDBLookupRenderer);
|
|
WebRenderHelper.RegisterRenderer(TcxWebDBLookupNS4Renderer);
|
|
WebRenderHelper.RegisterRenderer(TcxWebDBLookupOperaRenderer);
|
|
end;
|
|
|
|
procedure TcxWebDBLookup.ScriptsSubscription;
|
|
begin
|
|
inherited;
|
|
WebScriptsHelper.ScriptSubscription(TcxWebPostBackScript);
|
|
end;
|
|
|
|
procedure TcxWebDBLookup.SetData(Value: Variant; DisplayText: string);
|
|
begin
|
|
if Value <> Null then
|
|
ItemIndex := Items.IndexOfValue(DisplayText)
|
|
else ItemIndex := -1;
|
|
end;
|
|
|
|
function TcxWebDBLookup.CanGetData: Boolean;
|
|
begin
|
|
Result := True;
|
|
end;
|
|
|
|
function TcxWebDBLookup.GetData: Variant;
|
|
begin
|
|
if ItemIndex > -1 then
|
|
Result := Items[ItemIndex].Value
|
|
else Result := Null;
|
|
end;
|
|
|
|
function TcxWebDBLookup.GetDataTypes: TcxWebDataTypes;
|
|
begin
|
|
Result := [dtText];
|
|
end;
|
|
|
|
procedure TcxWebDBLookup.SetDataBinding(Value: TcxWebLookupDataBinding);
|
|
begin
|
|
DataBinding.Assign(Value);
|
|
end;
|
|
|
|
{ TcxWebDBLookupRenderer }
|
|
|
|
class procedure TcxWebDBLookupRenderer.GetScriptFiles(AList: TStrings);
|
|
begin
|
|
inherited GetScriptFiles(AList);
|
|
AList.Add(scxDataControlsScriptName);
|
|
end;
|
|
|
|
procedure TcxWebDBLookupRenderer.WriteScripts;
|
|
begin
|
|
inherited WriteScripts;
|
|
if TcxWebDBLookup(WebListBox).DataBinding.DataSource <> nil then
|
|
TcxWebDBLookup(WebListBox).DataBinding.WriteControlScripts(HTMLTextBuilder, 'CreateDBLookup');
|
|
end;
|
|
|
|
{ TcxWebDBLookupNS4Renderer }
|
|
|
|
class procedure TcxWebDBLookupNS4Renderer.GetScriptFiles(AList: TStrings);
|
|
begin
|
|
inherited GetScriptFiles(AList);
|
|
AList.Add(scxDataControlsScriptName);
|
|
end;
|
|
|
|
procedure TcxWebDBLookupNS4Renderer.WriteScripts;
|
|
begin
|
|
inherited WriteScripts;
|
|
if TcxWebDBLookup(WebListBox).DataBinding.DataSource <> nil then
|
|
TcxWebDBLookup(WebListBox).DataBinding.WriteControlScripts(HTMLTextBuilder, 'CreateDBLookup');
|
|
end;
|
|
|
|
{ TcxWebDBLookupOperaRenderer }
|
|
|
|
class procedure TcxWebDBLookupOperaRenderer.GetScriptFiles(AList: TStrings);
|
|
begin
|
|
inherited GetScriptFiles(AList);
|
|
AList.Add(scxDataControlsScriptName);
|
|
end;
|
|
|
|
procedure TcxWebDBLookupOperaRenderer.WriteScripts;
|
|
begin
|
|
inherited WriteScripts;
|
|
if TcxWebDBLookup(WebListBox).DataBinding.DataSource <> nil then
|
|
TcxWebDBLookup(WebListBox).DataBinding.WriteControlScripts(HTMLTextBuilder, 'CreateDBLookup');
|
|
end;
|
|
|
|
{ TcxWebExtLookupDataBinding }
|
|
|
|
constructor TcxWebExtLookupDataBinding.Create(AComponent: TComponent);
|
|
begin
|
|
inherited;
|
|
FListFieldsList := TStringList.Create;
|
|
end;
|
|
|
|
destructor TcxWebExtLookupDataBinding.Destroy;
|
|
begin
|
|
FListFieldsList.Free;
|
|
inherited;
|
|
end;
|
|
|
|
function TcxWebExtLookupDataBinding.ListField: TcxCustomWebDataField;
|
|
begin
|
|
if (0 <= ListFieldIndex) and (ListFieldIndex < ListFieldCount) then
|
|
Result := ListFields[ListFieldIndex]
|
|
else Result := nil;
|
|
end;
|
|
|
|
procedure TcxWebExtLookupDataBinding.UpdateFieldsList;
|
|
begin
|
|
FListFieldsList.Text := StringReplace(ListFieldNames, ';', #13#10, [rfReplaceAll, rfIgnoreCase]);
|
|
end;
|
|
|
|
procedure TcxWebExtLookupDataBinding.ChangedDataLayout(Sender: TcxCustomWebDataSource);
|
|
var
|
|
I: Integer;
|
|
begin
|
|
if Sender = ListSource then
|
|
begin
|
|
WebExtDBLookup.Items.Clear;
|
|
if (ListField <> nil) and (KeyField <> nil) then
|
|
for I := 0 to ListSource.RecordCount - 1 do
|
|
with WebExtDBLookup.Items.Add do
|
|
begin
|
|
Text := ListSource.DisplayTexts[I, ListField.Index];
|
|
Value := ListSource.DisplayTexts[I, KeyFieldIndex];
|
|
end;
|
|
end;
|
|
inherited;
|
|
end;
|
|
|
|
function TcxWebExtLookupDataBinding.GetListFieldCount: Integer;
|
|
begin
|
|
if ListSource <> nil then
|
|
Result := FListFieldsList.Count
|
|
else Result := 0;
|
|
end;
|
|
|
|
function TcxWebExtLookupDataBinding.GetListField(Index: Integer): TcxCustomWebDataField;
|
|
begin
|
|
if (ListSource <> nil) and (Index > -1) and (Index < FListFieldsList.Count) then
|
|
Result := ListSource.FieldByName(FListFieldsList.Strings[Index])
|
|
else Result := nil;
|
|
end;
|
|
|
|
function TcxWebExtLookupDataBinding.GetWebExtDBLookup: TcxWebExtDBLookup;
|
|
begin
|
|
Result := Component as TcxWebExtDBLookup;
|
|
end;
|
|
|
|
procedure TcxWebExtLookupDataBinding.SetListFieldIndex(Value: Integer);
|
|
begin
|
|
if FListFieldIndex <> Value then
|
|
begin
|
|
FListFieldIndex := Value;
|
|
ChangedDataLayout(ListSource);
|
|
end;
|
|
end;
|
|
|
|
procedure TcxWebExtLookupDataBinding.SetListFieldNames(Value: string);
|
|
begin
|
|
if FListFieldNames <> Value then
|
|
begin
|
|
FListFieldNames := Value;
|
|
UpdateFieldsList;
|
|
ChangedDataLayout(ListSource);
|
|
end;
|
|
end;
|
|
|
|
{ TcxWebExtDBLookupEventsHelper }
|
|
|
|
function TcxWebExtDBLookupEventsHelper.EventName(const AEvent: Integer): string;
|
|
const
|
|
cxHTMLEvent: array[TcxWebExtDBLookupEvent] of string = ('OnChange');
|
|
begin
|
|
Result := cxHTMLEvent[TcxWebExtDBLookupEvent(AEvent)];
|
|
end;
|
|
|
|
function TcxWebExtDBLookupEventsHelper.EventProcParams(const AEvent: Integer): string;
|
|
const
|
|
cxHTMLEventProcParams: array[TcxWebExtDBLookupEvent] of string =
|
|
('(Sender)');
|
|
begin
|
|
Result := cxHTMLEventProcParams[TcxWebExtDBLookupEvent(AEvent)];
|
|
end;
|
|
|
|
function TcxWebExtDBLookupEventsHelper.ScriptObject: string;
|
|
begin
|
|
Result := '_Lookup';
|
|
end;
|
|
|
|
function TcxWebExtDBLookupEventsHelper.EventTypeInfo: PTypeInfo;
|
|
begin
|
|
Result := TypeInfo(TcxWebExtDBLookupEvent);
|
|
end;
|
|
|
|
{ TcxWebExtDBLookup }
|
|
|
|
constructor TcxWebExtDBLookup.Create(AOwner: TComponent);
|
|
begin
|
|
inherited Create(AOwner);
|
|
CalcTextHeight;
|
|
if FTextHeight <> 0 then
|
|
FButtonWidth := FTextHeight
|
|
else
|
|
FButtonWidth := Height - GetVertBordersSize;
|
|
FLookupHeight := 200;
|
|
FLookupWidth := 400;
|
|
Width := 100;
|
|
|
|
FDataBinding := TcxWebExtLookupDataBinding.Create(Self);
|
|
end;
|
|
|
|
destructor TcxWebExtDBLookup.Destroy;
|
|
begin
|
|
FreeAndNil(FDataBinding);
|
|
FEditorStyles.Free;
|
|
FButtonStyles.Free;
|
|
inherited;
|
|
end;
|
|
|
|
function TcxWebExtDBLookup.GetButtonStyles: TcxWebStyles;
|
|
begin
|
|
if FButtonStyles = nil then
|
|
FButtonStyles := TcxWebStyles.Create(Self);
|
|
Result := FButtonStyles;
|
|
end;
|
|
|
|
function TcxWebExtDBLookup.GetEditorStyles: TcxWebStyles;
|
|
begin
|
|
if FEditorStyles = nil then
|
|
FEditorStyles := TcxWebStyles.Create(Self);
|
|
Result := FEditorStyles;
|
|
end;
|
|
|
|
procedure TcxWebExtDBLookup.Notification(AComponent: TComponent; Operation: TOperation);
|
|
begin
|
|
inherited Notification(AComponent, Operation);
|
|
if DataBinding <> nil then
|
|
DataBinding.Notification(AComponent, Operation);
|
|
if (AComponent = Images) and (Operation = opRemove) then
|
|
Images := nil;
|
|
end;
|
|
|
|
procedure TcxWebExtDBLookup.CalcTextHeight;
|
|
var
|
|
AFont: TcxWebFont;
|
|
begin
|
|
if Assigned(cxWebMetricsUtils) then
|
|
begin
|
|
if EditorStyles.Default <> nil then
|
|
AFont := EditorStyles.Default.Style.Font
|
|
else
|
|
AFont := Font;
|
|
FTextHeight := cxWebMetricsUtils.CalcEditHeight(AFont);
|
|
end
|
|
else
|
|
FTextHeight := 0;
|
|
end;
|
|
|
|
function TcxWebExtDBLookup.GetDefaultHorzBordersSize: Integer;
|
|
begin
|
|
Result := 2 + 2;
|
|
end;
|
|
|
|
function TcxWebExtDBLookup.GetDefaultVertBordersSize: Integer;
|
|
begin
|
|
Result := 2 + 2;
|
|
end;
|
|
|
|
function TcxWebExtDBLookup.GetMaxHeight: Integer;
|
|
begin
|
|
if FTextHeight <> 0 then
|
|
Result := FTextHeight + GetVertBordersSize
|
|
else Result := 0;
|
|
end;
|
|
|
|
function TcxWebExtDBLookup.GetMinHeight: Integer;
|
|
begin
|
|
if FTextHeight <> 0 then
|
|
Result := FTextHeight + GetVertBordersSize
|
|
else Result := 0;
|
|
end;
|
|
|
|
function TcxWebExtDBLookup.GetWebEventsHelper: TcxWebExtDBLookupEventsHelper;
|
|
begin
|
|
Result := inherited GetWebEventsHelper as TcxWebExtDBLookupEventsHelper;
|
|
end;
|
|
|
|
class function TcxWebExtDBLookup.GetWebEventsHelperClass: TcxWebEventsHelperClass;
|
|
begin
|
|
Result := TcxWebExtDBLookupEventsHelper;
|
|
end;
|
|
|
|
procedure TcxWebExtDBLookup.RegisterRenderers;
|
|
begin
|
|
WebRenderHelper.RegisterRenderer(TcxWebExtDBLookupRenderer);
|
|
WebRenderHelper.RegisterRenderer(TcxWebExtDBLookupNS4Renderer);
|
|
WebRenderHelper.RegisterRenderer(TcxWebExtDBLookupOperaRenderer);
|
|
end;
|
|
|
|
procedure TcxWebExtDBLookup.DoSetValues;
|
|
begin
|
|
ItemIndex := Items.IndexOfValue(WebValuesHelper.Values.Values[Name + 'KeyValue']);
|
|
end;
|
|
|
|
procedure TcxWebExtDBLookup.RegisterValues;
|
|
begin
|
|
WebValuesHelper.RegisterValue(Name + 'KeyValue', '');
|
|
end;
|
|
|
|
|
|
procedure TcxWebExtDBLookup.SetButtonStyles(AValue: TcxWebStyles);
|
|
begin
|
|
FButtonStyles.Assign(AValue);
|
|
end;
|
|
|
|
procedure TcxWebExtDBLookup.SetButtonWidth(AValue: Integer);
|
|
begin
|
|
if FButtonWidth <> AValue then
|
|
begin
|
|
if AValue < 0 then AValue := 0;
|
|
FButtonWidth := AValue;
|
|
end;
|
|
end;
|
|
|
|
procedure TcxWebExtDBLookup.SetEditorStyles(AValue: TcxWebStyles);
|
|
begin
|
|
FEditorStyles.Assign(AValue);
|
|
end;
|
|
|
|
procedure TcxWebExtDBLookup.SetDataBinding(Value: TcxWebExtLookupDataBinding);
|
|
begin
|
|
FDataBinding.Assign(Value);
|
|
end;
|
|
|
|
procedure TcxWebExtDBLookup.SetImages(Value: TcxWebImageList);
|
|
begin
|
|
if FImages <> Value then
|
|
begin
|
|
if Assigned(FImages) then
|
|
begin
|
|
FImages.RemoveFreeNotification(Self);
|
|
FImages.UnregisterClient(Self);
|
|
end;
|
|
FImages := Value;
|
|
if Assigned(FImages) then
|
|
begin
|
|
FImages.RegisterClient(Self);
|
|
FImages.FreeNotification(Self);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
{ TcxWebExtDBLookupRenderer }
|
|
|
|
function TcxWebExtDBLookupRenderer.ButtonColor: TcxWebColor;
|
|
begin
|
|
if (WebExtDBLookup.ButtonStyles.Default <> nil) and
|
|
(wsavColor in WebExtDBLookup.ButtonStyles.Default.Style.Shading.AssignedValues) then
|
|
Result := WebExtDBLookup.ButtonStyles.Default.Style.Shading.Color
|
|
else Result := $00C8D0D4;
|
|
end;
|
|
|
|
function TcxWebExtDBLookupRenderer.ButtonBottomWidth: Integer;
|
|
begin
|
|
if (WebExtDBLookup.ButtonStyles.Default <> nil) and
|
|
(wbavWidth in WebExtDBLookup.ButtonStyles.Default.Style.Borders.Bottom.AssignedValues) then
|
|
Result := WebExtDBLookup.ButtonStyles.Default.Style.Borders.Bottom.Width
|
|
else Result := 1;
|
|
end;
|
|
|
|
function TcxWebExtDBLookupRenderer.ButtonBottomColor: TcxWebColor;
|
|
begin
|
|
if (WebExtDBLookup.ButtonStyles.Default <> nil) and
|
|
(wbavColor in WebExtDBLookup.ButtonStyles.Default.Style.Borders.Bottom.AssignedValues) then
|
|
Result := WebExtDBLookup.ButtonStyles.Default.Style.Borders.Bottom.Color
|
|
else Result := clWebBlack;
|
|
end;
|
|
|
|
function TcxWebExtDBLookupRenderer.ButtonLeftWidth: Integer;
|
|
begin
|
|
if (WebExtDBLookup.ButtonStyles.Default <> nil) and
|
|
(wbavWidth in WebExtDBLookup.ButtonStyles.Default.Style.Borders.Left.AssignedValues) then
|
|
Result := WebExtDBLookup.ButtonStyles.Default.Style.Borders.Left.Width
|
|
else Result := 1;
|
|
end;
|
|
|
|
function TcxWebExtDBLookupRenderer.ButtonLeftColor: TcxWebColor;
|
|
begin
|
|
if (WebExtDBLookup.ButtonStyles.Default <> nil) and
|
|
(wbavColor in WebExtDBLookup.ButtonStyles.Default.Style.Borders.Left.AssignedValues) then
|
|
Result := WebExtDBLookup.ButtonStyles.Default.Style.Borders.Left.Color
|
|
else Result := clWebWhite;
|
|
end;
|
|
|
|
function TcxWebExtDBLookupRenderer.ButtonRightWidth: Integer;
|
|
begin
|
|
if (WebExtDBLookup.ButtonStyles.Default <> nil) and
|
|
(wbavWidth in WebExtDBLookup.ButtonStyles.Default.Style.Borders.Right.AssignedValues) then
|
|
Result := WebExtDBLookup.ButtonStyles.Default.Style.Borders.Right.Width
|
|
else Result := 1;
|
|
end;
|
|
|
|
function TcxWebExtDBLookupRenderer.ButtonRightColor: TcxWebColor;
|
|
begin
|
|
if (WebExtDBLookup.ButtonStyles.Default <> nil) and
|
|
(wbavColor in WebExtDBLookup.ButtonStyles.Default.Style.Borders.Right.AssignedValues) then
|
|
Result := WebExtDBLookup.ButtonStyles.Default.Style.Borders.Right.Color
|
|
else Result := clWebBlack;
|
|
end;
|
|
|
|
function TcxWebExtDBLookupRenderer.ButtonTopWidth: Integer;
|
|
begin
|
|
if (WebExtDBLookup.ButtonStyles.Default <> nil) and
|
|
(wbavWidth in WebExtDBLookup.ButtonStyles.Default.Style.Borders.Top.AssignedValues) then
|
|
Result := WebExtDBLookup.ButtonStyles.Default.Style.Borders.Top.Width
|
|
else Result := 1;
|
|
end;
|
|
|
|
function TcxWebExtDBLookupRenderer.ButtonTopColor: TcxWebColor;
|
|
begin
|
|
if (WebExtDBLookup.ButtonStyles.Default <> nil) and
|
|
(wbavColor in WebExtDBLookup.ButtonStyles.Default.Style.Borders.Top.AssignedValues) then
|
|
Result := WebExtDBLookup.ButtonStyles.Default.Style.Borders.Top.Color
|
|
else Result := clWebWhite;
|
|
end;
|
|
|
|
class procedure TcxWebExtDBLookupRenderer.GetScriptFiles(AList: TStrings);
|
|
begin
|
|
AList.Add(scxCommonScriptName);
|
|
AList.Add(scxLookupScriptName);
|
|
AList.Add(scxDataControlsScriptName);
|
|
end;
|
|
|
|
function TcxWebExtDBLookupRenderer.GetWebExtDBLookup: TcxWebExtDBLookup;
|
|
begin
|
|
Result := Component as TcxWebExtDBLookup;
|
|
end;
|
|
|
|
function TcxWebExtDBLookupRenderer.GetListSource: TcxCustomWebDataSource;
|
|
begin
|
|
Result := WebExtDBLookup.DataBinding.ListSource;
|
|
end;
|
|
|
|
procedure TcxWebExtDBLookupRenderer.WriteEditorButton;
|
|
begin
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTable);
|
|
HTMLTextBuilder.WriteAttribute(aHeight, WebExtDBLookup.Height);
|
|
HTMLTextBuilder.WriteAttribute(aWidth, WebExtDBLookup.ButtonWidth);
|
|
HTMLTextBuilder.WriteAttribute(aBorder, 0);
|
|
HTMLTextBuilder.WriteAttribute(aCellspacing, 0);
|
|
HTMLTextBuilder.WriteAttribute(aCellpadding, 0);
|
|
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTr, True, False);
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd, False, False);
|
|
HTMLTextBuilder.WriteAttribute(aBgcolor, cxWebColorToWebString(ButtonTopColor));
|
|
WriteInvisibleImage(ButtonLeftWidth, ButtonTopWidth);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd, False, True);
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd, True, False);
|
|
HTMLTextBuilder.WriteAttribute(aBgcolor, cxWebColorToWebString(ButtonTopColor));
|
|
WriteInvisibleImage(1, ButtonTopWidth);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd, False, True);
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd, True, False);
|
|
HTMLTextBuilder.WriteAttribute(aBgcolor, cxWebColorToWebString(ButtonTopColor));
|
|
WriteInvisibleImage(ButtonRightWidth, ButtonTopWidth);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd, False, False);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTr, False, True);
|
|
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTr);
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd, True, False);
|
|
HTMLTextBuilder.WriteAttribute(aBgcolor, cxWebColorToWebString(ButtonLeftColor));
|
|
WriteInvisibleImage(ButtonLeftWidth, 1);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd, False, True);
|
|
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd, True, False);
|
|
HTMLTextBuilder.WriteAttribute(aHeight, WebExtDBLookup.Height - ButtonBottomWidth - ButtonTopWidth);
|
|
HTMLTextBuilder.WriteAttribute(aWidth, 3000);
|
|
HTMLTextBuilder.WriteAttribute(aBgcolor, cxWebColorToWebString(ButtonColor));
|
|
HTMLTextBuilder.WriteAttribute(aAlign, 'center');
|
|
HTMLTextBuilder.WriteAttribute(aValign, 'center');
|
|
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagA, False, False);
|
|
HTMLTextBuilder.WriteAttribute(aId, WebExtDBLookup.Name + 'Button');
|
|
HTMLTextBuilder.WriteAttribute(aHref, Format('javascript:LookupButtonClick(''%s'');',
|
|
[WebExtDBLookup.Name]));
|
|
|
|
if (WebExtDBLookup.Images <> nil) and (WebExtDBLookup.Images.ValidIndex(WebExtDBLookup.ButtonImageIndex)) then
|
|
WebExtDBLookup.Images.Images[WebExtDBLookup.ButtonImageIndex].WriteHTML(HTMLTextBuilder)
|
|
else
|
|
begin
|
|
HTMLTextBuilder.WriteSingleTag(TcxHTMLTagImg, False, False);
|
|
HTMLTextBuilder.WriteAttribute(aSrc, QualifyImageFileName(scxdeDownImageName));
|
|
HTMLTextBuilder.WriteAttribute(aBorder, 0);
|
|
if WebExtDBLookup.ShowHint then
|
|
HTMLTextBuilder.WriteAttribute(aTitle, WebExtDBLookup.Hint);
|
|
end;
|
|
HTMLTextBuilder.WriteAttribute(aName, WebExtDBLookup.Name + 'ButtonImage');
|
|
HTMLTextBuilder.WriteAttribute(aAlign, 'absmiddle');
|
|
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagA, False, False);
|
|
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd, False, True);
|
|
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd, True, False);
|
|
HTMLTextBuilder.WriteAttribute(aBgcolor, cxWebColorToWebString(ButtonRightColor));
|
|
WriteInvisibleImage(ButtonRightWidth, 1);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd, False, True);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTr);
|
|
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTr, True, False);
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd, False, False);
|
|
HTMLTextBuilder.WriteAttribute(aBgcolor, cxWebColorToWebString(ButtonBottomColor));
|
|
WriteInvisibleImage(ButtonLeftWidth, ButtonBottomWidth);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd, False, True);
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd, True, False);
|
|
HTMLTextBuilder.WriteAttribute(aBgcolor, cxWebColorToWebString(ButtonBottomColor));
|
|
WriteInvisibleImage(1, ButtonBottomWidth);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd, False, True);
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd, True, False);
|
|
HTMLTextBuilder.WriteAttribute(aBgcolor, cxWebColorToWebString(ButtonBottomColor));
|
|
WriteInvisibleImage(ButtonRightWidth, ButtonBottomWidth);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd, False, False);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTr, False, True);
|
|
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTable);
|
|
end;
|
|
|
|
procedure TcxWebExtDBLookupRenderer.WriteLookup;
|
|
begin
|
|
if not WebExtDBLookup.IsDesigning then
|
|
begin
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagDiv);
|
|
HTMLTextBuilder.WriteAttribute(aId, WebExtDBLookup.Name + 'Lookup');
|
|
HTMLTextBuilder.WriteStyleAttribute(saWidth, WebExtDBLookup.LookupWidth, 'px');
|
|
HTMLTextBuilder.WriteStyleAttribute(saBorderWidth, 1, 'px');
|
|
HTMLTextBuilder.WriteStyleAttribute(saBorderStyle, 'solid');
|
|
HTMLTextBuilder.WriteStyleAttribute(saBackgroundColor, 'window');
|
|
HTMLTextBuilder.WriteStyleAttribute(saPosition, 'absolute');
|
|
HTMLTextBuilder.WriteStyleAttribute(saZIndex, WebExtDBLookup.ZIndex + 10000);
|
|
HTMLTextBuilder.WriteStyleAttribute(saVisibility, 'hidden');
|
|
|
|
WriteLookupHeader;
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagDiv);
|
|
HTMLTextBuilder.WriteAttribute(aId, WebExtDBLookup.Name + 'LookupTable');
|
|
HTMLTextBuilder.WriteStyleAttribute(saHeight, WebExtDBLookup.LookupHeight, 'px');
|
|
HTMLTextBuilder.WriteStyleAttribute(saWidth, WebExtDBLookup.LookupWidth, 'px');
|
|
HTMLTextBuilder.WriteStyleAttribute(saOverflow, 'auto');
|
|
WriteLookupTable;
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagDiv);
|
|
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagDiv);
|
|
end;
|
|
end;
|
|
|
|
procedure TcxWebExtDBLookupRenderer.WriteLookupTable;
|
|
var
|
|
I, J: Integer;
|
|
KeyValue: string;
|
|
begin
|
|
if ListSource <> nil then
|
|
begin
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTable);
|
|
HTMLTextBuilder.WriteAttribute(aBorder, 0);
|
|
HTMLTextBuilder.WriteAttribute(aCellpadding, 2);
|
|
HTMLTextBuilder.WriteAttribute(aCellspacing, 0);
|
|
HTMLTextBuilder.WriteAttribute(aWidth, '100%');
|
|
for I := 0 to WebExtDBLookup.Items.Count - 1 do
|
|
begin
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTr);
|
|
HTMLTextBuilder.WriteAttribute(aId, WebExtDBLookup.Name +
|
|
ListSource.DisplayTexts[I, WebExtDBLookup.DataBinding.KeyFieldIndex]);
|
|
HTMLTextBuilder.WriteStyleAttribute(saCursor, 'default');
|
|
KeyValue := HTMLString(ListSource.DisplayTexts[I, WebExtDBLookup.DataBinding.KeyFieldIndex]);
|
|
HTMLTextBuilder.WriteEventAttribute(eOnClick, Format('SelectLookupItem(''%s'', ''%s'');',
|
|
[WebExtDBLookup.Name, KeyValue]));
|
|
for J := 0 to WebExtDBLookup.DataBinding.ListFieldCount - 1 do
|
|
WriteLookupCell(I, J);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTr);
|
|
end;
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTable);
|
|
end;
|
|
end;
|
|
|
|
procedure TcxWebExtDBLookupRenderer.WriteLookupCell(ARecordIndex, AItemIndex: Integer);
|
|
var
|
|
AField: TcxCustomWebDataField;
|
|
begin
|
|
AField := WebExtDBLookup.DataBinding.ListFields[AItemIndex];
|
|
if AField = nil then exit;
|
|
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd, True, False);
|
|
if AItemIndex = WebExtDBLookup.DataBinding.ListFieldIndex then
|
|
HTMLTextBuilder.WriteAttribute(aId, WebExtDBLookup.Name +
|
|
ListSource.DisplayTexts[ARecordIndex, WebExtDBLookup.DataBinding.KeyFieldIndex] + 'ListCell');
|
|
WriteLookupCellContent(ARecordIndex, AItemIndex);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd, False, True);
|
|
end;
|
|
|
|
procedure TcxWebExtDBLookupRenderer.WriteLookupCellContent(ARecordIndex, AItemIndex: Integer);
|
|
var
|
|
Value: Variant;
|
|
AField: TcxCustomWebDataField;
|
|
APictureURL: string;
|
|
ImgHeight, ImgWidth: Integer;
|
|
begin
|
|
AField := WebExtDBLookup.DataBinding.ListFields[AItemIndex];
|
|
if AField.FieldHelper is TcxImageFieldHelper then
|
|
begin
|
|
HTMLTextBuilder.WriteSingleTag(TcxHTMLTagImg, False, False);
|
|
Value := ListSource.Values[ARecordIndex, AField.Index];
|
|
try
|
|
LoadImage(Value{$IFDEF VCL}, nil{$ENDIF}, APictureURL, ImgHeight, ImgWidth);
|
|
HTMLTextBuilder.WriteAttribute(aSrc, APictureURL);
|
|
except
|
|
HTMLTextBuilder.WriteAttribute(aAlt, '[IMAGE]');
|
|
end;
|
|
HTMLTextBuilder.WriteAttribute(aAlign, 'absmiddle');
|
|
HTMLTextBuilder.WriteAttribute(aHspace, 0);
|
|
HTMLTextBuilder.WriteAttribute(aVspace, 0);
|
|
end
|
|
else HTMLTextBuilder.WriteText(ListSource.DisplayTexts[ARecordIndex, AField.Index], False, False)
|
|
end;
|
|
|
|
procedure TcxWebExtDBLookupRenderer.WriteLookupHeader;
|
|
var
|
|
J: Integer;
|
|
AField: TcxCustomWebDataField;
|
|
begin
|
|
if WebExtDBLookup.DataBinding.ListSource <> nil then
|
|
begin
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTable);
|
|
HTMLTextBuilder.WriteAttribute(aBorder, 0);
|
|
HTMLTextBuilder.WriteAttribute(aCellpadding, 2);
|
|
HTMLTextBuilder.WriteAttribute(aCellspacing, 0);
|
|
HTMLTextBuilder.WriteAttribute(aWidth, '100%');
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTr);
|
|
for J := 0 to WebExtDBLookup.DataBinding.ListFieldCount - 1 do
|
|
begin
|
|
AField := WebExtDBLookup.DataBinding.ListFields[J];
|
|
if AField = nil then continue;
|
|
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd);
|
|
HTMLTextBuilder.WriteAttribute(aAlign, 'center');
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagStrong);
|
|
HTMLTextBuilder.WriteText(AField.DisplayLabel);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagStrong);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd);
|
|
end;
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTr);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTable);
|
|
end;
|
|
end;
|
|
|
|
procedure TcxWebExtDBLookupRenderer.WriteHTML;
|
|
begin
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTable);
|
|
WriteID;
|
|
WriteAttributes;
|
|
WritePosition;
|
|
WriteStyleAttributes;
|
|
HTMLTextBuilder.WriteAttribute(aBorder, 0);
|
|
HTMLTextBuilder.WriteAttribute(aCellpadding, 0);
|
|
HTMLTextBuilder.WriteAttribute(aCellspacing, 0);
|
|
HTMLTextBuilder.WriteAttribute(aHeight, WebExtDBLookup.Height);
|
|
HTMLTextBuilder.WriteAttribute(aWidth, WebExtDBLookup.Width);
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTr);
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd);
|
|
HTMLTextBuilder.WriteAttribute(aWidth, '100%');
|
|
HTMLTextBuilder.WriteAttribute(aValign, 'center');
|
|
WriteTextEdit;
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd);
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd);
|
|
HTMLTextBuilder.WriteAttribute(aValign, 'center');
|
|
WriteEditorButton;
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTr);
|
|
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTr);
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd);
|
|
HTMLTextBuilder.WriteAttribute(aColspan, 2);
|
|
WriteLookup;
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTr);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTable);
|
|
end;
|
|
|
|
procedure TcxWebExtDBLookupRenderer.WriteTextEdit;
|
|
begin
|
|
HTMLTextBuilder.WriteSingleTag(TcxHTMLTagInput);
|
|
HTMLTextBuilder.WriteAttribute(aType, 'text');
|
|
HTMLTextBuilder.WriteAttribute(aValue, WebExtDBLookup.Text);
|
|
HTMLTextBuilder.WriteAttribute(aReadOnly);
|
|
HTMLTextBuilder.WriteAttribute(aName, WebExtDBLookup.Name + 'Editor');
|
|
HTMLTextBuilder.WriteAttribute(aId, WebExtDBLookup.Name + 'Editor');
|
|
if WebExtDBLookup.EditorStyles.Default <> nil then
|
|
HTMLTextBuilder.WriteAttribute(aClass, WebExtDBLookup.EditorStyles.Default.FullName);
|
|
HTMLTextBuilder.WriteStyleAttribute(saWidth, WebExtDBLookup.Width - WebExtDBLookup.ButtonWidth, 'px');
|
|
HTMLTextBuilder.WriteStyleAttribute(saHeight, WebExtDBLookup.Height, 'px');
|
|
end;
|
|
|
|
procedure TcxWebExtDBLookupRenderer.WriteHiddenFormElements;
|
|
var
|
|
Value: string;
|
|
begin
|
|
if WebExtDBLookup.ItemIndex > -1 then
|
|
Value := WebExtDBLookup.Items[WebExtDBLookup.ItemIndex].Value
|
|
else Value := '';
|
|
WriteHiddenField(WebExtDBLookup.Name + 'KeyValue', Value);
|
|
end;
|
|
|
|
procedure TcxWebExtDBLookupRenderer.WriteScripts;
|
|
begin
|
|
inherited WriteScripts;
|
|
HTMLTextBuilder.WriteText('var _Lookup = CreateLookup();');
|
|
HTMLTextBuilder.WriteText(Format(' _Lookup.Name = "%s";', [WebExtDBLookup.Name]));
|
|
if not Assigned(WebExtDBLookup.OnChange) then
|
|
HTMLTextBuilder.WriteText(' _Lookup.AssignOnChange = false;');
|
|
WriteEvents;
|
|
if WebExtDBLookup.DataBinding.DataSource <> nil then
|
|
WebExtDBLookup.DataBinding.WriteControlScripts(HTMLTextBuilder, 'CreateDBExtLookup');
|
|
end;
|
|
|
|
{ TcxWebExtDBLookupNS4Renderer }
|
|
class function TcxWebExtDBLookupNS4Renderer.IsBrowserSupported(AWebBrowser: TcxWebBrowserClass): Boolean;
|
|
begin
|
|
Result := AWebBrowser = TcxWebBrowserNS4;
|
|
end;
|
|
|
|
procedure TcxWebExtDBLookupNS4Renderer.WriteHTML;
|
|
begin
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTable);
|
|
WriteID;
|
|
WriteAttributes;
|
|
WritePosition;
|
|
WriteStyleAttributes;
|
|
HTMLTextBuilder.WriteAttribute(aBorder, 0);
|
|
HTMLTextBuilder.WriteAttribute(aCellpadding, 0);
|
|
HTMLTextBuilder.WriteAttribute(aCellspacing, 0);
|
|
HTMLTextBuilder.WriteAttribute(aHeight, WebExtDBLookup.Height);
|
|
HTMLTextBuilder.WriteAttribute(aWidth, WebExtDBLookup.Width);
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTr);
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd);
|
|
HTMLTextBuilder.WriteAttribute(aWidth, '100%');
|
|
HTMLTextBuilder.WriteAttribute(aValign, 'center');
|
|
WriteTextEdit;
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd);
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd);
|
|
HTMLTextBuilder.WriteAttribute(aValign, 'center');
|
|
WriteEditorButton;
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTr);
|
|
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTr, True, False);
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd, False, False);
|
|
HTMLTextBuilder.WriteAttribute(aColspan, 2);
|
|
HTMLTextBuilder.WriteAttribute(aAlign, 'left');
|
|
HTMLTextBuilder.WriteAttribute(aHeight, 1);
|
|
WriteInvisibleImage(1, 1);
|
|
HTMLTextBuilder.WriteAttribute(aName, WebExtDBLookup.Name + 'PosImage');
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd, False, False);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTr, False, True);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTable);
|
|
end;
|
|
|
|
procedure TcxWebExtDBLookupNS4Renderer.WriteLookup;
|
|
var
|
|
J: Integer;
|
|
AField: TcxCustomWebDataField;
|
|
begin
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagLayer);
|
|
HTMLTextBuilder.WriteAttribute(aId, WebExtDBLookup.Name + 'Lookup');
|
|
HTMLTextBuilder.WriteAttribute(aHeight, WebExtDBLookup.LookupHeight);
|
|
HTMLTextBuilder.WriteAttribute(aWidth, WebExtDBLookup.LookupWidth);
|
|
HTMLTextBuilder.WriteAttribute(aBgcolor, 'white');
|
|
HTMLTextBuilder.WriteAttribute(aVisibility, 'hidden');
|
|
|
|
if WebExtDBLookup.DataBinding.ListSource <> nil then
|
|
begin
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTable);
|
|
HTMLTextBuilder.WriteAttribute(aBorder, 0);
|
|
HTMLTextBuilder.WriteAttribute(aCellpadding, 0);
|
|
HTMLTextBuilder.WriteAttribute(aCellspacing, 0);
|
|
HTMLTextBuilder.WriteAttribute(aWidth, '100%');
|
|
HTMLTextBuilder.WriteAttribute(aHeight, '100%');
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTr);
|
|
for J := 0 to WebExtDBLookup.DataBinding.ListFieldCount - 1 do
|
|
begin
|
|
AField := WebExtDBLookup.DataBinding.ListFields[J];
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd);
|
|
HTMLTextBuilder.WriteAttribute(aAlign, 'center');
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagStrong);
|
|
HTMLTextBuilder.WriteText(AField.DisplayLabel);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagStrong);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd);
|
|
end;
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd, True, False);
|
|
HTMLTextBuilder.WriteAttribute(aValign, 'top');
|
|
HTMLTextBuilder.WriteAttribute(aBgcolor, 'lightgrey');
|
|
HTMLTextBuilder.WriteAttribute(aWidth, 1);
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagA, False, False);
|
|
HTMLTextBuilder.WriteAttribute(aHref, Format('javascript:LookupScrollUp(''%s'');', [WebExtDBLookup.Name]));
|
|
HTMLTextBuilder.WriteSingleTag(TcxHTMLTagImg, False, False);
|
|
HTMLTextBuilder.WriteAttribute(aBorder, 0);
|
|
HTMLTextBuilder.WriteAttribute(aSrc, QualifyImageFileName(scxScrlUpImageName));
|
|
HTMLTextBuilder.WriteAttribute(aAlt, 'Prev page');
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagA, False, False);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd, False, True);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTr);
|
|
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTr);
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd, True, False);
|
|
HTMLTextBuilder.WriteAttribute(aAlign, 'left');
|
|
HTMLTextBuilder.WriteAttribute(aValign, 'top');
|
|
HTMLTextBuilder.WriteAttribute(aHeight, '100%');
|
|
HTMLTextBuilder.WriteAttribute(aWidth, '100%');
|
|
HTMLTextBuilder.WriteAttribute(aColspan, WebExtDBLookup.DataBinding.ListFieldCount);
|
|
WriteInvisibleImage(1, 1);
|
|
HTMLTextBuilder.WriteAttribute(aName, WebExtDBLookup.Name + 'TableLTImage');
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd, False, True);
|
|
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd, True, False);
|
|
HTMLTextBuilder.WriteAttribute(aBgcolor, 'lightgrey');
|
|
HTMLTextBuilder.WriteAttribute(aValign, 'bottom');
|
|
HTMLTextBuilder.WriteAttribute(aWidth, 1);
|
|
HTMLTextBuilder.WriteAttribute(aHeight, '100%');
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagA, False, False);
|
|
HTMLTextBuilder.WriteAttribute(aHref, Format('javascript:LookupScrollDown(''%s'');', [WebExtDBLookup.Name]));
|
|
HTMLTextBuilder.WriteSingleTag(TcxHTMLTagImg, False, False);
|
|
HTMLTextBuilder.WriteAttribute(aBorder, 0);
|
|
HTMLTextBuilder.WriteAttribute(aSrc, QualifyImageFileName(scxscrlDownImageName));
|
|
HTMLTextBuilder.WriteAttribute(aAlt, 'Next page');
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagA, False, False);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd, False, True);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTr);
|
|
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTr, True, False);
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd, False, False);
|
|
HTMLTextBuilder.WriteAttribute(aAlign, 'right');
|
|
HTMLTextBuilder.WriteAttribute(aValign, 'bottom');
|
|
HTMLTextBuilder.WriteAttribute(aHeight, 1);
|
|
HTMLTextBuilder.WriteAttribute(aWidth, '100%');
|
|
HTMLTextBuilder.WriteAttribute(aColspan, WebExtDBLookup.DataBinding.ListFieldCount);
|
|
WriteInvisibleImage(1, 1);
|
|
HTMLTextBuilder.WriteAttribute(aName, WebExtDBLookup.Name + 'TableRBImage');
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd, False, False);
|
|
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd, False, False);
|
|
HTMLTextBuilder.WriteAttribute(aBgcolor, 'lightgrey');
|
|
HTMLTextBuilder.WriteAttribute(aValign, 'bottom');
|
|
HTMLTextBuilder.WriteAttribute(aWidth, 1);
|
|
HTMLTextBuilder.WriteAttribute(aHeight, 1);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd, False, False);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTr, False, True);
|
|
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTable);
|
|
end;
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagLayer);
|
|
end;
|
|
|
|
procedure TcxWebExtDBLookupNS4Renderer.WriteLookupCell(ARecordIndex, AItemIndex: Integer);
|
|
var
|
|
AField: TcxCustomWebDataField;
|
|
KeyValue, ListValue: string;
|
|
begin
|
|
AField := WebExtDBLookup.DataBinding.ListFields[AItemIndex];
|
|
if AField = nil then exit;
|
|
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd, True, False);
|
|
if AItemIndex = WebExtDBLookup.DataBinding.ListFieldIndex then
|
|
HTMLTextBuilder.WriteAttribute(aId, WebExtDBLookup.Name +
|
|
ListSource.DisplayTexts[ARecordIndex, WebExtDBLookup.DataBinding.KeyFieldIndex] + 'ListCell');
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagA, False, False);
|
|
KeyValue := HTMLString(ListSource.DisplayTexts[ARecordIndex, WebExtDBLookup.DataBinding.KeyFieldIndex]);
|
|
ListValue := HTMLString(ListSource.DisplayTexts[ARecordIndex, WebExtDBLookup.DataBinding.ListField.Index]);
|
|
HTMLTextBuilder.WriteAttribute(aHref, Format('javascript:SelectLookupItem(''%s'', ''%s'', ''%s'');',
|
|
[WebExtDBLookup.Name, KeyValue, ListValue]));
|
|
WriteLookupCellContent(ARecordIndex, AItemIndex);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagA, False, False);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd, False, True);
|
|
end;
|
|
|
|
procedure TcxWebExtDBLookupNS4Renderer.WriteLookupHeader;
|
|
begin
|
|
end;
|
|
|
|
procedure TcxWebExtDBLookupNS4Renderer.WriteLookupTable;
|
|
var
|
|
I, J: Integer;
|
|
begin
|
|
if WebExtDBLookup.DataBinding.ListSource <> nil then
|
|
begin
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagLayer);
|
|
HTMLTextBuilder.WriteAttribute(aId, WebExtDBLookup.Name + 'LookupTable');
|
|
HTMLTextBuilder.WriteAttribute(aBgcolor, 'white');
|
|
HTMLTextBuilder.WriteAttribute(aHeight, WebExtDBLookup.LookupHeight);
|
|
HTMLTextBuilder.WriteAttribute(aWidth, WebExtDBLookup.LookupWidth);
|
|
HTMLTextBuilder.WriteAttribute(aVisibility, 'hidden');
|
|
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTable);
|
|
HTMLTextBuilder.WriteAttribute(aBorder, 0);
|
|
HTMLTextBuilder.WriteAttribute(aCellpadding, 2);
|
|
HTMLTextBuilder.WriteAttribute(aCellspacing, 0);
|
|
HTMLTextBuilder.WriteAttribute(aWidth, '100%');
|
|
for I := 0 to WebExtDBLookup.Items.Count - 1 do
|
|
begin
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTr);
|
|
for J := 0 to WebExtDBLookup.DataBinding.ListFieldCount - 1 do
|
|
WriteLookupCell(I, J);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTr);
|
|
end;
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTable);
|
|
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagLayer);
|
|
end;
|
|
end;
|
|
|
|
procedure TcxWebExtDBLookupNS4Renderer.WriteOutOfFormHTML;
|
|
begin
|
|
WriteLookup;
|
|
WriteLookupTable;
|
|
end;
|
|
|
|
{ TcxWebExtDBLookupOperaRenderer }
|
|
|
|
class function TcxWebExtDBLookupOperaRenderer.IsBrowserSupported(
|
|
AWebBrowser: TcxWebBrowserClass): Boolean;
|
|
begin
|
|
Result := AWebBrowser = TcxWebBrowserOpera;
|
|
end;
|
|
|
|
procedure TcxWebExtDBLookupOperaRenderer.WriteLookup;
|
|
begin
|
|
if not WebExtDBLookup.IsDesigning then
|
|
begin
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagDiv);
|
|
HTMLTextBuilder.WriteAttribute(aId, WebExtDBLookup.Name + 'Lookup');
|
|
HTMLTextBuilder.WriteStyleAttribute(saWidth, WebExtDBLookup.LookupWidth, 'px');
|
|
HTMLTextBuilder.WriteStyleAttribute(saBorderWidth, 1, 'px');
|
|
HTMLTextBuilder.WriteStyleAttribute(saBorderStyle, 'solid');
|
|
HTMLTextBuilder.WriteStyleAttribute(saBackgroundColor, 'window');
|
|
HTMLTextBuilder.WriteStyleAttribute(saPosition, 'absolute');
|
|
HTMLTextBuilder.WriteStyleAttribute(saZIndex, WebExtDBLookup.ZIndex + 10000);
|
|
HTMLTextBuilder.WriteStyleAttribute(saVisibility, 'hidden');
|
|
|
|
WriteLookupHeader;
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagDiv);
|
|
HTMLTextBuilder.WriteAttribute(aId, WebExtDBLookup.Name + 'LookupTable');
|
|
HTMLTextBuilder.WriteStyleAttribute(saWidth, WebExtDBLookup.LookupWidth, 'px');
|
|
WriteLookupTable;
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagDiv);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagDiv);
|
|
end;
|
|
end;
|
|
|
|
procedure TcxWebExtDBLookupOperaRenderer.WriteLookupCell(ARecordIndex,
|
|
AItemIndex: Integer);
|
|
var
|
|
AField: TcxCustomWebDataField;
|
|
KeyValue, ListValue: string;
|
|
begin
|
|
AField := WebExtDBLookup.DataBinding.ListFields[AItemIndex];
|
|
if AField = nil then exit;
|
|
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd, True, False);
|
|
KeyValue := HTMLString(ListSource.DisplayTexts[ARecordIndex, WebExtDBLookup.DataBinding.KeyFieldIndex]);
|
|
ListValue := HTMLString(ListSource.DisplayTexts[ARecordIndex, WebExtDBLookup.DataBinding.ListField.Index]);
|
|
HTMLTextBuilder.WriteEventAttribute(eOnClick, Format('SelectLookupItem(''%s'', ''%s'', ''%s'');',
|
|
[WebExtDBLookup.Name, KeyValue, ListValue]));
|
|
WriteLookupCellContent(ARecordIndex, AItemIndex);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd, False, True);
|
|
end;
|
|
|
|
procedure TcxWebExtDBLookupOperaRenderer.WriteLookupTable;
|
|
var
|
|
I, J: Integer;
|
|
begin
|
|
if ListSource <> nil then
|
|
begin
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTable);
|
|
HTMLTextBuilder.WriteAttribute(aBorder, 0);
|
|
HTMLTextBuilder.WriteAttribute(aCellpadding, 2);
|
|
HTMLTextBuilder.WriteAttribute(aCellspacing, 0);
|
|
HTMLTextBuilder.WriteAttribute(aWidth, '100%');
|
|
for I := 0 to WebExtDBLookup.Items.Count - 1 do
|
|
begin
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTr);
|
|
HTMLTextBuilder.WriteAttribute(aId, WebExtDBLookup.Name +
|
|
ListSource.DisplayTexts[I, WebExtDBLookup.DataBinding.KeyFieldIndex]);
|
|
HTMLTextBuilder.WriteStyleAttribute(saCursor, 'default');
|
|
for J := 0 to WebExtDBLookup.DataBinding.ListFieldCount - 1 do
|
|
WriteLookupCell(I, J);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTr);
|
|
end;
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTable);
|
|
end;
|
|
end;
|
|
|
|
initialization
|
|
RegisterClasses([TcxWebDBLookup, TcxWebExtDBLookup]);
|
|
|
|
end.
|
|
|