unit uEditarTHidroDePasada;

  {$MODE Delphi}

interface

uses
    {$IFDEF WINDOWS}
  Windows,
  {$ENDIF}
  Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Grids, Buttons,
  uEditarActorConFichas,
  uFichasLPD,
  uBaseEditoresActores,
  uBaseEditoresCosasConNombre,
  uSalasDeJuego,
  uCosaConNombre,
  utilidades,
  uOpcionesSimSEEEdit,
  uverdoc,
  uConstantesSimSEE,
  xMatDefs,
  uresourcestring,
  uHidroDePasada;

type

  { TEditarTHidroDePasada }

  TEditarTHidroDePasada = class(TEditarActorConFichas)
    BAgregarFicha: TButton;
    BAyuda: TButton;
    BCancelar: TButton;
    BEditorDeUnidades: TButton;
    BGuardar: TButton;
    btEditarForzamientos: TButton;
    BVerExpandida: TButton;
    CBBorne: TComboBox;
    CBBorneIndiceDePrecios: TComboBox;
    cbCleanDevelopmentMechanism: TCheckBox;
    CBFuente: TComboBox;
    CBFuenteIndiceDePrecios: TComboBox;
    cbLowCostMustRun: TCheckBox;
    CBNodo: TComboBox;
    cb_CalcularGradienteDeInversion: TCheckBox;
    EditNombre: TEdit;
    eTonCO2xMWh: TEdit;
    gbIgualPotEnTodosLosPostes: TGroupBox;
    gbEmisionesCO2: TGroupBox;
    gbIndicieDePrecios: TGroupBox;
    gbParametrosAportes: TGroupBox;
    gbFichas: TGroupBox;
    Label11: TLabel;
    LBorne: TLabel;
    LBorneFuenteIndiceDePrecios1: TLabel;
    LFuenteDeAportes: TLabel;
    LFuenteIndiceDePrecios1: TLabel;
    LNodo: TLabel;
    LNombre: TLabel;
    Panel1: TPanel;
    penelIzquierdo: TPanel;
    panelLateral: TPanel;
    rgTipoFuente: TRadioGroup;
    sgFichas: TStringGrid;
    procedure btEditarForzamientosClick(Sender: TObject);
    procedure btNubeseableClick(Sender: TObject);
    procedure cb_ImponerIgualPotenciaEnTodosLosPostesClick(Sender: TObject);
    procedure EditEnter(Sender: TObject);
    procedure EditExit(Sender: TObject);
    procedure BAyudaClick(Sender: TObject);
    procedure CBNodoChange(Sender: TObject);
    procedure CBFuenteChange(Sender: TObject);
    procedure CBBorneChange(Sender: TObject);
    procedure BEditorDeUnidadesClick(Sender: TObject);
    procedure BCancelarClick(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);
    procedure BGuardarClick(Sender: TObject); override;
    procedure rgTipoFuenteClick(Sender: TObject);
    procedure EnabledForm(xenabled:Boolean); override;
  private
    { Private declarations }
  public
    constructor Create(AOwner: TComponent; sala: TSalaDeJuego;
      tipoCosa: TClass; cosaConNombre: TCosaConNombre); override;
    function validarFormulario: boolean; override;
  end;

implementation

uses SimSEEEditMain;

  {$R *.lfm}

constructor TEditarTHidroDePasada.Create(AOwner: TComponent;
  sala: TSalaDeJuego; tipoCosa: TClass; cosaConNombre: TCosaConNombre);
var
  actor: THidroDePasada;
