diff options
Diffstat (limited to 'src/screens/UScreenEditHeader.pas')
-rw-r--r-- | src/screens/UScreenEditHeader.pas | 445 |
1 files changed, 445 insertions, 0 deletions
diff --git a/src/screens/UScreenEditHeader.pas b/src/screens/UScreenEditHeader.pas new file mode 100644 index 00000000..1d697bc9 --- /dev/null +++ b/src/screens/UScreenEditHeader.pas @@ -0,0 +1,445 @@ +{* UltraStar Deluxe - Karaoke Game + * + * UltraStar Deluxe is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + *} + +unit UScreenEditHeader; + +interface + +{$IFDEF FPC} + {$MODE Delphi} +{$ENDIF} + +{$I switches.inc} + +uses + UMenu, + SDL, + USongs, + USong, + UPath, + 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: UCS4Char; PressedDown: boolean): boolean; override; +{ function Draw: boolean; override; + procedure Finish;} + end; + +implementation + +uses + UGraphic, + UMusic, + SysUtils, + UFiles, + USkins, + UTexture, + UUnicodeUtils; + +function TScreenEditHeader.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; +var + T: integer; +begin + Result := true; + if (PressedDown) then // Key Down + begin // check normal keys + case UCS4UpperCase(CharCode) of + Ord('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].DeleteLastLetter; + 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 + UCS4ToUTF8String(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, 30, 0, 0, 0, 'Title:'); + AddText(160, 110 + 1*30, 0, 30, 0, 0, 0, 'Artist:'); + AddText(160, 110 + 2*30, 0, 30, 0, 0, 0, 'MP3:'); + + AddText(160, 110 + 4*30, 0, 30, 0, 0, 0, 'Background:'); + AddText(160, 110 + 5*30, 0, 30, 0, 0, 0, 'Video:'); + AddText(160, 110 + 6*30, 0, 30, 0, 0, 0, 'VideoGAP:'); + + AddText(160, 110 + 8*30, 0, 30, 0, 0, 0, 'Relative:'); + AddText(160, 110 + 9*30, 0, 30, 0, 0, 0, 'Resolution:'); + AddText(160, 110 + 10*30, 0, 30, 0, 0, 0, 'NotesGAP:'); + + AddText(160, 110 + 12*30, 0, 30, 0, 0, 0, 'Start:'); + AddText(160, 110 + 13*30, 0, 30, 0, 0, 0, 'GAP:'); + AddText(160, 110 + 14*30, 0, 30, 0, 0, 0, 'BPM:'); + + TextTitle := AddText(340, 110 + 0*30, 0, 30, 0, 0, 0, ''); + TextArtist := AddText(340, 110 + 1*30, 0, 30, 0, 0, 0, ''); + TextMp3 := AddText(340, 110 + 2*30, 0, 30, 0, 0, 0, ''); + + TextBackground := AddText(340, 110 + 4*30, 0, 30, 0, 0, 0, ''); + TextVideo := AddText(340, 110 + 5*30, 0, 30, 0, 0, 0, ''); + TextVideoGAP := AddText(340, 110 + 6*30, 0, 30, 0, 0, 0, ''); + + TextRelative := AddText(340, 110 + 8*30, 0, 30, 0, 0, 0, ''); + TextResolution := AddText(340, 110 + 9*30, 0, 30, 0, 0, 0, ''); + TextNotesGAP := AddText(340, 110 + 10*30, 0, 30, 0, 0, 0, ''); + + TextStart := AddText(340, 110 + 12*30, 0, 30, 0, 0, 0, ''); + TextGAP := AddText(340, 110 + 13*30, 0, 30, 0, 0, 0, ''); + TextBPM := AddText(340, 110 + 14*30, 0, 30, 0, 0, 0, ''); + + StaticTitle := AddStatic(130, 115 + 0*30, 20, 20, 1, 1, 1, Path('RoundButton'), TEXTURE_TYPE_TRANSPARENT, $FF00FF); + StaticArtist := AddStatic(130, 115 + 1*30, 20, 20, 1, 1, 1, Path('RoundButton'), TEXTURE_TYPE_TRANSPARENT, $FF00FF); + StaticMp3 := AddStatic(130, 115 + 2*30, 20, 20, 1, 1, 1, Path('RoundButton'), TEXTURE_TYPE_TRANSPARENT, $FF00FF); + StaticBackground := AddStatic(130, 115 + 4*30, 20, 20, 1, 1, 1, Path('RoundButton'), TEXTURE_TYPE_TRANSPARENT, $FF00FF); + StaticVideo := AddStatic(130, 115 + 5*30, 20, 20, 1, 1, 1, Path('RoundButton'), TEXTURE_TYPE_TRANSPARENT, $FF00FF); + StaticVideoGAP := AddStatic(130, 115 + 6*30, 20, 20, 1, 1, 1, Path('RoundButton'), TEXTURE_TYPE_TRANSPARENT, $FF00FF); + StaticRelative := AddStatic(130, 115 + 8*30, 20, 20, 1, 1, 1, Path('RoundButton'), TEXTURE_TYPE_TRANSPARENT, $FF00FF); + StaticResolution := AddStatic(130, 115 + 9*30, 20, 20, 1, 1, 1, Path('RoundButton'), TEXTURE_TYPE_TRANSPARENT, $FF00FF); + StaticNotesGAP := AddStatic(130, 115 + 10*30, 20, 20, 1, 1, 1, Path('RoundButton'), TEXTURE_TYPE_TRANSPARENT, $FF00FF); + StaticStart := AddStatic(130, 115 + 12*30, 20, 20, 1, 1, 1, Path('RoundButton'), TEXTURE_TYPE_TRANSPARENT, $FF00FF); + StaticGAP := AddStatic(130, 115 + 13*30, 20, 20, 1, 1, 1, Path('RoundButton'), TEXTURE_TYPE_TRANSPARENT, $FF00FF); + StaticBPM := AddStatic(130, 115 + 14*30, 20, 20, 1, 1, 1, Path('RoundButton'), TEXTURE_TYPE_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 // load file + begin + 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; + Count: 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 Count := 0 to Czesci[0].Czesc[Czesci[0].Akt].HighNut do + if (Czesci[0].Czesc[Czesci[0].Akt].Nuta[Count].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].LengthNote); + + // 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].Text; + + // 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 + Statics[StaticTitle].Visible := true + else + Statics[StaticTitle].Visible := false; + + if Length(Text[TextArtist].Text) > 0 then + Statics[StaticArtist].Visible := true + else + Statics[StaticArtist].Visible := false; + + if Length(Text[TextMp3].Text) > 0 then + Statics[StaticMp3].Visible := true + else + Statics[StaticMp3].Visible := false; + + if Length(Text[TextBackground].Text) > 0 then + Statics[StaticBackground].Visible := true + else + Statics[StaticBackground].Visible := false; + + if Length(Text[TextVideo].Text) > 0 then + Statics[StaticVideo].Visible := true + else + Statics[StaticVideo].Visible := false; + + try + StrToFloat(Text[TextVideoGAP].Text); + if StrToFloat(Text[TextVideoGAP].Text)<> 0 then + Statics[StaticVideoGAP].Visible := true + else + Statics[StaticVideoGAP].Visible := false; + except + Statics[StaticVideoGAP].Visible := false; + end; + + if LowerCase(Text[TextRelative].Text) = 'yes' then + Statics[StaticRelative].Visible := true + else + Statics[StaticRelative].Visible := false; + + try + StrToInt(Text[TextResolution].Text); + if (StrToInt(Text[TextResolution].Text) <> 0) and (StrToInt(Text[TextResolution].Text) >= 1) then + Statics[StaticResolution].Visible := true + else + Statics[StaticResolution].Visible := false; + except + Statics[StaticResolution].Visible := false; + end; + + try + StrToInt(Text[TextNotesGAP].Text); + Statics[StaticNotesGAP].Visible := true; + except + Statics[StaticNotesGAP].Visible := false; + end; + + // start + try + StrToFloat(Text[TextStart].Text); + if (StrToFloat(Text[TextStart].Text) > 0) then + Statics[StaticStart].Visible := true + else + Statics[StaticStart].Visible := false; + except + Statics[StaticStart].Visible := false; + end; + + // GAP + try + StrToFloat(Text[TextGAP].Text); + Statics[StaticGAP].Visible := true; + except + Statics[StaticGAP].Visible := false; + end; + + // BPM + try + StrToFloat(Text[TextBPM].Text); + if (StrToFloat(Text[TextBPM].Text) > 0) then + Statics[StaticBPM].Visible := true + else + Statics[StaticBPM].Visible := false; + except + Statics[StaticBPM].Visible := false; + end; + +end; + +(*procedure TScreenEdit.Finish; +begin +// +end;*) + +end. |