unit UScreenEditHeader;

interface

{$I switches.inc}

uses UMenu,
     SDL,
     USongs,
     USong,
     UThemes;

type
  TScreenEditHeader = class(TMenu)
    public
      CurrentSong:      TSong;
      TextTitle:        integer;
      TextArtist:       integer;
      TextMp3:          integer;
      TextBackground:   integer;
      TextVideo:        integer;
      TextVideoGAP:     integer;
      TextRelative:     integer;
      TextResolution:   integer;
      TextNotesGAP:     integer;
      TextStart:        integer;
      TextGAP:          integer;
      TextBPM:          integer;
      StaticTitle:      integer;
      StaticArtist:     integer;
      StaticMp3:        integer;
      StaticBackground: integer;
      StaticVideo:      integer;
      StaticVideoGAP:   integer;
      StaticRelative:   integer;
      StaticResolution: integer;
      StaticNotesGAP:   integer;
      StaticStart:      integer;
      StaticGAP:        integer;
      StaticBPM:        integer;
      Sel:              array[0..11] of boolean;
      procedure SetRoundButtons;

      constructor Create; override;
      procedure onShow; override;
      function ParseInput(PressedKey: Cardinal; CharCode: WideChar; PressedDown: Boolean): Boolean; override;
{      function Draw: boolean; override;
      procedure Finish;}
  end;

implementation

uses UGraphic, UMusic, SysUtils, UFiles, USkins;

function TScreenEditHeader.ParseInput(PressedKey: Cardinal; CharCode: WideChar; PressedDown: Boolean): Boolean;
var
  T:    integer;
begin
  Result := true;
  If (PressedDown) Then begin // Key Down
    // check normal keys
    case WideCharUpperCase(CharCode)[1] of
      'Q':
        begin
          Result := false;
          Exit;
        end;
    end;
    
    // check special keys
    case PressedKey of
      SDLK_ESCAPE :
        begin
//          Music.PlayBack;
//          FadeTo(@MainScreen);
          Result := false;
        end;

      SDLK_RETURN:
        begin
          if Interaction = 1 then begin
//            Save;
          end;
        end;

      SDLK_RIGHT:
        begin
          case Interaction of
            0..0: InteractNext;
            1:  Interaction := 0;
          end;
        end;

      SDLK_LEFT:
        begin
          case Interaction of
            0:  Interaction := 1;
            1..1: InteractPrev;
          end;
        end;

      SDLK_DOWN:
        begin
          case Interaction of
            0..1:   Interaction := 2;
            2..12:  InteractNext;
            13:     Interaction := 0;
          end;
        end;

      SDLK_UP:
        begin
          case Interaction of
            0..1:   Interaction := 13;
            2:      Interaction := 0;
            3..13:  InteractPrev;
          end;
        end;

      SDLK_BACKSPACE:
        begin
          T := Interaction - 2 + TextTitle;
          if (Interaction >= 2) and (Interaction <= 13) and (Length(Text[T].Text) >= 1) then begin
            Text[T].DeleteLastL;
            SetRoundButtons;            
          end;
        end;

    end;
    case CharCode of
      #32..#255:
        begin
          if (Interaction >= 2) and (Interaction <= 13) then begin
            Text[Interaction - 2 + TextTitle].Text :=
              Text[Interaction - 2 + TextTitle].Text + CharCode;
            SetRoundButtons;
          end;
        end;
    end;
  end;
end;

