unit UScreenPopup; interface {$I switches.inc} uses UMenu, SDL, UMusic, UFiles, SysUtils, UThemes; type TScreenPopupCheck = class(TMenu) public Visible: Boolean; //Whether the Menu should be Drawn constructor Create; override; function ParseInput(PressedKey: Cardinal; CharCode: WideChar; PressedDown: Boolean): Boolean; override; procedure onShow; override; procedure ShowPopup(msg: String); function Draw: boolean; override; end; type TScreenPopupError = class(TMenu) { private CurMenu: Byte; //Num of the cur. Shown Menu} public Visible: Boolean; //Whether the Menu should be Drawn constructor Create; override; function ParseInput(PressedKey: Cardinal; CharCode: WideChar; PressedDown: Boolean): Boolean; override; procedure onShow; override; procedure onHide; override; procedure ShowPopup(msg: String); function Draw: boolean; override; end; var // ISelections: Array of String; SelectValue: Integer; implementation uses UGraphic, UMain, UIni, UTexture, ULanguage, UParty, UPlaylist, UDisplay; function TScreenPopupCheck.ParseInput(PressedKey: Cardinal; CharCode: WideChar; PressedDown: Boolean): Boolean; 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, SDLK_BACKSPACE : begin Display.CheckOK:=False; Display.NextScreenWithCheck:=NIL; Visible:=False; Result := false; end; SDLK_RETURN: begin case Interaction of 0: begin //Hack to Finish Singscreen correct on Exit with Q Shortcut if (Display.NextScreenWithCheck = NIL) then begin if (Display.CurrentScreen = @ScreenSing) then ScreenSing.Finish else if (Display.CurrentScreen = @ScreenSingModi) then ScreenSingModi.Finish; end; Display.CheckOK:=True; end; 1: begin Display.CheckOK:=False; Display.NextScreenWithCheck:=NIL; end; end; Visible:=False; Result := false; end; SDLK_DOWN: InteractNext; SDLK_UP: InteractPrev; SDLK_RIGHT: InteractNext; SDLK_LEFT: InteractPrev; end; end; end; constructor TScreenPopupCheck.Create; var I: integer; begin inherited Create; AddBackground(Theme.CheckPopup.Background.Tex); AddButton(Theme.CheckPopup.Button1); if (Length(Button[0].Text) = 0) then AddButtonText(14, 20, 'Button 1'); AddButton(Theme.CheckPopup.Button2); if (Length(Button[1].Text) = 0) then AddButtonText(14, 20, 'Button 2'); AddText(Theme.CheckPopup.TextCheck); for I := 0 to High(Theme.CheckPopup.Static) do AddStatic(Theme.CheckPopup.Static[I]); for I := 0 to High(Theme.CheckPopup.Text) do AddText(Theme.CheckPopup.Text[I]); Interaction := 0; end; function TScreenPopupCheck.Draw: boolean; begin Draw:=inherited Draw; end; procedure TScreenPopupCheck.onShow; begin inherited; end; procedure TScreenPopupCheck.ShowPopup(msg: String); begin Interaction := 0; //Reset Interaction Visible := True; //Set Visible Text[0].Text := Language.Translate(msg); Button[0].Visible := True; Button[1].Visible := True; Button[0].Text[0].Text := Language.Translate('SONG_MENU_YES'); Button[1].Text[0].Text := Language.Translate('SONG_MENU_NO'); end; // error popup function TScreenPopupError.ParseInput(PressedKey: Cardinal; CharCode: WideChar; PressedDown: Boolean): Boolean; begin Result := true; If (PressedDown) Then begin // Key Down case PressedKey of SDLK_Q: begin Result := false; end; SDLK_ESCAPE, SDLK_BACKSPACE : begin Visible:=False; Result := false; end; SDLK_RETURN: begin Visible:=False; Result := false; end; SDLK_DOWN: InteractNext; SDLK_UP: InteractPrev; SDLK_RIGHT: InteractNext; SDLK_LEFT: InteractPrev; end; end; end; constructor TScreenPopupError.Create; var I: integer; begin inherited Create; AddBackground(Theme.CheckPopup.Background.Tex); AddButton(Theme.ErrorPopup.Button1); if (Length(Button[0].Text) = 0) then AddButtonText(14, 20, 'Button 1'); AddText(Theme.ErrorPopup.TextError); for I := 0 to High(Theme.ErrorPopup.Static) do AddStatic(Theme.ErrorPopup.Static[I]); for I := 0 to High(Theme.ErrorPopup.Text) do AddText(Theme.ErrorPopup.Text[I]); Interaction := 0; end; function TScreenPopupError.Draw: boolean; begin Draw:=inherited Draw; end; procedure TScreenPopupError.onShow; begin inherited; end; procedure TScreenPopupError.onHide; begin end; procedure TScreenPopupError.ShowPopup(msg: String); begin Interaction := 0; //Reset Interaction Visible := True; //Set Visible { //dirty hack... Text[0] is invisible for some strange reason for i:=1 to high(Text) do if i-1 <= high(msg) then begin Text[i].Visible:=True; Text[i].Text := msg[i-1]; end else begin Text[i].Visible:=False; end;} Text[0].Text:=msg; Button[0].Visible := True; Button[0].Text[0].Text := 'OK'; end; end.