unit unitAutoCompletionSpeleo;
// Aide à la saisie et complètement de commentaires topo spéléo

{$INCLUDE CompilationParameters.inc}
interface
uses
  {$INCLUDE SelectionLangues.inc} // insère les unités en fonction de la langue
  StructuresDonnees, GHTopoGeneralFunctions, unitDatesUtils, unitGHTopoViseesUtils, unitGHTopoStringUtils, unitColorsUtils, unitSolveEquationsPolynomes,  Classes, SysUtils, Math, // anciennement Include
  DGCDummyUnit;

type

{ TAutoCompletionSpeleo }

  TAutoCompletionSpeleo = class(TStringList)
  private


  public
    function  Initialiser(): boolean;
    procedure Finaliser();
    function  getElement(const Idx: integer): string;
    function  getNbElements(): integer;
    function  FindIdxItemContainingText(const SubStr: string): integer;

end;


implementation

{ TAutoCompletionSpeleo }

function TAutoCompletionSpeleo.Initialiser(): boolean;
begin
  result := false;
  self.Clear;
  self.Add(GetResourceString('Entrée'));
  // d'abord les phrases types
  self.Add(GetResourceString('Carrefour'));
  self.Add(GetResourceString('Départs'));
  self.Add(GetResourceString('Départ à droite'));
  self.Add(GetResourceString('Départ à gauche'));

  self.Add(GetResourceString('A poursuivre'));
  self.Add(GetResourceString('A topographier'));
  self.Add(GetResourceString('Arrêt topo'));


  self.Add(GetResourceString('Sommet de puits'));
  self.Add(GetResourceString('Puits noyé'));
  self.Add(GetResourceString('Puits borgne'));
  self.Add(GetResourceString('Puits perforant'));
  self.Add(GetResourceString('Base de cheminée'));
  self.Add(GetResourceString('Forage'));
  self.Add(GetResourceString('Ressaut'));

  self.Add(GetResourceString('Salle ébouleuse'));
  self.Add(GetResourceString('Mur à descendre'));

  self.Add(GetResourceString('Chatière'));

  self.Add(GetResourceString('Colmatage argileux'));
  self.Add(GetResourceString('Effondrement de plafond'));
  self.Add(GetResourceString('Cloche karstique'));
  self.Add(GetResourceString('Fontis'));

  self.Add(GetResourceString('Zone inondée'));
  self.Add(GetResourceString('Zone boueuse'));

  self.Add(GetResourceString('Bassin'));
  self.Add(GetResourceString('Gours'));
  self.Add(GetResourceString('Concrétions'));


  self.Add(GetResourceString('Perte'));
  self.Add(GetResourceString('Arrivée d''eau'));
  self.Add(GetResourceString('Epave de véhicule'));
  self.Add(GetResourceString('Graffiti remarquable'));
  Result := (self.Count > 0);
end;

procedure TAutoCompletionSpeleo.Finaliser();
begin

self.Clear;
end;

function TAutoCompletionSpeleo.getNbElements(): integer;
begin
  result := Self.Count;
end;

function TAutoCompletionSpeleo.FindIdxItemContainingText(const SubStr: string): integer;
var
  i: Integer;
  P: SizeInt;
begin
  Result := -1;
  // balayage, suffisant ici.
  if ((Self.Count = 0) or ('' = SubStr)) then exit;
  for i := 0 to Self.Count - 1 do
  begin
    P := pos(lowerCase(SubStr), lowerCase(Self.Strings[i]));
    if (P > 0) then exit(i);
  end;
end;

function TAutoCompletionSpeleo.getElement(const Idx: integer): string;
begin
  if (self.getNbElements() = 0) then exit('');
  if (not InRange(Idx, 0, self.getNbElements() - 1)) then exit('');
  Result := self.Strings[Idx];
end;


end.

