Componentes.Terceros.DevExp.../internal/x.44/1/ExpressQuantumGrid 4/Sources/cxBandedTableViewEditor.pas
2009-06-29 12:09:02 +00:00

279 lines
9.2 KiB
ObjectPascal

{********************************************************************}
{ }
{ Developer Express Visual Component Library }
{ ExpressQuantumGrid }
{ }
{ Copyright (c) 1998-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 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 cxGridVer.inc}
interface
uses
{$IFDEF DELPHI6}
Variants,
{$ENDIF}
Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ExtCtrls, StdCtrls, ComCtrls,
cxGridCustomView, cxGridBandedTableView,
cxViewEditor, cxCustomTableViewEditor, cxTableViewEditor;
type
TcxBandedTableViewEditor = class(TcxTableViewEditor)
TSBands: TTabSheet;
LBBands: TListBox;
Panel22: TPanel;
BAddBand: TButton;
BDeleteBand: TButton;
PMBands: TPopupMenu;
MIBandsAdd: TMenuItem;
MIBandsDelete: TMenuItem;
MenuItem4: TMenuItem;
MIBandsMoveUp: TMenuItem;
MenuItem7: TMenuItem;
MIBandsSelectAll: TMenuItem;
MIBandsMoveDown: TMenuItem;
BBandMoveDown: TButton;
BBandMoveUp: TButton;
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);
private
FBandsPrevDragIndex: Integer;
function GetBands: TcxGridBands;
procedure ReindexBandsProc(AList: TList; ANewIndex: Integer);
procedure UpdateBandList;
procedure UpdateBandListSelection;
protected
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;
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.SelectAllBands;
begin
ListBoxSelectAll(LBBands);
end;
procedure TcxBandedTableViewEditor.UpdateButtons;
begin
inherited;
BDeleteBand.Enabled := 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
UpdateBandListSelection;
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.UpdateBandListSelection;
var
AList: TList;
begin
AList := TList.Create;
try
FormEditor.GetSelectionList(AList);
ListBoxSyncSelection(LBBands, AList);
finally
AList.Free;
end;
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
CollectionItemsClick(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;
initialization
RegisterViewEditorClass(TcxGridBandedTableView, TcxBandedTableViewEditor);
RegisterDefaultViewStorage(TcxGridBandedTableViewStorage);
finalization
UnregisterDefaultViewStorage(TcxGridBandedTableViewStorage);
UnregisterViewEditorClass(TcxGridBandedTableView, TcxBandedTableViewEditor);
end.