begin
  inherited Create(AOwner, sala, tipoCosa, cosaConNombre);

  rgTipoFuente.Items.Clear;
  rgTipoFuente.Items.Add(rs_Caudales);
  rgTipoFuente.Items.Add(rs_Escurrimientos);


  inicializarCBNodos(CBNodo, False);
  inicializarCBFuente(CBFuente, CBBorne, False);
  inicializarCBFuente(CBFuenteIndiceDePrecios, CBBorneIndiceDePrecios, True);


  if cosaConNombre <> nil then
  begin
    actor := THidroDePasada(cosaConNombre);
    inicializarComponentesLPD(actor.lpd, TFichaHidroDePasada, sgFichas,
      BAgregarFicha, BVerExpandida, BGuardar, BCancelar);
    setCBFuente(CBFuenteIndiceDePrecios, CBBorneIndiceDePrecios,
      actor.fuenteInidicePrecios, actor.nombreBorneIndicePrecios);

    EditNombre.Text := actor.nombre;
    setCBNodo(CBNodo, actor.Nodo);
    setCBFuente(CBFuente, CBBorne, actor.fuenteDeAportes, actor.nombreBorne);
    eTonCO2xMWh.Text := FloatToStr(actor.TonCO2xMWh);
    if actor.flg_FuenteDeEscurrimientos then
      rgTipoFuente.ItemIndex := 1
    else
      rgTipoFuente.ItemIndex := 0;
    cbLowCostMustRun.Checked := actor.LowCostMustRun_;
    cbCleanDevelopmentMechanism.Checked := actor.CleanDevelopmentMechanism;
    cb_CalcularGradienteDeInversion.Checked := actor.flg_CalcularGradienteDeInversion;

    EnabledForm(not(actor.flg_nubeseable));

    guardado := True;
  end
  else
  begin
    inicializarComponentesLPD(nil, TFichaHidroDePasada, sgFichas,
      BAgregarFicha, BVerExpandida, BGuardar, BCancelar);
    eTonCO2xMWh.Text := FloatToStr(0.0);
    rgTipoFuente.ItemIndex := 0;
    cbLowCostMustRun.Checked := True;
    cbCleanDevelopmentMechanism.Checked := False;
    cb_CalcularGradienteDeInversion.Checked := False;

    guardado := False;
  end;
end;

function TEditarTHidroDePasada.validarFormulario: boolean;
begin
  Result := inherited validarFormulario and inherited  validarNombre(EditNombre) and
    inherited validarCBNodo(CBNodo) and inherited validarCBFuente(
    CBFuente, CBBorne, 0) and validarEditFloat(eTonCO2xMWh, -1000, 1000000);
end;

procedure TEditarTHidroDePasada.BAyudaClick(Sender: TObject);
begin
  uverdoc.verdoc( 3828, tipoCosa);
end;

procedure TEditarTHidroDePasada.BCancelarClick(Sender: TObject);
begin
  inherited BCancelarClick(Sender);
end;

procedure TEditarTHidroDePasada.BEditorDeUnidadesClick(Sender: TObject);
begin
  inherited BEditorDeUnidadesClick(Sender);
end;

procedure TEditarTHidroDePasada.BGuardarClick(Sender: TObject);
var
  actor: THidroDePasada;
begin
  if validarFormulario then
  begin
    if cosaConNombre = nil then
    begin
      cosaConNombre := THidroDePasada.Create(capa, EditNombre.Text,
        nil, nil, lpdUnidades, lpd, valorCBNodo(CBNodo),
        cb_CalcularGradienteDeInversion.Checked, valorCBFuente(CBFuente),
        valorCBString(CBBorne), (rgTipoFuente.ItemIndex = 1),
        StrToFloat(eTonCO2xMWh.Text), cbLowCostMustRun.Checked,
        cbCleanDevelopmentMechanism.Checked, valorCBFuente(CBFuenteIndiceDePrecios),
        valorCBString(CBBorneIndiceDePrecios));
      actor := THidroDePasada(cosaConNombre);
    end
    else
    begin
      actor := THidroDePasada(cosaConNombre);
      actor.nombre := EditNombre.Text;
      actor.lpdUnidades.Free;
      actor.lpdUnidades := lpdUnidades;
      actor.lpd.Free;
      actor.lpd := lpd;
      actor.nodo := valorCBNodo(CBNodo);
      actor.flg_CalcularGradienteDeInversion := cb_CalcularGradienteDeInversion.Checked;
      actor.fuenteDeAportes := valorCBFuente(CBFuente);
      actor.nombreBorne := valorCBString(CBBorne);
      actor.flg_FuenteDeEscurrimientos := (rgTipoFuente.ItemIndex = 1);
      actor.TonCO2xMWh := StrToFloat(eTonCO2xMWh.Text);
      actor.LowCostMustRun_ := cbLowCostMustRun.Checked;
      actor.CleanDevelopmentMechanism := cbCleanDevelopmentMechanism.Checked;
      actor.fuenteInidicePrecios := valorCBFuente(CBFuenteIndiceDePrecios);
      actor.nombreBorneIndicePrecios := valorCBString(CBBorneIndiceDePrecios);
    end;
    actor.lpdForzamientos := lpdForzamientos_;
    ModalResult := mrOk;
  end;
