{*******************************************************} { } { Administración de puntos de venta } { } { Copyright (C) 2006 Rodax Software S.L. } { } {*******************************************************} unit uEditorGridBase; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, uEditorBase, ToolWin, ComCtrls, JvExControls, JvComponent, JvNavigationPane, ActnList, TB2Dock, TB2Toolbar, TBX, TB2Item, ImgList, PngImageList, StdActns, TB2ExtItems, TBXExtItems, uViewGridBase, uEditorDBBase, DB, uDADataTable, Menus, JvFormAutoSize, uDAScriptingProvider, uDACDSDataTable, AppEvnts, JvAppStorage, JvAppRegistryStorage, JvFormPlacement, pngimage, ExtCtrls, JvComponentBase, dxLayoutLookAndFeels, TBXStatusBars, JvExComCtrls, JvStatusBar, uDAInterfaces; type IEditorGridBase = interface(IEditorDBBase) ['{CB8CDE00-B225-4A1D-9A5C-EC6FBE2C854B}'] procedure SetMultiSelect (AValue : Boolean); function GetMultiSelect : Boolean; property MultiSelect : Boolean read GetMultiSelect write SetMultiSelect; end; TfEditorGridBase = class(TfEditorDBBase, IEditorGridBase) tbxEditFiltro: TTBXEditItem; tbxFiltro: TTBXToolbar; GridPopupMenu: TPopupMenu; Modificar1: TMenuItem; Eliminar1: TMenuItem; N1: TMenuItem; Nuevo1: TMenuItem; TBXLabelItem1: TTBXLabelItem; actQuitarFiltro: TAction; N2: TMenuItem; Previsualizar1: TMenuItem; Imprimir1: TMenuItem; TBXSeparatorItem14: TTBXSeparatorItem; TBXItem33: TTBXItem; N33: TMenuItem; Actualizar1: TMenuItem; TBXItem34: TTBXItem; actAnchoAuto: TAction; TBXSeparatorItem16: TTBXSeparatorItem; TBXItem35: TTBXItem; TBXItem36: TTBXItem; TBXSeparatorItem6: TTBXSeparatorItem; TBXItem7: TTBXItem; actFiltrar: TAction; TBXItem37: TTBXItem; TBXTMain2: TTBXToolbar; actExportarExcel: TAction; TBXItem382: TTBXItem; TBXSeparatorItem173: TTBXSeparatorItem; ExportaraficheroExcel1: TMenuItem; N41: TMenuItem; TBXSubmenuItem32: TTBXSubmenuItem; TBXItem1039: TTBXItem; lblAno: TTBXLabelItem; cbxListaAnos: TTBXComboBoxItem; sepAno: TTBXSeparatorItem; tbxEditFiltro2: TTBXEditItem; procedure tbxEditFiltroChange(Sender: TObject; const Text: String); procedure tbxEditFiltro2Change(Sender: TObject; const Text: string); procedure FormShow(Sender: TObject); procedure actQuitarFiltroExecute(Sender: TObject); procedure actDuplicarUpdate(Sender: TObject); procedure actModificarUpdate(Sender: TObject); procedure actEliminarUpdate(Sender: TObject); procedure actNuevoUpdate(Sender: TObject); procedure actAnchoAutoExecute(Sender: TObject); procedure actRefrescarUpdate(Sender: TObject); procedure actFiltrarExecute(Sender: TObject); procedure actFiltrarUpdate(Sender: TObject); procedure CustomEditorDestroy(Sender: TObject); procedure actExportarExcelExecute(Sender: TObject); procedure actExportarExcelUpdate(Sender: TObject); protected FListaAnos: TStringList; FViewGrid : IViewGridBase; FDynWhereDataTable: WideString; function GetListaAnos: TStringList; procedure SetListaAnos(const Value: TStringList); function GetDynWhereDataTable: WideString; procedure SetDynWhereDataTable(const Value: WideString); procedure SetViewGrid(const Value : IViewGridBase); virtual; function GetViewGrid: IViewGridBase; procedure SetMultiSelect (AValue : Boolean); function GetMultiSelect : Boolean; procedure PrevisualizarInterno; override; procedure ConfPaginaInterno; override; procedure ImprimirInterno; override; procedure RefrescarInterno; override; function GetModified: Boolean; override; public property ListaAnos: TStringList read GetListaAnos write SetListaAnos; property ViewGrid: IViewGridBase read GetViewGrid write SetViewGrid; property DynWhereDataTable: WideString read GetDynWhereDataTable write SetDynWhereDataTable; property MultiSelect : Boolean read GetMultiSelect write SetMultiSelect; constructor Create(AOwner : TComponent); override; destructor Destroy; override; end; implementation uses uDMBase, uCustomEditor, cxGridTableView, cxControls; {$R *.dfm} { ********************************* TfEditorGridBase ***************************** } destructor TfEditorGridBase.Destroy; begin FDynWhereDataTable := ''; FViewGrid := NIL; if Assigned(FListaAnos) then FlistaAnos.Free; inherited; end; function TfEditorGridBase.GetDynWhereDataTable: WideString; begin Result := FDynWhereDataTable; end; function TfEditorGridBase.GetListaAnos: TStringList; begin Result := FListaAnos; end; function TfEditorGridBase.GetModified: Boolean; begin Result := False; end; function TfEditorGridBase.GetMultiSelect: Boolean; begin Result := False; if Assigned(ViewGrid) then Result := ViewGrid.MultiSelect; end; function TfEditorGridBase.GetViewGrid: IViewGridBase; begin Result := FViewGrid; end; procedure TfEditorGridBase.ImprimirInterno; begin inherited; ViewGrid.Print; end; procedure TfEditorGridBase.SetDynWhereDataTable(const Value: WideString); begin FDynWhereDataTable := Value; end; procedure TfEditorGridBase.SetListaAnos(const Value: TStringList); var i: Integer; AStringAnterior: String; begin AStringAnterior := ''; if Assigned(FListaAnos) then begin AStringAnterior := FListaAnos.ValueFromIndex[cbxListaAnos.ItemIndex]; FListaAnos.Free; end; //Se asigna el nuevo TStringList FListaAnos := Value; if Assigned(FListaAnos) then begin cbxListaAnos.Strings.BeginUpdate; cbxListaAnos.Strings.Clear; for i := 0 to FListaAnos.Count - 1 do cbxListaAnos.Strings.Append(FListaAnos.Names[i]); //Se posiciona en el elemento que habia anteriormente if Length(AStringAnterior) > 0 then begin if FListaAnos.IndexOfName(AStringAnterior) <> -1 then cbxListaAnos.ItemIndex := FListaAnos.IndexOfName(AStringAnterior) else cbxListaAnos.ItemIndex := 0; end; cbxListaAnos.Strings.EndUpdate; end; end; procedure TfEditorGridBase.SetMultiSelect(AValue: Boolean); begin if Assigned(ViewGrid) then ViewGrid.MultiSelect := AValue; end; procedure TfEditorGridBase.SetViewGrid(const Value: IViewGridBase); begin FViewGrid := Value; if Assigned(FViewGrid) then begin FViewGrid.PopupMenu := GridPopupMenu; FViewGrid.OnDblClick := actModificar.OnExecute; end; end; procedure TfEditorGridBase.tbxEditFiltro2Change(Sender: TObject; const Text: string); begin if Assigned(ViewGrid) then begin if Length(Text) > 0 then ViewGrid.Filter2 := Text else actQuitarFiltro.Execute; end; end; procedure TfEditorGridBase.tbxEditFiltroChange(Sender: TObject; const Text: String); begin if Assigned(ViewGrid) then begin if Length(Text) > 0 then ViewGrid.Filter := Text else actQuitarFiltro.Execute; end; end; procedure TfEditorGridBase.FormShow(Sender: TObject); begin inherited; if Assigned(ViewGrid) then begin ViewGrid.ShowEmbedded(Self); ViewGrid.RestoreFromIniFile; end; cbxListaAnos.ItemIndex := 0; end; procedure TfEditorGridBase.actEliminarUpdate(Sender: TObject); begin inherited; if HayDatos and Assigned(ViewGrid) then (Sender as TAction).Enabled := not (dsDataTable.DataTable.State in dsEditModes) and not ViewGrid.IsEmpty and ViewGrid.esSeleccionCeldaDatos else (Sender as TAction).Enabled := False; end; procedure TfEditorGridBase.actExportarExcelExecute(Sender: TObject); begin inherited; if Assigned(ViewGrid) then ViewGrid.ExportToExcel; end; procedure TfEditorGridBase.actExportarExcelUpdate(Sender: TObject); begin inherited; (Sender as TAction).Enabled := Assigned(ViewGrid); end; procedure TfEditorGridBase.actFiltrarExecute(Sender: TObject); begin inherited; if Assigned(ViewGrid) then ViewGrid.ViewFiltros.VerFiltros := not ViewGrid.ViewFiltros.VerFiltros; if Assigned(ViewGrid) then if ViewGrid.ViewFiltros.VerFiltros then begin tbxEditFiltro.Visible := False; tbxEditFiltro2.Visible := False; TBXItem7.Visible := False; end else begin tbxEditFiltro.Text := ''; tbxEditFiltro.Visible := True; TBXItem7.Visible := True; if (tbxEditFiltro2.Enabled) then begin tbxEditFiltro2.Text := ''; tbxEditFiltro2.Visible := True; end; end; end; procedure TfEditorGridBase.actFiltrarUpdate(Sender: TObject); begin inherited; if Assigned(ViewGrid) then (Sender as TAction).Checked := ViewGrid.ViewFiltros.VerFiltros; end; procedure TfEditorGridBase.actModificarUpdate(Sender: TObject); begin inherited; if HayDatos and Assigned(ViewGrid) then (Sender as TAction).Enabled := not (dsDataTable.DataTable.State in dsEditModes) and not ViewGrid.IsEmpty and ViewGrid.esSeleccionCeldaDatos else (Sender as TAction).Enabled := False; //En el caso de que el grid sea multiselección solo se podrá modificar si solo se tiene un elemento seleccionado if (Sender as TAction).Enabled then if MultiSelect and Assigned(ViewGrid) then (Sender as TAction).Enabled := (ViewGrid.NumSeleccionados = 1); end; procedure TfEditorGridBase.actNuevoUpdate(Sender: TObject); begin inherited; (Sender as TAction).Enabled := Assigned(dsDataTable.DataTable); end; procedure TfEditorGridBase.actQuitarFiltroExecute(Sender: TObject); begin if Assigned(ViewGrid) then begin tbxEditFiltro.Text := ''; ViewGrid.Filter := ''; tbxEditFiltro2.Text := ''; ViewGrid.Filter2 := ''; end; end; procedure TfEditorGridBase.actRefrescarUpdate(Sender: TObject); begin inherited; (Sender as TAction).Enabled := Assigned(dsDataTable.DataTable); end; procedure TfEditorGridBase.ConfPaginaInterno; begin inherited; ViewGrid.PrintSetup; end; constructor TfEditorGridBase.Create(AOwner: TComponent); begin inherited; FDynWhereDataTable := ''; actModificar.ShortCut := ShortCut(VK_RETURN, []); end; procedure TfEditorGridBase.CustomEditorDestroy(Sender: TObject); begin inherited; if Assigned(ViewGrid) then ViewGrid.StoreToIniFile; end; procedure TfEditorGridBase.actAnchoAutoExecute(Sender: TObject); begin inherited; if Assigned(ViewGrid) then ViewGrid.AjustarAncho; end; procedure TfEditorGridBase.actDuplicarUpdate(Sender: TObject); begin inherited; if HayDatos and Assigned(ViewGrid) then (Sender as TAction).Enabled := not (dsDataTable.DataTable.State in dsEditModes) and not ViewGrid.IsEmpty and ViewGrid.esSeleccionCeldaDatos else (Sender as TAction).Enabled := False; //En el caso de que el grid sea multiselección solo se podrá modificar si solo se tiene un elemento seleccionado if (Sender as TAction).Enabled then if MultiSelect and Assigned(ViewGrid) then (Sender as TAction).Enabled := (ViewGrid.NumSeleccionados = 1); end; procedure TfEditorGridBase.PrevisualizarInterno; begin inherited; ViewGrid.Preview; end; procedure TfEditorGridBase.RefrescarInterno; begin ShowHourglassCursor; ViewGrid.SaveGridStatus; ViewGrid._FocusedView.BeginUpdate; try // inherited; <- No hacemos lo que hay en el padre dsDataTable.DataTable.Refresh; finally ViewGrid._FocusedView.EndUpdate; ViewGrid.RestoreGridStatus; HideHourglassCursor; end; end; initialization RegisterClass(TfEditorGridBase); finalization UnRegisterClass(TfEditorGridBase); end.