unit uEditorPerfilUsuario; interface uses Windows, Menus, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, uEditorDBItem, JvAppStorage, JvAppRegistryStorage, DB, uDAInterfaces, uDADataTable, JvComponentBase, JvFormPlacement, ImgList, PngImageList, StdActns, ActnList, ComCtrls, JvExComCtrls, JvStatusBar, TBX, TB2Item, TB2Dock, TB2Toolbar, pngimage, ExtCtrls, JvExControls, JvNavigationPane, uIEditorPerfilUsuario, uUsuariosController, uCustomView, uViewBase, uViewPerfilUsuario, uBizUsuarios, dxLayoutLookAndFeels; type TfEditorPerfilUsuario = class(TfEditorDBItem, IEditorPerfilUsuario) dxLayoutLookAndFeelList1: TdxLayoutLookAndFeelList; dxLayoutOfficeLookAndFeel1: TdxLayoutOfficeLookAndFeel; procedure actGuardarExecute(Sender: TObject); procedure actGuardarCerrarExecute(Sender: TObject); procedure dsDataTableDataChange(Sender: TObject; Field: TField); procedure FormShow(Sender: TObject); private FController : IUsuariosController; FPerfilUsuario : IBizPerfilUsuario; FViewPerfilUsuario : IViewPerfilUsuario; protected function GetController : IUsuariosController; procedure SetController (const Value : IUsuariosController); function GetPerfilUsuario: IBizPerfilUsuario; procedure SetPerfilUsuario(const Value: IBizPerfilUsuario); procedure GuardarInterno; procedure EliminarInterno; procedure ActualizarEstadoEditor; //Si queremos crear otra vista para el editor heredado solo tendriamos que //sobreescribir este metodo procedure AsignarVista; virtual; procedure PonerTitulos(const ATitulo: string = ''); function GetViewPerfilUsuario: IViewPerfilUsuario; procedure SetViewPerfilUsuario(const Value: IViewPerfilUsuario); property ViewPerfilUsuario: IViewPerfilUsuario read GetViewPerfilUsuario write SetViewPerfilUsuario; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; property Controller : IUsuariosController read GetController write SetController; property PerfilUsuario: IBizPerfilUsuario read GetPerfilUsuario write SetPerfilUsuario; end; implementation {$R *.dfm} { TfEditorUsuario } uses cxControls, uDialogUtils; var FIDNuevoGuardado : Integer = -1; procedure TfEditorPerfilUsuario.actGuardarCerrarExecute(Sender: TObject); begin ShowHourglassCursor; try if actGuardar.Execute then actCerrar.Execute; finally HideHourglassCursor; end; end; procedure TfEditorPerfilUsuario.actGuardarExecute(Sender: TObject); begin if actGuardar.Enabled then begin GuardarInterno; ActualizarEstadoEditor; end; end; procedure TfEditorPerfilUsuario.ActualizarEstadoEditor; begin PonerTitulos; if HayDatos then begin if (Self.Modified) and (dsDataTable.DataTable.State <> dsInsert) then StatusBar.Panels[0].Text := ' Se han producido cambios' else StatusBar.Panels[0].Text := ''; end; end; procedure TfEditorPerfilUsuario.AsignarVista; var AViewPerfilUsuario: TfrViewPerfilUsuario; begin AViewPerfilUsuario := TfrViewPerfilUsuario.Create(Self); with AViewPerfilUsuario do begin Parent := Self; Align := alClient; dxLayoutControlArticulo.LookAndFeel := dxLayoutOfficeLookAndFeel1; end; ViewPerfilUsuario := AViewPerfilUsuario; end; constructor TfEditorPerfilUsuario.Create(AOwner: TComponent); begin inherited; AsignarVista; end; destructor TfEditorPerfilUsuario.Destroy; begin // Utilizar mejor OnClose; inherited; end; procedure TfEditorPerfilUsuario.dsDataTableDataChange(Sender: TObject; Field: TField); begin inherited; ActualizarEstadoEditor; end; procedure TfEditorPerfilUsuario.EliminarInterno; begin if (ShowConfirmMessage('Eliminar el perfil', '¿Desea eliminar este perfil?') = IDYES) then begin inherited; if not FController.EliminarPerfil(FPerfilUsuario) then actRefrescar.Execute; end; end; procedure TfEditorPerfilUsuario.FormShow(Sender: TObject); begin inherited; 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; function TfEditorPerfilUsuario.GetController: IUsuariosController; begin Result := FController; end; function TfEditorPerfilUsuario.GetPerfilUsuario: IBizPerfilUsuario; begin Result := FPerfilUsuario; end; function TfEditorPerfilUsuario.GetViewPerfilUsuario: IViewPerfilUsuario; begin Result := FViewPerfilUsuario; end; procedure TfEditorPerfilUsuario.GuardarInterno; begin inherited; if FController.GuardarPerfil(FPerfilUsuario) then begin FIDNuevoGuardado := FPerfilUsuario.ID; FPerfilUsuario.DataTable.CancelUpdates; Modified := False; actRefrescar.Execute; end; end; procedure TfEditorPerfilUsuario.PonerTitulos(const ATitulo: string); var FTitulo : String; begin if Assigned(FPerfilUsuario) then begin if FPerfilUsuario.EsNuevo then FTitulo := 'Nuevo perfil' else FTitulo := 'Perfil'; if Length(FPerfilUsuario.USERNAME) > 0 then FTitulo := FTitulo + ' - ' + FPerfilUsuario.USERNAME; end; if ReadOnly then begin JvNavPanelHeader.Caption := FTitulo + ' (NO MODIFICABLE)'; Caption := FTitulo + ' (NO MODIFICABLE)'; end else begin JvNavPanelHeader.Caption := FTitulo; Caption := FTitulo; end; end; procedure TfEditorPerfilUsuario.SetController(const Value: IUsuariosController); begin FController := Value; if Assigned(FViewPerfilUsuario) and Assigned(FController) then FViewPerfilUsuario.Controller := FController; end; procedure TfEditorPerfilUsuario.SetPerfilUsuario( const Value: IBizPerfilUsuario); begin FPerfilUsuario := Value; dsDataTable.DataTable := FPerfilUsuario.DataTable; if Assigned(FViewPerfilUsuario) and Assigned(FPerfilUsuario) then FViewPerfilUsuario.PerfilUsuario := FPerfilUsuario; end; procedure TfEditorPerfilUsuario.SetViewPerfilUsuario(const Value: IViewPerfilUsuario); begin FViewPerfilUsuario := Value; if Assigned(FViewPerfilUsuario) and Assigned(FPerfilUsuario) then FViewPerfilUsuario.PerfilUsuario := FPerfilUsuario; end; end.