aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Game/Code/Screens/UScreenSongJumpto.pas194
1 files changed, 194 insertions, 0 deletions
diff --git a/Game/Code/Screens/UScreenSongJumpto.pas b/Game/Code/Screens/UScreenSongJumpto.pas
new file mode 100644
index 00000000..449141c3
--- /dev/null
+++ b/Game/Code/Screens/UScreenSongJumpto.pas
@@ -0,0 +1,194 @@
+unit UScreenSongJumpto;
+
+interface
+
+uses
+ UMenu, SDL, UDisplay, UMusic, UPliki, SysUtils, UThemes;
+
+type
+ TScreenSongJumpto = class(TMenu)
+ private
+ Songsfound: String;
+ NoSongsfound: String;
+ CatText: String;
+ public
+ Visible: Boolean; //Whether the Menu should be Drawn
+ VisSongs: Integer;
+ constructor Create; override;
+ 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;
+end;
+
+procedure TScreenSongJumpto.onShow;
+begin
+ Interaction := 0;
+ SetTextFound(0);
+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;
+end;
+
+end.