Varela_PuntosVenta/Source/Base/uViewGridBase.pas
2008-05-05 09:14:34 +00:00

340 lines
9.1 KiB
ObjectPascal

{*******************************************************}
{ }
{ Administración de puntos de venta }
{ }
{ Copyright (C) 2006 Rodax Software S.L. }
{ }
{*******************************************************}
unit uViewGridBase;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, uViewBase, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData,
cxDataStorage, cxEdit, DB, cxDBData, uDADataTable, cxGridLevel,
cxClasses, cxControls, cxGridCustomView, cxGridCustomTableView,
cxGridTableView, cxGridDBTableView, cxGrid, Menus, ActnList, Grids,
DBGrids, JvComponent, JvFormAutoSize, dxPSGlbl, dxPSUtl, dxPSEngn,
dxPrnPg, dxBkgnd, dxWrap, dxPrnDev, dxPSCompsProvider, dxPSFillPatterns,
dxPSEdgePatterns, dxPSCore, dxPScxCommon, dxPScxGridLnk, dxPrnDlg,
cxIntlPrintSys3, dxPSPrvwAdv, uGridUtils, uDAInterfaces;
type
IViewGridBase = interface(IViewBase)
['{D5B9B017-2A2E-44AC-8223-E54664C6BC66}']
procedure ExpandirTodo;
procedure ContraerTodo;
procedure AjustarAncho;
procedure Preview;
procedure Print;
procedure PrintSetup;
procedure SaveGridStatus;
procedure RestoreGridStatus;
procedure GotoFirst;
procedure GotoLast;
function GetFocusedView : TcxGridDBTableView;
property _FocusedView : TcxGridDBTableView read GetFocusedView;
function GetGrid : TcxGrid;
property _Grid : TcxGrid read GetGrid;
procedure StoreToRegistry (const Path : String);
procedure RestoreFromRegistry (const Path : String);
procedure SetDblClick(const Value: TNotifyEvent);
function GetDblClick: TNotifyEvent;
property OnDblClick: TNotifyEvent read GetDblClick write SetDblClick;
procedure SetPopupMenu(const Value: TPopupMenu);
function GetPopupMenu: TPopupMenu;
property PopupMenu: TPopupMenu read GetPopupMenu write SetPopupMenu;
function GetMultiSelect: Boolean;
procedure SetMultiSelect(const Value: Boolean);
property MultiSelect : Boolean read GetMultiSelect write SetMultiSelect;
procedure SetFilter(const Value: string);
function GetFilter: string;
property Filter: string read GetFilter write SetFilter;
function GetFilterAsSQL: string;
end;
TfrViewGridBase = class(TfrViewBase, IViewGridBase)
dsDataSource: TDADataSource;
private
FFilter: string;
FOnFilterChanged : TNotifyEvent;
FPopupMenu: TPopupMenu;
procedure FiltrarGrid(TextoFiltro : String);
protected
FGridStatus : TcxGridStatus;
FOnDblClick: TNotifyEvent;
function GetMultiSelect: Boolean; virtual;
procedure SetMultiSelect(const Value: Boolean); virtual;
procedure SetPopupMenu(const Value: TPopupMenu); virtual;
function GetPopupMenu: TPopupMenu; virtual;
procedure SetDblClick(const Value: TNotifyEvent); virtual;
function GetDblClick: TNotifyEvent; virtual;
function GetGrid : TcxGrid; virtual; abstract;
function GetFocusedView : TcxGridDBTableView; virtual; abstract;
procedure SetFilter(const Value: string); virtual;
function GetFilter: string; virtual;
procedure FilterChanged(Sender : TObject); virtual;
public
constructor Create(AOwner: TComponent); override;
procedure ShowEmbedded(const AParent : TWinControl); override;
procedure ExpandirTodo;
procedure ContraerTodo;
procedure AjustarAncho;
procedure SaveGridStatus;
procedure RestoreGridStatus;
procedure Preview; virtual;
procedure Print; virtual;
procedure PrintSetup; virtual;
procedure GotoFirst;
procedure GotoLast;
procedure StoreToRegistry (const Path : String);
procedure RestoreFromRegistry (const Path : String);
function GetFilterAsSQL: string;
property Filter: string read GetFilter write SetFilter;
property _FocusedView : TcxGridDBTableView read GetFocusedView;
property _Grid : TcxGrid read GetGrid;
property OnDblClick: TNotifyEvent read GetDblClick write SetDblClick;
property PopupMenu: TPopupMenu read GetPopupMenu write SetPopupMenu;
property MultiSelect : Boolean read GetMultiSelect write SetMultiSelect;
destructor Destroy; override;
end;
procedure Register;
implementation
uses
CCReg, uDataModuleBase, uDBSelectionList;
{$R *.dfm}
procedure Register;
begin
RegisterCustomContainer(TfrViewGridBase);
end;
{ TfrViewGrid }
procedure TfrViewGridBase.AjustarAncho;
begin
if Assigned(_FocusedView) then
_FocusedView.ApplyBestFit;
end;
procedure TfrViewGridBase.ContraerTodo;
begin
if Assigned(_FocusedView) then
_FocusedView.ViewData.Collapse(True);
end;
constructor TfrViewGridBase.Create(AOwner: TComponent);
begin
inherited;
FGridStatus := nil;
FFilter := '';
FOnFilterChanged := FilterChanged;
FPopupMenu := nil;
FOnDblClick := nil;
end;
procedure TfrViewGridBase.ExpandirTodo;
begin
if Assigned(_FocusedView) then
_FocusedView.ViewData.Expand(True);
end;
function TfrViewGridBase.GetDblClick: TNotifyEvent;
begin
Result := FOnDblClick;
end;
function TfrViewGridBase.GetFilter: string;
begin
Result := FFilter;
end;
function TfrViewGridBase.GetMultiSelect: Boolean;
begin
Result := _FocusedView.OptionsSelection.MultiSelect;
end;
function TfrViewGridBase.GetPopupMenu: TPopupMenu;
begin
Result := FPopupMenu;
end;
procedure TfrViewGridBase.GotoFirst;
begin
if Assigned(_FocusedView) then
_FocusedView.DataController.GotoFirst;
end;
procedure TfrViewGridBase.GotoLast;
begin
if Assigned(_FocusedView) then
_FocusedView.DataController.GotoLast;
end;
procedure TfrViewGridBase.Preview;
begin
end;
procedure TfrViewGridBase.Print;
begin
end;
procedure TfrViewGridBase.PrintSetup;
begin
end;
procedure TfrViewGridBase.RestoreFromRegistry(const Path : String);
begin
if Assigned(_FocusedView) then
_FocusedView.RestoreFromRegistry(Path + '\\GridSettings\\' + Self.Name, False, False, []);
end;
procedure TfrViewGridBase.SetDblClick(const Value: TNotifyEvent);
begin
FOnDblClick := Value;
end;
procedure TfrViewGridBase.SetFilter(const Value: string);
begin
if FFilter <> Value then
begin
FFilter := Value;
FiltrarGrid(FFilter);
if Assigned(FOnFilterChanged) then
FOnFilterChanged(Self);
end;
end;
procedure TfrViewGridBase.SetMultiSelect(const Value: Boolean);
begin
_FocusedView.OptionsSelection.MultiSelect := True;
// _FocusedView..OnSelectionChanged := SelectionChanged;
end;
procedure TfrViewGridBase.SetPopupMenu(const Value: TPopupMenu);
begin
FPopupMenu := Value;
_FocusedView.PopupMenu := FPopupMenu;
end;
procedure TfrViewGridBase.ShowEmbedded(const AParent: TWinControl);
begin
inherited;
// No activar la tabla ya por si acaso tuviera parámetros
{ if not DADataSource.DataTable.Active then
DADataSource.DataTable.Active := True;}
GotoFirst;
_FocusedView.Focused := True;
if _FocusedView.ViewData.RecordCount > 0 then
begin
_FocusedView.ViewData.Records[0].Selected := True;
_FocusedView.ViewData.Records[0].Focused := True;
end;
end;
procedure TfrViewGridBase.StoreToRegistry(const Path : String);
begin
if Assigned(_FocusedView) then
_FocusedView.StoreToRegistry(Path + '\\GridSettings\\' + Self.Name, False, []);
end;
procedure TfrViewGridBase.FiltrarGrid(TextoFiltro : String);
var
Columna: TcxGridDBColumn;
i: Integer;
AItemList: TcxFilterCriteriaItemList;
begin
with _FocusedView.DataController.Filter do
begin
ShowHourglassCursor;
Application.ProcessMessages;
// BeginUpdate;
try
Options := [fcoCaseInsensitive, fcoSoftCompare];
Root.Clear;
if Length(TextoFiltro) > 0 then
begin
AItemList := Root.AddItemList(fboAnd);
AItemList.BoolOperatorKind := fboOr;
for i:=0 to (_FocusedView as TcxGridDBTableView).ColumnCount - 1 do
begin
Columna := (_FocusedView as TcxGridDBTableView).Columns[i];
if (Length(Columna.Caption) > 0) and (Columna.Caption <> 'RecID') then
AItemList.AddItem(Columna, foLike, '%'+TextoFiltro+'%', IntToStr(i));
end;
Active := True;
end
else
Active := False;
finally
// EndUpdate;
HideHourglassCursor;
Application.ProcessMessages;
end;
end;
end;
procedure TfrViewGridBase.FilterChanged(Sender: TObject);
begin
end;
destructor TfrViewGridBase.Destroy;
begin
FOnFilterChanged := Nil;
FreeAndNIL(FGridStatus);
inherited;
end;
procedure TfrViewGridBase.RestoreGridStatus;
begin
if Assigned(FGridStatus) then
FGridStatus.Restore(_FocusedView);
end;
procedure TfrViewGridBase.SaveGridStatus;
begin
FreeAndNIL(FGridStatus);
FGridStatus := TcxGridStatus.Create(_FocusedView);
end;
function TfrViewGridBase.GetFilterAsSQL: string;
begin
with _FocusedView.DataController.Filter do
Result := FilterText;
end;
end.