unit uEditorEjecucionObra; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, uEditorDBItem, ToolWin, ComCtrls, JvExControls, JvComponent, uViewObra, uBizObras, JvNavigationPane, ActnList, uEditorBase, StdActns, TB2Dock, TB2Toolbar, TBX, ImgList, PngImageList, TB2Item, uEditorItem, DB, uDADataTable, uEditorDBBase, JvFormAutoSize, uDAScriptingProvider, uDACDSDataTable, StdCtrls, pngimage, ExtCtrls, TBXDkPanels, JvButton, AppEvnts, uCustomView, uViewBase, JvAppStorage, JvAppRegistryStorage, JvFormPlacement, JvComponentBase, uViewObras, uIEditorEjecucionObra, uObrasController, JvExComCtrls, JvStatusBar, dxLayoutLookAndFeels, uDAInterfaces, dxGDIPlusClasses, cxControls, cxContainer, cxEdit, cxLabel, uViewDetallesGenerico, uViewListaEjecucionesObra, uViewEjecucionObra, Grids, DBGrids; type TfEditorEjecucionObra = class(TfEditorDBItem, IEditorEjecucionObra) dxLayoutLookAndFeelList1: TdxLayoutLookAndFeelList; dxLayoutOfficeLookAndFeel1: TdxLayoutOfficeLookAndFeel; procedure FormShow(Sender: TObject); procedure CustomEditorClose(Sender: TObject; var Action: TCloseAction); protected FController : IObrasController; FObra: IBizObra; FViewEjecucionActual: IViewEjecucionObra; function GetController : IObrasController; procedure SetController (const Value : IObrasController); virtual; function GetObra: IBizObra; virtual; procedure SetObra(const Value: IBizObra); virtual; procedure GuardarInterno; override; procedure EliminarInterno; override; procedure PonerTitulos(const ATitulo: string = ''); override; //Si queremos crear otra vista para el editor heredado solo tendriamos que //sobreescribir este metodo procedure AsignarVista; virtual; public property Obra: IBizObra read GetObra write SetObra; constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; implementation {$R *.dfm} uses uCustomEditor, uDataModuleObras, uDataModuleBase, uDialogUtils; {function ShowEditorObra (ABizObject : TDADataTableRules): TModalResult; var AEditor: TfEditorObra; begin AEditor := TfEditorObra.Create(Application); try AEditor.Obra := (ABizObject as IBizObra); Result := AEditor.ShowModal; finally AEditor.Release; end; end;} { ******************************* TfEditorObra ******************************* } function TfEditorEjecucionObra.GetObra: IBizObra; begin Result := FObra; end; function TfEditorEjecucionObra.GetController: IObrasController; begin Result := FController; end; procedure TfEditorEjecucionObra.GuardarInterno; begin inherited; FController.Guardar(FObra); Modified := False; end; procedure TfEditorEjecucionObra.PonerTitulos(const ATitulo: string); var FTitulo : String; begin if Assigned(Obra) then begin if Obra.EsNuevo then FTitulo := 'Nueva ejecución de obra' else FTitulo := 'Ejecución de la obra' + ' - ' + Obra.NOMBRE; end; inherited PonerTitulos(FTitulo); end; procedure TfEditorEjecucionObra.SetObra(const Value: IBizObra); begin FObra := Value; dsDataTable.DataTable := FObra.DataTable; if Assigned(FViewEjecucionActual) and Assigned(FObra) then begin FViewEjecucionActual.Obra := FObra; end else FViewEjecucionActual.Obra := NIL; end; procedure TfEditorEjecucionObra.SetController(const Value: IObrasController); begin FController := Value; if Assigned(FViewEjecucionActual) and Assigned(FController) then FViewEjecucionActual.Controller := FController; end; procedure TfEditorEjecucionObra.FormShow(Sender: TObject); begin inherited; if not Assigned(FViewEjecucionActual) then raise Exception.Create('No hay ninguna vista asignada'); if not Assigned(Obra) then raise Exception.Create('No hay ninguna obra asignada'); Obra.DataTable.Active := True; ReadOnly := True; FViewEjecucionActual.ReadOnly := True; end; destructor TfEditorEjecucionObra.Destroy; begin // Utilizar mejor OnClose; inherited; end; procedure TfEditorEjecucionObra.AsignarVista; var AViewEjecucion: TfrViewEjecucionObra; begin AViewEjecucion := TfrViewEjecucionObra.Create(NIL); with AViewEjecucion do begin Parent := pagGeneral; Align := alClient; dxLayoutControlEjecucionObra.LookAndFeel := dxLayoutOfficeLookAndFeel1; Controller := FController; Obra := FObra; end; FViewEjecucionActual := AViewEjecucion; end; constructor TfEditorEjecucionObra.Create(AOwner: TComponent); begin inherited; pgPaginas.ActivePage := pagGeneral; FViewEjecucionActual := NIL; AsignarVista; end; procedure TfEditorEjecucionObra.CustomEditorClose(Sender: TObject; var Action: TCloseAction); begin inherited; dsDataTable.DataTable := NIL; FViewEjecucionActual := NIL; FObra := NIL; end; procedure TfEditorEjecucionObra.EliminarInterno; begin // end; end.