unit UnitCDF;

// configuration des décodeurs CDM et Digikeijs

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls , unitconfig, Buttons , UnitPilote , unitPrinc;

type
  TFormCDF = class(TForm)
    Label20: TLabel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    Label17: TLabel;
    Label18: TLabel;
    Label19: TLabel;
    ImageDigi: TImage;
    Shape1: TShape;
    Label21: TLabel;
    Label22: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Edit10: TEdit;
    Edit11: TEdit;
    Edit12: TEdit;
    Edit13: TEdit;
    Edit14: TEdit;
    Edit15: TEdit;
    Edit16: TEdit;
    Edit17: TEdit;
    Edit18: TEdit;
    Edit19: TEdit;
    Label23: TLabel;
    EditNAdresses: TEdit;
    LabelTitre: TLabel;
    Label24: TLabel;
    BitBtnOk: TBitBtn;
    procedure FormActivate(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
    procedure Edit2Change(Sender: TObject);
    procedure Edit3Change(Sender: TObject);
    procedure Edit4Change(Sender: TObject);
    procedure Edit5Change(Sender: TObject);
    procedure Edit6Change(Sender: TObject);
    procedure Edit7Change(Sender: TObject);
    procedure Edit8Change(Sender: TObject);
    procedure Edit9Change(Sender: TObject);
    procedure Edit10Change(Sender: TObject);
    procedure Edit11Change(Sender: TObject);
    procedure Edit12Change(Sender: TObject);
    procedure Edit13Change(Sender: TObject);
    procedure Edit14Change(Sender: TObject);
    procedure Edit15Change(Sender: TObject);
    procedure Edit16Change(Sender: TObject);
    procedure Edit18Change(Sender: TObject);
    procedure Edit19Change(Sender: TObject);
    procedure Edit17Change(Sender: TObject);
    procedure EditNAdressesChange(Sender: TObject);
    procedure BitBtnOkClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  FormCDF: TFormCDF;
  Adresse,Index : integer;
  dessineCDF : boolean;

{$R *.dfm}

procedure dessine_signal_CDF;
procedure couleurs_cdf;

implementation

procedure couleurs_cdf;
var i : integer;
    c : tComponent;
begin
  if sombre then with formCDF do
  begin
    Color:=Couleurfond;
    for i:=0 to ComponentCount-1 do
    begin
      c:=Components[i];
      composant(c,couleurFond,clWhite);
    end;
  end;
end;

procedure TFormCDF.FormActivate(Sender: TObject);
var erreur : integer;
begin
  Val(FormConfig.EditAdrSig.text,Adresse,erreur);
  index:=index_Signal(Adresse);
  LabelTitre.caption:='Adresse du signal: '+intToSTR(adresse);
  erreur:=Signaux[index].decodeur;
  Signaux[0]:=Signaux[index];
  //Asp:=Signaux[index].aspect;
  if erreur=5 then
  begin
    caption:='Configuration du décodeur Digikeijs';
    label20.caption:='Tables d''aspects du signal en fonction du motif envoyé au décodeur Digikeijs';
    label24.Caption:='1 à 5  - Aspects de 0 à 255';
  end;
  if erreur=2 then
  begin
    caption:='Configuration du décodeur CDF';
    label20.Caption:='Tables d''aspects du signal en fonction du motif envoyé au décodeur CDF';
    label24.Caption:='1 à 4 - Aspects de 0 à 255';
  end;

  Label1.caption:=etats[1];
  Label2.caption:=etats[2];
  Label3.caption:=etats[3];
  Label4.caption:=etats[4];
  Label5.caption:=etats[5];
  Label6.caption:=etats[6];
  Label7.caption:=etats[7];
  Label8.caption:=etats[8];
  Label9.caption:=etats[9];
  Label10.caption:=etats[10];
  Label11.caption:=etats[11];
  Label12.caption:=etats[12];
  Label13.caption:=etats[13];
  Label14.caption:=etats[14];
  Label15.caption:=etats[15];
  Label16.caption:=etats[16];
  Label17.caption:=etats[17];
  Label18.caption:=etats[18];
  Label19.caption:=etats[19];

  ImageDigi.Picture:=FormConfig.ImageSignal.Picture;
  with ImageDigi.Picture do
  begin
    Bitmap.TransparentMode:=tmAuto;
    Bitmap.TransparentColor:=clblue;
  end;
  ImageDigi.Transparent:=true;

  Edit1.Text:=intToSTR(Signaux[index].SR[1].sortie1);  // carré
  Edit2.Text:=intToSTR(Signaux[index].SR[2].sortie1);  // sémaphore
  Edit3.Text:=intToSTR(Signaux[index].SR[3].sortie1);  // sémaphore cli
  Edit4.Text:=intToSTR(Signaux[index].SR[4].sortie1);
  Edit5.Text:=intToSTR(Signaux[index].SR[5].sortie1);
  Edit6.Text:=intToSTR(Signaux[index].SR[6].sortie1);
  Edit7.Text:=intToSTR(Signaux[index].SR[7].sortie1);
  Edit8.Text:=intToSTR(Signaux[index].SR[8].sortie1);
  Edit9.Text:=intToSTR(Signaux[index].SR[9].sortie1);
  Edit10.Text:=intToSTR(Signaux[index].SR[10].sortie1);
  Edit11.Text:=intToSTR(Signaux[index].SR[11].sortie1);
  Edit12.Text:=intToSTR(Signaux[index].SR[12].sortie1);
  Edit13.Text:=intToSTR(Signaux[index].SR[13].sortie1);
  Edit14.Text:=intToSTR(Signaux[index].SR[14].sortie1);
  Edit15.Text:=intToSTR(Signaux[index].SR[15].sortie1);
  Edit16.Text:=intToSTR(Signaux[index].SR[16].sortie1);
  Edit17.Text:=intToSTR(Signaux[index].SR[17].sortie1);
  Edit18.Text:=intToSTR(Signaux[index].SR[18].sortie1);
  Edit19.Text:=intToSTR(Signaux[index].SR[19].sortie1);

  editNadresses.text:=intToSTR(Signaux[index].NA);


end;

procedure dessine_signal_CDF;
var i,ancienEtat : integer;
    Vcanvas : Tcanvas;
begin
  i:=0;

  //ImagePilote.Picture.Bitmap:=FormPilote.ImagePilote.picture.bitmap;
  EtatFeuPilote:=Signaux[i].EtatSignal;
  AncienEtat:=Signaux[i].AncienEtat;
  dessineCDF:=true; // demande dessin CDF pour les clignotements
  Vcanvas:=FormCDF.ImageDigi.picture.bitmap.Canvas;

  case Signaux[i].aspect of
  // feux de signalisation
   2 : dessine_signal2(Vcanvas,0,0,1,1,EtatFeupilote,1);
   3 : dessine_signal3(Vcanvas,0,0,1,1,EtatFeupilote,1);
   4 : dessine_signal4(VCanvas,0,0,1,1,EtatFeupilote,1);
   5 : dessine_signal5(VCanvas,0,0,1,1,EtatFeupilote,1);
   7 : dessine_signal7(VCanvas,0,0,1,1,EtatFeupilote,1);
   9 : dessine_signal9(VCanvas,0,0,1,1,EtatFeupilote,1);
  // indicateurs de direction
  12 : dessine_dirN(VCanvas,0,0,1,1,EtatFeupilote,1,2);
  13 : dessine_dirN(VCanvas,0,0,1,1,EtatFeupilote,1,3);
  14 : dessine_dirN(VCanvas,0,0,1,1,EtatFeupilote,1,4);
  15 : dessine_dirN(VCanvas,0,0,1,1,EtatFeupilote,1,5);
  16 : dessine_dirN(VCanvas,0,0,1,1,EtatFeupilote,1,6);
  end;
end;

procedure Maj_DB;
var s : string;
begin
  s:=encode_signal(index);
  formconfig.ListBoxSig.items[index-1]:=s;
  formconfig.ListBoxSig.selected[ligneClicSig]:=true;
  aff_champs_signaux(index);
end;

procedure TFormCDF.Edit1Change(Sender: TObject);
var erreur,i : integer;
begin
  if index<>0 then
  begin
    val(Edit1.Text,i,erreur);
    if (i<0) or (i>255) or (erreur<>0) then exit;
    Signaux[index].SR[1].sortie1:=i;
    Maj_DB;
    if label1.Caption=etats[1] then Maj_Etat_Signal(0,carre);
    dessine_signal_CDF;
  end;
end;

procedure TFormCDF.Edit2Change(Sender: TObject);
var erreur,i : integer;
begin
  if index<>0 then
  begin
    val(Edit2.Text,i,erreur);
    if (i<0) or (i>255) or (erreur<>0) then exit;
    Signaux[index].SR[2].sortie1:=i;
    Maj_DB;
    if label2.Caption=etats[2] then Maj_Etat_Signal(0,semaphore);
    dessine_signal_CDF;
  end;
end;

procedure TFormCDF.Edit3Change(Sender: TObject);
var erreur,i : integer;
begin
  if index<>0 then
  begin
    val(Edit3.Text,i,erreur);
    if (i<0) or (i>255) or (erreur<>0) then exit;
    Signaux[index].SR[2].sortie1:=i;
    Maj_DB;
    if label3.Caption=etats[3] then Maj_Etat_Signal(0,semaphore_cli);
    dessine_signal_CDF;
  end;
end;

procedure TFormCDF.Edit4Change(Sender: TObject);
var erreur,i : integer;
begin
  if index<>0 then
  begin
    val(Edit4.Text,i,erreur);
    if (i<0) or (i>255) or (erreur<>0) then exit;
    Signaux[index].SR[4].sortie1:=i;
    Maj_DB;
    if label4.Caption=etats[4] then Maj_Etat_Signal(0,vert);
    dessine_signal_CDF;
  end;
end;

procedure TFormCDF.Edit5Change(Sender: TObject);
var erreur,i : integer;
begin
  if index<>0 then
  begin
    val(Edit5.Text,i,erreur);
    if (i<0) or (i>255) or (erreur<>0) then exit;
    Signaux[index].SR[5].sortie1:=i;
    Maj_DB;
    if label5.Caption=etats[5] then Maj_Etat_Signal(0,vert_cli);
    dessine_signal_CDF;
  end;
end;

procedure TFormCDF.Edit6Change(Sender: TObject);
var erreur,i : integer;
begin
  if index<>0 then
  begin
    val(Edit6.Text,i,erreur);
    if (i<0) or (i>255) or (erreur<>0) then exit;
    Signaux[index].SR[6].sortie1:=i;
    Maj_DB;
    if label6.Caption=etats[6] then Maj_Etat_Signal(0,violet);
    dessine_signal_CDF;
  end;
end;

procedure TFormCDF.Edit7Change(Sender: TObject);
var erreur,i : integer;
begin
  if index<>0 then
  begin
    val(Edit7.Text,i,erreur);
    if (i<0) or (i>255) or (erreur<>0) then exit;
    Signaux[index].SR[7].sortie1:=i;
    Maj_DB;
    if label7.Caption=etats[7] then Maj_Etat_Signal(0,blanc);
    dessine_signal_CDF;
  end;
end;

procedure TFormCDF.Edit8Change(Sender: TObject);
var erreur,i : integer;
begin
  if index<>0 then
  begin
    val(Edit8.Text,i,erreur);
    if (i<0) or (i>255) or (erreur<>0) then exit;
    Signaux[index].SR[8].sortie1:=i;
    Maj_DB;
    if label8.Caption=etats[8] then Maj_Etat_Signal(0,blanc_cli);
    dessine_signal_CDF;
  end;
end;

procedure TFormCDF.Edit9Change(Sender: TObject);
var erreur,i : integer;
begin
  if index<>0 then
  begin
    val(Edit9.Text,i,erreur);
    if (i<0) or (i>255) or (erreur<>0) then exit;
    Signaux[index].SR[9].sortie1:=i;
    Maj_DB;
    if label9.Caption=etats[9] then
    begin
      Maj_Etat_Signal(0,semaphore);
      Maj_Etat_Signal(0,jaune);
    end;
    dessine_signal_CDF;
  end;
end;

procedure TFormCDF.Edit10Change(Sender: TObject);
var erreur,i : integer;
begin
  if index<>0 then
  begin
    val(Edit10.Text,i,erreur);
    if (i<0) or (i>255) or (erreur<>0) then exit;
    Signaux[index].SR[10].sortie1:=i;
    Maj_DB;
    if label10.Caption=etats[10] then
    begin
      Maj_Etat_Signal(0,semaphore);
      Maj_Etat_Signal(0,jaune_cli);
    end;
    dessine_signal_CDF;
  end;
end;

procedure TFormCDF.Edit11Change(Sender: TObject);
var erreur,i : integer;
begin
  if index<>0 then
  begin
    val(Edit11.Text,i,erreur);
    if (i<0) or (i>255) or (erreur<>0) then exit;
    Signaux[index].SR[11].sortie1:=i;
    Maj_DB;
    if label11.Caption=etats[11] then begin Maj_Etat_Signal(0,semaphore);Maj_Etat_Signal(0,ral_30);end;
    dessine_signal_CDF;
  end;
end;

procedure TFormCDF.Edit12Change(Sender: TObject);
var erreur,i: integer;
begin
  if index<>0 then
  begin
    val(Edit12.Text,i,erreur);
    if (i<0) or (i>255) or (erreur<>0) then exit;
    Signaux[index].SR[12].sortie1:=i;
    Maj_DB;
    if label12.Caption=etats[12] then begin Maj_Etat_Signal(0,semaphore);Maj_Etat_Signal(0,ral_60);end;
    dessine_signal_CDF;
  end;
end;

procedure TFormCDF.Edit13Change(Sender: TObject);
var erreur,i : integer;
begin
  if index<>0 then
  begin
    val(Edit13.Text,i,erreur);
    if (i<0) or (i>255) or (erreur<>0) then exit;
    Signaux[index].SR[13].sortie1:=i;
    Maj_DB;
    if label13.Caption=etats[13] then begin Maj_Etat_Signal(0,ral_60);Maj_Etat_Signal(0,jaune_cli);end;
    dessine_signal_CDF;
  end;
end;

procedure TFormCDF.Edit14Change(Sender: TObject);
var erreur,i : integer;
begin
  if index<>0 then
  begin
    val(Edit14.Text,i,erreur);
    if (i<0) or (i>255) or (erreur<>0) then exit;
    Signaux[index].SR[14].sortie1:=i;
    Maj_DB;
    if label14.Caption=etats[14] then begin Maj_Etat_Signal(0,semaphore);Maj_Etat_Signal(0,rappel_30);end;
    dessine_signal_CDF;
  end;
end;

procedure TFormCDF.Edit15Change(Sender: TObject);
var erreur,i : integer;
begin
  if index<>0 then
  begin
    val(Edit15.Text,i,erreur);
    if (i<0) or (i>255) or (erreur<>0) then exit;
    Signaux[index].SR[15].sortie1:=i;
    Maj_DB;
    if label15.Caption=etats[15] then begin Maj_Etat_Signal(0,semaphore);Maj_Etat_Signal(0,rappel_60);end;
    dessine_signal_CDF;
  end;
end;

procedure TFormCDF.Edit16Change(Sender: TObject);
var erreur,i : integer;
begin
  if index<>0 then
  begin
    val(Edit16.Text,i,erreur);
    if (i<0) or (i>255) or (erreur<>0) then exit;
    Signaux[index].SR[16].sortie1:=i;
    Maj_DB;
    if label16.Caption=etats[16] then begin Maj_Etat_Signal(0,rappel_30); Maj_Etat_Signal(0,jaune);end;
    dessine_signal_CDF;
  end;
end;

procedure TFormCDF.Edit17Change(Sender: TObject);
var erreur,i : integer;
begin
  if index<>0 then
  begin
    val(Edit17.Text,i,erreur);
    if (i<0) or (i>255) or (erreur<>0) then exit;
    Signaux[index].SR[17].sortie1:=i;
    Maj_DB;
    if label17.Caption=etats[17] then begin Maj_Etat_Signal(0,rappel_30); Maj_Etat_Signal(0,jaune_cli);end;
    dessine_signal_CDF;
  end;
end;

procedure TFormCDF.Edit18Change(Sender: TObject);
var erreur,i : integer;
begin
  if index<>0 then
  begin
    val(Edit18.Text,i,erreur);
    if (i<0) or (i>255) or (erreur<>0) then exit;
    Signaux[index].SR[18].sortie1:=i;
    Maj_DB;
    if label18.Caption=etats[18] then begin Maj_Etat_Signal(0,rappel_60); Maj_Etat_Signal(0,jaune);end;
    dessine_signal_CDF;
  end;
end;

procedure TFormCDF.Edit19Change(Sender: TObject);
var erreur,i : integer;
begin
  if index<>0 then
  begin
    val(Edit19.Text,i,erreur);
    if (i<0) or (i>255) or (erreur<>0) then exit;
    Signaux[index].SR[19].sortie1:=i;
    Maj_DB;
    if label19.Caption=etats[19] then
    begin
      Maj_Etat_Signal(0,rappel_60);
      Maj_Etat_Signal(0,jaune_cli);
    end;
    dessine_signal_CDF;
  end;
end;

procedure TFormCDF.EditNAdressesChange(Sender: TObject);
var erreur,i : integer;
begin
  if index<>0 then
  begin
    val(EditNAdresses.Text,i,erreur);
    if (i>0) and (i<6) then
    begin
      Signaux[index].Na:=i;
      Maj_DB;
    end;  
  end;
end;

procedure TFormCDF.BitBtnOkClick(Sender: TObject);
begin
  close;
end;

procedure TFormCDF.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  dessineCDF:=false;
end;

procedure TFormCDF.FormCreate(Sender: TObject);
begin
  position:=poMainFormCenter;
  if debug=1 then Affiche('Fin création fenetre CDF',clLime);
  couleurs_cdf;
  if debug=1 then Affiche('Fin création fenetre CDF',clLime);
end;

end.
