AbetoDesign_FactuGES2/Source/GUIBase/uEditorBase.pas

517 lines
13 KiB
ObjectPascal
Raw Blame History

unit uEditorBase;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
uGUIBase, uCustomEditor, ToolWin, ComCtrls, JvExControls,
JvComponent, JvNavigationPane, ActnList, TBX, TB2Item, ImgList,
PngImageList, StdActns, JvFormAutoSize, AppEvnts, uCustomView, uViewBase,
JvAppStorage, JvAppRegistryStorage, JvFormPlacement, pngimage, ExtCtrls,
JvComponentBase, TB2Dock, TB2Toolbar, dxLayoutLookAndFeels, TBXStatusBars,
JvExComCtrls, JvStatusBar;
type
IEditorBase = interface(ICustomEditor)
['{CB8CDE00-B225-4A1D-9A5C-EC6FBE2C854B}']
function ShowModal : Integer;
procedure Show;
end;
TfEditorBase = class(TCustomEditor, IEditorBase)
actAcercaDe: TAction;
actAnterior: TAction;
actBuscar: TAction;
actCancelarCambios: TAction;
actCerrar: TAction;
actConfPagina: TAction;
actCopiar: TEditCopy;
actCortar: TEditCut;
actDeshacer: TEditUndo;
actEliminar: TAction;
actGuardar: TAction;
actGuardarCerrar: TAction;
actImprimir: TAction;
actLimpiar: TEditDelete;
actModificar: TAction;
actNuevo: TAction;
actPegar: TEditPaste;
actPrevisualizar: TAction;
actRefrescar: TAction;
actSeleccionarTodo: TEditSelectAll;
actSiguiente: TAction;
EditorActionList: TActionList;
JvNavPanelHeader: TJvNavPanelHeader;
LargeImages: TPngImageList;
SmallImages: TPngImageList;
TBXDock: TTBXDock;
TBXItem1: TTBXItem;
TBXItem10: TTBXItem;
TBXItem11: TTBXItem;
TBXItem12: TTBXItem;
TBXItem13: TTBXItem;
TBXItem14: TTBXItem;
TBXItem15: TTBXItem;
TBXItem16: TTBXItem;
TBXItem17: TTBXItem;
TBXItem18: TTBXItem;
TBXItem19: TTBXItem;
TBXItem2: TTBXItem;
TBXItem20: TTBXItem;
TBXItem21: TTBXItem;
TBXItem22: TTBXItem;
TBXItem23: TTBXItem;
TBXItem24: TTBXItem;
TBXItem25: TTBXItem;
TBXItem26: TTBXItem;
TBXItem27: TTBXItem;
TBXItem28: TTBXItem;
TBXItem29: TTBXItem;
TBXItem3: TTBXItem;
TBXItem30: TTBXItem;
TBXItem31: TTBXItem;
TBXItem32: TTBXItem;
TBXItem4: TTBXItem;
TBXItem5: TTBXItem;
TBXItem6: TTBXItem;
TBXItem8: TTBXItem;
TBXItem9: TTBXItem;
tbxMain: TTBXToolbar;
tbxMenu: TTBXToolbar;
TBXSeparatorItem1: TTBXSeparatorItem;
TBXSeparatorItem10: TTBXSeparatorItem;
TBXSeparatorItem11: TTBXSeparatorItem;
TBXSeparatorItem12: TTBXSeparatorItem;
TBXSeparatorItem13: TTBXSeparatorItem;
TBXSeparatorItem2: TTBXSeparatorItem;
TBXSeparatorItem3: TTBXSeparatorItem;
TBXSeparatorItem4: TTBXSeparatorItem;
TBXSeparatorItem5: TTBXSeparatorItem;
TBXSeparatorItem7: TTBXSeparatorItem;
TBXSeparatorItem8: TTBXSeparatorItem;
TBXSeparatorItem9: TTBXSeparatorItem;
TBXSubmenuItem1: TTBXSubmenuItem;
TBXSubmenuItem4: TTBXSubmenuItem;
TBXSubmenuItem5: TTBXSubmenuItem;
TBXSubmenuItem6: TTBXSubmenuItem;
TBXSubmenuItem7: TTBXSubmenuItem;
JvFormStorage: TJvFormStorage;
JvAppRegistryStorage: TJvAppRegistryStorage;
Image1: TImage;
TBXSeparatorItem15: TTBXSeparatorItem;
StatusBarImages: TPngImageList;
StatusBar: TJvStatusBar;
procedure actCerrarExecute(Sender: TObject);
procedure actGuardarCerrarExecute(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure CustomEditorActivate(Sender: TObject);
procedure actModificarExecute(Sender: TObject);
procedure actGuardarExecute(Sender: TObject);
procedure actPrevisualizarExecute(Sender: TObject);
procedure actImprimirExecute(Sender: TObject);
procedure actNuevoExecute(Sender: TObject);
procedure actEliminarExecute(Sender: TObject);
procedure actConfPaginaExecute(Sender: TObject);
procedure actCancelarCambiosExecute(Sender: TObject);
procedure actDuplicarExecute(Sender: TObject);
procedure actRefrescarExecute(Sender: TObject);
procedure actModificarUpdate(Sender: TObject);
procedure actEliminarUpdate(Sender: TObject);
procedure actGuardarCerrarUpdate(Sender: TObject);
procedure actGuardarUpdate(Sender: TObject);
protected
procedure CreateParams(Var params: TCreateParams); override;
procedure ActualizarEstadoEditor; virtual;
function ModifiedQuery : Boolean;
procedure ModificarInterno; virtual;
procedure EliminarInterno; virtual;
procedure GuardarInterno; virtual;
procedure NuevoInterno; virtual;
procedure ImprimirInterno; virtual;
procedure PrevisualizarInterno; virtual;
procedure ConfPaginaInterno; virtual;
procedure RefrescarInterno; virtual;
procedure CancelarCambiosInterno; virtual;
procedure CerrarInterno; virtual;
procedure DuplicarInterno; virtual;
procedure PonerTitulos(const ATitulo: String = ''); virtual;
procedure SetReadOnly(Value: Boolean); override;
public
constructor Create(AOwner: TComponent); override;
function ShowModal : Integer; override;
procedure Show;
published
procedure FormShow(Sender: TObject);
end;
TfEditorBaseClass = class of TfEditorBase;
implementation
{$R *.dfm}
uses
Menus, uDMBase, cxControls, cxEdit, uDialogUtils;
{M<>todo que coge el componente editor que tenga el foco y le fuerza a hacer post para que la tabla se entere
}
procedure PostActivecxEditorChanges;
var
AControl: TWinControl;
ActiveEditor: TcxCustomEdit;
begin
ActiveEditor:= nil;
AControl := Screen.ActiveControl;
if Supports(AControl, IcxInnerEditHelper) then
ActiveEditor:= TcxCustomEdit(AControl.Owner)
else
if AControl is TcxCustomEdit then
ActiveEditor:= TcxCustomEdit(AControl);
if Assigned(ActiveEditor) then
ActiveEditor.PostEditValue;
end;
{
********************************* TfEditorBase *********************************
}
procedure TfEditorBase.actCancelarCambiosExecute(Sender: TObject);
begin
CancelarCambiosInterno;
ActualizarEstadoEditor;
end;
procedure TfEditorBase.actCerrarExecute(Sender: TObject);
begin
CerrarInterno;
end;
procedure TfEditorBase.actConfPaginaExecute(Sender: TObject);
begin
ConfPaginaInterno;
ActualizarEstadoEditor;
end;
procedure TfEditorBase.actDuplicarExecute(Sender: TObject);
begin
DuplicarInterno;
ActualizarEstadoEditor;
end;
procedure TfEditorBase.actEliminarExecute(Sender: TObject);
begin
if actEliminar.Enabled then
begin
EliminarInterno;
ActualizarEstadoEditor;
end;
end;
procedure TfEditorBase.actEliminarUpdate(Sender: TObject);
begin
(Sender as TAction).Enabled := not ReadOnly;
end;
procedure TfEditorBase.actGuardarCerrarExecute(Sender: TObject);
begin
ShowHourglassCursor;
try
if actGuardar.Execute then
actCerrar.Execute;
finally
HideHourglassCursor;
end;
end;
procedure TfEditorBase.actGuardarCerrarUpdate(Sender: TObject);
begin
(Sender as TAction).Enabled := not ReadOnly;
end;
procedure TfEditorBase.actGuardarExecute(Sender: TObject);
begin
GuardarInterno;
ActualizarEstadoEditor;
end;
procedure TfEditorBase.actGuardarUpdate(Sender: TObject);
begin
(Sender as TAction).Enabled := not ReadOnly;
end;
procedure TfEditorBase.actImprimirExecute(Sender: TObject);
begin
if actImprimir.Enabled then
begin
if Modified then
begin
if (ShowConfirmMessage('Se han producido cambios', 'Se han producido cambios y no se puede previsualizar hasta que no se guarden.' + #10#13 +
'<27>Desea guardarlos ahora?') = IDYES) then
begin
GuardarInterno;
ImprimirInterno;
ActualizarEstadoEditor;
end
else
ShowInfoMessage('Recuerde guardar los cambios si quiere previsualizar o imprimir.');
end
else
begin
ImprimirInterno;
ActualizarEstadoEditor;
end
end;
end;
procedure TfEditorBase.actModificarExecute(Sender: TObject);
begin
if actModificar.Enabled then
begin
ModificarInterno;
ActualizarEstadoEditor;
end;
end;
procedure TfEditorBase.actModificarUpdate(Sender: TObject);
begin
(Sender as TAction).Enabled := not ReadOnly;
end;
procedure TfEditorBase.actNuevoExecute(Sender: TObject);
begin
if actNuevo.Enabled then
begin
NuevoInterno;
ActualizarEstadoEditor;
end;
end;
procedure TfEditorBase.actPrevisualizarExecute(Sender: TObject);
begin
if actPrevisualizar.Enabled then
begin
if Modified then
begin
if (ShowConfirmMessage('Se han producido cambios', 'Se han producido cambios y no se puede previsualizar hasta que no se guarden.' + #10#13 +
'<27>Desea guardarlos ahora?') = IDYES) then
begin
GuardarInterno;
PrevisualizarInterno;
ActualizarEstadoEditor;
end
else
ShowInfoMessage('Recuerde guardar los cambios si quiere previsualizar o imprimir.');
end
else
begin
PrevisualizarInterno;
ActualizarEstadoEditor;
end;
end;
end;
procedure TfEditorBase.actRefrescarExecute(Sender: TObject);
begin
if actRefrescar.Enabled then
begin
RefrescarInterno;
ActualizarEstadoEditor;
end;
end;
procedure TfEditorBase.ActualizarEstadoEditor;
begin
PonerTitulos;
end;
procedure TfEditorBase.CancelarCambiosInterno;
begin
//
end;
procedure TfEditorBase.CerrarInterno;
begin
Close;
end;
procedure TfEditorBase.ConfPaginaInterno;
begin
//
end;
constructor TfEditorBase.Create(AOwner: TComponent);
var
APath : String;
begin
inherited;
with JvFormStorage do
begin
if Pos('_', Self.Name) = 0 then
APath := Self.Name
else
APath := Copy(Self.Name, 0, (Pos('_', Self.Name)-1));
AppStoragePath := APath;
end;
JvNavPanelHeader.StyleManager := dmBase.StyleManager;
end;
procedure TfEditorBase.CustomEditorActivate(Sender: TObject);
begin
PonerTitulos;
end;
procedure TfEditorBase.DuplicarInterno;
begin
//
end;
procedure TfEditorBase.EliminarInterno;
begin
//
end;
procedure TfEditorBase.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if Valid then
CanClose := ModifiedQuery
else
CanClose := False;
end;
procedure TfEditorBase.FormShow(Sender: TObject);
begin
ActualizarEstadoEditor;
if Assigned(Parent) then
begin
StatusBar.Visible := False;
actCerrar.ShortCut := 0
end
else begin
StatusBar.Visible := True;
actCerrar.ShortCut := ShortCut(VK_ESCAPE, []);
end;
end;
procedure TfEditorBase.GuardarInterno;
begin
PostActivecxEditorChanges;
end;
procedure TfEditorBase.ImprimirInterno;
begin
//
end;
procedure TfEditorBase.ModificarInterno;
begin
//
end;
function TfEditorBase.ModifiedQuery: Boolean;
var
Respuesta: Integer;
begin
Result := True;
if Modified then
begin
Respuesta := ShowConfirmMessage('Atenci<63>n',
'Se han producido cambios',
'<27>Desea guardar los cambios que se han producido antes de cerrar?',
[TDlgButton_SI, TDlgButton_NO, TDlgButton_CANCELAR]);
case Respuesta of
IDYES : actGuardar.Execute;
IDNO : actCancelarCambios.Execute;
else
Result := False;
end;
end
end;
procedure TfEditorBase.NuevoInterno;
begin
//
end;
procedure TfEditorBase.PonerTitulos(const ATitulo: String);
begin
if ReadOnly then
begin
JvNavPanelHeader.Caption := ATitulo + ' (NO MODIFICABLE)';
Caption := ATitulo + ' (NO MODIFICABLE)';
end
else
begin
JvNavPanelHeader.Caption := ATitulo;
Caption := ATitulo;
end;
end;
procedure TfEditorBase.PrevisualizarInterno;
begin
//
end;
procedure TfEditorBase.RefrescarInterno;
begin
//
end;
procedure TfEditorBase.SetReadOnly(Value: Boolean);
var
i: integer;
begin
inherited;
if (csLoading in Self.ComponentState) then
Exit;
for i:=0 to Self.ComponentCount-1 do
begin
if Self.Components[i] is TfrViewBase then
(Self.Components[i] as TfrViewBase).ReadOnly := Self.ReadOnly
end
end;
procedure TfEditorBase.Show;
begin
inherited Show;
// Self.WindowState := wsNormal;
// self.FormStyle := fsNormal;
end;
procedure TfEditorBase.CreateParams(var params: TCreateParams);
begin
inherited CreateParams(params);
{ Descomentar para crear varios formularios hijos abiertos a la vez
fuera de la aplicaci<63>n principal pero cuidado por que las ventanas
modales como la previsualizaci<63>n tambi<62>n se ven afectadas.
inherited CreateParams( params );
params.Style := params.Style and not WS_POPUP;
params.ExStyle := params.ExStyle and not WS_EX_TOOLWINDOW or WS_EX_APPWINDOW;
}
end;
function TfEditorBase.ShowModal: Integer;
var
ABorderIcons : TBorderIcons;
begin
ABorderIcons := Self.BorderIcons;
Self.BorderIcons := Self.BorderIcons - [biMinimize];
try
Result := inherited ShowModal;
finally
Self.BorderIcons := ABorderIcons;
end;
end;
initialization
RegisterClass(TfEditorBase);
finalization
UnRegisterClass(TfEditorBase);
end.