constructor TScreenEditHeader.Create;
begin
  inherited Create;

  AddButton(40, 20, 100, 40, Skin.GetTextureFileName('ButtonF'));
  AddButtonText(15, 5, 'Open');

  AddButton(160, 20, 100, 40, Skin.GetTextureFileName('ButtonF'));
  AddButtonText(20, 5, 'Save');

  AddBox(80, 60, 640, 550);

  AddText(160, 110 + 0*30, 0, 10, 0, 0, 0, 'Title:');
  AddText(160, 110 + 1*30, 0, 10, 0, 0, 0, 'Artist:');
  AddText(160, 110 + 2*30, 0, 10, 0, 0, 0, 'MP3:');

  AddText(160, 110 + 4*30, 0, 10, 0, 0, 0, 'Background:');
  AddText(160, 110 + 5*30, 0, 10, 0, 0, 0, 'Video:');
  AddText(160, 110 + 6*30, 0, 10, 0, 0, 0, 'VideoGAP:');

  AddText(160, 110 + 8*30,  0, 10, 0, 0, 0, 'Relative:');
  AddText(160, 110 + 9*30,  0, 10, 0, 0, 0, 'Resolution:');
  AddText(160, 110 + 10*30, 0, 10, 0, 0, 0, 'NotesGAP:');

  AddText(160, 110 + 12*30, 0, 10, 0, 0, 0, 'Start:');
  AddText(160, 110 + 13*30, 0, 10, 0, 0, 0, 'GAP:');
  AddText(160, 110 + 14*30, 0, 10, 0, 0, 0, 'BPM:');

  TextTitle  := AddText(340, 110 + 0*30, 0, 10, 0, 0, 0, '');
  TextArtist := AddText(340, 110 + 1*30, 0, 10, 0, 0, 0, '');
  TextMp3    := AddText(340, 110 + 2*30, 0, 10, 0, 0, 0, '');

  TextBackground := AddText(340, 110 + 4*30, 0, 10, 0, 0, 0, '');
  TextVideo      := AddText(340, 110 + 5*30, 0, 10, 0, 0, 0, '');
  TextVideoGAP   := AddText(340, 110 + 6*30, 0, 10, 0, 0, 0, '');

  TextRelative   := AddText(340, 110 + 8*30, 0, 10, 0, 0, 0, '');
  TextResolution := AddText(340, 110 + 9*30, 0, 10, 0, 0, 0, '');
  TextNotesGAP   := AddText(340, 110 + 10*30, 0, 10, 0, 0, 0, '');

  TextStart :=  AddText(340, 110 + 12*30, 0, 10, 0, 0, 0, '');
  TextGAP   :=  AddText(340, 110 + 13*30, 0, 10, 0, 0, 0, '');
  TextBPM   :=  AddText(340, 110 + 14*30, 0, 10, 0, 0, 0, '');

  StaticTitle      := AddStatic(130, 115 + 0*30, 20, 20, 1, 1, 1, 'RoundButton', 'BMP', 'Transparent', $FF00FF);
  StaticArtist     := AddStatic(130, 115 + 1*30, 20, 20, 1, 1, 1, 'RoundButton', 'BMP', 'Transparent', $FF00FF);
  StaticMp3        := AddStatic(130, 115 + 2*30, 20, 20, 1, 1, 1, 'RoundButton', 'BMP', 'Transparent', $FF00FF);
  StaticBackground := AddStatic(130, 115 + 4*30, 20, 20, 1, 1, 1, 'RoundButton', 'BMP', 'Transparent', $FF00FF);
  StaticVideo      := AddStatic(130, 115 + 5*30, 20, 20, 1, 1, 1, 'RoundButton', 'BMP', 'Transparent', $FF00FF);
  StaticVideoGAP   := AddStatic(130, 115 + 6*30, 20, 20, 1, 1, 1, 'RoundButton', 'BMP', 'Transparent', $FF00FF);
  StaticRelative   := AddStatic(130, 115 + 8*30, 20, 20, 1, 1, 1, 'RoundButton', 'BMP', 'Transparent', $FF00FF);
  StaticResolution := AddStatic(130, 115 + 9*30, 20, 20, 1, 1, 1, 'RoundButton', 'BMP', 'Transparent', $FF00FF);
  StaticNotesGAP   := AddStatic(130, 115 + 10*30, 20, 20, 1, 1, 1, 'RoundButton', 'BMP', 'Transparent', $FF00FF);
  StaticStart      := AddStatic(130, 115 + 12*30, 20, 20, 1, 1, 1, 'RoundButton', 'BMP', 'Transparent', $FF00FF);
  StaticGAP        := AddStatic(130, 115 + 13*30, 20, 20, 1, 1, 1, 'RoundButton', 'BMP', 'Transparent', $FF00FF);
  StaticBPM        := AddStatic(130, 115 + 14*30, 20, 20, 1, 1, 1, 'RoundButton', 'BMP', 'Transparent', $FF00FF);

  AddInteraction(iText, TextTitle);
  AddInteraction(iText, TextArtist);
  AddInteraction(iText, TextMp3);
  AddInteraction(iText, TextBackground);
  AddInteraction(iText, TextVideo);
  AddInteraction(iText, TextVideoGAP);
  AddInteraction(iText, TextRelative);
  AddInteraction(iText, TextResolution);
  AddInteraction(iText, TextNotesGAP);
  AddInteraction(iText, TextStart);
  AddInteraction(iText, TextGAP);
  AddInteraction(iText, TextBPM);
