git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.DevExpressVCL@32 05c56307-c608-d34a-929d-697000501d7a
1040 lines
38 KiB
ObjectPascal
1040 lines
38 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 cxWebDataNavigator;
|
|
|
|
{$I cxVer.inc}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, TypInfo, Contnrs, SysUtils,
|
|
cxWebIntf, cxWebClasses, cxWebControls, cxWebTypes, cxWebMenus, cxWebImgList,
|
|
cxWebRender;
|
|
|
|
const
|
|
cxWebDataNavigatorBitmapHeight = 24;
|
|
cxWebDataNavigatorBitmapWidth = 24;
|
|
|
|
type
|
|
TcxWebDataNavigatorButtons = class;
|
|
TcxCustomWebDataNavigator = class;
|
|
|
|
TcxWebNavigatorButtonType = (nbFirst, nbPrevPage, nbPrev, nbPageSize, nbApplyPageSize,
|
|
nbNext, nbNextPage, nbLast, nbInsert, nbEdit, nbDelete, nbPost, nbCancel, nbRefresh, nbCustom);
|
|
|
|
TcxWebDataNavigatorButton = class(TCollectionItem)
|
|
private
|
|
FButtonType: TcxWebNavigatorButtonType;
|
|
FHint: string;
|
|
FImageIndex: Integer;
|
|
FVisible: Boolean;
|
|
FOnClick: TNotifyEvent;
|
|
|
|
function GetButtons: TcxWebDataNavigatorButtons;
|
|
function GetNavigator: TcxCustomWebDataNavigator;
|
|
procedure SetButtonType(Value: TcxWebNavigatorButtonType);
|
|
procedure SetHint(Value: string);
|
|
procedure SetImageIndex(Value: Integer);
|
|
procedure SetVisible(Value: Boolean);
|
|
protected
|
|
function GetDisplayName: string; override;
|
|
public
|
|
constructor Create(Collection: TCollection); override;
|
|
|
|
property Buttons: TcxWebDataNavigatorButtons read GetButtons;
|
|
property Navigator: TcxCustomWebDataNavigator read GetNavigator;
|
|
published
|
|
property ButtonType: TcxWebNavigatorButtonType read FButtonType write SetButtonType;
|
|
property Hint: string read FHint write SetHint;
|
|
property ImageIndex: Integer read FImageIndex write SetImageIndex default -1;
|
|
property Visible: Boolean read FVisible write SetVisible default True;
|
|
|
|
property OnClick: TNotifyEvent read FOnClick write FOnClick;
|
|
end;
|
|
|
|
TcxWebDataNavigatorButtons = class(TCollection)
|
|
private
|
|
FNavigator: TcxCustomWebDataNavigator;
|
|
FUpdateLock: Integer;
|
|
|
|
function GetItem(Index: Integer): TcxWebDataNavigatorButton;
|
|
procedure SetItem(Index: Integer; Value: TcxWebDataNavigatorButton);
|
|
protected
|
|
function GetOwner: TPersistent; override;
|
|
procedure Update(Item: TCollectionItem); override;
|
|
|
|
procedure CreateButton(AType: TcxWebNavigatorButtonType; AHint: string;
|
|
AImageIndex: Integer; AVisible: Boolean);
|
|
|
|
procedure BeginUpdateNavigator;
|
|
procedure EndUpdateNavigator;
|
|
procedure UpdateNavigatorContext; virtual;
|
|
procedure UpdateNavigatorWidth; virtual;
|
|
public
|
|
constructor Create(ANavigator: TcxCustomWebDataNavigator);
|
|
function Add: TcxWebDataNavigatorButton;
|
|
procedure CreateDefaultButtons; virtual;
|
|
|
|
property Navigator: TcxCustomWebDataNavigator read FNavigator;
|
|
property Items[Index: Integer]: TcxWebDataNavigatorButton read GetItem write SetItem; default;
|
|
end;
|
|
|
|
TcxWebNavigatorEvent = (neOnButtonClick, neOnChangePageSize);
|
|
|
|
TcxWebNavigatorEventsHelper = 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;
|
|
|
|
TcxChangePageSizeEvent = procedure (Sender: TObject; PageSize: Integer) of object;
|
|
|
|
TcxCustomWebDataNavigator = class(TcxWebControl)
|
|
private
|
|
FButtons: TcxWebDataNavigatorButtons;
|
|
FButtonWidth: Integer;
|
|
FImages: TcxWebImageList;
|
|
FPageSize: Integer;
|
|
FOnChangePageSize: TcxChangePageSizeEvent;
|
|
|
|
function GetButtonCount: Integer;
|
|
procedure SetButtons(Value: TcxWebDataNavigatorButtons);
|
|
procedure SetImages(Value: TcxWebImageList);
|
|
procedure SetPageSize(Value: Integer);
|
|
|
|
procedure WebClick(const AParameters: TcxActionParameters);
|
|
procedure WebChangePageSize(const AParameters: TcxActionParameters);
|
|
protected
|
|
procedure Loaded; override;
|
|
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
|
|
{ Size Correction }
|
|
procedure CheckNewSize(var ALeft, ATop, ANewWidth, ANewHeight: Integer); override;
|
|
function GetMinHeight: Integer; override;
|
|
function GetMinWidth: Integer; override;
|
|
procedure UpdateButtonWidth(AWidth: Integer); virtual;
|
|
procedure UpdateWidth; virtual;
|
|
{ actions }
|
|
procedure RegisterActions; override;
|
|
{ events }
|
|
function GetWebEventsHelper: TcxWebNavigatorEventsHelper;
|
|
class function GetWebEventsHelperClass: TcxWebEventsHelperClass; override;
|
|
property WebEventsHelper: TcxWebNavigatorEventsHelper read GetWebEventsHelper;
|
|
{ values }
|
|
procedure DoSetValues; override;
|
|
procedure RegisterValues; override;
|
|
{ renderers }
|
|
procedure RegisterRenderers; override;
|
|
{ scripts }
|
|
procedure ScriptsSubscription; override;
|
|
public
|
|
constructor Create(AOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
|
|
property ButtonCount: Integer read GetButtonCount;
|
|
property ButtonWidth: Integer read FButtonWidth;
|
|
published
|
|
property Buttons: TcxWebDataNavigatorButtons read FButtons write SetButtons;
|
|
property Height;
|
|
property Images: TcxWebImageList read FImages write SetImages;
|
|
property PageSize: Integer read FPageSize write SetPageSize;
|
|
property PopupMenu;
|
|
property PopupShowingType;
|
|
property Styles;
|
|
property Width;
|
|
|
|
property OnChangePageSize: TcxChangePageSizeEvent read FOnChangePageSize write FOnChangePageSize;
|
|
end;
|
|
|
|
TcxNavigatorButtonStyle = class(TcxInternalWebStyle)
|
|
class function GetName: string; override;
|
|
class procedure WriteStyle(HTMLTextBuilder: TcxHTMLTextBuilder); override;
|
|
end;
|
|
|
|
TcxCustomWebDataNavigatorRenderer = class(TcxWebControlRenderer)
|
|
private
|
|
function GetWebDataNavigator: TcxCustomWebDataNavigator;
|
|
protected
|
|
procedure SetDefaultStyleProc(const Index: Integer; var AScript: string);
|
|
procedure SetHoverStyleProc(const Index: Integer; var AScript: string);
|
|
procedure WriteButtonEvents(const Index: Integer);
|
|
|
|
procedure WriteButtonAction(Index: Integer); virtual;
|
|
procedure WriteButtonHint(Index: Integer); virtual;
|
|
procedure WriteButton(Index: Integer); virtual;
|
|
procedure WriteEdit; virtual;
|
|
|
|
function GetDefaultStyleName: string;
|
|
property DefaultStyleName: string read GetDefaultStyleName;
|
|
public
|
|
procedure WriteHTML; override;
|
|
class procedure GetScriptFiles(AList: TStrings); override;
|
|
procedure WriteScripts; override;
|
|
class procedure WriteStyles(AHTMLTextBuilder: TcxHTMLTextBuilder); override;
|
|
|
|
property WebDataNavigator: TcxCustomWebDataNavigator read GetWebDataNavigator;
|
|
end;
|
|
|
|
TcxCustomWebDataNavigatorNS4Renderer = class(TcxCustomWebDataNavigatorRenderer)
|
|
protected
|
|
procedure WriteButtonAction(Index: Integer); override;
|
|
procedure WriteButton(Index: Integer); override;
|
|
procedure WriteEdit; override;
|
|
public
|
|
class function IsBrowserSupported(AWebBrowser: TcxWebBrowserClass): Boolean; override;
|
|
end;
|
|
|
|
TcxCustomWebDataNavigatorNS6Renderer = class(TcxCustomWebDataNavigatorRenderer)
|
|
protected
|
|
procedure WriteButtonAction(Index: Integer); override;
|
|
procedure WriteButton(Index: Integer); override;
|
|
public
|
|
class function IsBrowserSupported(AWebBrowser: TcxWebBrowserClass): Boolean; override;
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses StrUtils,
|
|
{$IFDEF VCL}
|
|
Graphics,
|
|
{$ENDIF}
|
|
cxWebScriptFactory, cxWebConsts, cxWebUtils, cxWebColors, cxWebGraphics;
|
|
|
|
const
|
|
cxWebNavigatorImgs: array[TcxWebNavigatorButtonType] of string = (scxnbFirstImageName,
|
|
scxnbPriorPageImageName, scxnbPriorImageName, '', scxnbPgSizeImageName,
|
|
scxnbNextImageName, scxnbNextPageImageName, scxnbLastImageName, scxnbInsertImageName,
|
|
scxnbEditImageName, scxnbDeleteImageName, scxnbPostImageName, scxnbCancelImageName,
|
|
scxnbRefreshImageName, '');
|
|
|
|
{ TcxWebDataNavigatorButton }
|
|
|
|
constructor TcxWebDataNavigatorButton.Create(Collection: TCollection);
|
|
begin
|
|
inherited;
|
|
|
|
FButtonType := nbCustom;
|
|
FImageIndex := -1;
|
|
FVisible := True;
|
|
end;
|
|
|
|
function TcxWebDataNavigatorButton.GetDisplayName: string;
|
|
begin
|
|
Result := GetEnumName(TypeInfo(TcxWebNavigatorButtonType), Integer(ButtonType));
|
|
end;
|
|
|
|
function TcxWebDataNavigatorButton.GetButtons: TcxWebDataNavigatorButtons;
|
|
begin
|
|
Result := TcxWebDataNavigatorButtons(Collection);
|
|
end;
|
|
|
|
function TcxWebDataNavigatorButton.GetNavigator: TcxCustomWebDataNavigator;
|
|
begin
|
|
if Collection <> nil then
|
|
Result := TcxWebDataNavigatorButtons(Collection).Navigator
|
|
else Result := nil;
|
|
end;
|
|
|
|
procedure TcxWebDataNavigatorButton.SetButtonType(Value: TcxWebNavigatorButtonType);
|
|
begin
|
|
if FButtonType <> Value then
|
|
begin
|
|
FButtonType := Value;
|
|
Buttons.UpdateNavigatorContext;
|
|
end;
|
|
end;
|
|
|
|
procedure TcxWebDataNavigatorButton.SetHint(Value: string);
|
|
begin
|
|
if FHint <> Value then
|
|
begin
|
|
FHint := Value;
|
|
end;
|
|
end;
|
|
|
|
procedure TcxWebDataNavigatorButton.SetImageIndex(Value: Integer);
|
|
begin
|
|
if FImageIndex <> Value then
|
|
begin
|
|
FImageIndex := Value;
|
|
Buttons.UpdateNavigatorContext;
|
|
end;
|
|
end;
|
|
|
|
procedure TcxWebDataNavigatorButton.SetVisible(Value: Boolean);
|
|
begin
|
|
if FVisible <> Value then
|
|
begin
|
|
FVisible := Value;
|
|
Buttons.UpdateNavigatorWidth;
|
|
end;
|
|
end;
|
|
|
|
{ TcxWebDataNavigatorButtons }
|
|
|
|
constructor TcxWebDataNavigatorButtons.Create(ANavigator: TcxCustomWebDataNavigator);
|
|
begin
|
|
inherited Create(TcxWebDataNavigatorButton);
|
|
FUpdateLock := 0;
|
|
FNavigator := ANavigator;
|
|
CreateDefaultButtons;
|
|
end;
|
|
|
|
function TcxWebDataNavigatorButtons.Add: TcxWebDataNavigatorButton;
|
|
begin
|
|
Result := TcxWebDataNavigatorButton(inherited Add);
|
|
end;
|
|
|
|
function TcxWebDataNavigatorButtons.GetOwner: TPersistent;
|
|
begin
|
|
Result := Navigator;
|
|
end;
|
|
|
|
procedure TcxWebDataNavigatorButtons.Update(Item: TCollectionItem);
|
|
begin
|
|
inherited;
|
|
UpdateNavigatorWidth;
|
|
end;
|
|
|
|
procedure TcxWebDataNavigatorButtons.CreateButton(AType: TcxWebNavigatorButtonType; AHint: string;
|
|
AImageIndex: Integer; AVisible: Boolean);
|
|
begin
|
|
with Add do
|
|
begin
|
|
ButtonType := AType;
|
|
Hint := AHint;
|
|
ImageIndex := AImageIndex;
|
|
Visible := AVisible;
|
|
end;
|
|
end;
|
|
|
|
procedure TcxWebDataNavigatorButtons.CreateDefaultButtons;
|
|
begin
|
|
BeginUpdateNavigator;
|
|
try
|
|
Clear;
|
|
CreateButton(nbFirst, 'First record', -1, True);
|
|
CreateButton(nbPrevPage, 'Prior page', -1, True);
|
|
CreateButton(nbPrev, 'Prior record', -1, True);
|
|
CreateButton(nbPageSize, 'Page size', -1, True);
|
|
CreateButton(nbApplyPageSize, 'Apply page size', -1, True);
|
|
CreateButton(nbNext, 'Next record', -1, True);
|
|
CreateButton(nbNextPage, 'Next page', -1, True);
|
|
CreateButton(nbLast, 'Last record', -1, True);
|
|
CreateButton(nbInsert, 'Insert record', -1, True);
|
|
CreateButton(nbEdit, 'Edit record', -1, True);
|
|
CreateButton(nbDelete, 'Delete record', -1, True);
|
|
CreateButton(nbPost, 'Post changes', -1, True);
|
|
CreateButton(nbCancel, 'Cancel changes', -1, True);
|
|
CreateButton(nbRefresh, 'Refresh', -1, True);
|
|
finally
|
|
EndUpdateNavigator;
|
|
end;
|
|
end;
|
|
|
|
procedure TcxWebDataNavigatorButtons.BeginUpdateNavigator;
|
|
begin
|
|
Inc(FUpdateLock);
|
|
end;
|
|
|
|
procedure TcxWebDataNavigatorButtons.EndUpdateNavigator;
|
|
begin
|
|
Dec(FUpdateLock);
|
|
if FUpdateLock = 0 then UpdateNavigatorWidth;
|
|
end;
|
|
|
|
procedure TcxWebDataNavigatorButtons.UpdateNavigatorContext;
|
|
begin
|
|
if (FUpdateLock = 0) and (Navigator <> nil) then
|
|
Navigator.UpdateDesignerContext;
|
|
end;
|
|
|
|
procedure TcxWebDataNavigatorButtons.UpdateNavigatorWidth;
|
|
begin
|
|
if (FUpdateLock = 0) and (Navigator <> nil) then
|
|
Navigator.UpdateWidth;
|
|
end;
|
|
|
|
function TcxWebDataNavigatorButtons.GetItem(Index: Integer): TcxWebDataNavigatorButton;
|
|
begin
|
|
Result := TcxWebDataNavigatorButton(inherited Items[Index]);
|
|
end;
|
|
|
|
procedure TcxWebDataNavigatorButtons.SetItem(Index: Integer; Value: TcxWebDataNavigatorButton);
|
|
begin
|
|
Items[Index].Assign(Value);
|
|
end;
|
|
|
|
{ TcxWebNavigatorEventsHelper }
|
|
|
|
function TcxWebNavigatorEventsHelper.EventName(const AEvent: Integer): string;
|
|
const
|
|
cxHTMLEvent: array[TcxWebNavigatorEvent] of string = ('OnButtonClick',
|
|
'OnChangePageSize');
|
|
begin
|
|
Result := cxHTMLEvent[TcxWebNavigatorEvent(AEvent)];
|
|
end;
|
|
|
|
function TcxWebNavigatorEventsHelper.EventProcParams(const AEvent: Integer): string;
|
|
const
|
|
cxHTMLEventProcParams: array[TcxWebNavigatorEvent] of string = ('(Sender, Button)',
|
|
'(Sender, PageSize)');
|
|
begin
|
|
Result := cxHTMLEventProcParams[TcxWebNavigatorEvent(AEvent)];
|
|
end;
|
|
|
|
function TcxWebNavigatorEventsHelper.ScriptObject: string;
|
|
begin
|
|
Result := '_DataNavigator';
|
|
end;
|
|
|
|
function TcxWebNavigatorEventsHelper.EventTypeInfo: PTypeInfo;
|
|
begin
|
|
Result := TypeInfo(TcxWebNavigatorEvent);
|
|
end;
|
|
|
|
{ TcxCustomWebDataNavigator }
|
|
|
|
constructor TcxCustomWebDataNavigator.Create(AOwner: TComponent);
|
|
begin
|
|
inherited Create(AOwner);
|
|
FButtons := TcxWebDataNavigatorButtons.Create(Self);
|
|
|
|
Height := 24;
|
|
FPageSize := 5;
|
|
Width := 336;
|
|
Width := ButtonWidth * ButtonCount;
|
|
end;
|
|
|
|
destructor TcxCustomWebDataNavigator.Destroy;
|
|
begin
|
|
FButtons.Free;
|
|
inherited Destroy;
|
|
end;
|
|
|
|
function TcxCustomWebDataNavigator.GetButtonCount: Integer;
|
|
begin
|
|
if Buttons <> nil then
|
|
Result := Buttons.Count
|
|
else Result := 0;
|
|
end;
|
|
|
|
procedure TcxCustomWebDataNavigator.SetButtons(Value: TcxWebDataNavigatorButtons);
|
|
begin
|
|
Assign(Value);
|
|
end;
|
|
|
|
procedure TcxCustomWebDataNavigator.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;
|
|
|
|
procedure TcxCustomWebDataNavigator.SetPageSize(Value: Integer);
|
|
begin
|
|
if FPageSize <> Value then
|
|
begin
|
|
FPageSize := Value;
|
|
if not IsLoading and Assigned(FOnChangePageSize) then
|
|
FOnChangePageSize(Self, FPageSize);
|
|
end;
|
|
end;
|
|
|
|
procedure TcxCustomWebDataNavigator.WebClick(const AParameters: TcxActionParameters);
|
|
var
|
|
ButtonIndex: Integer;
|
|
begin
|
|
ButtonIndex := StrToInt(GetActionParameter(AParameters.ParamString, 0));
|
|
if Assigned(Buttons[ButtonIndex].OnClick) then
|
|
Buttons[ButtonIndex].OnClick(Self);
|
|
end;
|
|
|
|
procedure TcxCustomWebDataNavigator.WebChangePageSize(const AParameters: TcxActionParameters);
|
|
begin
|
|
PageSize := StrToInt(GetActionParameter(AParameters.ParamString, 0));
|
|
if Assigned(FOnChangePageSize) then FOnChangePageSize(Self, FPageSize);
|
|
end;
|
|
|
|
procedure TcxCustomWebDataNavigator.DoSetValues;
|
|
begin
|
|
FPageSize := StrToInt(WebValuesHelper.Values.Values[Name + 'PageSizeEdit']);
|
|
end;
|
|
|
|
procedure TcxCustomWebDataNavigator.RegisterValues;
|
|
begin
|
|
inherited;
|
|
WebValuesHelper.RegisterValue(Name + 'PageSizeEdit', IntToStr(PageSize));
|
|
end;
|
|
|
|
procedure TcxCustomWebDataNavigator.Loaded;
|
|
begin
|
|
inherited;
|
|
UpdateButtonWidth(Width);
|
|
end;
|
|
|
|
procedure TcxCustomWebDataNavigator.Notification(AComponent: TComponent; Operation: TOperation);
|
|
begin
|
|
inherited Notification(AComponent, Operation);
|
|
if (Operation = opRemove) and (AComponent = Images) then
|
|
Images := nil;
|
|
end;
|
|
|
|
procedure TcxCustomWebDataNavigator.CheckNewSize(var ALeft, ATop, ANewWidth, ANewHeight: Integer);
|
|
var
|
|
I, NavigatorWidth: Integer;
|
|
begin
|
|
inherited CheckNewSize(ALeft, ATop, ANewWidth, ANewHeight);
|
|
UpdateButtonWidth(ANewWidth);
|
|
if not IsLoading and (ButtonCount > 0) then
|
|
begin
|
|
NavigatorWidth := 0;
|
|
for I := 0 to ButtonCount - 1 do
|
|
begin
|
|
if not Buttons[I].Visible then continue;
|
|
if Buttons[I].ButtonType = nbPageSize then
|
|
Inc(NavigatorWidth, ButtonWidth);
|
|
Inc(NavigatorWidth, ButtonWidth);
|
|
end;
|
|
if NavigatorWidth > 0 then ANewWidth := NavigatorWidth;
|
|
end;
|
|
end;
|
|
|
|
function TcxCustomWebDataNavigator.GetMinHeight: Integer;
|
|
begin
|
|
Result := cxWebDataNavigatorBitmapHeight + 2;
|
|
end;
|
|
|
|
function TcxCustomWebDataNavigator.GetMinWidth: Integer;
|
|
var
|
|
I, Count: Integer;
|
|
begin
|
|
if (ButtonCount <> 0) and not IsLoading then
|
|
begin
|
|
Count := 0;
|
|
for I := 0 to Buttons.Count - 1 do
|
|
begin
|
|
if not Buttons[I].Visible then continue;
|
|
if Buttons[I].ButtonType = nbPageSize then
|
|
Inc(Count);
|
|
Inc(Count);
|
|
end;
|
|
Result := (cxWebDataNavigatorBitmapWidth + 2) * Count;
|
|
end
|
|
else Result := 0;
|
|
end;
|
|
|
|
procedure TcxCustomWebDataNavigator.UpdateButtonWidth(AWidth: Integer);
|
|
var
|
|
I, Count: Integer;
|
|
begin
|
|
FButtonWidth := AWidth;
|
|
if ButtonCount <> 0 then
|
|
begin
|
|
Count := 0;
|
|
for I := 0 to Buttons.Count - 1 do
|
|
begin
|
|
if not Buttons[I].Visible then continue;
|
|
if Buttons[I].ButtonType = nbPageSize then
|
|
Inc(Count);
|
|
Inc(Count);
|
|
end;
|
|
if Count <> 0 then FButtonWidth := AWidth div Count;
|
|
end;
|
|
end;
|
|
|
|
procedure TcxCustomWebDataNavigator.UpdateWidth;
|
|
begin
|
|
if not IsLoading then
|
|
begin
|
|
AdjustBounds;
|
|
UpdateDesignerContext;
|
|
end;
|
|
end;
|
|
|
|
{ actions }
|
|
procedure TcxCustomWebDataNavigator.RegisterActions;
|
|
begin
|
|
WebActionsHelper.RegisterAction('', WebClick);
|
|
WebActionsHelper.RegisterAction('CLICK', WebClick);
|
|
WebActionsHelper.RegisterAction('CHANGEPAGESIZE', WebChangePageSize);
|
|
end;
|
|
|
|
{ Events }
|
|
function TcxCustomWebDataNavigator.GetWebEventsHelper: TcxWebNavigatorEventsHelper;
|
|
begin
|
|
Result := inherited GetWebEventsHelper as TcxWebNavigatorEventsHelper;
|
|
end;
|
|
|
|
class function TcxCustomWebDataNavigator.GetWebEventsHelperClass: TcxWebEventsHelperClass;
|
|
begin
|
|
Result := TcxWebNavigatorEventsHelper;
|
|
end;
|
|
|
|
{ renderers }
|
|
procedure TcxCustomWebDataNavigator.RegisterRenderers;
|
|
begin
|
|
WebRenderHelper.RegisterRenderer(TcxCustomWebDataNavigatorRenderer);
|
|
WebRenderHelper.RegisterRenderer(TcxCustomWebDataNavigatorNS4Renderer);
|
|
WebRenderHelper.RegisterRenderer(TcxCustomWebDataNavigatorNS6Renderer);
|
|
end;
|
|
|
|
{ scripts }
|
|
procedure TcxCustomWebDataNavigator.ScriptsSubscription;
|
|
begin
|
|
inherited;
|
|
WebScriptsHelper.ScriptSubscription(TcxWebPostBackScript);
|
|
end;
|
|
|
|
{ TcxNavigatorButtonStyle }
|
|
|
|
class function TcxNavigatorButtonStyle.GetName: string;
|
|
begin
|
|
Result := 'DNBtnStyle';
|
|
end;
|
|
|
|
class procedure TcxNavigatorButtonStyle.WriteStyle(HTMLTextBuilder: TcxHTMLTextBuilder);
|
|
begin
|
|
HTMLTextBuilder.WriteStyle(GetName);
|
|
HTMLTextBuilder.WriteStyleAttribute(saBorderWidth, 1, 'px');
|
|
HTMLTextBuilder.WriteStyleAttribute(saBorderStyle, 'solid');
|
|
HTMLTextBuilder.WriteStyleAttribute(saBorderTopColor, 'white');
|
|
HTMLTextBuilder.WriteStyleAttribute(saBorderLeftColor, 'white');
|
|
HTMLTextBuilder.WriteStyleAttribute(saBorderBottomColor, 'black');
|
|
HTMLTextBuilder.WriteStyleAttribute(saBorderRightColor, 'black');
|
|
HTMLTextBuilder.WriteStyleAttribute(saBackgroundColor, '#D4D0C8');
|
|
end;
|
|
|
|
{ TcxCustomWebDataNavigatorRenderer }
|
|
function TcxCustomWebDataNavigatorRenderer.GetWebDataNavigator: TcxCustomWebDataNavigator;
|
|
begin
|
|
Result := Component as TcxCustomWebDataNavigator;
|
|
end;
|
|
|
|
function TcxCustomWebDataNavigatorRenderer.GetDefaultStyleName: string;
|
|
begin
|
|
if WebDataNavigator.Styles.Default <> nil then
|
|
Result := WebDataNavigator.Styles.Default.FullName
|
|
else Result := TcxNavigatorButtonStyle.GetName;
|
|
end;
|
|
|
|
procedure TcxCustomWebDataNavigatorRenderer.SetDefaultStyleProc(const Index: Integer; var AScript: string);
|
|
begin
|
|
AScript := '__ChangeStyle(event, this);';
|
|
end;
|
|
|
|
procedure TcxCustomWebDataNavigatorRenderer.SetHoverStyleProc(const Index: Integer; var AScript: string);
|
|
begin
|
|
if WebDataNavigator.Styles.Hover <> nil then
|
|
AScript := Format('__ChangeStyle(event, this, ''%s'');', [WebDataNavigator.Styles.Hover.FullName])
|
|
else AScript := '';
|
|
end;
|
|
|
|
procedure TcxCustomWebDataNavigatorRenderer.WriteButtonEvents(const Index: Integer);
|
|
var
|
|
MouseOutString, MouseOverString: string;
|
|
begin
|
|
if WebDataNavigator.Styles.Hover <> nil then
|
|
begin
|
|
SetHoverStyleProc(Index, MouseOverString);
|
|
SetDefaultStyleProc(Index, MouseOutString);
|
|
|
|
HTMLTextBuilder.WriteEventAttribute(eOnMouseOver, MouseOverString);
|
|
HTMLTextBuilder.WriteEventAttribute(eOnMouseOut, MouseOutString);
|
|
end;
|
|
end;
|
|
|
|
const
|
|
NavigatorButtonIDs: array[TcxWebNavigatorButtonType] of string = // Do not localize
|
|
('_NBFirst_', '_NBPgUp_', '_NBPrev_', '', '_NBChPS_',
|
|
'_NBNext_', '_NBPgDn_', '_NBLast_', '_NBIns_', '_NBEdit_',
|
|
'_NBDel_', '_NBOk_', '_NBCancel_', '_NBRefresh_', '_NB_');
|
|
|
|
NavigatorButtonActionString: array[TcxWebNavigatorButtonType] of string = // Do not localize
|
|
('OnNBFirstClick(''%s'')', 'OnNBPriorPageClick(''%s'')', 'OnNBPriorClick(''%s'')', '',
|
|
'OnNBChangePageSizeClick(''%s'')', 'OnNBNextClick(''%s'')', 'OnNBNextPageClick(''%s'')',
|
|
'OnNBLastClick(''%s'')', 'OnNBInsertClick(''%s'')', 'OnNBEditClick(''%s'')',
|
|
'OnNBDeleteClick(''%s'')', 'OnNBPostClick(''%s'')', 'OnNBCancelClick(''%s'')',
|
|
'OnNBRefreshClick(''%s'')', '');
|
|
|
|
procedure TcxCustomWebDataNavigatorRenderer.WriteButtonAction(Index: Integer);
|
|
var
|
|
AType: TcxWebNavigatorButtonType;
|
|
begin
|
|
AType := WebDataNavigator.Buttons[Index].ButtonType;
|
|
if not Assigned(WebDataNavigator.Buttons[Index].OnClick) then
|
|
HTMLTextBuilder.WriteEventAttribute(eOnClick, Format(NavigatorButtonActionString[AType],
|
|
[WebDataNavigator.Name]))
|
|
else
|
|
HTMLTextBuilder.WriteEventAttribute(eOnClick, Format('__doPostBack(''%s'', ''%s:%d'');',
|
|
[WebDataNavigator.Name, 'CLICK', Index]));
|
|
end;
|
|
|
|
procedure TcxCustomWebDataNavigatorRenderer.WriteButtonHint(Index: Integer);
|
|
begin
|
|
if WebDataNavigator.ShowHint and (WebDataNavigator.Buttons[Index].Hint <> '') then
|
|
HTMLTextBuilder.WriteAttribute(aTitle, WebDataNavigator.Buttons[Index].Hint);
|
|
end;
|
|
|
|
procedure TcxCustomWebDataNavigatorRenderer.WriteButton(Index: Integer);
|
|
begin
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd);
|
|
HTMLTextBuilder.WriteAttribute(aWidth, WebDataNavigator.ButtonWidth);
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagDiv);
|
|
HTMLTextBuilder.WriteAttribute(aClass, DefaultStyleName);
|
|
HTMLTextBuilder.WriteStyleAttribute(saOverflow, 'hidden');
|
|
HTMLTextBuilder.WriteStyleAttribute(saHeight, WebDataNavigator.Height - 1, 'px');
|
|
HTMLTextBuilder.WriteStyleAttribute(saWidth, WebDataNavigator.ButtonWidth, 'px');
|
|
WriteButtonEvents(Index);
|
|
WriteButtonAction(Index);
|
|
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTable);
|
|
HTMLTextBuilder.WriteAttribute(aHeight, '100%');
|
|
HTMLTextBuilder.WriteAttribute(aWidth, '100%');
|
|
HTMLTextBuilder.WriteAttribute(aBorder, 0);
|
|
HTMLTextBuilder.WriteAttribute(aCellspacing, 0);
|
|
HTMLTextBuilder.WriteAttribute(aCellpadding, 0);
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd);
|
|
HTMLTextBuilder.WriteAttribute(aAlign, 'center');
|
|
HTMLTextBuilder.WriteAttribute(aValign, 'center');
|
|
|
|
if (WebDataNavigator.Images <> nil) and
|
|
(WebDataNavigator.Images.ValidIndex(WebDataNavigator.Buttons[Index].ImageIndex)) then
|
|
WebDataNavigator.Images.Images[WebDataNavigator.Buttons[Index].ImageIndex].WriteHTML(HTMLTextBuilder)
|
|
else if WebDataNavigator.Buttons[Index].ButtonType <> nbCustom then
|
|
begin
|
|
HTMLTextBuilder.WriteSingleTag(TcxHTMLTagImg);
|
|
HTMLTextBuilder.WriteAttribute(aSrc, QualifyImageFileName(cxWebNavigatorImgs[WebDataNavigator.Buttons[Index].ButtonType]));
|
|
HTMLTextBuilder.WriteAttribute(aBorder, 0);
|
|
WriteButtonHint(Index);
|
|
end;
|
|
HTMLTextBuilder.WriteAttribute(aId, WebDataNavigator.Name + NavigatorButtonIDs[WebDataNavigator.Buttons[Index].ButtonType]);
|
|
HTMLTextBuilder.WriteAttribute(aName, WebDataNavigator.Name + NavigatorButtonIDs[WebDataNavigator.Buttons[Index].ButtonType]);
|
|
HTMLTextBuilder.WriteAttribute(aAlign, 'absmiddle');
|
|
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTable);
|
|
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagDiv);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd);
|
|
end;
|
|
|
|
procedure TcxCustomWebDataNavigatorRenderer.WriteEdit;
|
|
begin
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd);
|
|
HTMLTextBuilder.WriteAttribute(aWidth, 2 * WebDataNavigator.ButtonWidth);
|
|
HTMLTextBuilder.WriteSingleTag(TcxHTMLTagInput);
|
|
HTMLTextBuilder.WriteAttribute(aName, WebDataNavigator.Name + 'PageSizeEdit');
|
|
HTMLTextBuilder.WriteAttribute(aId, WebDataNavigator.Name + 'PageSizeEdit');
|
|
HTMLTextBuilder.WriteAttribute(aType, 'text');
|
|
HTMLTextBuilder.WriteAttribute(aAlign, 'absmiddle');
|
|
HTMLTextBuilder.WriteAttribute(aValue, WebDataNavigator.PageSize);
|
|
HTMLTextBuilder.WriteStyleAttribute(saHeight, WebDataNavigator.Height, 'px');
|
|
HTMLTextBuilder.WriteStyleAttribute(saWidth, 2 * WebDataNavigator.ButtonWidth, 'px');
|
|
HTMLTextBuilder.WriteEventAttribute(eOnFocus, Format('OnNEFocus(''%s'')', [WebDataNavigator.Name]));
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd);
|
|
end;
|
|
|
|
procedure TcxCustomWebDataNavigatorRenderer.WriteHTML;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTable);
|
|
WriteID;
|
|
HTMLTextBuilder.WriteAttribute(aBorder, 0);
|
|
HTMLTextBuilder.WriteAttribute(aCellpadding, 0);
|
|
HTMLTextBuilder.WriteAttribute(aCellspacing, 0);
|
|
WriteHint;
|
|
WritePopupMenu;
|
|
WriteAttributes;
|
|
WritePosition;
|
|
WriteZIndex;
|
|
WriteStyleAttributes;
|
|
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTr);
|
|
HTMLTextBuilder.WriteAttribute(aHeight, WebDataNavigator.Height);
|
|
for I := 0 to WebDataNavigator.Buttons.Count - 1 do
|
|
begin
|
|
if WebDataNavigator.Buttons[I].Visible then
|
|
begin
|
|
if WebDataNavigator.Buttons[I].ButtonType = nbPageSize then WriteEdit
|
|
else WriteButton(I);
|
|
end;
|
|
end;
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTr);
|
|
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTable);
|
|
end;
|
|
|
|
procedure TcxCustomWebDataNavigatorRenderer.WriteScripts;
|
|
begin
|
|
WriteEventsScript;
|
|
HTMLTextBuilder.WriteText('_DataNavigator = CreateDataNavigator();');
|
|
HTMLTextBuilder.WriteText(Format(' _DataNavigator.Name = "%s";', [WebDataNavigator.Name]));
|
|
HTMLTextBuilder.WriteText(Format(' _DataNavigator.PageSize = %d;', [WebDataNavigator.PageSize]));
|
|
HTMLTextBuilder.WriteText(Format(' _DataNavigator.ProcessPageSizeSrc = "%s";', [QualifyImageFileName(cxWebNavigatorImgs[nbApplyPageSize])]));
|
|
HTMLTextBuilder.WriteText(Format(' _DataNavigator.ApplyPageSizeSrc = "%s";', [QualifyImageFileName(cxWebNavigatorImgs[nbPost])]));
|
|
WriteEvents;
|
|
if(Assigned(WebDataNavigator.OnChangePageSize)) then
|
|
HTMLTextBuilder.WriteText(' _DataNavigator.AssignOnChangePageSize = true;');
|
|
end;
|
|
|
|
class procedure TcxCustomWebDataNavigatorRenderer.WriteStyles(AHTMLTextBuilder: TcxHTMLTextBuilder);
|
|
begin
|
|
TcxNavigatorButtonStyle.WriteStyle(AHTMLTextBuilder);
|
|
end;
|
|
|
|
class procedure TcxCustomWebDataNavigatorRenderer.GetScriptFiles(AList: TStrings);
|
|
begin
|
|
AList.Add(scxCommonScriptName);
|
|
AList.Add(scxDataNavigatorScriptName);
|
|
end;
|
|
|
|
{ TcxCustomWebDataNavigatorNS4Renderer }
|
|
|
|
procedure TcxCustomWebDataNavigatorNS4Renderer.WriteButtonAction(Index: Integer);
|
|
var
|
|
AType: TcxWebNavigatorButtonType;
|
|
begin
|
|
AType := WebDataNavigator.Buttons[Index].ButtonType;
|
|
if not Assigned(WebDataNavigator.Buttons[Index].OnClick) then
|
|
HTMLTextBuilder.WriteAttribute(aHref, Format('javascript:' + NavigatorButtonActionString[AType],
|
|
[WebDataNavigator.Name]))
|
|
else
|
|
HTMLTextBuilder.WriteAttribute(aHref, Format('javascript:__doPostBack(''%s'', ''%s:%d'');',
|
|
[WebDataNavigator.Name, 'CLICK', Index]));
|
|
|
|
end;
|
|
|
|
procedure TcxCustomWebDataNavigatorNS4Renderer.WriteButton(Index: Integer);
|
|
begin
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd);
|
|
HTMLTextBuilder.WriteAttribute(aWidth, WebDataNavigator.ButtonWidth);
|
|
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTable);
|
|
HTMLTextBuilder.WriteAttribute(aHeight, WebDataNavigator.Height);
|
|
HTMLTextBuilder.WriteAttribute(aWidth, WebDataNavigator.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(aHeight, 1);
|
|
HTMLTextBuilder.WriteAttribute(aWidth, 1);
|
|
HTMLTextBuilder.WriteAttribute(aBgcolor, 'white');
|
|
WriteInvisibleImage(1, 1);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd, False, False);
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd, False, False);
|
|
HTMLTextBuilder.WriteAttribute(aHeight, 1);
|
|
HTMLTextBuilder.WriteAttribute(aBgcolor, 'white');
|
|
WriteInvisibleImage(1, 1);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd, False, False);
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd, False, False);
|
|
HTMLTextBuilder.WriteAttribute(aHeight, 1);
|
|
HTMLTextBuilder.WriteAttribute(aWidth, 1);
|
|
HTMLTextBuilder.WriteAttribute(aBgcolor, 'black');
|
|
WriteInvisibleImage(1, 1);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd, False, False);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTr, False, True);
|
|
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTr);
|
|
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd, True, False);
|
|
HTMLTextBuilder.WriteAttribute(aWidth, 1);
|
|
HTMLTextBuilder.WriteAttribute(aBgcolor, 'white');
|
|
WriteInvisibleImage(1, 1);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd, False, True);
|
|
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd);
|
|
HTMLTextBuilder.WriteAttribute(aHeight, WebDataNavigator.Height - 2);
|
|
HTMLTextBuilder.WriteAttribute(aWidth, 3000);
|
|
HTMLTextBuilder.WriteAttribute(aBgcolor, '#D4D0C8');
|
|
HTMLTextBuilder.WriteAttribute(aAlign, 'center');
|
|
HTMLTextBuilder.WriteAttribute(aValign, 'center');
|
|
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagA, True, False);
|
|
WriteButtonAction(Index);
|
|
|
|
if (WebDataNavigator.Images <> nil) and
|
|
(WebDataNavigator.Images.ValidIndex(WebDataNavigator.Buttons[Index].ImageIndex)) then
|
|
WebDataNavigator.Images.Images[WebDataNavigator.Buttons[Index].ImageIndex].WriteHTML(HTMLTextBuilder)
|
|
else if WebDataNavigator.Buttons[Index].ButtonType <> nbCustom then
|
|
begin
|
|
HTMLTextBuilder.WriteSingleTag(TcxHTMLTagImg, False, False);
|
|
HTMLTextBuilder.WriteAttribute(aSrc, QualifyImageFileName(cxWebNavigatorImgs[WebDataNavigator.Buttons[Index].ButtonType]));
|
|
HTMLTextBuilder.WriteAttribute(aBorder, 0);
|
|
WriteButtonHint(Index);
|
|
end;
|
|
// HTMLTextBuilder.WriteAttribute(aId, WebDataNavigator.Name + NavigatorButtonIDs[WebDataNavigator.Buttons[Index].ButtonType]);
|
|
HTMLTextBuilder.WriteAttribute(aName, WebDataNavigator.Name + NavigatorButtonIDs[WebDataNavigator.Buttons[Index].ButtonType]);
|
|
HTMLTextBuilder.WriteAttribute(aAlign, 'absmiddle');
|
|
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagA, False, True);
|
|
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd);
|
|
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd, True, False);
|
|
HTMLTextBuilder.WriteAttribute(aWidth, 1);
|
|
HTMLTextBuilder.WriteAttribute(aBgcolor, 'black');
|
|
WriteInvisibleImage(1, 1);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd, False, True);
|
|
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTr);
|
|
|
|
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTr, True, False);
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd, False, False);
|
|
HTMLTextBuilder.WriteAttribute(aHeight, 1);
|
|
HTMLTextBuilder.WriteAttribute(aWidth, 1);
|
|
HTMLTextBuilder.WriteAttribute(aBgcolor, 'black');
|
|
WriteInvisibleImage(1, 1);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd, False, False);
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd, False, False);
|
|
HTMLTextBuilder.WriteAttribute(aHeight, 1);
|
|
HTMLTextBuilder.WriteAttribute(aBgcolor, 'black');
|
|
WriteInvisibleImage(1, 1);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd, False, False);
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd, False, False);
|
|
HTMLTextBuilder.WriteAttribute(aHeight, 1);
|
|
HTMLTextBuilder.WriteAttribute(aWidth, 1);
|
|
HTMLTextBuilder.WriteAttribute(aBgcolor, 'black');
|
|
WriteInvisibleImage(1, 1);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd, False, False);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTr, False, True);
|
|
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTable);
|
|
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd);
|
|
end;
|
|
|
|
procedure TcxCustomWebDataNavigatorNS4Renderer.WriteEdit;
|
|
begin
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd);
|
|
HTMLTextBuilder.WriteAttribute(aWidth, 2 * WebDataNavigator.ButtonWidth);
|
|
HTMLTextBuilder.WriteSingleTag(TcxHTMLTagInput);
|
|
HTMLTextBuilder.WriteAttribute(aName, WebDataNavigator.Name + 'PageSizeEdit');
|
|
HTMLTextBuilder.WriteAttribute(aType, 'text');
|
|
HTMLTextBuilder.WriteAttribute(aDisabled);
|
|
HTMLTextBuilder.WriteAttribute(aSize, 2 * WebDataNavigator.ButtonWidth div 5);
|
|
HTMLTextBuilder.WriteAttribute(aAlign, 'absmiddle');
|
|
HTMLTextBuilder.WriteAttribute(aValue, WebDataNavigator.PageSize);
|
|
HTMLTextBuilder.WriteStyleAttribute(saFontSize, WebDataNavigator.Height - 2);
|
|
HTMLTextBuilder.WriteStyleAttribute(saWidth, 2 * WebDataNavigator.ButtonWidth, 'px');
|
|
HTMLTextBuilder.WriteStyleAttribute(saHeight, WebDataNavigator.Height, 'px');
|
|
HTMLTextBuilder.WriteEventAttribute(eOnFocus, Format('OnNEFocus(''%s'')', [WebDataNavigator.Name]));
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd);
|
|
end;
|
|
|
|
class function TcxCustomWebDataNavigatorNS4Renderer.IsBrowserSupported(AWebBrowser: TcxWebBrowserClass): Boolean;
|
|
begin
|
|
Result := AWebBrowser = TcxWebBrowserNS4;
|
|
end;
|
|
|
|
{ TcxCustomWebDataNavigatorNS6Renderer }
|
|
|
|
procedure TcxCustomWebDataNavigatorNS6Renderer.WriteButtonAction(Index: Integer);
|
|
begin
|
|
if Assigned(WebDataNavigator.Buttons[Index].OnClick) then
|
|
HTMLTextBuilder.WriteEventAttribute(eOnClick, Format('__doPostBack(''%s'', ''%s:%d'');',
|
|
[WebDataNavigator.Name, 'CLICK', Index]));
|
|
end;
|
|
|
|
procedure TcxCustomWebDataNavigatorNS6Renderer.WriteButton(Index: Integer);
|
|
begin
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd);
|
|
HTMLTextBuilder.WriteAttribute(aWidth, WebDataNavigator.ButtonWidth);
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagDiv);
|
|
HTMLTextBuilder.WriteAttribute(aClass, DefaultStyleName);
|
|
HTMLTextBuilder.WriteStyleAttribute(saHeight, WebDataNavigator.Height - 2, 'px');
|
|
HTMLTextBuilder.WriteStyleAttribute(saWidth, WebDataNavigator.ButtonWidth - 2, 'px');
|
|
WriteButtonEvents(Index);
|
|
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTable);
|
|
HTMLTextBuilder.WriteAttribute(aHeight, '100%');
|
|
HTMLTextBuilder.WriteAttribute(aWidth, '100%');
|
|
HTMLTextBuilder.WriteAttribute(aBorder, 0);
|
|
HTMLTextBuilder.WriteAttribute(aCellspacing, 0);
|
|
HTMLTextBuilder.WriteAttribute(aCellpadding, 0);
|
|
HTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd);
|
|
HTMLTextBuilder.WriteAttribute(aAlign, 'center');
|
|
HTMLTextBuilder.WriteAttribute(aValign, 'center');
|
|
|
|
if (WebDataNavigator.Images <> nil) and
|
|
(WebDataNavigator.Images.ValidIndex(WebDataNavigator.Buttons[Index].ImageIndex)) then
|
|
WebDataNavigator.Images.Images[WebDataNavigator.Buttons[Index].ImageIndex].WriteHTML(HTMLTextBuilder)
|
|
else if WebDataNavigator.Buttons[Index].ButtonType <> nbCustom then
|
|
begin
|
|
HTMLTextBuilder.WriteSingleTag(TcxHTMLTagImg);
|
|
HTMLTextBuilder.WriteAttribute(aSrc, QualifyImageFileName(cxWebNavigatorImgs[WebDataNavigator.Buttons[Index].ButtonType]));
|
|
HTMLTextBuilder.WriteAttribute(aBorder, 0);
|
|
WriteButtonHint(Index);
|
|
end;
|
|
HTMLTextBuilder.WriteAttribute(aId, WebDataNavigator.Name + NavigatorButtonIDs[WebDataNavigator.Buttons[Index].ButtonType]);
|
|
HTMLTextBuilder.WriteAttribute(aName, WebDataNavigator.Name + NavigatorButtonIDs[WebDataNavigator.Buttons[Index].ButtonType]);
|
|
HTMLTextBuilder.WriteAttribute(aAlign, 'absmiddle');
|
|
WriteButtonAction(Index);
|
|
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTable);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagDiv);
|
|
HTMLTextBuilder.WriteEndTag(TcxHTMLTagTd);
|
|
end;
|
|
|
|
class function TcxCustomWebDataNavigatorNS6Renderer.IsBrowserSupported(AWebBrowser: TcxWebBrowserClass): Boolean;
|
|
begin
|
|
Result := AWebBrowser = TcxWebBrowserNS6;
|
|
end;
|
|
|
|
initialization
|
|
RegisterClasses([TcxWebDataNavigatorButton, TcxCustomWebDataNavigator]);
|
|
|
|
end.
|
|
|
|
|