end;

procedure TEditarTHidroDePasada.rgTipoFuenteClick(Sender: TObject);
begin
  inherited CambiosForm(Sender);
end;

procedure TEditarTHidroDePasada.EnabledForm(xenabled: Boolean);
begin
  inherited EnabledForm(xenabled);

   { BAgregarFicha.Enabled:=xenabled;
    BAyuda.Enabled:=xenabled;
    BEditorDeUnidades.Enabled:=xenabled;
    btEditarForzamientos.Enabled:=xenabled;
    BVerExpandida.Enabled:=xenabled;
    CBBorne.Enabled:=xenabled;
    CBBorneIndiceDePrecios.Enabled:=xenabled;
    cbCleanDevelopmentMechanism.Enabled:=xenabled;
    CBFuente.Enabled:=xenabled;
    CBFuenteIndiceDePrecios.Enabled:=xenabled;
    cbLowCostMustRun.Enabled:=xenabled;
    CBNodo.Enabled:=xenabled;
    cb_CalcularGradienteDeInversion.Enabled:=xenabled;
    EditNombre.Enabled:=xenabled;
    eTonCO2xMWh.Enabled:=xenabled;
    gbIgualPotEnTodosLosPostes.Enabled:=xenabled;
    gbEmisionesCO2.Enabled:=xenabled;
    gbIndicieDePrecios.Enabled:=xenabled;
    gbParametrosAportes.Enabled:=xenabled;
    gbFichas.Enabled:=xenabled;
    Label11.Enabled:=xenabled;
    LBorne.Enabled:=xenabled;
    LBorneFuenteIndiceDePrecios1.Enabled:=xenabled;
    LFuenteDeAportes.Enabled:=xenabled;
    LFuenteIndiceDePrecios1.Enabled:=xenabled;
    LNodo.Enabled:=xenabled;
    LNombre.Enabled:=xenabled;
    //Panel1.Enabled:=xenabled;
    penelIzquierdo.Enabled:=xenabled;
    //panelLateral.Enabled:=xenabled;
    rgTipoFuente.Enabled:=xenabled;
    sgFichas.Enabled:=xenabled;  }


    BGuardar.Enabled:=xenabled;
end;

procedure TEditarTHidroDePasada.CBBorneChange(Sender: TObject);
begin
  inherited CBBorneChange(CBFuente, CBBorne);
end;

procedure TEditarTHidroDePasada.CBFuenteChange(Sender: TObject);
begin
  inherited CBFuenteChange(Sender, CBBorne);
end;

procedure TEditarTHidroDePasada.CBNodoChange(Sender: TObject);
begin
  inherited CBNodoChange(Sender, True);
end;

procedure TEditarTHidroDePasada.EditEnter(Sender: TObject);
begin
  inherited EditEnter(Sender);
end;

procedure TEditarTHidroDePasada.btEditarForzamientosClick(Sender: TObject);
begin
  inherited BEditorDeForzamientosClick(Sender);
end;

procedure TEditarTHidroDePasada.btNubeseableClick(Sender: TObject);
begin
  inherited btNubeseableClick(Sender);
  EnabledForm(not(indice_icono_nubeseable=9));
  if indice_icono_nubeseable=9 then
  begin
    BGuardarClick(Sender);
    guardado:=true;
  end;
end;


procedure TEditarTHidroDePasada.cb_ImponerIgualPotenciaEnTodosLosPostesClick(
  Sender: TObject);
begin
  inherited CambiosForm(Sender);
end;

procedure TEditarTHidroDePasada.EditExit(Sender: TObject);
begin
  inherited EditExit(Sender);
end;

procedure TEditarTHidroDePasada.FormCloseQuery(Sender: TObject; var CanClose: boolean);
begin
  inherited FormCloseQuery(Sender, CanClose);
end;


end.
