Componentes.Terceros.DevExp.../internal/x.36/1/ExpressQuantumGrid 6/Sources/cxBandedTableViewEditor.pas
2008-09-04 11:31:51 +00:00

361 lines
12 KiB
ObjectPascal

{********************************************************************}
{ }
{ Developer Express Visual Component Library }
{ ExpressQuantumGrid }
{ }
{ Copyright (c) 1998-2008 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 EXPRESSQUANTUMGRID AND ALL }
{ ACCOMPANYING VCL CONTROLS AS PART OF AN EXECUTABLE PROGRAM ONLY. }
{ }
{ THE SOURCE CODE CONTAINED WITHIN THIS FILE AND ALL RELATED }
{ FILES OR ANY PORTION OF ITS CONTENTS SHALL AT NO TIME BE }
{ COPIED, TRANSFERRED, SOLD, DISTRIBUTED, OR OTHERWISE MADE }
{ AVAILABLE TO OTHER INDIVIDUALS WITHOUT EXPRESS WRITTEN CONSENT }
{ AND PERMISSION FROM DEVELOPER EXPRESS INC. }
{ }
{ CONSULT THE END USER LICENSE AGREEMENT FOR INFORMATION ON }
{ ADDITIONAL RESTRICTIONS. }
{ }
{********************************************************************}
unit cxBandedTableViewEditor;
{$I cxVer.inc}
interface
uses
{$IFDEF DELPHI6}
Types, Variants,
{$ELSE}
Windows,
{$ENDIF}
SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ExtCtrls, StdCtrls, ComCtrls,
cxGridCustomView, cxGridBandedTableView,
cxViewEditor, cxCustomTableViewEditor, cxTableViewEditor,
cxLookAndFeelPainters, cxButtons, cxPC, cxControls;
type
TcxBandedTableViewEditor = class(TcxTableViewEditor)
TSBands: TcxTabSheet;
LBBands: TListBox;
Panel22: TPanel;
BAddBand: TcxButton;
BDeleteBand: TcxButton;
PMBands: TPopupMenu;
MIBandsAdd: TMenuItem;
MIBandsDelete: TMenuItem;
MenuItem4: TMenuItem;
MIBandsMoveUp: TMenuItem;
MenuItem7: TMenuItem;
MIBandsSelectAll: TMenuItem;
MIBandsMoveDown: TMenuItem;
BBandMoveDown: TcxButton;
BBandMoveUp: TcxButton;
Panel20: TPanel;
procedure BAddBandClick(Sender: TObject);
procedure BDeleteBandClick(Sender: TObject);
procedure LBBandsClick(Sender: TObject);
procedure LBBandsStartDrag(Sender: TObject;
var DragObject: TDragObject);
procedure LBBandsDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure LBBandsEndDrag(Sender, Target: TObject; X, Y: Integer);
procedure LBBandsDragDrop(Sender, Source: TObject; X, Y: Integer);
procedure BBandMoveUpClick(Sender: TObject);
procedure BBandMoveDownClick(Sender: TObject);
procedure MIBandsSelectAllClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure LBBandsDrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
procedure LBColumnsDrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
private
FBandsPrevDragIndex: Integer;
function GetBands: TcxGridBands;
procedure ReindexBandsProc(AList: TList; ANewIndex: Integer);
procedure UpdateBandList;
protected
procedure DrawListBoxItem(AListBox: TWinControl; AIndex: Integer; R: TRect;
AParentBand: TcxGridBand);
procedure SelectAllBands;
procedure UpdateButtons; override;
procedure UpdateEditor; override;
procedure UpdateSelection; override;
public
class function GetViewByObject(APersistent: TPersistent): TcxCustomGridView; override;
property Bands: TcxGridBands read GetBands;
end;
{ TcxGridBandedTableViewStorage }
TcxGridBandedTableViewStorage = class(TcxCustomGridTableViewStorage)
private
function GetOptionsCustomize: TcxGridBandedTableOptionsCustomize;
function GetOptionsView: TcxGridBandedTableOptionsView;
protected
function BandedTableView: TcxGridBandedTableView;
public
class function GetViewClass: TcxCustomGridViewClass; override;
published
property OptionsCustomize: TcxGridBandedTableOptionsCustomize read GetOptionsCustomize;
property OptionsView: TcxGridBandedTableOptionsView read GetOptionsView;
end;
{ TcxGridBandedTableViewMenuProvider }
TcxGridBandedTableViewMenuProvider = class(TcxCustomGridTableViewMenuProvider)
private
function GetGridView: TcxGridBandedTableView;
protected
procedure CreateBand(Sender: TcxGridViewMenuItem);
procedure InitStructureCreationItems; override;
public
property GridView: TcxGridBandedTableView read GetGridView;
end;
implementation
uses
cxDesignWindows;
{$R *.dfm}
{ TcxGridBandedTableViewStorage }
function TcxGridBandedTableViewStorage.GetOptionsCustomize: TcxGridBandedTableOptionsCustomize;
begin
Result := BandedTableView.OptionsCustomize;
end;
function TcxGridBandedTableViewStorage.GetOptionsView: TcxGridBandedTableOptionsView;
begin
Result := BandedTableView.OptionsView;
end;
function TcxGridBandedTableViewStorage.BandedTableView: TcxGridBandedTableView;
begin
Result := inherited View as TcxGridBandedTableView;
end;
class function TcxGridBandedTableViewStorage.GetViewClass: TcxCustomGridViewClass;
begin
Result := TcxGridBandedTableView;
end;
{ TcxBandedTableViewEditor }
class function TcxBandedTableViewEditor.GetViewByObject(APersistent: TPersistent): TcxCustomGridView;
begin
if APersistent is TcxGridBand then
Result := (APersistent as TcxGridBand).Bands.GridView
else
if APersistent is TcxGridBands then
Result := (APersistent as TcxGridBands).GridView
else
Result := inherited GetViewByObject(APersistent);
end;
procedure TcxBandedTableViewEditor.DrawListBoxItem(AListBox: TWinControl;
AIndex: Integer; R: TRect; AParentBand: TcxGridBand);
function GetParentBandInfoOffset: Integer;
var
I, W: Integer;
begin
Result := 0;
with AListBox as TListBox, Items do
for I := 0 to Count - 1 do
begin
W := Canvas.TextWidth(Items[I]);
if W > Result then Result := W;
end;
Inc(Result, 30);
end;
function GetParentBandInfoText: string;
begin
Result := '[ParentBand: ' + IntToStr(AParentBand.Index);
if AParentBand.Caption <> '' then
Result := Result + ' - ' + AParentBand.Caption;
Result := Result + ']';
end;
begin
inherited DrawListBoxItem(AListBox, AIndex, R);
with AListBox as TListBox, Canvas do
if AParentBand <> nil then
begin
Inc(R.Left, GetParentBandInfoOffset);
TextOut(R.Left, R.Top, GetParentBandInfoText);
end;
end;
procedure TcxBandedTableViewEditor.SelectAllBands;
begin
ListBoxSelectAll(LBBands);
end;
procedure TcxBandedTableViewEditor.UpdateButtons;
begin
inherited;
BDeleteBand.Enabled := CanDeleteComponent(nil) and (LBBands.SelCount > 0);
BBandMoveUp.Enabled := LBBands.SelCount > 0;
BBandMoveDown.Enabled := LBBands.SelCount > 0;
MIBandsMoveUp.Enabled := BBandMoveUp.Enabled;
MIBandsMoveDown.Enabled := BBandMoveDown.Enabled;
MIBandsSelectAll.Enabled := LBBands.SelCount < LBBands.Items.Count;
end;
procedure TcxBandedTableViewEditor.UpdateEditor;
begin
inherited;
UpdateBandList;
end;
procedure TcxBandedTableViewEditor.UpdateSelection;
begin
FormEditor.ListBoxSynchronizeSelection(LBBands);
inherited;
end;
function TcxBandedTableViewEditor.GetBands: TcxGridBands;
begin
Result := (View as TcxGridBandedTableView).Bands;
end;
procedure TcxBandedTableViewEditor.ReindexBandsProc(AList: TList; ANewIndex: Integer);
var
I: Integer;
begin
for I := 0 to AList.Count - 1 do
TcxGridBand(AList[I]).Index := ANewIndex;
UpdateDesigner;
end;
procedure TcxBandedTableViewEditor.UpdateBandList;
begin
ListBoxLoadCollection(LBBands, Bands);
end;
procedure TcxBandedTableViewEditor.BAddBandClick(Sender: TObject);
begin
CollectionItemsAdd(LBBands, Bands);
end;
procedure TcxBandedTableViewEditor.BDeleteBandClick(Sender: TObject);
begin
CollectionItemsDelete(LBBands, Bands);
end;
procedure TcxBandedTableViewEditor.LBBandsClick(Sender: TObject);
begin
FormEditor.ListBoxApplySelection(LBBands, Bands);
end;
procedure TcxBandedTableViewEditor.BBandMoveUpClick(Sender: TObject);
begin
ListBoxMoveUpItems(LBBands, FBandsPrevDragIndex, ReindexBandsProc);
end;
procedure TcxBandedTableViewEditor.BBandMoveDownClick(Sender: TObject);
begin
ListBoxMoveDownItems(LBBands, FBandsPrevDragIndex, ReindexBandsProc);
end;
procedure TcxBandedTableViewEditor.MIBandsSelectAllClick(Sender: TObject);
begin
SelectAllBands;
LBBandsClick(nil);
end;
// Drag Drop Bands
procedure TcxBandedTableViewEditor.LBBandsStartDrag(Sender: TObject;
var DragObject: TDragObject);
begin
FBandsPrevDragIndex := -1;
end;
procedure TcxBandedTableViewEditor.LBBandsDragOver(Sender, Source: TObject;
X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
ListBoxDragOver(LBBands, Sender, Source, X, Y, State, Accept, FBandsPrevDragIndex);
end;
procedure TcxBandedTableViewEditor.LBBandsEndDrag(Sender, Target: TObject;
X, Y: Integer);
begin
ListBoxEndDrag(LBBands, Sender, Target, X, Y, FBandsPrevDragIndex);
end;
procedure TcxBandedTableViewEditor.LBBandsDragDrop(Sender, Source: TObject;
X, Y: Integer);
begin
ListBoxDragDrop(LBBands, Sender, Source, X, Y, FBandsPrevDragIndex, ReindexBandsProc);
end;
procedure TcxBandedTableViewEditor.FormCreate(Sender: TObject);
begin
inherited;
CalculateListBoxItemHeight(LBBands);
end;
procedure TcxBandedTableViewEditor.LBBandsDrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
DrawListBoxItem(Control, Index, Rect, Bands[Index].ParentBand);
end;
procedure TcxBandedTableViewEditor.LBColumnsDrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
DrawListBoxItem(Control, Index, Rect, TcxGridBandedColumn(View.Items[Index]).Position.Band);
end;
{ TcxGridBandedTableViewMenuProvider }
function TcxGridBandedTableViewMenuProvider.GetGridView: TcxGridBandedTableView;
begin
Result := TcxGridBandedTableView(inherited GridView);
end;
procedure TcxGridBandedTableViewMenuProvider.CreateBand(Sender: TcxGridViewMenuItem);
begin
ObjectCreated(GridView.Bands.Add);
end;
procedure TcxGridBandedTableViewMenuProvider.InitStructureCreationItems;
begin
inherited;
Items.AddItem('Create Band', CreateBand);
end;
initialization
RegisterViewEditorClass(TcxGridBandedTableView, TcxBandedTableViewEditor);
RegisterDefaultViewStorage(TcxGridBandedTableViewStorage);
RegisterViewMenuProviderClass(TcxGridBandedTableView, TcxGridBandedTableViewMenuProvider);
finalization
UnregisterViewMenuProviderClass(TcxGridBandedTableView, TcxGridBandedTableViewMenuProvider);
UnregisterDefaultViewStorage(TcxGridBandedTableViewStorage);
UnregisterViewEditorClass(TcxGridBandedTableView, TcxBandedTableViewEditor);
end.