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.