end;

procedure TScreenEditHeader.onShow;
begin
  inherited;

{  if FileExists(FileName) then begin // load file
    CurrentSong.FileName := FileName;
    SkanujPlik(CurrentSong);

    SetLength(TrueBoolStrs, 1);
    TrueBoolStrs[0] := 'yes';
    SetLength(FalseBoolStrs, 1);
    FalseBoolStrs[0] := 'no';

    Text[TextTitle].Text :=   CurrentSong.Title;
    Text[TextArtist].Text :=  CurrentSong.Artist;
    Text[TextMP3].Text :=     CurrentSong.Mp3;
    Text[TextBackground].Text :=  CurrentSong.Background;
    Text[TextVideo].Text :=       CurrentSong.Video;
    Text[TextVideoGAP].Text :=    FloatToStr(CurrentSong.VideoGAP);
    Text[TextRelative].Text :=    BoolToStr(CurrentSong.Relative, true);
    Text[TextResolution].Text :=  IntToStr(CurrentSong.Resolution);
    Text[TextNotesGAP].Text :=    IntToStr(CurrentSong.NotesGAP);
    Text[TextStart].Text := FloatToStr(CurrentSong.Start);
    Text[TextGAP].Text :=   FloatToStr(CurrentSong.GAP);
    Text[TextBPM].Text :=   FloatToStr(CurrentSong.BPM[0].BPM);
    SetRoundButtons;
  end;}

  Interaction := 0;
end;

(*function TScreenEdit.Draw: boolean;
var
  Min:    integer;
  Sec:    integer;
  Tekst:  string;
  Pet:    integer;
  AktBeat:  integer;
begin
{  glClearColor(1,1,1,1);

  // control music
  if PlaySentence then begin
    // stop the music
    if (Music.Position > PlayStopTime) then begin
      Music.Stop;
      PlaySentence := false;
    end;

    // click
    if (Click) and (PlaySentence) then begin
      AktBeat := Floor(CurrentSong.BPM[0].BPM * (Music.Position - CurrentSong.GAP / 1000) / 60);
      Text[TextDebug].Text := IntToStr(AktBeat);
      if AktBeat <> LastClick then begin
        for Pet := 0 to Czesci[0].Czesc[Czesci[0].Akt].HighNut do
          if (Czesci[0].Czesc[Czesci[0].Akt].Nuta[Pet].Start = AktBeat) then begin
            Music.PlayClick;
            LastClick := AktBeat;
          end;
      end;
    end; // click
  end; // if PlaySentence

  Text[TextSentence].Text := IntToStr(Czesci[0].Akt + 1) + ' / ' + IntToStr(Czesci[0].Ilosc);
  Text[TextNote].Text := IntToStr(AktNuta + 1) + ' / ' + IntToStr(Czesci[0].Czesc[Czesci[0].Akt].IlNut);

  // Song info
  Text[TextBPM].Text := FloatToStr(CurrentSong.BPM[0].BPM / 4);
  Text[TextGAP].Text := FloatToStr(CurrentSong.GAP);

  // Note info
  Text[TextNStart].Text :=    IntToStr(Czesci[0].Czesc[Czesci[0].Akt].Nuta[AktNuta].Start);
  Text[TextNDlugosc].Text :=  IntToStr(Czesci[0].Czesc[Czesci[0].Akt].Nuta[AktNuta].Dlugosc);
  Text[TextNTon].Text :=      IntToStr(Czesci[0].Czesc[Czesci[0].Akt].Nuta[AktNuta].Ton);
  Text[TextNText].Text :=              Czesci[0].Czesc[Czesci[0].Akt].Nuta[AktNuta].Tekst;

  // draw static menu
  inherited Draw;

  // draw notes
  SingDrawNoteLines(20, 300, 780, 15);
  SingDrawBeatDelimeters(40, 300, 760, 0);
  SingDrawCzesc(40, 405, 760, 0);

  // draw text
  Lyric.Draw;}

end;*)

