aboutsummaryrefslogblamecommitdiffstats
path: root/Game/Code/Screens/UScreenSongJumpto.pas
blob: 2bf0cb5bc6b078ac6c7291986f867e0de39c79e6 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13












                                                           



                            
           
                         
 
                                    





                                                                   















































































































































                                                                                                                                                             









                                                        



                                    








                                               























                                                                         







                                                 


     
unit UScreenSongJumpto;

interface

uses
  UMenu, SDL, UDisplay, UMusic, UPliki, SysUtils, UThemes;

type
  TScreenSongJumpto = class(TMenu)
    private
      Songsfound: String;
      NoSongsfound: String;
      CatText: String;

      //For ChangeMusic
      LastPlayed: Integer;
      VisibleBool: Boolean;
    public
      VisSongs: Integer;

      constructor Create; override;

      //Visible //Whether the Menu should be Drawn
      //Whether the Menu should be Drawn
      procedure SetVisible(Value: Boolean);
      property Visible: Boolean read VisibleBool write SetVisible;

      function ParseInput(PressedKey: Cardinal; ScanCode: byte; PressedDown: Boolean): Boolean; override;
      procedure onShow; override;
      function Draw: boolean; override;

      procedure SetTextFound(const Count: Cardinal);
  end;

var
  IType: Array [0..2] of String;
  SelectType: Integer;


implementation

uses UGraphic, UMain, UIni, UTexture, ULanguage, UParty, USongs, UScreenSong;

function TScreenSongJumpto.ParseInput(PressedKey: Cardinal; ScanCode: byte; PressedDown: Boolean): Boolean;
  function IsVisible: Boolean;
  begin
    Result := True;
    if (Interactions[Interaction].Typ = 0) then
    begin
      Result := Button[Interactions[Interaction].Num].Visible;
    end
    else if (Interactions[Interaction].Typ = 1) then
    begin
      //Result := Selects[Interactions[Interaction].Num].Visible;
    end
    else if (Interactions[Interaction].Typ = 3) then
    begin
      Result := SelectsS[Interactions[Interaction].Num].Visible;
    end;
  end;

  Procedure SelectNext;
  begin
    repeat
      InteractNext;
    until IsVisible;
  end;

  Procedure SelectPrev;
  begin
    repeat
      InteractPrev;
    until IsVisible;
  end;
begin
  Result := true;
  If (PressedDown) Then
  begin // Key Down
    case PressedKey of
      SDLK_0..SDLK_9, SDLK_A..SDLK_Z, SDLK_SPACE, SDLK_MINUS, SDLK_EXCLAIM, SDLK_COMMA, SDLK_SLASH, SDLK_ASTERISK, SDLK_QUESTION, SDLK_QUOTE, SDLK_QUOTEDBL:
        begin
          if Interaction = 0 then
          begin
            Button[0].Text[0].Text := Button[0].Text[0].Text + chr(ScanCode);
            SetTextFound(CatSongs.SetFilter(Button[0].Text[0].Text, SelectType));
          end;
        end;

      SDLK_BACKSPACE:
        begin
          if Interaction = 0 then
          begin
            Delete(Button[0].Text[0].Text,
            Length(Button[0].Text[0].Text), 1);
            SetTextFound(CatSongs.SetFilter(Button[0].Text[0].Text, SelectType));
          end;
        end;

      SDLK_ESCAPE :
        begin
          Music.PlayBack;
          Visible := False;
          if VisSongs = 0 then
            CatSongs.SetFilter('', 0);
        end;

      SDLK_RETURN:
        begin
          Visible := False;
          Music.PlayBack;
          if VisSongs = 0 then
            CatSongs.SetFilter('', 0);
        end;

      // Up and Down could be done at the same time,
      // but I don't want to declare variables inside
      // functions like this one, called so many times
      SDLK_DOWN:    SelectNext;
      SDLK_UP:      SelectPrev;

      SDLK_RIGHT:
        begin
          if (Interaction=1) then
            InteractInc;
        end;
      SDLK_LEFT:
        begin
          if (Interaction=1) then
            InteractDec;
        end;
    end;
  end
  else // Key Up
    case PressedKey of
      SDLK_RETURN :
        begin
        end;
    end;
end;

constructor TScreenSongJumpto.Create;
var
  I:    integer;
begin
  inherited Create;
  //Translate Texts     //TODO: Port to UTheme (Linebonus and PartyScreens, too
  IType[0] := Language.Translate('SONG_JUMPTO_TYPE1');
  IType[1] := Language.Translate('SONG_JUMPTO_TYPE2');
  IType[2] := Language.Translate('SONG_JUMPTO_TYPE3');
  SongsFound := Language.Translate('SONG_JUMPTO_SONGSFOUND');
  NoSongsFound := Language.Translate('SONG_JUMPTO_NOSONGSFOUND');
  CatText := Language.Translate('SONG_JUMPTO_CATTEXT');

  AddBackground(Theme.SongJumpto.Background.Tex);

  AddButton(Theme.SongJumpto.ButtonSearchText);
  if (Length(Button[0].Text) = 0) then
    AddButtonText(14, 20, '');

  SelectType := 0;
  AddSelectSlide(Theme.SongJumpto.SelectSlideType, SelectType, IType);

  AddText(Theme.SongJumpto.TextFound);

  for I := 0 to High(Theme.SongJumpto.Static) do
    AddStatic(Theme.SongJumpto.Static[I]);

  for I := 0 to High(Theme.SongJumpto.Text) do
    AddText(Theme.SongJumpto.Text[I]);

  Interaction := 0;
  LastPlayed  := 0;
end;

procedure TScreenSongJumpto.SetVisible(Value: Boolean);
begin
//If change from unvisible to Visible then OnShow
  if (VisibleBool = False) AND (Value = True) then
    OnShow;

  VisibleBool := Value;
end;

procedure TScreenSongJumpto.onShow;
begin
  //Reset Screen if no Old Search is Displayed
  if (CatSongs.CatNumShow <> -2) then
  begin
    Interaction := 0;
    SelectType := 0;

    Button[0].Text[0].Text := '';
    Text[0].Text := NoSongsFound;
  end;
end;

function TScreenSongJumpto.Draw: boolean;
begin
  Result := inherited Draw;
end;

procedure TScreenSongJumpto.SetTextFound(const Count: Cardinal);
begin
  if (Count = 0) then
    Text[0].Text := NoSongsFound
  else
    Text[0].Text := Format(SongsFound, [Count]);

  //Set CatTopLeftText
  ScreenSong.ShowCatTLCustom(Format(CatText, [Button[0].Text[0].Text]));

  //visSongs setzen
  VisSongs := Count;

  //Fix SongSelection
  ScreenSong.Interaction := 0;
  ScreenSong.SelectNext;
  ScreenSong.FixSelected;

  //Play Correct Music
  if (ScreenSong.Interaction <> LastPlayed) then
  begin
    LastPlayed := ScreenSong.Interaction;

    ScreenSong.ChangeMusic;
  end;
end;

end.