procedure TScreenEditHeader.SetRoundButtons;
begin
  if Length(Text[TextTitle].Text) > 0 then Static[StaticTitle].Visible := true
  else Static[StaticTitle].Visible := false;

  if Length(Text[TextArtist].Text) > 0 then Static[StaticArtist].Visible := true
  else Static[StaticArtist].Visible := false;

  if Length(Text[TextMp3].Text) > 0 then Static[StaticMp3].Visible := true
  else Static[StaticMp3].Visible := false;

  if Length(Text[TextBackground].Text) > 0 then Static[StaticBackground].Visible := true
  else Static[StaticBackground].Visible := false;

  if Length(Text[TextVideo].Text) > 0 then Static[StaticVideo].Visible := true
  else Static[StaticVideo].Visible := false;

  try
    StrToFloat(Text[TextVideoGAP].Text);
    if StrToFloat(Text[TextVideoGAP].Text)<> 0 then Static[StaticVideoGAP].Visible := true
    else Static[StaticVideoGAP].Visible := false;
  except
    Static[StaticVideoGAP].Visible := false;
  end;

  if LowerCase(Text[TextRelative].Text) = 'yes' then Static[StaticRelative].Visible := true
  else Static[StaticRelative].Visible := false;

  try
    StrToInt(Text[TextResolution].Text);
    if (StrToInt(Text[TextResolution].Text) <> 0) and (StrToInt(Text[TextResolution].Text) >= 1)
    then Static[StaticResolution].Visible := true
    else Static[StaticResolution].Visible := false;
  except
    Static[StaticResolution].Visible := false;
  end;

  try
    StrToInt(Text[TextNotesGAP].Text);
    Static[StaticNotesGAP].Visible := true;
  except
    Static[StaticNotesGAP].Visible := false;
  end;

  // start
  try
    StrToFloat(Text[TextStart].Text);
    if (StrToFloat(Text[TextStart].Text) > 0) then Static[StaticStart].Visible := true
    else Static[StaticStart].Visible := false;
  except
    Static[StaticStart].Visible := false;
  end;

  // GAP
  try
    StrToFloat(Text[TextGAP].Text);
    Static[StaticGAP].Visible := true;
  except
    Static[StaticGAP].Visible := false;
  end;

  // BPM
  try
    StrToFloat(Text[TextBPM].Text);
    if (StrToFloat(Text[TextBPM].Text) > 0) then Static[StaticBPM].Visible := true
    else Static[StaticBPM].Visible := false;
  except
    Static[StaticBPM].Visible := false;
  end;

end;

(*procedure TScreenEdit.Finish;
begin
//
end;*)

end.