From d13ac7e7a2667e5a1e95069e8b7290a82a5d9cee Mon Sep 17 00:00:00 2001 From: "Devin J. Pohly" Date: Sat, 12 Jan 2013 22:48:38 -0500 Subject: [PATCH] modify Input() on screens to return boolean --- src/OptionsList.cpp | 31 ++-- src/OptionsList.h | 2 +- src/Screen.cpp | 27 ++-- src/Screen.h | 28 ++-- src/ScreenAttract.cpp | 25 +-- src/ScreenAttract.h | 4 +- src/ScreenBookkeeping.cpp | 42 ++--- src/ScreenBookkeeping.h | 12 +- src/ScreenContinue.cpp | 10 +- src/ScreenContinue.h | 2 +- src/ScreenEdit.cpp | 238 ++++++++++++++--------------- src/ScreenEdit.h | 10 +- src/ScreenEditMenu.cpp | 31 ++-- src/ScreenEditMenu.h | 12 +- src/ScreenEnding.cpp | 6 +- src/ScreenEnding.h | 2 +- src/ScreenEvaluation.cpp | 17 ++- src/ScreenEvaluation.h | 6 +- src/ScreenGameplay.cpp | 28 ++-- src/ScreenGameplay.h | 2 +- src/ScreenGameplayLesson.cpp | 18 ++- src/ScreenGameplayLesson.h | 6 +- src/ScreenGameplaySyncMachine.cpp | 4 +- src/ScreenGameplaySyncMachine.h | 2 +- src/ScreenHighScores.cpp | 18 ++- src/ScreenHighScores.h | 14 +- src/ScreenInstructions.cpp | 12 +- src/ScreenInstructions.h | 6 +- src/ScreenJukebox.cpp | 8 +- src/ScreenJukebox.h | 2 +- src/ScreenMapControllers.cpp | 21 ++- src/ScreenMapControllers.h | 2 +- src/ScreenMapControllers2.h | 8 +- src/ScreenNameEntry.cpp | 15 +- src/ScreenNameEntry.h | 4 +- src/ScreenNameEntryTraditional.cpp | 6 +- src/ScreenNameEntryTraditional.h | 2 +- src/ScreenNetEvaluation.cpp | 18 ++- src/ScreenNetEvaluation.h | 8 +- src/ScreenNetRoom.cpp | 26 +++- src/ScreenNetRoom.h | 10 +- src/ScreenNetSelectBase.cpp | 12 +- src/ScreenNetSelectBase.h | 2 +- src/ScreenNetSelectMusic.cpp | 38 +++-- src/ScreenNetSelectMusic.h | 14 +- src/ScreenNetworkOptions.cpp | 10 +- src/ScreenNetworkOptions.h | 2 +- src/ScreenOptions.cpp | 38 +++-- src/ScreenOptions.h | 16 +- src/ScreenOptionsManageCourses.cpp | 5 +- src/ScreenOptionsManageCourses.h | 2 +- src/ScreenPackages.cpp | 30 ++-- src/ScreenPackages.h | 12 +- src/ScreenPackagesSSC.cpp | 7 +- src/ScreenPackagesSSC.h | 4 +- src/ScreenPlayerOptions.cpp | 9 +- src/ScreenPlayerOptions.h | 2 +- src/ScreenProfileLoad.cpp | 3 +- src/ScreenProfileLoad.h | 2 +- src/ScreenProfileSave.cpp | 3 +- src/ScreenProfileSave.h | 2 +- src/ScreenPrompt.cpp | 38 +++-- src/ScreenPrompt.h | 10 +- src/ScreenSMOnlineLogin.cpp | 4 +- src/ScreenSMOnlineLogin.h | 2 +- src/ScreenSandbox.cpp | 4 +- src/ScreenSandbox.h | 2 +- src/ScreenSelect.cpp | 13 +- src/ScreenSelect.h | 4 +- src/ScreenSelectCharacter.cpp | 26 ++-- src/ScreenSelectCharacter.h | 14 +- src/ScreenSelectLanguage.cpp | 7 +- src/ScreenSelectLanguage.h | 4 +- src/ScreenSelectMaster.cpp | 67 ++++---- src/ScreenSelectMaster.h | 10 +- src/ScreenSelectMusic.cpp | 69 +++++---- src/ScreenSelectMusic.h | 6 +- src/ScreenSelectProfile.cpp | 50 +++--- src/ScreenSelectProfile.h | 10 +- src/ScreenSetTime.cpp | 29 ++-- src/ScreenSetTime.h | 16 +- src/ScreenSplash.cpp | 10 +- src/ScreenSplash.h | 4 +- src/ScreenTestInput.cpp | 24 +-- src/ScreenTestInput.h | 6 +- src/ScreenTestLights.cpp | 28 ++-- src/ScreenTestLights.h | 10 +- src/ScreenTestSound.cpp | 12 +- src/ScreenTestSound.h | 2 +- src/ScreenTextEntry.cpp | 59 +++++-- src/ScreenTextEntry.h | 16 +- src/ScreenTitleMenu.cpp | 9 +- src/ScreenTitleMenu.h | 2 +- src/ScreenUnlockBrowse.cpp | 3 +- src/ScreenUnlockBrowse.h | 2 +- src/ScreenUnlockCelebrate.h | 10 +- src/ScreenWithMenuElements.cpp | 14 +- src/ScreenWithMenuElements.h | 4 +- 98 files changed, 861 insertions(+), 697 deletions(-) diff --git a/src/OptionsList.cpp b/src/OptionsList.cpp index 96f2b6fb5b..24c78e8e4e 100644 --- a/src/OptionsList.cpp +++ b/src/OptionsList.cpp @@ -363,7 +363,7 @@ void OptionsList::MoveItem( const RString &sRowName, int iMove ) { } -void OptionsList::Input( const InputEventPlus &input ) +bool OptionsList::Input( const InputEventPlus &input ) { Message msg(""); if( m_Codes.InputMessage(input, msg) ) @@ -377,14 +377,14 @@ void OptionsList::Input( const InputEventPlus &input ) if( input.MenuI == GAME_BUTTON_LEFT || input.MenuI == GAME_BUTTON_RIGHT ) { if( input.type != IET_FIRST_PRESS ) - return; + return false; m_bAcceptStartRelease = false; const RString &sCurrentRow = m_asMenuStack.back(); vector &bSelections = m_bSelections[sCurrentRow]; if( m_iMenuStackSelection == (int)bSelections.size() ) - return; + return false; RString sDest = pHandler->GetScreen( m_iMenuStackSelection ); if( m_setDirectRows.find(sDest) != m_setDirectRows.end() && sDest.size() ) @@ -406,20 +406,20 @@ void OptionsList::Input( const InputEventPlus &input ) MESSAGEMAN->Broadcast( lMsg ); } } - return; + return true; } } if( input.MenuI == GAME_BUTTON_LEFT ) { if( input.type == IET_RELEASE ) - return; + return false; if( INPUTMAPPER->IsBeingPressed(GAME_BUTTON_RIGHT, pn) ) { if( input.type == IET_FIRST_PRESS ) SwitchMenu( -1 ); - return; + return true; } --m_iMenuStackSelection; @@ -429,18 +429,18 @@ void OptionsList::Input( const InputEventPlus &input ) Message lMsg("OptionsListLeft"); lMsg.SetParam( "Player", input.pn ); MESSAGEMAN->Broadcast( lMsg ); - return; + return true; } else if( input.MenuI == GAME_BUTTON_RIGHT ) { if( input.type == IET_RELEASE ) - return; + return false; if( INPUTMAPPER->IsBeingPressed(GAME_BUTTON_LEFT, pn) ) { if( input.type == IET_FIRST_PRESS ) SwitchMenu( +1 ); - return; + return true; } ++m_iMenuStackSelection; @@ -450,7 +450,7 @@ void OptionsList::Input( const InputEventPlus &input ) Message lMsg("OptionsListRight"); lMsg.SetParam( "Player", input.pn ); MESSAGEMAN->Broadcast( lMsg ); - return; + return true; } else if( input.MenuI == GAME_BUTTON_START ) { @@ -458,7 +458,7 @@ void OptionsList::Input( const InputEventPlus &input ) { m_bStartIsDown = true; m_bAcceptStartRelease = true; - return; + return true; } if( input.type == IET_RELEASE ) { @@ -467,19 +467,20 @@ void OptionsList::Input( const InputEventPlus &input ) m_bStartIsDown = false; } - return; + return true; } else if( input.MenuI == GAME_BUTTON_SELECT ) { if( input.type != IET_FIRST_PRESS ) - return; + return false; // if( input.type == IET_RELEASE ) { Close(); - return; + return true; } - return; + return true; } + return false; } void OptionsList::SwitchToCurrentRow() diff --git a/src/OptionsList.h b/src/OptionsList.h index 3137783a4a..6a03f166fb 100644 --- a/src/OptionsList.h +++ b/src/OptionsList.h @@ -55,7 +55,7 @@ public: /** @brief Close all menus (for menu timer). */ void Close(); - void Input( const InputEventPlus &input ); + bool Input( const InputEventPlus &input ); bool IsOpened() const { return m_asMenuStack.size() > 0; } bool Start(); // return true if the last menu was popped in response to this press diff --git a/src/Screen.cpp b/src/Screen.cpp index 5dde427fa0..d9972ae849 100644 --- a/src/Screen.cpp +++ b/src/Screen.cpp @@ -186,13 +186,14 @@ bool Screen::OverlayInput( const InputEventPlus &input ) return false; } -void Screen::Input( const InputEventPlus &input ) +/* Returns true if the input was handled, or false if not handled. */ +bool Screen::Input( const InputEventPlus &input ) { Message msg(""); if( m_Codes.InputMessage(input, msg) ) { this->HandleMessage( msg ); - return; + return true; } // Don't send release messages with the default handler. @@ -202,7 +203,7 @@ void Screen::Input( const InputEventPlus &input ) case IET_REPEAT: break; // OK default: - return; // don't care + return false; // don't care } // Always broadcast mouse input so themers can grab it. -aj @@ -221,22 +222,22 @@ void Screen::Input( const InputEventPlus &input ) // default input handler used by most menus switch( input.MenuI ) { - case GAME_BUTTON_MENUUP: this->MenuUp ( input ); return; - case GAME_BUTTON_MENUDOWN: this->MenuDown ( input ); return; - case GAME_BUTTON_MENULEFT: this->MenuLeft ( input ); return; - case GAME_BUTTON_MENURIGHT: this->MenuRight ( input ); return; + case GAME_BUTTON_MENUUP: return this->MenuUp ( input ); + case GAME_BUTTON_MENUDOWN: return this->MenuDown ( input ); + case GAME_BUTTON_MENULEFT: return this->MenuLeft ( input ); + case GAME_BUTTON_MENURIGHT: return this->MenuRight( input ); case GAME_BUTTON_BACK: // Don't make the user hold the back button if they're pressing escape and escape is the back button. if( !PREFSMAN->m_bDelayedBack || input.type==IET_REPEAT || (input.DeviceI.device == DEVICE_KEYBOARD && input.DeviceI.button == KEY_ESC) ) { if( HANDLE_BACK_BUTTON ) - this->MenuBack( input ); + return this->MenuBack( input ); } - return; - case GAME_BUTTON_START: this->MenuStart ( input ); return; - case GAME_BUTTON_SELECT:this->MenuSelect( input ); return; - case GAME_BUTTON_COIN: this->MenuCoin ( input ); return; - default: return; + return false; + case GAME_BUTTON_START: return this->MenuStart ( input ); + case GAME_BUTTON_SELECT: return this->MenuSelect( input ); + case GAME_BUTTON_COIN: return this->MenuCoin ( input ); + default: return false; } } diff --git a/src/Screen.h b/src/Screen.h index 2ff87d1699..cfe133b138 100644 --- a/src/Screen.h +++ b/src/Screen.h @@ -60,7 +60,7 @@ public: virtual void Update( float fDeltaTime ); virtual bool OverlayInput( const InputEventPlus &input ); - virtual void Input( const InputEventPlus &input ); + virtual bool Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); void SetLockInputSecs( float f ) { m_fLockInputSecs = f; } @@ -126,20 +126,20 @@ public: RString GetPrevScreen() const; // let subclass override if they want - virtual void MenuUp(const InputEventPlus &) { } - virtual void MenuDown(const InputEventPlus &) { } - virtual void MenuLeft(const InputEventPlus &) { } - virtual void MenuRight(const InputEventPlus &) { } - virtual void MenuStart(const InputEventPlus &) { } - virtual void MenuSelect(const InputEventPlus &) { } - virtual void MenuBack(const InputEventPlus &) { } - virtual void MenuCoin(const InputEventPlus &) { } + virtual bool MenuUp(const InputEventPlus &) { return false; } + virtual bool MenuDown(const InputEventPlus &) { return false; } + virtual bool MenuLeft(const InputEventPlus &) { return false; } + virtual bool MenuRight(const InputEventPlus &) { return false; } + virtual bool MenuStart(const InputEventPlus &) { return false; } + virtual bool MenuSelect(const InputEventPlus &) { return false; } + virtual bool MenuBack(const InputEventPlus &) { return false; } + virtual bool MenuCoin(const InputEventPlus &) { return false; } // todo? -aj - //virtual void LeftClick(const InputEventPlus &) { } - //virtual void RightClick(const InputEventPlus &) { } - //virtual void MiddleClick(const InputEventPlus &) { } - //virtual void MouseWheelUp(const InputEventPlus &) { } - //virtual void MouseWheelDown(const InputEventPlus &) { } + //virtual bool LeftClick(const InputEventPlus &) { } + //virtual bool RightClick(const InputEventPlus &) { } + //virtual bool MiddleClick(const InputEventPlus &) { } + //virtual bool MouseWheelUp(const InputEventPlus &) { } + //virtual bool MouseWheelDown(const InputEventPlus &) { } }; #endif diff --git a/src/ScreenAttract.cpp b/src/ScreenAttract.cpp index c5777804b8..8f122c104c 100644 --- a/src/ScreenAttract.cpp +++ b/src/ScreenAttract.cpp @@ -36,13 +36,15 @@ void ScreenAttract::BeginScreen() ScreenWithMenuElements::BeginScreen(); } -void ScreenAttract::Input( const InputEventPlus &input ) +bool ScreenAttract::Input( const InputEventPlus &input ) { + bool handled; // LOG->Trace( "ScreenAttract::Input()" ); - AttractInput( input, this ); + handled = AttractInput( input, this ); - ScreenWithMenuElements::Input( input ); + // Always run both AttractInput and ScreenWithMenuElements::Input + return ScreenWithMenuElements::Input( input ) || handled; } void ScreenAttract::SetAttractVolume( bool bInAttract ) @@ -68,10 +70,10 @@ void ScreenAttract::Cancel( ScreenMessage smSendWhenDone ) ScreenWithMenuElements::Cancel( smSendWhenDone ); } -void ScreenAttract::AttractInput( const InputEventPlus &input, ScreenWithMenuElements *pScreen ) +bool ScreenAttract::AttractInput( const InputEventPlus &input, ScreenWithMenuElements *pScreen ) { if( input.type != IET_FIRST_PRESS ) - return; // don't care + return false; // don't care switch( input.MenuI ) { @@ -89,37 +91,36 @@ void ScreenAttract::AttractInput( const InputEventPlus &input, ScreenWithMenuEle PREFSMAN->m_iCoinsPerCredit.Get(), GAMESTATE->GetNumSidesJoined() ); if( GAMESTATE->m_iCoins < PREFSMAN->m_iCoinsPerCredit && GAMESTATE->GetNumSidesJoined() == 0 ) - break; // don't fall through + return true; // fall through case CoinMode_Home: case CoinMode_Free: if( pScreen->IsTransitioning() ) - return; + return false; // HandleGlobalInputs() already played the coin sound. Don't play it again. if( input.MenuI != GAME_BUTTON_COIN ) SCREENMAN->PlayStartSound(); pScreen->Cancel( SM_GoToStartScreen ); - break; + return true; default: FAIL_M("Invalid Coin Mode! Aborting..."); } default: break; } if( pScreen->IsTransitioning() ) - return; + return false; switch( input.MenuI ) { case GAME_BUTTON_LEFT: case GAME_BUTTON_RIGHT: SCREENMAN->PostMessageToTopScreen( SM_BeginFadingOut, 0 ); + return true; default: - break; + return false; } - -// Screen::Input( input ); } void ScreenAttract::StartPlayingMusic() diff --git a/src/ScreenAttract.h b/src/ScreenAttract.h index 0767e4b97e..9872c4539e 100644 --- a/src/ScreenAttract.h +++ b/src/ScreenAttract.h @@ -13,11 +13,11 @@ public: virtual void Init(); virtual void BeginScreen(); - static void AttractInput( const InputEventPlus &input, ScreenWithMenuElements *pScreen ); + static bool AttractInput( const InputEventPlus &input, ScreenWithMenuElements *pScreen ); static void GoToStartScreen( RString sScreenName ); static void SetAttractVolume( bool bInAttract ); - virtual void Input( const InputEventPlus &input ); + virtual bool Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); virtual void Cancel( ScreenMessage smSendWhenDone ); diff --git a/src/ScreenBookkeeping.cpp b/src/ScreenBookkeeping.cpp index 2bb33ea523..d03857a19e 100644 --- a/src/ScreenBookkeeping.cpp +++ b/src/ScreenBookkeeping.cpp @@ -68,53 +68,57 @@ void ScreenBookkeeping::Update( float fDelta ) ScreenWithMenuElements::Update( fDelta ); } -void ScreenBookkeeping::Input( const InputEventPlus &input ) +bool ScreenBookkeeping::Input( const InputEventPlus &input ) { if( input.type != IET_FIRST_PRESS && input.type != IET_REPEAT ) - return; // ignore + return false; // ignore - Screen::Input( input ); // default handler + return Screen::Input( input ); // default handler } -void ScreenBookkeeping::MenuLeft( const InputEventPlus &input ) +bool ScreenBookkeeping::MenuLeft( const InputEventPlus &input ) { m_iViewIndex--; CLAMP( m_iViewIndex, 0, m_vBookkeepingViews.size()-1 ); UpdateView(); + return true; } -void ScreenBookkeeping::MenuRight( const InputEventPlus &input ) +bool ScreenBookkeeping::MenuRight( const InputEventPlus &input ) { m_iViewIndex++; CLAMP( m_iViewIndex, 0, m_vBookkeepingViews.size()-1 ); UpdateView(); + return true; } -void ScreenBookkeeping::MenuStart( const InputEventPlus &input ) +bool ScreenBookkeeping::MenuStart( const InputEventPlus &input ) { - if( !IsTransitioning() ) - { - SCREENMAN->PlayStartSound(); - StartTransitioningScreen( SM_GoToNextScreen ); - } + if( IsTransitioning() ) + return false; + + SCREENMAN->PlayStartSound(); + StartTransitioningScreen( SM_GoToNextScreen ); + return true; } -void ScreenBookkeeping::MenuBack( const InputEventPlus &input ) +bool ScreenBookkeeping::MenuBack( const InputEventPlus &input ) { - if( !IsTransitioning() ) - { - SCREENMAN->PlayStartSound(); - StartTransitioningScreen( SM_GoToPrevScreen ); - } + if( IsTransitioning() ) + return false; + + SCREENMAN->PlayStartSound(); + StartTransitioningScreen( SM_GoToPrevScreen ); + return true; } -void ScreenBookkeeping::MenuCoin( const InputEventPlus &input ) +bool ScreenBookkeeping::MenuCoin( const InputEventPlus &input ) { UpdateView(); - Screen::MenuCoin( input ); + return Screen::MenuCoin( input ); } static LocalizedString ALL_TIME ( "ScreenBookkeeping", "All-time Coin Total:" ); diff --git a/src/ScreenBookkeeping.h b/src/ScreenBookkeeping.h index 5d4cc9a9f3..ec8bbab9e2 100644 --- a/src/ScreenBookkeeping.h +++ b/src/ScreenBookkeeping.h @@ -25,13 +25,13 @@ public: virtual void Init(); virtual void Update( float fDelta ); - virtual void Input( const InputEventPlus &input ); + virtual bool Input( const InputEventPlus &input ); - virtual void MenuLeft( const InputEventPlus &input ); - virtual void MenuRight( const InputEventPlus &input ); - virtual void MenuStart( const InputEventPlus &input ); - virtual void MenuBack( const InputEventPlus &input ); - virtual void MenuCoin( const InputEventPlus &input ); + virtual bool MenuLeft( const InputEventPlus &input ); + virtual bool MenuRight( const InputEventPlus &input ); + virtual bool MenuStart( const InputEventPlus &input ); + virtual bool MenuBack( const InputEventPlus &input ); + virtual bool MenuCoin( const InputEventPlus &input ); private: diff --git a/src/ScreenContinue.cpp b/src/ScreenContinue.cpp index 4c8d0cbbfb..373fa4be2f 100644 --- a/src/ScreenContinue.cpp +++ b/src/ScreenContinue.cpp @@ -48,16 +48,16 @@ void ScreenContinue::BeginScreen() ScreenWithMenuElementsSimple::BeginScreen(); } -void ScreenContinue::Input( const InputEventPlus &input ) +bool ScreenContinue::Input( const InputEventPlus &input ) { if( input.MenuI == GAME_BUTTON_COIN && input.type == IET_FIRST_PRESS ) ResetTimer(); if( input.MenuI == GAME_BUTTON_START && input.type == IET_FIRST_PRESS && GAMESTATE->JoinInput(input.pn) ) - return; // handled + return true; // handled if( IsTransitioning() ) - return; + return true; if( input.type == IET_FIRST_PRESS && GAMESTATE->IsHumanPlayer(input.pn) && FORCE_TIMER_WAIT ) { @@ -75,13 +75,13 @@ void ScreenContinue::Input( const InputEventPlus &input ) Message msg("HurryTimer"); msg.SetParam( "PlayerNumber", input.pn ); this->HandleMessage( msg ); - return; // handled + return true; // handled } default: break; } } - ScreenWithMenuElementsSimple::Input( input ); + return ScreenWithMenuElementsSimple::Input( input ); } void ScreenContinue::HandleScreenMessage( const ScreenMessage SM ) diff --git a/src/ScreenContinue.h b/src/ScreenContinue.h index 229dfc7639..31811105b7 100644 --- a/src/ScreenContinue.h +++ b/src/ScreenContinue.h @@ -11,7 +11,7 @@ public: virtual void Init(); virtual void BeginScreen(); - virtual void Input( const InputEventPlus &input ); + virtual bool Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); virtual void HandleMessage( const Message &msg ); virtual bool AllowLateJoin() const { return true; } diff --git a/src/ScreenEdit.cpp b/src/ScreenEdit.cpp index eb65dc68f1..fd2993b437 100644 --- a/src/ScreenEdit.cpp +++ b/src/ScreenEdit.cpp @@ -1714,17 +1714,17 @@ void ScreenEdit::DrawPrimitives() } -void ScreenEdit::Input( const InputEventPlus &input ) +bool ScreenEdit::Input( const InputEventPlus &input ) { // LOG->Trace( "ScreenEdit::Input()" ); // invalidate input if cmd/meta is being held. if( INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_LMETA)) || INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_RMETA)) ) - return; + return false; if( m_In.IsTransitioning() || m_Out.IsTransitioning() ) - return; + return false; EditButton EditB = DeviceToEdit( input.DeviceI ); if( EditB == EditButton_Invalid ) @@ -1743,18 +1743,14 @@ void ScreenEdit::Input( const InputEventPlus &input ) { DEFAULT_FAIL( m_EditState ); case STATE_EDITING: - InputEdit( input, EditB ); m_bTextInfoNeedsUpdate = true; - break; + return InputEdit( input, EditB ); case STATE_RECORDING: - InputRecord( input, EditB ); - break; + return InputRecord( input, EditB ); case STATE_RECORDING_PAUSED: - InputRecordPaused( input, EditB ); - break; + return InputRecordPaused( input, EditB ); case STATE_PLAYING: - InputPlay( input, EditB ); - break; + return InputPlay( input, EditB ); } } @@ -1779,13 +1775,15 @@ static LocalizedString SWITCHED_TO ( "ScreenEdit", "Switched to" ); static LocalizedString NO_BACKGROUNDS_AVAILABLE ( "ScreenEdit", "No backgrounds available" ); static ThemeMetric INVERT_SCROLL_BUTTONS ( "ScreenEdit", "InvertScrollSpeedButtons" ); -void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) +bool ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) { if( input.type == IET_RELEASE ) { if( EditPressed( EDIT_BUTTON_SCROLL_SELECT, input.DeviceI ) ) m_iShiftAnchor = -1; - return; + // XXX Key releases usually don't count as "handled," but what + // does it mean in this case? + return false; } TimingData &sTiming = GetAppropriateTiming(); float playerBeat = GetAppropriatePosition().m_fSongBeat; @@ -1805,7 +1803,7 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) case EDIT_BUTTON_COLUMN_9: { if( input.type != IET_FIRST_PRESS ) - break; // We only care about first presses + return false; // We only care about first presses int iCol = EditB - EDIT_BUTTON_COLUMN_0; @@ -1815,7 +1813,7 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) ShiftToRightSide( iCol, m_NoteDataEdit.GetNumTracks() ); if( iCol >= m_NoteDataEdit.GetNumTracks() ) - break; // this button is not in the range of columns for this Style + return false; // this button is not in the range of columns for this Style const float fSongBeat = GetBeat(); const int iSongIndex = BeatToNoteRow( fSongBeat ); @@ -1854,7 +1852,7 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) CheckNumberOfNotesAndUndo(); } } - break; + return true; case EDIT_BUTTON_CYCLE_TAP_LEFT: { @@ -1866,7 +1864,7 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) case TapNote::fake: m_selectedTap = TAP_ORIGINAL_LIFT; break; DEFAULT_FAIL( m_selectedTap.type ); } - break; + return true; } case EDIT_BUTTON_CYCLE_TAP_RIGHT: { @@ -1878,21 +1876,21 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) case TapNote::fake: m_selectedTap = TAP_ORIGINAL_TAP; break; DEFAULT_FAIL( m_selectedTap.type ); } - break; + return true; } case EDIT_BUTTON_CYCLE_SEGMENT_LEFT: { int tmp = enum_add2( this->currentCycleSegment, -1 ); wrap( *ConvertValue(&tmp), NUM_TimingSegmentType ); currentCycleSegment = (TimingSegmentType)tmp; - break; + return true; } case EDIT_BUTTON_CYCLE_SEGMENT_RIGHT: { int tmp = enum_add2( this->currentCycleSegment, +1 ); wrap( *ConvertValue(&tmp), NUM_TimingSegmentType ); currentCycleSegment = (TimingSegmentType)tmp; - break; + return true; } case EDIT_BUTTON_SCROLL_SPEED_UP: case EDIT_BUTTON_SCROLL_SPEED_DOWN: @@ -1930,16 +1928,15 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) } PO_GROUP_ASSIGN( pPlayerState->m_PlayerOptions, ModsLevel_Song, m_fScrollSpeed, fScrollSpeed ); - break; } - break; + return true; case EDIT_BUTTON_SCROLL_HOME: ScrollTo( 0 ); - break; + return true; case EDIT_BUTTON_SCROLL_END: ScrollTo( m_NoteDataEdit.GetLastBeat() ); - break; + return true; case EDIT_BUTTON_SCROLL_UP_LINE: case EDIT_BUTTON_SCROLL_UP_PAGE: case EDIT_BUTTON_SCROLL_UP_TS: @@ -1979,20 +1976,20 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) ScrollTo( fDestinationBeat ); } - break; + return true; case EDIT_BUTTON_SCROLL_NEXT_MEASURE: { float fDestinationBeat = GetBeat() + beatsPerMeasure; fDestinationBeat = ftruncf( fDestinationBeat, (float)beatsPerMeasure ); ScrollTo( fDestinationBeat ); - break; + return true; } case EDIT_BUTTON_SCROLL_PREV_MEASURE: { float fDestinationBeat = QuantizeUp( GetBeat(), (float)beatsPerMeasure ); fDestinationBeat -= (float)beatsPerMeasure; ScrollTo( fDestinationBeat ); - break; + return true; } case EDIT_BUTTON_SCROLL_NEXT: { @@ -2000,38 +1997,38 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) NoteDataUtil::GetNextEditorPosition( m_NoteDataEdit, iRow ); ScrollTo( NoteRowToBeat(iRow) ); } - break; + return true; case EDIT_BUTTON_SCROLL_PREV: { int iRow = BeatToNoteRow( GetBeat() ); NoteDataUtil::GetPrevEditorPosition( m_NoteDataEdit, iRow ); ScrollTo( NoteRowToBeat(iRow) ); } - break; + return true; case EDIT_BUTTON_SEGMENT_NEXT: - { - // TODO: Work around Stops and Delays. We MAY have to separate them. - TimingData &timing = GetAppropriateTiming(); - ScrollTo(timing.GetNextSegmentBeatAtBeat(this->currentCycleSegment, - GetBeat())); - } - break; - case EDIT_BUTTON_SEGMENT_PREV: - { - // TODO: Work around Stops and Delays. We MAY have to separate them. - TimingData &timing = GetAppropriateTiming(); - ScrollTo(timing.GetPreviousSegmentBeatAtBeat(this->currentCycleSegment, + { + // TODO: Work around Stops and Delays. We MAY have to separate them. + TimingData &timing = GetAppropriateTiming(); + ScrollTo(timing.GetNextSegmentBeatAtBeat(this->currentCycleSegment, GetBeat())); - } - break; + } + return true; + case EDIT_BUTTON_SEGMENT_PREV: + { + // TODO: Work around Stops and Delays. We MAY have to separate them. + TimingData &timing = GetAppropriateTiming(); + ScrollTo(timing.GetPreviousSegmentBeatAtBeat(this->currentCycleSegment, + GetBeat())); + } + return true; case EDIT_BUTTON_SNAP_NEXT: if( m_SnapDisplay.PrevSnapMode() ) OnSnapModeChange(); - break; + return true; case EDIT_BUTTON_SNAP_PREV: if( m_SnapDisplay.NextSnapMode() ) OnSnapModeChange(); - break; + return true; case EDIT_BUTTON_LAY_SELECT: { const int iCurrentRow = BeatToNoteRow(GetAppropriatePosition().m_fSongBeat); @@ -2059,7 +2056,7 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) } m_soundMarker.Play(); } - break; + return true; case EDIT_BUTTON_OPEN_AREA_MENU: { // TODO: Improve behavior if timing changes are shifted down on beat 0. @@ -2069,7 +2066,7 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) g_AreaMenu.rows[undo].bEnabled = m_bHasUndo; EditMiniMenu( &g_AreaMenu, SM_BackFromAreaMenu ); } - break; + return true; case EDIT_BUTTON_OPEN_ALTER_MENU: { bool bAreaSelected = m_NoteFieldEdit.m_iBeginMarker!=-1 && m_NoteFieldEdit.m_iEndMarker!=-1; @@ -2089,19 +2086,19 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) g_AlterMenu.rows[routine_mirror_2_to_1].bEnabled = isRoutine; EditMiniMenu(&g_AlterMenu, SM_BackFromAlterMenu); } - break; + return true; } case EDIT_BUTTON_OPEN_EDIT_MENU: EditMiniMenu( &g_MainMenu, SM_BackFromMainMenu ); - break; + return true; case EDIT_BUTTON_OPEN_INPUT_HELP: DoHelp(); - break; + return true; case EDIT_BUTTON_OPEN_TIMING_MENU: { DisplayTimingMenu(); - break; + return true; } case EDIT_BUTTON_OPEN_NEXT_STEPS: case EDIT_BUTTON_OPEN_PREV_STEPS: @@ -2136,7 +2133,7 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) if( it==vSteps.begin() ) { SCREENMAN->PlayInvalidSound(); - return; + return true; } it--; break; @@ -2145,7 +2142,7 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) if( it==vSteps.end() ) { SCREENMAN->PlayInvalidSound(); - return; + return true; } break; } @@ -2167,7 +2164,7 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) ScrollTo( GetAppropriateTiming().GetBeatFromElapsedTime(curSecond) ); } - break; + return true; case EDIT_BUTTON_BPM_UP: case EDIT_BUTTON_BPM_DOWN: { @@ -2196,7 +2193,7 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) (fDelta>0 ? m_soundValueIncrease : m_soundValueDecrease).Play(); SetDirty( true ); } - break; + return true; case EDIT_BUTTON_STOP_UP: case EDIT_BUTTON_STOP_DOWN: { @@ -2228,7 +2225,7 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) if( fDelta > 0 ) timing.AddSegment( StopSegment(GetRow(), fDelta) ); else - break; + return false; } else { @@ -2241,7 +2238,7 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) (fDelta>0 ? m_soundValueIncrease : m_soundValueDecrease).Play(); SetDirty( true ); } - break; + return true; // TODO: Combine the stop and delay call somehow? case EDIT_BUTTON_DELAY_UP: case EDIT_BUTTON_DELAY_DOWN: @@ -2274,7 +2271,7 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) if( fDelta > 0 ) timing.AddSegment( DelaySegment(GetRow(), fDelta) ); else - break; + return false; } else { @@ -2287,7 +2284,7 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) (fDelta>0 ? m_soundValueIncrease : m_soundValueDecrease).Play(); SetDirty( true ); } - break; + return true; case EDIT_BUTTON_OFFSET_UP: case EDIT_BUTTON_OFFSET_DOWN: { @@ -2322,7 +2319,7 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) } SetDirty( true ); } - break; + return true; case EDIT_BUTTON_SAMPLE_START_UP: case EDIT_BUTTON_SAMPLE_START_DOWN: case EDIT_BUTTON_SAMPLE_LENGTH_DOWN: @@ -2359,10 +2356,10 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) (fDelta>0 ? m_soundValueIncrease : m_soundValueDecrease).Play(); SetDirty( true ); } - break; + return true; case EDIT_BUTTON_PLAY_SAMPLE_MUSIC: PlayPreviewMusic(); - break; + return true; case EDIT_BUTTON_OPEN_BGCHANGE_LAYER1_MENU: case EDIT_BUTTON_OPEN_BGCHANGE_LAYER2_MENU: if( !GAMESTATE->m_bIsUsingStepTiming ) @@ -2469,7 +2466,7 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) SCREENMAN->SystemMessage( BG_CHANGE_STEP_TIMING ); SCREENMAN->PlayInvalidSound(); } - break; + return true; case EDIT_BUTTON_OPEN_COURSE_MENU: { @@ -2501,18 +2498,18 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) EditMiniMenu( &g_CourseMode, SM_BackFromCourseModeMenu ); } - break; + return true; case EDIT_BUTTON_OPEN_STEP_ATTACK_MENU: { this->DoStepAttackMenu(); - break; + return true; } case EDIT_BUTTON_OPEN_COURSE_ATTACK_MENU: { // TODO: Give Song/Step Timing switches/functions here? Course *pCourse = GAMESTATE->m_pCurCourse; if( pCourse == NULL ) - break; + return false; CourseEntry &ce = pCourse->m_vEntries[GAMESTATE->m_iEditCourseEntryIndex]; float fStartTime = m_pSteps->m_Timing.GetElapsedTimeFromBeat( GAMESTATE->m_pPlayerState[PLAYER_1]->m_Position.m_fSongBeat ); int iAttack = FindAttackAtTime( ce.attacks, fStartTime ); @@ -2537,7 +2534,7 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) EditMiniMenu( &g_InsertCourseAttack, SM_BackFromInsertCourseAttack ); } - break; + return true; case EDIT_BUTTON_ADD_STEP_MODS: { float start = -1; @@ -2576,7 +2573,7 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) g_fLastInsertAttackDurationSeconds = end - start; toEdit.Assign( ModsLevel_Stage, po ); SCREENMAN->AddNewScreenToTop( "ScreenPlayerOptions", SM_BackFromInsertStepAttackPlayerOptions ); - break; + return true; } case EDIT_BUTTON_ADD_COURSE_MODS: { @@ -2584,7 +2581,7 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) PlayerOptions po; const Course *pCourse = GAMESTATE->m_pCurCourse; if( pCourse == NULL ) - break; + return false; const CourseEntry &ce = pCourse->m_vEntries[GAMESTATE->m_iEditCourseEntryIndex]; if( m_NoteFieldEdit.m_iBeginMarker == -1 ) @@ -2613,7 +2610,7 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) SCREENMAN->AddNewScreenToTop( "ScreenPlayerOptions", SM_BackFromInsertCourseAttackPlayerOptions ); } - break; + return true; case EDIT_BUTTON_BAKE_RANDOM_FROM_SONG_GROUP: case EDIT_BUTTON_BAKE_RANDOM_FROM_SONG_GROUP_AND_GENRE: { @@ -2643,19 +2640,19 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) m_soundMarker.Play(); } } - break; + return true; case EDIT_BUTTON_PLAY_FROM_START: HandleMainMenuChoice( play_whole_song ); - break; + return true; case EDIT_BUTTON_PLAY_FROM_CURSOR: HandleMainMenuChoice( play_current_beat_to_end ); - break; + return true; case EDIT_BUTTON_PLAY_SELECTION: HandleMainMenuChoice( play_selection ); - break; + return true; case EDIT_BUTTON_RECORD_SELECTION: if( m_NoteFieldEdit.m_iBeginMarker!=-1 && m_NoteFieldEdit.m_iEndMarker!=-1 ) { @@ -2680,80 +2677,80 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) if( m_iStartPlayingAt >= m_iStopPlayingAt ) { SCREENMAN->PlayInvalidSound(); - return; + return true; } TransitionEditState( STATE_RECORDING ); } - break; + return true; case EDIT_BUTTON_RECORD_FROM_CURSOR: m_iStartPlayingAt = BeatToNoteRow(GetAppropriatePosition().m_fSongBeat); m_iStopPlayingAt = max( m_iStartPlayingAt, m_NoteDataEdit.GetLastRow() ); TransitionEditState( STATE_RECORDING ); - break; + return true; case EDIT_BUTTON_INSERT: HandleAreaMenuChoice( insert_and_shift ); SCREENMAN->PlayInvalidSound(); - break; + return true; case EDIT_BUTTON_INSERT_SHIFT_PAUSES: HandleAreaMenuChoice( shift_pauses_forward ); SCREENMAN->PlayInvalidSound(); - break; + return true; case EDIT_BUTTON_DELETE: HandleAreaMenuChoice( delete_and_shift ); SCREENMAN->PlayInvalidSound(); - break; + return true; case EDIT_BUTTON_DELETE_SHIFT_PAUSES: HandleAreaMenuChoice( shift_pauses_backward ); SCREENMAN->PlayInvalidSound(); - break; + return true; case EDIT_BUTTON_SAVE: HandleMainMenuChoice( ScreenEdit::save ); - break; + return true; case EDIT_BUTTON_UNDO: Undo(); - break; + return true; case EDIT_BUTTON_SWITCH_PLAYERS: - if( m_InputPlayerNumber != PLAYER_INVALID ) - { - enum_add( m_InputPlayerNumber, 1 ); - if( m_InputPlayerNumber == NUM_PLAYERS ) - m_InputPlayerNumber = PLAYER_1; - m_soundSwitchPlayer.Play(); - } - break; + if( m_InputPlayerNumber == PLAYER_INVALID ) + return false; + enum_add( m_InputPlayerNumber, 1 ); + if( m_InputPlayerNumber == NUM_PLAYERS ) + m_InputPlayerNumber = PLAYER_1; + m_soundSwitchPlayer.Play(); + return true; case EDIT_BUTTON_SWITCH_TIMINGS: GAMESTATE->m_bIsUsingStepTiming = !GAMESTATE->m_bIsUsingStepTiming; m_soundSwitchTiming.Play(); - break; - default: break; + return true; + default: + return false; } } -void ScreenEdit::InputRecord( const InputEventPlus &input, EditButton EditB ) +bool ScreenEdit::InputRecord( const InputEventPlus &input, EditButton EditB ) { if( input.type == IET_FIRST_PRESS && EditB == EDIT_BUTTON_RETURN_TO_EDIT ) { TransitionEditState( STATE_EDITING ); - return; + return true; } if( input.pn != PLAYER_1 ) - return; // ignore + return false; // ignore const int iCol = GAMESTATE->GetCurrentStyle()->GameInputToColumn( input.GameI ); //Is this actually a column? If not, ignore the input. if( iCol == -1 ) - return; + return false; switch( input.type ) { @@ -2763,7 +2760,7 @@ void ScreenEdit::InputRecord( const InputEventPlus &input, EditButton EditB ) if( EditIsBeingPressed(EDIT_BUTTON_REMOVE_NOTE) ) { // Remove notes in Update. - break; + return false; } // Add a tap @@ -2772,11 +2769,11 @@ void ScreenEdit::InputRecord( const InputEventPlus &input, EditButton EditB ) const int iRow = BeatToNoteRow( fBeat ); if( iRow < 0 ) - break; + return false; // Don't add outside of the range. if( iRow < m_iStartPlayingAt || iRow >= m_iStopPlayingAt ) - return; + return false; // Remove hold if any so that we don't have taps inside of a hold. int iHeadRow; @@ -2788,18 +2785,18 @@ void ScreenEdit::InputRecord( const InputEventPlus &input, EditButton EditB ) m_NoteDataRecord.SetTapNote( iCol, iRow, tn ); m_NoteFieldRecord.Step( iCol, TNS_W1 ); } - break; + return true; case IET_REPEAT: case IET_RELEASE: // don't add or extend holds here; we do it in Update() - break; + return false; } } -void ScreenEdit::InputRecordPaused( const InputEventPlus &input, EditButton EditB ) +bool ScreenEdit::InputRecordPaused( const InputEventPlus &input, EditButton EditB ) { if( input.type != IET_FIRST_PRESS ) - return; // don't care + return false; // don't care switch( EditB ) { @@ -2808,15 +2805,15 @@ void ScreenEdit::InputRecordPaused( const InputEventPlus &input, EditButton Edit * to do to undo is Undo() as usual, and copy the note data back in. */ Undo(); m_NoteDataRecord.CopyAll( m_NoteDataEdit ); - break; + return true; case EDIT_BUTTON_PLAY_SELECTION: TransitionEditState( STATE_PLAYING ); - break; + return true; case EDIT_BUTTON_RECORD_SELECTION: TransitionEditState( STATE_RECORDING ); - break; + return true; case EDIT_BUTTON_RECORD_FROM_CURSOR: if( GAMESTATE->m_pCurSteps[0]->IsAnEdit() ) @@ -2826,7 +2823,7 @@ void ScreenEdit::InputRecordPaused( const InputEventPlus &input, EditButton Edit { // We're already at the end. SCREENMAN->PlayInvalidSound(); - return; + return true; } } @@ -2841,16 +2838,17 @@ void ScreenEdit::InputRecordPaused( const InputEventPlus &input, EditButton Edit } TransitionEditState( STATE_RECORDING ); - break; + return true; case EDIT_BUTTON_RETURN_TO_EDIT: TransitionEditState( STATE_EDITING ); - break; - default: break; + return true; + default: + return false; } } -void ScreenEdit::InputPlay( const InputEventPlus &input, EditButton EditB ) +bool ScreenEdit::InputPlay( const InputEventPlus &input, EditButton EditB ) { switch( input.type ) { @@ -2858,7 +2856,7 @@ void ScreenEdit::InputPlay( const InputEventPlus &input, EditButton EditB ) case IET_FIRST_PRESS: break; default: - return; + return false; } GameButtonType gbt = GAMESTATE->m_pCurGame->GetPerButtonInfo(input.GameI.button)->m_gbt; @@ -2879,22 +2877,21 @@ void ScreenEdit::InputPlay( const InputEventPlus &input, EditButton EditB ) { switch( gbt ) { - case GameButtonType_INVALID: - break; case GameButtonType_Step: if( iCol != -1 ) m_Player->Step( iCol, -1, input.DeviceI.ts, false, bRelease ); - break; + return true; case GameButtonType_Fret: if( iCol != -1 ) m_Player->Fret( iCol, -1, input.DeviceI.ts, false, bRelease ); - break; + return true; case GameButtonType_Strum: m_Player->Strum( iCol, -1, input.DeviceI.ts, false, bRelease ); + return true; + default: break; } } - break; default: break; } } @@ -2907,7 +2904,7 @@ void ScreenEdit::InputPlay( const InputEventPlus &input, EditButton EditB ) /* When exiting play mode manually, leave the cursor where it is. */ m_fBeatToReturnTo = GetAppropriatePosition().m_fSongBeat; TransitionEditState( STATE_EDITING ); - break; + return true; case EDIT_BUTTON_OFFSET_UP: case EDIT_BUTTON_OFFSET_DOWN: { @@ -2937,10 +2934,11 @@ void ScreenEdit::InputPlay( const InputEventPlus &input, EditButton EditB ) GAMESTATE->m_pCurSong->m_fMusicSampleStartSeconds += fOffsetDelta; } } - break; + return true; default: break; } } + return false; } void ScreenEdit::TransitionEditState( EditState em ) diff --git a/src/ScreenEdit.h b/src/ScreenEdit.h index 5f0a30c930..a7a0b2b01a 100644 --- a/src/ScreenEdit.h +++ b/src/ScreenEdit.h @@ -202,11 +202,11 @@ public: virtual ~ScreenEdit(); virtual void Update( float fDeltaTime ); virtual void DrawPrimitives(); - virtual void Input( const InputEventPlus &input ); - void InputEdit( const InputEventPlus &input, EditButton EditB ); - void InputRecord( const InputEventPlus &input, EditButton EditB ); - void InputRecordPaused( const InputEventPlus &input, EditButton EditB ); - void InputPlay( const InputEventPlus &input, EditButton EditB ); + virtual bool Input( const InputEventPlus &input ); + bool InputEdit( const InputEventPlus &input, EditButton EditB ); + bool InputRecord( const InputEventPlus &input, EditButton EditB ); + bool InputRecordPaused( const InputEventPlus &input, EditButton EditB ); + bool InputPlay( const InputEventPlus &input, EditButton EditB ); virtual void HandleMessage( const Message &msg ); virtual void HandleScreenMessage( const ScreenMessage SM ); diff --git a/src/ScreenEditMenu.cpp b/src/ScreenEditMenu.cpp index e4ef1bdfe4..23111bd833 100644 --- a/src/ScreenEditMenu.cpp +++ b/src/ScreenEditMenu.cpp @@ -100,38 +100,42 @@ void ScreenEditMenu::HandleScreenMessage( const ScreenMessage SM ) ScreenWithMenuElements::HandleScreenMessage( SM ); } -void ScreenEditMenu::MenuUp( const InputEventPlus & ) +bool ScreenEditMenu::MenuUp( const InputEventPlus & ) { if( m_Selector.CanGoUp() ) { m_Selector.Up(); RefreshExplanationText(); } + return true; } -void ScreenEditMenu::MenuDown( const InputEventPlus & ) +bool ScreenEditMenu::MenuDown( const InputEventPlus & ) { if( m_Selector.CanGoDown() ) { m_Selector.Down(); RefreshExplanationText(); } + return true; } -void ScreenEditMenu::MenuLeft( const InputEventPlus & ) +bool ScreenEditMenu::MenuLeft( const InputEventPlus & ) { if( m_Selector.CanGoLeft() ) { m_Selector.Left(); } + return true; } -void ScreenEditMenu::MenuRight( const InputEventPlus & ) +bool ScreenEditMenu::MenuRight( const InputEventPlus & ) { if( m_Selector.CanGoRight() ) { m_Selector.Right(); } + return true; } static RString GetCopyDescription( const Steps *pSourceSteps ) @@ -158,16 +162,16 @@ static LocalizedString STEPS_WILL_BE_LOST ( "ScreenEditMenu", "These steps will static LocalizedString CONTINUE_WITH_DELETE ( "ScreenEditMenu", "Continue with delete?" ); static LocalizedString ENTER_EDIT_DESCRIPTION ( "ScreenEditMenu", "Enter a description for this edit."); -void ScreenEditMenu::MenuStart( const InputEventPlus & ) +bool ScreenEditMenu::MenuStart( const InputEventPlus & ) { if( IsTransitioning() ) - return; + return false; if( m_Selector.CanGoDown() ) { m_Selector.Down(); RefreshExplanationText(); - return; + return true; } Song* pSong = m_Selector.GetSelectedSong(); @@ -188,7 +192,7 @@ void ScreenEditMenu::MenuStart( const InputEventPlus & ) if( !pSong->HasMusic() ) { ScreenPrompt::Prompt( SM_None, MISSING_MUSIC_FILE ); - return; + return true; } switch( m_Selector.EDIT_MODE ) @@ -201,7 +205,7 @@ void ScreenEditMenu::MenuStart( const InputEventPlus & ) if( !file.Open( sTempFile, RageFile::WRITE ) ) { ScreenPrompt::Prompt( SM_None, SONG_DIR_READ_ONLY ); - return; + return true; } file.Close(); @@ -221,7 +225,7 @@ void ScreenEditMenu::MenuStart( const InputEventPlus & ) { SCREENMAN->PlayInvalidSound(); SCREENMAN->SystemMessage( DELETED_AUTOGEN_STEPS.GetValue() ); - return; + return true; } } default: break; @@ -314,17 +318,18 @@ void ScreenEditMenu::MenuStart( const InputEventPlus & ) StartTransitioningScreen( SM_GoToNextScreen ); } } - break; + return true; case EditMenuAction_Delete: - break; + return true; default: FAIL_M(ssprintf("Invalid edit menu action: %i", action)); } } -void ScreenEditMenu::MenuBack( const InputEventPlus &input ) +bool ScreenEditMenu::MenuBack( const InputEventPlus &input ) { Cancel( SM_GoToPrevScreen ); + return true; } void ScreenEditMenu::RefreshExplanationText() diff --git a/src/ScreenEditMenu.h b/src/ScreenEditMenu.h index 5124677022..e95463f488 100644 --- a/src/ScreenEditMenu.h +++ b/src/ScreenEditMenu.h @@ -14,12 +14,12 @@ public: private: - void MenuUp( const InputEventPlus &input ); - void MenuDown( const InputEventPlus &input ); - void MenuLeft( const InputEventPlus &input ); - void MenuRight( const InputEventPlus &input ); - void MenuBack( const InputEventPlus &input ); - void MenuStart( const InputEventPlus &input ); + bool MenuUp( const InputEventPlus &input ); + bool MenuDown( const InputEventPlus &input ); + bool MenuLeft( const InputEventPlus &input ); + bool MenuRight( const InputEventPlus &input ); + bool MenuBack( const InputEventPlus &input ); + bool MenuStart( const InputEventPlus &input ); void RefreshExplanationText(); void RefreshNumStepsLoadedFromProfile(); diff --git a/src/ScreenEnding.cpp b/src/ScreenEnding.cpp index 31b92250f0..7ebcbda425 100644 --- a/src/ScreenEnding.cpp +++ b/src/ScreenEnding.cpp @@ -109,20 +109,22 @@ void ScreenEnding::Init() GAMESTATE->Reset(); } -void ScreenEnding::Input( const InputEventPlus &input ) +bool ScreenEnding::Input( const InputEventPlus &input ) { + bool handled = false; if( !IsTransitioning() ) { switch( input.MenuI ) { case GAME_BUTTON_START: SCREENMAN->PostMessageToTopScreen( SM_BeginFadingOut, 0 ); + handled = true; default: break; } } - ScreenAttract::Input( input ); + return ScreenAttract::Input( input ) || handled; } /* diff --git a/src/ScreenEnding.h b/src/ScreenEnding.h index 1fb6f9b96f..f868542552 100644 --- a/src/ScreenEnding.h +++ b/src/ScreenEnding.h @@ -10,7 +10,7 @@ class ScreenEnding : public ScreenAttract public: ScreenEnding(); virtual void Init(); - virtual void Input( const InputEventPlus &input ); + virtual bool Input( const InputEventPlus &input ); private: Sprite m_sprRemoveMemoryCard[NUM_PLAYERS]; diff --git a/src/ScreenEvaluation.cpp b/src/ScreenEvaluation.cpp index 6ce6976bd3..ed6688c541 100644 --- a/src/ScreenEvaluation.cpp +++ b/src/ScreenEvaluation.cpp @@ -684,10 +684,10 @@ void ScreenEvaluation::Init() } } -void ScreenEvaluation::Input( const InputEventPlus &input ) +bool ScreenEvaluation::Input( const InputEventPlus &input ) { if( IsTransitioning() ) - return; + return false; if( input.GameI.IsValid() ) { @@ -722,12 +722,12 @@ void ScreenEvaluation::Input( const InputEventPlus &input ) MEMCARDMAN->UnmountCard( pn ); m_bSavedScreenshot[pn] = true; - return; // handled + return true; // handled } } } - ScreenWithMenuElements::Input( input ); + return ScreenWithMenuElements::Input( input ); } void ScreenEvaluation::HandleScreenMessage( const ScreenMessage SM ) @@ -740,19 +740,20 @@ void ScreenEvaluation::HandleScreenMessage( const ScreenMessage SM ) ScreenWithMenuElements::HandleScreenMessage( SM ); } -void ScreenEvaluation::MenuBack( const InputEventPlus &input ) +bool ScreenEvaluation::MenuBack( const InputEventPlus &input ) { - MenuStart( input ); + return MenuStart( input ); } -void ScreenEvaluation::MenuStart( const InputEventPlus &input ) +bool ScreenEvaluation::MenuStart( const InputEventPlus &input ) { if( IsTransitioning() ) - return; + return false; m_soundStart.Play(); HandleMenuStart(); + return true; } void ScreenEvaluation::HandleMenuStart() diff --git a/src/ScreenEvaluation.h b/src/ScreenEvaluation.h index 454cb34b75..1fdd3b828a 100644 --- a/src/ScreenEvaluation.h +++ b/src/ScreenEvaluation.h @@ -50,11 +50,11 @@ class ScreenEvaluation : public ScreenWithMenuElements { public: virtual void Init(); - virtual void Input( const InputEventPlus &input ); + virtual bool Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); - virtual void MenuBack( const InputEventPlus &input ); - virtual void MenuStart( const InputEventPlus &input ); + virtual bool MenuBack( const InputEventPlus &input ); + virtual bool MenuStart( const InputEventPlus &input ); virtual void PushSelf( lua_State *L ); StageStats *GetStageStats() { return m_pStageStats; } diff --git a/src/ScreenGameplay.cpp b/src/ScreenGameplay.cpp index b4a1f7f6f8..2db7247365 100644 --- a/src/ScreenGameplay.cpp +++ b/src/ScreenGameplay.cpp @@ -2155,7 +2155,7 @@ void ScreenGameplay::AbortGiveUp( bool bShowText ) } -void ScreenGameplay::Input( const InputEventPlus &input ) +bool ScreenGameplay::Input( const InputEventPlus &input ) { //LOG->Trace( "ScreenGameplay::Input()" ); @@ -2171,10 +2171,14 @@ void ScreenGameplay::Input( const InputEventPlus &input ) if( m_PauseController == GameController_Invalid || m_PauseController == input.GameI.controller ) { // IMO, it's better to have this configurable. -DaisuMaster - if( UNPAUSE_WITH_START ) this->PauseGame( false ); + if( UNPAUSE_WITH_START ) + { + this->PauseGame( false ); + return true; + } } } - return; + return false; } if( m_DancingState != STATE_OUTRO && @@ -2206,7 +2210,7 @@ void ScreenGameplay::Input( const InputEventPlus &input ) m_GiveUpTimer.Touch(); // start the timer } - return; + return true; } /* Only handle GAME_BUTTON_BACK as a regular BACK button if BACK_GIVES_UP is @@ -2236,13 +2240,13 @@ void ScreenGameplay::Input( const InputEventPlus &input ) m_textDebug.PlayCommand( "TweenOff" ); } - return; + return true; } } bool bRelease = input.type == IET_RELEASE; if( !input.GameI.IsValid() ) - return; + return false; int iCol = GAMESTATE->GetCurrentStyle()->GameInputToColumn( input.GameI ); @@ -2253,7 +2257,7 @@ void ScreenGameplay::Input( const InputEventPlus &input ) case IET_RELEASE: break; default: - return; + return false; } if( GAMESTATE->m_bMultiplayer ) @@ -2265,6 +2269,7 @@ void ScreenGameplay::Input( const InputEventPlus &input ) if( input.mp == pi->m_mp ) pi->m_pPlayer->Step( iCol, -1, input.DeviceI.ts, false, bRelease ); } + return true; } } else @@ -2284,22 +2289,23 @@ void ScreenGameplay::Input( const InputEventPlus &input ) switch( gbt ) { case GameButtonType_INVALID: - break; + return false; case GameButtonType_Step: if( iCol != -1 ) pi.m_pPlayer->Step( iCol, -1, input.DeviceI.ts, false, bRelease ); - break; + return true; case GameButtonType_Fret: if( iCol != -1 ) pi.m_pPlayer->Fret( iCol, -1, input.DeviceI.ts, false, bRelease ); - break; + return true; case GameButtonType_Strum: pi.m_pPlayer->Strum( iCol, -1, input.DeviceI.ts, false, bRelease ); - break; + return true; } } } } + return false; } diff --git a/src/ScreenGameplay.h b/src/ScreenGameplay.h index 2027870be6..df3ee5efe8 100644 --- a/src/ScreenGameplay.h +++ b/src/ScreenGameplay.h @@ -147,7 +147,7 @@ public: virtual void BeginScreen(); virtual void Update( float fDeltaTime ); - virtual void Input( const InputEventPlus &input ); + virtual bool Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); virtual void HandleMessage( const Message &msg ); virtual void Cancel( ScreenMessage smSendWhenDone ); diff --git a/src/ScreenGameplayLesson.cpp b/src/ScreenGameplayLesson.cpp index 4a39cf36aa..ab427e009a 100644 --- a/src/ScreenGameplayLesson.cpp +++ b/src/ScreenGameplayLesson.cpp @@ -63,19 +63,19 @@ void ScreenGameplayLesson::Init() pi->GetPlayerState()->m_PlayerController = PC_AUTOPLAY; } -void ScreenGameplayLesson::Input( const InputEventPlus &input ) +bool ScreenGameplayLesson::Input( const InputEventPlus &input ) { //LOG->Trace( "ScreenGameplayLesson::Input()" ); if( m_iCurrentPageIndex != -1 ) { // show a lesson page - Screen::Input( input ); + return Screen::Input( input ); } else { // in the "your turn" section" - ScreenGameplay::Input( input ); + return ScreenGameplay::Input( input ); } } @@ -126,25 +126,27 @@ void ScreenGameplayLesson::HandleScreenMessage( const ScreenMessage SM ) ScreenGameplay::HandleScreenMessage( SM ); } -void ScreenGameplayLesson::MenuStart( const InputEventPlus &input ) +bool ScreenGameplayLesson::MenuStart( const InputEventPlus &input ) { // XXX: Allow repeats? if( m_iCurrentPageIndex == -1 ) - return; + return false; ChangeLessonPage( +1 ); + return true; } -void ScreenGameplayLesson::MenuBack( const InputEventPlus &input ) +bool ScreenGameplayLesson::MenuBack( const InputEventPlus &input ) { // XXX: Allow repeats? if( m_iCurrentPageIndex == 0 ) { BeginBackingOutFromGameplay(); - return; + return true; } if( m_iCurrentPageIndex == -1 ) - return; + return false; ChangeLessonPage( -1 ); + return true; } void ScreenGameplayLesson::ChangeLessonPage( int iDir ) diff --git a/src/ScreenGameplayLesson.h b/src/ScreenGameplayLesson.h index 13f800d9db..201667280b 100644 --- a/src/ScreenGameplayLesson.h +++ b/src/ScreenGameplayLesson.h @@ -11,11 +11,11 @@ public: ScreenGameplayLesson(); virtual void Init(); - virtual void Input( const InputEventPlus &input ); + virtual bool Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); - virtual void MenuStart( const InputEventPlus &input ); - virtual void MenuBack( const InputEventPlus &input ); + virtual bool MenuStart( const InputEventPlus &input ); + virtual bool MenuBack( const InputEventPlus &input ); protected: void ChangeLessonPage( int iDir ); diff --git a/src/ScreenGameplaySyncMachine.cpp b/src/ScreenGameplaySyncMachine.cpp index 3f72cd1976..75679087a4 100644 --- a/src/ScreenGameplaySyncMachine.cpp +++ b/src/ScreenGameplaySyncMachine.cpp @@ -67,7 +67,7 @@ void ScreenGameplaySyncMachine::Update( float fDelta ) RefreshText(); } -void ScreenGameplaySyncMachine::Input( const InputEventPlus &input ) +bool ScreenGameplaySyncMachine::Input( const InputEventPlus &input ) { // Hack to make this work from Player2's controls InputEventPlus _input = input; @@ -77,7 +77,7 @@ void ScreenGameplaySyncMachine::Input( const InputEventPlus &input ) if( _input.pn != PLAYER_INVALID ) _input.pn = PLAYER_1; - ScreenGameplay::Input( _input ); + return ScreenGameplay::Input( _input ); } void ScreenGameplaySyncMachine::HandleScreenMessage( const ScreenMessage SM ) diff --git a/src/ScreenGameplaySyncMachine.h b/src/ScreenGameplaySyncMachine.h index c9be34f40e..a698c18bc0 100644 --- a/src/ScreenGameplaySyncMachine.h +++ b/src/ScreenGameplaySyncMachine.h @@ -10,7 +10,7 @@ public: virtual void Init(); virtual void Update( float fDelta ); - virtual void Input( const InputEventPlus &input ); + virtual bool Input( const InputEventPlus &input ); virtual ScreenType GetScreenType() const { return system_menu; } diff --git a/src/ScreenHighScores.cpp b/src/ScreenHighScores.cpp index 2f42e89d4e..0eb134f199 100644 --- a/src/ScreenHighScores.cpp +++ b/src/ScreenHighScores.cpp @@ -273,17 +273,17 @@ void ScreenHighScores::BeginScreen() } } -void ScreenHighScores::Input( const InputEventPlus &input ) +bool ScreenHighScores::Input( const InputEventPlus &input ) { //LOG->Trace( "ScreenRanking::Input()" ); if( IsTransitioning() ) - return; + return false; // If manually scrolling, pass the input to Screen::Input so it will call Menu* if( (bool)MANUAL_SCROLLING ) - Screen::Input( input ); + return Screen::Input( input ); else - ScreenAttract::Input( input ); + return ScreenAttract::Input( input ); } void ScreenHighScores::HandleScreenMessage( const ScreenMessage SM ) @@ -296,22 +296,24 @@ void ScreenHighScores::HandleScreenMessage( const ScreenMessage SM ) ScreenAttract::HandleScreenMessage( SM ); } -void ScreenHighScores::MenuStart( const InputEventPlus &input ) +bool ScreenHighScores::MenuStart( const InputEventPlus &input ) { if( !MANUAL_SCROLLING ) - return; + return false; if( !IsTransitioning() ) StartTransitioningScreen( SM_GoToNextScreen ); SCREENMAN->PlayStartSound(); + return true; } -void ScreenHighScores::MenuBack( const InputEventPlus &input ) +bool ScreenHighScores::MenuBack( const InputEventPlus &input ) { if( !MANUAL_SCROLLING ) - return; + return false; if( !IsTransitioning() ) StartTransitioningScreen( SM_GoToNextScreen ); SCREENMAN->PlayStartSound(); + return true; } void ScreenHighScores::DoScroll( int iDir ) diff --git a/src/ScreenHighScores.h b/src/ScreenHighScores.h index de7309009d..15c27d0730 100644 --- a/src/ScreenHighScores.h +++ b/src/ScreenHighScores.h @@ -55,13 +55,13 @@ public: virtual void BeginScreen(); void HandleScreenMessage( const ScreenMessage SM ); - virtual void Input( const InputEventPlus &input ); - virtual void MenuStart( const InputEventPlus &input ); - virtual void MenuBack( const InputEventPlus &input ); - virtual void MenuLeft( const InputEventPlus &input ) { DoScroll(-1); } - virtual void MenuRight( const InputEventPlus &input ) { DoScroll(+1); } - virtual void MenuUp( const InputEventPlus &input ) { DoScroll(-1); } - virtual void MenuDown( const InputEventPlus &input ) { DoScroll(+1); } + virtual bool Input( const InputEventPlus &input ); + virtual bool MenuStart( const InputEventPlus &input ); + virtual bool MenuBack( const InputEventPlus &input ); + virtual bool MenuLeft( const InputEventPlus &input ) { DoScroll(-1); return true; } + virtual bool MenuRight( const InputEventPlus &input ) { DoScroll(+1); return true; } + virtual bool MenuUp( const InputEventPlus &input ) { DoScroll(-1); return true; } + virtual bool MenuDown( const InputEventPlus &input ) { DoScroll(+1); return true; } private: void DoScroll( int iDir ); diff --git a/src/ScreenInstructions.cpp b/src/ScreenInstructions.cpp index 1db3676cb9..b1b681d8fd 100644 --- a/src/ScreenInstructions.cpp +++ b/src/ScreenInstructions.cpp @@ -4,23 +4,25 @@ REGISTER_SCREEN_CLASS( ScreenInstructions ); -void ScreenInstructions::Input( const InputEventPlus &input ) +bool ScreenInstructions::Input( const InputEventPlus &input ) { if( IsTransitioning() ) - return; + return false; // default input handler - Screen::Input( input ); + return Screen::Input( input ); } -void ScreenInstructions::MenuBack( const InputEventPlus &input ) +bool ScreenInstructions::MenuBack( const InputEventPlus &input ) { Cancel( SM_GoToPrevScreen ); + return true; } -void ScreenInstructions::MenuStart( const InputEventPlus &input ) +bool ScreenInstructions::MenuStart( const InputEventPlus &input ) { StartTransitioningScreen( SM_GoToNextScreen ); + return true; } /* diff --git a/src/ScreenInstructions.h b/src/ScreenInstructions.h index 102c80801f..2afc63d1b3 100644 --- a/src/ScreenInstructions.h +++ b/src/ScreenInstructions.h @@ -6,10 +6,10 @@ class ScreenInstructions : public ScreenWithMenuElements { public: - virtual void Input( const InputEventPlus &input ); + virtual bool Input( const InputEventPlus &input ); - virtual void MenuBack( const InputEventPlus &input ); - virtual void MenuStart( const InputEventPlus &input ); + virtual bool MenuBack( const InputEventPlus &input ); + virtual bool MenuStart( const InputEventPlus &input ); }; diff --git a/src/ScreenJukebox.cpp b/src/ScreenJukebox.cpp index 52c9c2f278..9c12a40642 100644 --- a/src/ScreenJukebox.cpp +++ b/src/ScreenJukebox.cpp @@ -239,24 +239,24 @@ void ScreenJukebox::Init() m_DancingState = STATE_DANCING; } -void ScreenJukebox::Input( const InputEventPlus &input ) +bool ScreenJukebox::Input( const InputEventPlus &input ) { //LOG->Trace( "ScreenJukebox::Input()" ); if( input.type != IET_FIRST_PRESS ) - return; // ignore + return false; // ignore switch( input.MenuI ) { case GAME_BUTTON_LEFT: case GAME_BUTTON_RIGHT: SCREENMAN->PostMessageToTopScreen( SM_NotesEnded, 0 ); - return; + return true; default: break; } - ScreenAttract::AttractInput( input, this ); + return ScreenAttract::AttractInput( input, this ); } void ScreenJukebox::HandleScreenMessage( const ScreenMessage SM ) diff --git a/src/ScreenJukebox.h b/src/ScreenJukebox.h index a822525b09..328c41a2d4 100644 --- a/src/ScreenJukebox.h +++ b/src/ScreenJukebox.h @@ -11,7 +11,7 @@ public: ScreenJukebox(); virtual void Init(); - virtual void Input( const InputEventPlus &input ); + virtual bool Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); void SetSong(); diff --git a/src/ScreenMapControllers.cpp b/src/ScreenMapControllers.cpp index ca5fa7cbed..ed9fe0965a 100644 --- a/src/ScreenMapControllers.cpp +++ b/src/ScreenMapControllers.cpp @@ -228,20 +228,21 @@ static bool IsAxis( const DeviceInput& DeviceI ) return false; } -void ScreenMapControllers::Input( const InputEventPlus &input ) +bool ScreenMapControllers::Input( const InputEventPlus &input ) { if( m_fLockInputSecs > 0 ) - return; + return false; if( input.type != IET_FIRST_PRESS && input.type != IET_REPEAT ) - return; // ignore + return false; // ignore if( IsTransitioning() ) - return; // ignore + return false; // ignore LOG->Trace( "ScreenMapControllers::Input(): device: %d, button: %d", input.DeviceI.device, input.DeviceI.button ); int button = input.DeviceI.button; + bool bHandled = false; /* TRICKY: Some adapters map the PlayStation digital d-pad to both axes and * buttons. We want buttons to be used for any mappings where possible @@ -253,7 +254,7 @@ void ScreenMapControllers::Input( const InputEventPlus &input ) if( !m_WaitingForPress.IsZero() ) { if( input.type != IET_FIRST_PRESS ) - return; + return false; // Don't allow function keys to be mapped. if( input.DeviceI.device == DEVICE_KEYBOARD && (input.DeviceI.button >= KEY_F1 && input.DeviceI.button <= KEY_F12) ) @@ -268,7 +269,7 @@ void ScreenMapControllers::Input( const InputEventPlus &input ) IsAxis(input.DeviceI) ) { LOG->Trace("Ignored input; non-axis event already received"); - return; // ignore this press + return false; // ignore this press } m_DeviceIToMap = input.DeviceI; @@ -304,6 +305,7 @@ void ScreenMapControllers::Input( const InputEventPlus &input ) // commit to disk after each change INPUTMAPPER->SaveMappingsToDisk(); + bHandled = true; } break; case KEY_LEFT: // Move the selection left, wrapping up. @@ -320,6 +322,7 @@ void ScreenMapControllers::Input( const InputEventPlus &input ) } AfterChangeFocus(); m_soundChange.Play(); + bHandled = true; break; case KEY_RIGHT: // Move the selection right, wrapping down. if( m_iCurButton == (int) m_KeysToMap.size() ) @@ -335,6 +338,7 @@ void ScreenMapControllers::Input( const InputEventPlus &input ) } AfterChangeFocus(); m_soundChange.Play(); + bHandled = true; break; case KEY_UP: // Move the selection up. if( m_iCurButton == 0 ) @@ -343,6 +347,7 @@ void ScreenMapControllers::Input( const InputEventPlus &input ) m_iCurButton--; AfterChangeFocus(); m_soundChange.Play(); + bHandled = true; break; case KEY_DOWN: // Move the selection down. if( m_iCurButton == (int) m_KeysToMap.size() ) @@ -351,10 +356,12 @@ void ScreenMapControllers::Input( const InputEventPlus &input ) m_iCurButton++; AfterChangeFocus(); m_soundChange.Play(); + bHandled = true; break; case KEY_ESC: // Quit the screen. SCREENMAN->PlayStartSound(); StartTransitioningScreen( SM_GoToNextScreen ); + bHandled = true; break; case KEY_ENTER: // Change the selection. case KEY_KP_ENTER: @@ -373,6 +380,7 @@ void ScreenMapControllers::Input( const InputEventPlus &input ) m_WaitingForPress.Touch(); m_DeviceIToMap.MakeInvalid(); SCREENMAN->PlayStartSound(); + bHandled = true; break; } } @@ -382,6 +390,7 @@ void ScreenMapControllers::Input( const InputEventPlus &input ) LOG->Trace( "m_iCurSlot: %d m_iCurController: %d m_iCurButton: %d", m_iCurSlot, m_iCurController, m_iCurButton ); Refresh(); + return bHandled; } Actor *ScreenMapControllers::GetActorWithFocus() diff --git a/src/ScreenMapControllers.h b/src/ScreenMapControllers.h index 6b7fbc7cfb..5b36e933fe 100644 --- a/src/ScreenMapControllers.h +++ b/src/ScreenMapControllers.h @@ -17,7 +17,7 @@ public: virtual void BeginScreen(); virtual void Update( float fDeltaTime ); - virtual void Input( const InputEventPlus &input ); + virtual bool Input( const InputEventPlus &input ); private: virtual void HandleMessage( const Message &msg ); diff --git a/src/ScreenMapControllers2.h b/src/ScreenMapControllers2.h index 463a8deced..87c76a1c74 100644 --- a/src/ScreenMapControllers2.h +++ b/src/ScreenMapControllers2.h @@ -37,11 +37,11 @@ public: //virtual void EndScreen(); virtual void Update( float fDeltaTime ); - virtual void Input( const InputEventPlus &input ); + virtual bool Input( const InputEventPlus &input ); - virtual void MenuUp( const InputEventPlus &input ); - virtual void MenuDown( const InputEventPlus &input ); - virtual void MenuStart( const InputEventPlus &input ); + virtual bool MenuUp( const InputEventPlus &input ); + virtual bool MenuDown( const InputEventPlus &input ); + virtual bool MenuStart( const InputEventPlus &input ); virtual void TweenOnScreen(); MapControlsState GetMapControlsState(){ return m_MapControlsState; } diff --git a/src/ScreenNameEntry.cpp b/src/ScreenNameEntry.cpp index 8a3781b62d..0df36d4440 100644 --- a/src/ScreenNameEntry.cpp +++ b/src/ScreenNameEntry.cpp @@ -330,15 +330,16 @@ void ScreenNameEntry::Update( float fDelta ) ScreenWithMenuElements::Update(fDelta); } -void ScreenNameEntry::Input( const InputEventPlus &input ) +bool ScreenNameEntry::Input( const InputEventPlus &input ) { if( IsTransitioning() ) - return; + return false; if( input.type != IET_FIRST_PRESS || !input.GameI.IsValid() ) - return; // ignore + return false; // ignore const int iCol = GAMESTATE->GetCurrentStyle()->GameInputToColumn( input.GameI ); + bool bHandled = false; if( iCol != Column_Invalid && m_bStillEnteringName[input.pn] ) { int iStringIndex = m_ColToStringIndex[input.pn][iCol]; @@ -350,9 +351,10 @@ void ScreenNameEntry::Input( const InputEventPlus &input ) m_textSelectedChars[input.pn][iCol].SetText( RString(1, c) ); m_sSelectedName[input.pn][iStringIndex] = c; } + bHandled = true; } - ScreenWithMenuElements::Input( input ); + return ScreenWithMenuElements::Input( input ) || bHandled; } void ScreenNameEntry::HandleScreenMessage( const ScreenMessage SM ) @@ -374,12 +376,12 @@ void ScreenNameEntry::HandleScreenMessage( const ScreenMessage SM ) } -void ScreenNameEntry::MenuStart( const InputEventPlus &input ) +bool ScreenNameEntry::MenuStart( const InputEventPlus &input ) { PlayerNumber pn = input.pn; if( !m_bStillEnteringName[pn] ) - return; + return false; m_bStillEnteringName[pn] = false; m_Text[pn].SetDone(); @@ -395,6 +397,7 @@ void ScreenNameEntry::MenuStart( const InputEventPlus &input ) if( !AnyStillEntering() && !m_Out.IsTransitioning() ) StartTransitioningScreen( SM_GoToNextScreen ); + return true; } /* diff --git a/src/ScreenNameEntry.h b/src/ScreenNameEntry.h index efe71dd183..53ef34a102 100644 --- a/src/ScreenNameEntry.h +++ b/src/ScreenNameEntry.h @@ -13,10 +13,10 @@ public: ScreenNameEntry(); virtual void Init(); virtual void Update( float fDeltaTime ); - virtual void Input( const InputEventPlus &input ); + virtual bool Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); - virtual void MenuStart( const InputEventPlus &input ); + virtual bool MenuStart( const InputEventPlus &input ); private: class ScrollingText : public Actor { diff --git a/src/ScreenNameEntryTraditional.cpp b/src/ScreenNameEntryTraditional.cpp index a7e068fa5a..8cd96a60d8 100644 --- a/src/ScreenNameEntryTraditional.cpp +++ b/src/ScreenNameEntryTraditional.cpp @@ -139,12 +139,12 @@ bool ScreenNameEntryTraditional::AnyEntering() const return false; } -void ScreenNameEntryTraditional::Input( const InputEventPlus &input ) +bool ScreenNameEntryTraditional::Input( const InputEventPlus &input ) { if( IsTransitioning() ) - return; + return false; - ScreenWithMenuElements::Input( input ); + return ScreenWithMenuElements::Input( input ); } bool ScreenNameEntryTraditional::Finish( PlayerNumber pn ) diff --git a/src/ScreenNameEntryTraditional.h b/src/ScreenNameEntryTraditional.h index efd9b13dac..526543ea34 100644 --- a/src/ScreenNameEntryTraditional.h +++ b/src/ScreenNameEntryTraditional.h @@ -13,7 +13,7 @@ public: virtual void BeginScreen(); virtual void HandleScreenMessage( const ScreenMessage SM ); - virtual void Input( const InputEventPlus &input ); + virtual bool Input( const InputEventPlus &input ); bool EnterKey( PlayerNumber pn, wchar_t sLetter ); bool Backspace( PlayerNumber pn ); diff --git a/src/ScreenNetEvaluation.cpp b/src/ScreenNetEvaluation.cpp index b2639771c5..9d6cd6bc2d 100644 --- a/src/ScreenNetEvaluation.cpp +++ b/src/ScreenNetEvaluation.cpp @@ -88,36 +88,38 @@ void ScreenNetEvaluation::RedoUserTexts() } } -void ScreenNetEvaluation::MenuLeft( const InputEventPlus &input ) +bool ScreenNetEvaluation::MenuLeft( const InputEventPlus &input ) { - MenuUp( input ); + return MenuUp( input ); } -void ScreenNetEvaluation::MenuUp( const InputEventPlus &input ) +bool ScreenNetEvaluation::MenuUp( const InputEventPlus &input ) { if( m_iActivePlayers == 0 || !m_bHasStats ) - return; + return false; COMMAND( m_textUsers[m_iCurrentPlayer], "DeSel" ); m_iCurrentPlayer = (m_iCurrentPlayer + m_iActivePlayers - 1) % m_iActivePlayers; COMMAND( m_textUsers[m_iCurrentPlayer], "Sel" ); UpdateStats(); + return true; } -void ScreenNetEvaluation::MenuRight( const InputEventPlus &input ) +bool ScreenNetEvaluation::MenuRight( const InputEventPlus &input ) { - MenuDown( input ); + return MenuDown( input ); } -void ScreenNetEvaluation::MenuDown( const InputEventPlus &input ) +bool ScreenNetEvaluation::MenuDown( const InputEventPlus &input ) { if ( m_iActivePlayers == 0 || !m_bHasStats ) - return; + return false; COMMAND( m_textUsers[m_iCurrentPlayer], "DeSel" ); m_iCurrentPlayer = (m_iCurrentPlayer + 1) % m_iActivePlayers; COMMAND( m_textUsers[m_iCurrentPlayer], "Sel" ); UpdateStats(); + return true; } void ScreenNetEvaluation::HandleScreenMessage( const ScreenMessage SM ) diff --git a/src/ScreenNetEvaluation.h b/src/ScreenNetEvaluation.h index f8f941c862..202b8c3058 100644 --- a/src/ScreenNetEvaluation.h +++ b/src/ScreenNetEvaluation.h @@ -18,10 +18,10 @@ public: virtual void PushSelf( lua_State *L ); protected: - virtual void MenuLeft( const InputEventPlus &input ); - virtual void MenuUp( const InputEventPlus &input ); - virtual void MenuRight( const InputEventPlus &input ); - virtual void MenuDown( const InputEventPlus &input ); + virtual bool MenuLeft( const InputEventPlus &input ); + virtual bool MenuUp( const InputEventPlus &input ); + virtual bool MenuRight( const InputEventPlus &input ); + virtual bool MenuDown( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); virtual void TweenOffScreen( ); diff --git a/src/ScreenNetRoom.cpp b/src/ScreenNetRoom.cpp index 35c8121ab3..792d9ed7af 100644 --- a/src/ScreenNetRoom.cpp +++ b/src/ScreenNetRoom.cpp @@ -52,12 +52,12 @@ void ScreenNetRoom::Init() NSMAN->ReportNSSOnOff( 7 ); } -void ScreenNetRoom::Input( const InputEventPlus &input ) +bool ScreenNetRoom::Input( const InputEventPlus &input ) { if( (input.MenuI == GAME_BUTTON_LEFT || input.MenuI == GAME_BUTTON_RIGHT) && input.type == IET_RELEASE ) m_RoomWheel.Move( 0 ); - ScreenNetSelectBase::Input( input ); + return ScreenNetSelectBase::Input( input ); } void ScreenNetRoom::HandleScreenMessage( const ScreenMessage SM ) @@ -191,7 +191,7 @@ void ScreenNetRoom::TweenOffScreen() NSMAN->ReportNSSOnOff( 6 ); } -void ScreenNetRoom::MenuStart( const InputEventPlus &input ) +bool ScreenNetRoom::MenuStart( const InputEventPlus &input ) { m_RoomWheel.Select(); RoomWheelItemData* rwd = dynamic_cast( m_RoomWheel.LastSelected() ); @@ -212,31 +212,41 @@ void ScreenNetRoom::MenuStart( const InputEventPlus &input ) } } ScreenNetSelectBase::MenuStart( input ); + return true; } -void ScreenNetRoom::MenuBack( const InputEventPlus &input ) +bool ScreenNetRoom::MenuBack( const InputEventPlus &input ) { TweenOffScreen(); Cancel( SM_GoToPrevScreen ); ScreenNetSelectBase::MenuBack( input ); + return true; } -void ScreenNetRoom::MenuLeft( const InputEventPlus &input ) +bool ScreenNetRoom::MenuLeft( const InputEventPlus &input ) { + bool bHandled = false; if( input.type == IET_FIRST_PRESS ) + { m_RoomWheel.Move( -1 ); + bHandled = true; + } - ScreenNetSelectBase::MenuLeft( input ); + return ScreenNetSelectBase::MenuLeft( input ) || bHandled; } -void ScreenNetRoom::MenuRight( const InputEventPlus &input ) +bool ScreenNetRoom::MenuRight( const InputEventPlus &input ) { + bool bHandled = false; if( input.type == IET_FIRST_PRESS ) + { m_RoomWheel.Move( 1 ); + bHandled = true; + } - ScreenNetSelectBase::MenuRight( input ); + return ScreenNetSelectBase::MenuRight( input ) || bHandled; } void ScreenNetRoom::UpdateRoomsList() diff --git a/src/ScreenNetRoom.h b/src/ScreenNetRoom.h index 7a412922b0..dde4704ad8 100644 --- a/src/ScreenNetRoom.h +++ b/src/ScreenNetRoom.h @@ -30,19 +30,19 @@ class ScreenNetRoom : public ScreenNetSelectBase { public: virtual void Init(); - virtual void Input( const InputEventPlus &input ); + virtual bool Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); protected: - virtual void MenuStart( const InputEventPlus &input ); - virtual void MenuBack( const InputEventPlus &input ); + virtual bool MenuStart( const InputEventPlus &input ); + virtual bool MenuBack( const InputEventPlus &input ); virtual void TweenOffScreen( ); private: void UpdateRoomsList(); - void MenuLeft( const InputEventPlus &input ); - void MenuRight( const InputEventPlus &input ); + bool MenuLeft( const InputEventPlus &input ); + bool MenuRight( const InputEventPlus &input ); void CreateNewRoom( const RString& rName, const RString& rDesc, const RString& rPass ); RageSound m_soundChangeSel; diff --git a/src/ScreenNetSelectBase.cpp b/src/ScreenNetSelectBase.cpp index bbb169a741..509f3dc38c 100644 --- a/src/ScreenNetSelectBase.cpp +++ b/src/ScreenNetSelectBase.cpp @@ -68,13 +68,13 @@ void ScreenNetSelectBase::Init() return; } -void ScreenNetSelectBase::Input( const InputEventPlus &input ) +bool ScreenNetSelectBase::Input( const InputEventPlus &input ) { if( m_In.IsTransitioning() || m_Out.IsTransitioning() ) - return; + return false; if( input.type != IET_FIRST_PRESS && input.type != IET_REPEAT ) - return; + return false; bool bHoldingCtrl = INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_LCTRL)) || @@ -91,7 +91,7 @@ void ScreenNetSelectBase::Input( const InputEventPlus &input ) NSMAN->SendChat( m_sTextInput ); m_sTextInput=""; UpdateTextInput(); - return; + return true; } break; case KEY_BACK: @@ -116,10 +116,10 @@ void ScreenNetSelectBase::Input( const InputEventPlus &input ) break; if( c >= ' ' ) - return; + return true; break; } - Screen::Input( input ); + return Screen::Input( input ); } void ScreenNetSelectBase::HandleScreenMessage( const ScreenMessage SM ) diff --git a/src/ScreenNetSelectBase.h b/src/ScreenNetSelectBase.h index 9bb7a943e2..cb7156d36a 100644 --- a/src/ScreenNetSelectBase.h +++ b/src/ScreenNetSelectBase.h @@ -33,7 +33,7 @@ class ScreenNetSelectBase : public ScreenWithMenuElements public: virtual void Init(); - void Input( const InputEventPlus &input ); + bool Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); virtual void TweenOffScreen(); diff --git a/src/ScreenNetSelectMusic.cpp b/src/ScreenNetSelectMusic.cpp index 3089a17eb3..0ea1c3c2d5 100644 --- a/src/ScreenNetSelectMusic.cpp +++ b/src/ScreenNetSelectMusic.cpp @@ -90,19 +90,19 @@ void ScreenNetSelectMusic::Init() m_bAllowInput = false; } -void ScreenNetSelectMusic::Input( const InputEventPlus &input ) +bool ScreenNetSelectMusic::Input( const InputEventPlus &input ) { if( !m_bAllowInput || IsTransitioning() ) - return; + return false; if( input.type == IET_RELEASE ) { m_MusicWheel.Move(0); - return; + return true; } if( input.type != IET_FIRST_PRESS && input.type != IET_REPEAT ) - return; + return false; bool bHoldingCtrl = INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_LCTRL)) || @@ -113,6 +113,7 @@ void ScreenNetSelectMusic::Input( const InputEventPlus &input ) MakeUpper( &c, 1 ); // Ctrl+[A-Z] to go to that letter of the alphabet + bool handled = false; if( bHoldingCtrl && ( c >= 'A' ) && ( c <= 'Z' ) ) { SortOrder so = GAMESTATE->m_SortOrder; @@ -130,9 +131,10 @@ void ScreenNetSelectMusic::Input( const InputEventPlus &input ) m_MusicWheel.ChangeSort( so ); m_MusicWheel.SetOpenSection( ssprintf("%c", c ) ); m_MusicWheel.Move(+1); + handled = true; } - ScreenNetSelectBase::Input( input ); + return ScreenNetSelectBase::Input( input ) || handled; } void ScreenNetSelectMusic::HandleScreenMessage( const ScreenMessage SM ) @@ -301,7 +303,7 @@ bool ScreenNetSelectMusic::LeftAndRightPressed( const PlayerNumber pn ) && INPUTMAPPER->IsBeingPressed( GAME_BUTTON_RIGHT, pn ); } -void ScreenNetSelectMusic::MenuLeft( const InputEventPlus &input ) +bool ScreenNetSelectMusic::MenuLeft( const InputEventPlus &input ) { PlayerNumber pn = input.pn; @@ -309,9 +311,10 @@ void ScreenNetSelectMusic::MenuLeft( const InputEventPlus &input ) m_MusicWheel.ChangeSort( SORT_MODE_MENU ); else m_MusicWheel.Move( -1 ); + return true; } -void ScreenNetSelectMusic::MenuRight( const InputEventPlus &input ) +bool ScreenNetSelectMusic::MenuRight( const InputEventPlus &input ) { PlayerNumber pn = input.pn; @@ -319,16 +322,18 @@ void ScreenNetSelectMusic::MenuRight( const InputEventPlus &input ) m_MusicWheel.ChangeSort( SORT_MODE_MENU ); else m_MusicWheel.Move( +1 ); + return true; } -void ScreenNetSelectMusic::MenuUp( const InputEventPlus &input ) +bool ScreenNetSelectMusic::MenuUp( const InputEventPlus &input ) { NSMAN->ReportNSSOnOff(3); GAMESTATE->m_EditMode = EditMode_Full; SCREENMAN->AddNewScreenToTop( PLAYER_OPTIONS_SCREEN, SM_BackFromPlayerOptions ); + return true; } -void ScreenNetSelectMusic::MenuDown( const InputEventPlus &input ) +bool ScreenNetSelectMusic::MenuDown( const InputEventPlus &input ) { /* Tricky: If we have a player on player 2, and there is only player 2, * allow them to use player 1's controls to change their difficulty. */ @@ -341,7 +346,7 @@ void ScreenNetSelectMusic::MenuDown( const InputEventPlus &input ) pn = PLAYER_2; if( GAMESTATE->m_pCurSong == NULL ) - return; + return false; StepsType st = GAMESTATE->GetCurrentStyle()->m_StepsType; vector MultiSteps; MultiSteps = GAMESTATE->m_pCurSong->GetStepsByStepsType( st ); @@ -383,22 +388,23 @@ void ScreenNetSelectMusic::MenuDown( const InputEventPlus &input ) } UpdateDifficulties( pn ); GAMESTATE->m_PreferredDifficulty[pn].Set( m_DC[pn] ); + return true; } -void ScreenNetSelectMusic::MenuStart( const InputEventPlus &input ) +bool ScreenNetSelectMusic::MenuStart( const InputEventPlus &input ) { bool bResult = m_MusicWheel.Select(); if( !bResult ) - return; + return true; if( m_MusicWheel.GetSelectedType() != WheelItemDataType_Song ) - return; + return true; Song * pSong = m_MusicWheel.GetSelectedSong(); if( pSong == NULL ) - return; + return false; GAMESTATE->m_pCurSong.Set( pSong ); @@ -412,14 +418,16 @@ void ScreenNetSelectMusic::MenuStart( const InputEventPlus &input ) } else StartSelectedSong(); + return true; } -void ScreenNetSelectMusic::MenuBack( const InputEventPlus &input ) +bool ScreenNetSelectMusic::MenuBack( const InputEventPlus &input ) { SOUND->StopMusic(); TweenOffScreen(); Cancel( SM_GoToPrevScreen ); + return true; } void ScreenNetSelectMusic::TweenOffScreen() diff --git a/src/ScreenNetSelectMusic.h b/src/ScreenNetSelectMusic.h index dbf06c2fe3..9df5519f2e 100644 --- a/src/ScreenNetSelectMusic.h +++ b/src/ScreenNetSelectMusic.h @@ -18,18 +18,18 @@ class ScreenNetSelectMusic : public ScreenNetSelectBase public: virtual void Init(); - virtual void Input( const InputEventPlus &input ); + virtual bool Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); void StartSelectedSong(); protected: - virtual void MenuStart( const InputEventPlus &input ); - virtual void MenuBack( const InputEventPlus &input ); - virtual void MenuLeft( const InputEventPlus &input ); - virtual void MenuRight( const InputEventPlus &input ); - virtual void MenuUp( const InputEventPlus &input ); - virtual void MenuDown( const InputEventPlus &input ); + virtual bool MenuStart( const InputEventPlus &input ); + virtual bool MenuBack( const InputEventPlus &input ); + virtual bool MenuLeft( const InputEventPlus &input ); + virtual bool MenuRight( const InputEventPlus &input ); + virtual bool MenuUp( const InputEventPlus &input ); + virtual bool MenuDown( const InputEventPlus &input ); bool LeftAndRightPressed( const PlayerNumber pn ); virtual void Update( float fDeltaTime ); diff --git a/src/ScreenNetworkOptions.cpp b/src/ScreenNetworkOptions.cpp index 63600603fe..5b8b26aa62 100644 --- a/src/ScreenNetworkOptions.cpp +++ b/src/ScreenNetworkOptions.cpp @@ -107,7 +107,7 @@ void ScreenNetworkOptions::HandleScreenMessage( const ScreenMessage SM ) ScreenOptions::HandleScreenMessage( SM ); } -void ScreenNetworkOptions::MenuStart( const InputEventPlus &input ) +bool ScreenNetworkOptions::MenuStart( const InputEventPlus &input ) { switch( GetCurrentRow() ) { @@ -122,13 +122,13 @@ void ScreenNetworkOptions::MenuStart( const InputEventPlus &input ) SCREENMAN->SystemMessage( DISCONNECTED ); UpdateConnectStatus( ); } - break; + return true; case PO_SCOREBOARD: if (m_pRows[PO_SCOREBOARD]->GetOneSharedSelection() == NO_SCOREBOARD_ON) PREFSMAN->m_bEnableScoreboard.Set(true); else PREFSMAN->m_bEnableScoreboard.Set(false); - break; + return true; /* case NetworkOptionRow::PO_SERVERS: if ( !AllServers.empty() ) @@ -143,10 +143,10 @@ void ScreenNetworkOptions::MenuStart( const InputEventPlus &input ) //If the server list is empty, keep passing the message on so exit works ScreenOptions::MenuStart( input ); } - break; + return true; */ default: - ScreenOptions::MenuStart( input ); + return ScreenOptions::MenuStart( input ); } } diff --git a/src/ScreenNetworkOptions.h b/src/ScreenNetworkOptions.h index fd21e0c93f..a9ddefd93d 100644 --- a/src/ScreenNetworkOptions.h +++ b/src/ScreenNetworkOptions.h @@ -10,7 +10,7 @@ public: virtual void HandleScreenMessage( const ScreenMessage SM ); - virtual void MenuStart( const InputEventPlus &input ); + virtual bool MenuStart( const InputEventPlus &input ); private: void ImportOptions( int iRow, const vector &vpns ); diff --git a/src/ScreenOptions.cpp b/src/ScreenOptions.cpp index 457c5454b2..eb59b039d5 100644 --- a/src/ScreenOptions.cpp +++ b/src/ScreenOptions.cpp @@ -492,7 +492,7 @@ void ScreenOptions::Update( float fDeltaTime ) ScreenWithMenuElements::Update( fDeltaTime ); } -void ScreenOptions::Input( const InputEventPlus &input ) +bool ScreenOptions::Input( const InputEventPlus &input ) { // HACK: This screen eats mouse inputs if we don't check for them first. bool mouse_evt = false; @@ -503,17 +503,16 @@ void ScreenOptions::Input( const InputEventPlus &input ) } if (mouse_evt) { - ScreenWithMenuElements::Input(input); - return; + return ScreenWithMenuElements::Input(input); } /* Allow input when transitioning in (m_In.IsTransitioning()), but ignore it * when we're transitioning out. */ if( m_Cancel.IsTransitioning() || m_Out.IsTransitioning() || m_fLockInputSecs > 0 ) - return; + return false; if( !GAMESTATE->IsHumanPlayer(input.pn) ) - return; + return false; if( input.type == IET_RELEASE ) { @@ -532,7 +531,7 @@ void ScreenOptions::Input( const InputEventPlus &input ) } // default input handler - Screen::Input( input ); + return Screen::Input( input ); } void ScreenOptions::HandleScreenMessage( const ScreenMessage SM ) @@ -766,9 +765,10 @@ void ScreenOptions::AfterChangeValueOrRow( PlayerNumber pn ) } -void ScreenOptions::MenuBack( const InputEventPlus & ) +bool ScreenOptions::MenuBack( const InputEventPlus & ) { Cancel( SM_GoToPrevScreen ); + return true; } bool ScreenOptions::AllAreOnLastRow() const @@ -781,7 +781,7 @@ bool ScreenOptions::AllAreOnLastRow() const return true; } -void ScreenOptions::MenuStart( const InputEventPlus &input ) +bool ScreenOptions::MenuStart( const InputEventPlus &input ) { PlayerNumber pn = input.pn; switch( input.type ) @@ -790,10 +790,10 @@ void ScreenOptions::MenuStart( const InputEventPlus &input ) m_bGotAtLeastOneStartPressed[pn] = true; break; case IET_RELEASE: - return; // ignore + return false; // ignore default: // repeat type if( !m_bGotAtLeastOneStartPressed[pn] ) - return; // don't allow repeat + return false; // don't allow repeat break; } @@ -811,13 +811,14 @@ void ScreenOptions::MenuStart( const InputEventPlus &input ) { if( MoveRowRelative(pn, -1, input.type != IET_FIRST_PRESS) ) m_SoundPrevRow.Play(); - return; + return true; } } default: break; } this->ProcessMenuStart( input ); + return true; } void ScreenOptions::ProcessMenuStart( const InputEventPlus &input ) @@ -1244,7 +1245,7 @@ bool ScreenOptions::MoveRowAbsolute( PlayerNumber pn, int iRow ) return bChanged; } -void ScreenOptions::MenuLeft( const InputEventPlus &input ) +bool ScreenOptions::MenuLeft( const InputEventPlus &input ) { if( m_OptionsNavigation == NAV_THREE_KEY_ALT ) MenuUpDown( input, -1 ); @@ -1253,9 +1254,10 @@ void ScreenOptions::MenuLeft( const InputEventPlus &input ) PlayerNumber pn = input.pn; MESSAGEMAN->Broadcast( (MessageID)(Message_MenuLeftP1+pn) ); + return true; } -void ScreenOptions::MenuRight( const InputEventPlus &input ) +bool ScreenOptions::MenuRight( const InputEventPlus &input ) { if( m_OptionsNavigation == NAV_THREE_KEY_ALT ) MenuUpDown( input, +1 ); @@ -1264,25 +1266,29 @@ void ScreenOptions::MenuRight( const InputEventPlus &input ) PlayerNumber pn = input.pn; MESSAGEMAN->Broadcast( (MessageID)(Message_MenuRightP1+pn) ); + return true; } -void ScreenOptions::MenuUp( const InputEventPlus &input ) +bool ScreenOptions::MenuUp( const InputEventPlus &input ) { MenuUpDown( input, -1 ); PlayerNumber pn = input.pn; MESSAGEMAN->Broadcast( (MessageID)(Message_MenuUpP1+pn) ); + return true; } -void ScreenOptions::MenuDown( const InputEventPlus &input ) +bool ScreenOptions::MenuDown( const InputEventPlus &input ) { MenuUpDown( input, +1 ); PlayerNumber pn = input.pn; MESSAGEMAN->Broadcast( (MessageID)(Message_MenuDownP1+pn) ); + return true; } -void ScreenOptions::MenuSelect( const InputEventPlus &input ) +bool ScreenOptions::MenuSelect( const InputEventPlus &input ) { MenuUpDown( input, -1 ); + return true; } void ScreenOptions::MenuUpDown( const InputEventPlus &input, int iDir ) diff --git a/src/ScreenOptions.h b/src/ScreenOptions.h index 784181a54e..d419103c79 100644 --- a/src/ScreenOptions.h +++ b/src/ScreenOptions.h @@ -40,7 +40,7 @@ public: void InitMenu( const vector &vHands ); virtual ~ScreenOptions(); virtual void Update( float fDeltaTime ); - virtual void Input( const InputEventPlus &input ); + virtual bool Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); virtual void TweenOnScreen(); @@ -84,14 +84,14 @@ protected: virtual void AfterChangeRow( PlayerNumber pn ); virtual void AfterChangeValueOrRow( PlayerNumber pn ); - virtual void MenuBack( const InputEventPlus &input ); - virtual void MenuStart( const InputEventPlus &input ); + virtual bool MenuBack( const InputEventPlus &input ); + virtual bool MenuStart( const InputEventPlus &input ); virtual void ProcessMenuStart( const InputEventPlus &input ); - virtual void MenuLeft( const InputEventPlus &input ); - virtual void MenuRight( const InputEventPlus &input ); - virtual void MenuUp( const InputEventPlus &input ); - virtual void MenuDown( const InputEventPlus &input ); - virtual void MenuSelect( const InputEventPlus &input ); + virtual bool MenuLeft( const InputEventPlus &input ); + virtual bool MenuRight( const InputEventPlus &input ); + virtual bool MenuUp( const InputEventPlus &input ); + virtual bool MenuDown( const InputEventPlus &input ); + virtual bool MenuSelect( const InputEventPlus &input ); virtual void MenuUpDown( const InputEventPlus &input, int iDir ); // iDir == -1 or iDir == +1 int GetCurrentRow( PlayerNumber pn = PLAYER_1 ) const { return m_iCurrentRow[pn]; } diff --git a/src/ScreenOptionsManageCourses.cpp b/src/ScreenOptionsManageCourses.cpp index dc6431a6c4..96065642c2 100644 --- a/src/ScreenOptionsManageCourses.cpp +++ b/src/ScreenOptionsManageCourses.cpp @@ -203,12 +203,13 @@ void ScreenOptionsManageCourses::AfterChangeRow( PlayerNumber pn ) ScreenOptions::AfterChangeRow( pn ); } -void ScreenOptionsManageCourses::MenuSelect( const InputEventPlus &input ) +bool ScreenOptionsManageCourses::MenuSelect( const InputEventPlus &input ) { if( input.type != IET_FIRST_PRESS ) - return; + return false; SetNextCombination(); m_soundDifficultyChanged.Play(); + return true; } static LocalizedString YOU_HAVE_MAX( "ScreenOptionsManageCourses", "You have %d, the maximum number allowed." ); diff --git a/src/ScreenOptionsManageCourses.h b/src/ScreenOptionsManageCourses.h index e16cc19904..3db071997a 100644 --- a/src/ScreenOptionsManageCourses.h +++ b/src/ScreenOptionsManageCourses.h @@ -13,7 +13,7 @@ public: void Init(); virtual void BeginScreen(); virtual void HandleScreenMessage( const ScreenMessage SM ); - virtual void MenuSelect( const InputEventPlus &input ); + virtual bool MenuSelect( const InputEventPlus &input ); protected: virtual void ImportOptions( int iRow, const vector &vpns ); diff --git a/src/ScreenPackages.cpp b/src/ScreenPackages.cpp index a9051a3fa1..32ac7178cf 100644 --- a/src/ScreenPackages.cpp +++ b/src/ScreenPackages.cpp @@ -159,7 +159,7 @@ void ScreenPackages::Update( float fDeltaTime ) } static LocalizedString ENTER_URL ("ScreenPackages","Enter URL"); -void ScreenPackages::MenuStart( const InputEventPlus &input ) +bool ScreenPackages::MenuStart( const InputEventPlus &input ) { if ( m_iDLorLST == 1 ) { @@ -169,12 +169,13 @@ void ScreenPackages::MenuStart( const InputEventPlus &input ) EnterURL( m_Links[m_iLinksPos] ); } ScreenWithMenuElements::MenuStart( input ); + return true; } -void ScreenPackages::MenuUp( const InputEventPlus &input ) +bool ScreenPackages::MenuUp( const InputEventPlus &input ) { if ( m_bIsDownloading ) - return; + return false; if ( m_iDLorLST == 0) { if ( m_iPackagesPos > 0) @@ -192,12 +193,13 @@ void ScreenPackages::MenuUp( const InputEventPlus &input ) } } ScreenWithMenuElements::MenuUp( input ); + return true; } -void ScreenPackages::MenuDown( const InputEventPlus &input ) +bool ScreenPackages::MenuDown( const InputEventPlus &input ) { if ( m_bIsDownloading ) - return; + return false; if ( m_iDLorLST == 0) { @@ -216,14 +218,15 @@ void ScreenPackages::MenuDown( const InputEventPlus &input ) } } ScreenWithMenuElements::MenuDown( input ); + return true; } -void ScreenPackages::MenuLeft( const InputEventPlus &input ) +bool ScreenPackages::MenuLeft( const InputEventPlus &input ) { if ( m_bIsDownloading ) - return; + return false; if ( !m_bCanDL ) - return; + return false; /* m_sprExistingBG.StopTweening(); @@ -243,12 +246,13 @@ void ScreenPackages::MenuLeft( const InputEventPlus &input ) COMMAND( m_sprWebBG, "Away" ); } ScreenWithMenuElements::MenuLeft( input ); + return true; } -void ScreenPackages::MenuRight( const InputEventPlus &input ) +bool ScreenPackages::MenuRight( const InputEventPlus &input ) { if ( m_bIsDownloading ) - return; + return false; // Huh? //MenuLeft( input ); @@ -267,21 +271,23 @@ void ScreenPackages::MenuRight( const InputEventPlus &input ) } ScreenWithMenuElements::MenuRight( input ); + return true; } static LocalizedString DOWNLOAD_CANCELLED( "ScreenPackages", "Download cancelled." ); -void ScreenPackages::MenuBack( const InputEventPlus &input ) +bool ScreenPackages::MenuBack( const InputEventPlus &input ) { if ( m_bIsDownloading ) { SCREENMAN->SystemMessage( DOWNLOAD_CANCELLED ); CancelDownload( ); - return; + return true; } TweenOffScreen(); Cancel( SM_GoToPrevScreen ); ScreenWithMenuElements::MenuBack( input ); + return true; } void ScreenPackages::TweenOffScreen( ) diff --git a/src/ScreenPackages.h b/src/ScreenPackages.h index de38cf25c0..38f03ab8d7 100644 --- a/src/ScreenPackages.h +++ b/src/ScreenPackages.h @@ -18,12 +18,12 @@ public: virtual void HandleScreenMessage( const ScreenMessage SM ); - virtual void MenuStart( const InputEventPlus &input ); - virtual void MenuUp( const InputEventPlus &input ); - virtual void MenuDown( const InputEventPlus &input ); - virtual void MenuLeft( const InputEventPlus &input ); - virtual void MenuRight( const InputEventPlus &input ); - virtual void MenuBack( const InputEventPlus &input ); + virtual bool MenuStart( const InputEventPlus &input ); + virtual bool MenuUp( const InputEventPlus &input ); + virtual bool MenuDown( const InputEventPlus &input ); + virtual bool MenuLeft( const InputEventPlus &input ); + virtual bool MenuRight( const InputEventPlus &input ); + virtual bool MenuBack( const InputEventPlus &input ); virtual void TweenOffScreen( ); virtual void Update(float f); diff --git a/src/ScreenPackagesSSC.cpp b/src/ScreenPackagesSSC.cpp index 73ba2c57ed..902650f39d 100644 --- a/src/ScreenPackagesSSC.cpp +++ b/src/ScreenPackagesSSC.cpp @@ -24,16 +24,17 @@ void ScreenPackagesSSC::HandleScreenMessage( const ScreenMessage SM ) ScreenWithMenuElements::HandleScreenMessage( SM ); } -void ScreenPackagesSSC::Input( const InputEventPlus &input ) +bool ScreenPackagesSSC::Input( const InputEventPlus &input ) { - ScreenWithMenuElements::Input( input ); + return ScreenWithMenuElements::Input( input ); } -void ScreenPackagesSSC::MenuBack( const InputEventPlus &input ) +bool ScreenPackagesSSC::MenuBack( const InputEventPlus &input ) { TweenOffScreen(); Cancel( SM_GoToPrevScreen ); ScreenWithMenuElements::MenuBack( input ); + return true; } void ScreenPackagesSSC::Update( float fDeltaTime ) diff --git a/src/ScreenPackagesSSC.h b/src/ScreenPackagesSSC.h index 7db51bfef6..affa136e84 100644 --- a/src/ScreenPackagesSSC.h +++ b/src/ScreenPackagesSSC.h @@ -16,8 +16,8 @@ public: virtual void Init(); /* Input stuff */ - virtual void Input( const InputEventPlus &input ); - virtual void MenuBack( const InputEventPlus &input ); + virtual bool Input( const InputEventPlus &input ); + virtual bool MenuBack( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); virtual void Update(float f); diff --git a/src/ScreenPlayerOptions.cpp b/src/ScreenPlayerOptions.cpp index ffa39f85a3..d3b315ac38 100644 --- a/src/ScreenPlayerOptions.cpp +++ b/src/ScreenPlayerOptions.cpp @@ -57,8 +57,10 @@ void ScreenPlayerOptions::BeginScreen() } } -void ScreenPlayerOptions::Input( const InputEventPlus &input ) +bool ScreenPlayerOptions::Input( const InputEventPlus &input ) { + bool bHandled = false; + if( m_bAskOptionsMessage && input.type == IET_FIRST_PRESS && !m_In.IsTransitioning() && @@ -69,6 +71,7 @@ void ScreenPlayerOptions::Input( const InputEventPlus &input ) m_bGoToOptions = true; this->PlayCommand( "GoToOptions" ); SCREENMAN->PlayStartSound(); + bHandled = true; } } @@ -90,9 +93,10 @@ void ScreenPlayerOptions::Input( const InputEventPlus &input ) this->UpdateDisqualified( r, pn ); m_pRows[r]->SetChoiceInRowWithFocus( pn, iOldFocus ); } + bHandled = true; } - ScreenOptionsMaster::Input( input ); + bHandled = ScreenOptionsMaster::Input( input ) || bHandled; // UGLY: Update m_Disqualified whenever Start is pressed if( GAMESTATE->IsHumanPlayer(pn) && input.MenuI == GAME_BUTTON_START ) @@ -100,6 +104,7 @@ void ScreenPlayerOptions::Input( const InputEventPlus &input ) int row = m_iCurrentRow[pn]; UpdateDisqualified( row, pn ); } + return bHandled; } void ScreenPlayerOptions::HandleScreenMessage( const ScreenMessage SM ) diff --git a/src/ScreenPlayerOptions.h b/src/ScreenPlayerOptions.h index b58802598f..b22a3345c5 100644 --- a/src/ScreenPlayerOptions.h +++ b/src/ScreenPlayerOptions.h @@ -11,7 +11,7 @@ public: virtual void Init(); virtual void BeginScreen(); - virtual void Input( const InputEventPlus &input ); + virtual bool Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); bool GetGoToOptions() const { return m_bGoToOptions; } diff --git a/src/ScreenProfileLoad.cpp b/src/ScreenProfileLoad.cpp index 05eed808f2..a960ebf657 100644 --- a/src/ScreenProfileLoad.cpp +++ b/src/ScreenProfileLoad.cpp @@ -19,8 +19,9 @@ void ScreenProfileLoad::BeginScreen() ScreenWithMenuElements::BeginScreen(); } -void ScreenProfileLoad::Input( const InputEventPlus &input ) +bool ScreenProfileLoad::Input( const InputEventPlus &input ) { + return false; } void ScreenProfileLoad::Continue() diff --git a/src/ScreenProfileLoad.h b/src/ScreenProfileLoad.h index 0aedbdffd3..3061efc03e 100644 --- a/src/ScreenProfileLoad.h +++ b/src/ScreenProfileLoad.h @@ -8,7 +8,7 @@ class ScreenProfileLoad: public ScreenWithMenuElements public: virtual void Init(); virtual void BeginScreen(); - virtual void Input( const InputEventPlus &input ); + virtual bool Input( const InputEventPlus &input ); void Continue(); virtual void PushSelf( lua_State *L ); diff --git a/src/ScreenProfileSave.cpp b/src/ScreenProfileSave.cpp index 34398df563..15705aa443 100644 --- a/src/ScreenProfileSave.cpp +++ b/src/ScreenProfileSave.cpp @@ -10,8 +10,9 @@ void ScreenProfileSave::BeginScreen() ScreenWithMenuElements::BeginScreen(); } -void ScreenProfileSave::Input( const InputEventPlus &input ) +bool ScreenProfileSave::Input( const InputEventPlus &input ) { + return false; } void ScreenProfileSave::Continue() diff --git a/src/ScreenProfileSave.h b/src/ScreenProfileSave.h index 69c73d612e..bdb50caf7b 100644 --- a/src/ScreenProfileSave.h +++ b/src/ScreenProfileSave.h @@ -7,7 +7,7 @@ class ScreenProfileSave: public ScreenWithMenuElements { public: virtual void BeginScreen(); - virtual void Input( const InputEventPlus &input ); + virtual bool Input( const InputEventPlus &input ); void Continue(); virtual void PushSelf( lua_State *L ); diff --git a/src/ScreenPrompt.cpp b/src/ScreenPrompt.cpp index 666a700a39..b033a1746a 100644 --- a/src/ScreenPrompt.cpp +++ b/src/ScreenPrompt.cpp @@ -106,29 +106,27 @@ void ScreenPrompt::BeginScreen() PositionCursor(); } -void ScreenPrompt::Input( const InputEventPlus &input ) +bool ScreenPrompt::Input( const InputEventPlus &input ) { if( IsTransitioning() ) - return; + return false; if( input.type == IET_RELEASE ) - return; + return false; if( input.DeviceI.device==DEVICE_KEYBOARD ) { switch( input.DeviceI.button ) { case KEY_LEFT: - this->MenuLeft( input ); - return; + return this->MenuLeft( input ); case KEY_RIGHT: - this->MenuRight( input ); - return; + return this->MenuRight( input ); default: break; } } - ScreenWithMenuElements::Input( input ); + return ScreenWithMenuElements::Input( input ); } bool ScreenPrompt::CanGoRight() @@ -157,30 +155,39 @@ void ScreenPrompt::Change( int dir ) m_sndChange.Play(); } -void ScreenPrompt::MenuLeft( const InputEventPlus &input ) +bool ScreenPrompt::MenuLeft( const InputEventPlus &input ) { if( CanGoLeft() ) + { Change( -1 ); + return true; + } + return false; } -void ScreenPrompt::MenuRight( const InputEventPlus &input ) +bool ScreenPrompt::MenuRight( const InputEventPlus &input ) { if( CanGoRight() ) + { Change( +1 ); + return true; + } + return false; } -void ScreenPrompt::MenuStart( const InputEventPlus &input ) +bool ScreenPrompt::MenuStart( const InputEventPlus &input ) { if( m_Out.IsTransitioning() || m_Cancel.IsTransitioning() ) - return; + return false; End( false ); + return true; } -void ScreenPrompt::MenuBack( const InputEventPlus &input ) +bool ScreenPrompt::MenuBack( const InputEventPlus &input ) { if( m_Out.IsTransitioning() || m_Cancel.IsTransitioning() ) - return; + return false; switch( g_PromptType ) { @@ -190,8 +197,9 @@ void ScreenPrompt::MenuBack( const InputEventPlus &input ) break; case PROMPT_YES_NO_CANCEL: End( true ); - break; + return true; } + return false; } void ScreenPrompt::End( bool bCancelled ) diff --git a/src/ScreenPrompt.h b/src/ScreenPrompt.h index 632b5e5e73..8d93cc6c84 100644 --- a/src/ScreenPrompt.h +++ b/src/ScreenPrompt.h @@ -30,7 +30,7 @@ public: virtual void Init(); virtual void BeginScreen(); - virtual void Input( const InputEventPlus &input ); + virtual bool Input( const InputEventPlus &input ); static PromptAnswer s_LastAnswer; static bool s_bCancelledLast; @@ -42,10 +42,10 @@ protected: bool CanGoLeft() { return m_Answer > 0; } bool CanGoRight(); void Change( int dir ); - void MenuLeft( const InputEventPlus &input ); - void MenuRight( const InputEventPlus &input ); - void MenuBack( const InputEventPlus &input ); - void MenuStart( const InputEventPlus &input ); + bool MenuLeft( const InputEventPlus &input ); + bool MenuRight( const InputEventPlus &input ); + bool MenuBack( const InputEventPlus &input ); + bool MenuStart( const InputEventPlus &input ); virtual void End( bool bCancelled ); void PositionCursor(); diff --git a/src/ScreenSMOnlineLogin.cpp b/src/ScreenSMOnlineLogin.cpp index 5cf0e61cb1..2a59449954 100644 --- a/src/ScreenSMOnlineLogin.cpp +++ b/src/ScreenSMOnlineLogin.cpp @@ -185,9 +185,9 @@ void ScreenSMOnlineLogin::HandleScreenMessage(const ScreenMessage SM) ScreenOptions::HandleScreenMessage(SM); } -void ScreenSMOnlineLogin::MenuStart( const InputEventPlus &input ) +bool ScreenSMOnlineLogin::MenuStart( const InputEventPlus &input ) { - ScreenOptions::MenuStart( input ); + return ScreenOptions::MenuStart( input ); } RString ScreenSMOnlineLogin::GetSelectedProfileID() diff --git a/src/ScreenSMOnlineLogin.h b/src/ScreenSMOnlineLogin.h index a8e407b50d..76b5bcf0c3 100644 --- a/src/ScreenSMOnlineLogin.h +++ b/src/ScreenSMOnlineLogin.h @@ -8,7 +8,7 @@ class ScreenSMOnlineLogin : public ScreenOptions public: virtual void Init(); virtual void HandleScreenMessage(const ScreenMessage SM); - virtual void MenuStart( const InputEventPlus &input ); + virtual bool MenuStart( const InputEventPlus &input ); void SendLogin( RString sPassword ); private: diff --git a/src/ScreenSandbox.cpp b/src/ScreenSandbox.cpp index b0956f6ff0..adbb5c1935 100644 --- a/src/ScreenSandbox.cpp +++ b/src/ScreenSandbox.cpp @@ -22,9 +22,9 @@ void ScreenSandbox::HandleScreenMessage( const ScreenMessage SM ) Screen::HandleScreenMessage( SM ); } -void ScreenSandbox::Input( const InputEventPlus &input ) +bool ScreenSandbox::Input( const InputEventPlus &input ) { - Screen::Input( input ); + return Screen::Input( input ); } void ScreenSandbox::Update( float fDeltaTime ) diff --git a/src/ScreenSandbox.h b/src/ScreenSandbox.h index 8ed74bb5e9..2cba146b05 100644 --- a/src/ScreenSandbox.h +++ b/src/ScreenSandbox.h @@ -6,7 +6,7 @@ class ScreenSandbox : public Screen { public: - virtual void Input( const InputEventPlus &input ); + virtual bool Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); virtual void Update(float f); virtual void DrawPrimitives(); diff --git a/src/ScreenSelect.cpp b/src/ScreenSelect.cpp index 0d7c75e752..bed9829df2 100644 --- a/src/ScreenSelect.cpp +++ b/src/ScreenSelect.cpp @@ -93,7 +93,7 @@ void ScreenSelect::Update( float fDelta ) ScreenWithMenuElements::Update( fDelta ); } -void ScreenSelect::Input( const InputEventPlus &input ) +bool ScreenSelect::Input( const InputEventPlus &input ) { // LOG->Trace( "ScreenSelect::Input()" ); @@ -114,14 +114,14 @@ void ScreenSelect::Input( const InputEventPlus &input ) SCREENMAN->PlayStartSound(); if( !ALLOW_DISABLED_PLAYER_INPUT ) - return; // don't let the screen handle the MENU_START press + return false; // don't let the screen handle the MENU_START press } if( !GAMESTATE->IsPlayerEnabled(input.pn) ) { // block input of disabled players if( !ALLOW_DISABLED_PLAYER_INPUT ) - return; + return false; /* Never allow a START press by a player that's still not joined, even if * ALLOW_DISABLED_PLAYER_INPUT would allow other types of input. If we @@ -129,10 +129,10 @@ void ScreenSelect::Input( const InputEventPlus &input ) * players joined (eg. if ScreenTitleJoin is started in pay with no * credits). */ if( input.MenuI == GAME_BUTTON_START ) - return; + return false; } - ScreenWithMenuElements::Input( input ); // default input handler + return ScreenWithMenuElements::Input( input ); // default input handler } void ScreenSelect::HandleScreenMessage( const ScreenMessage SM ) @@ -195,9 +195,10 @@ void ScreenSelect::HandleMessage( const Message &msg ) ScreenWithMenuElements::HandleMessage( msg ); } -void ScreenSelect::MenuBack( const InputEventPlus &input ) +bool ScreenSelect::MenuBack( const InputEventPlus &input ) { Cancel( SM_GoToPrevScreen ); + return true; } /* diff --git a/src/ScreenSelect.h b/src/ScreenSelect.h index 58e690e6f2..f975064886 100644 --- a/src/ScreenSelect.h +++ b/src/ScreenSelect.h @@ -13,11 +13,11 @@ public: virtual ~ScreenSelect(); virtual void Update( float fDelta ); - virtual void Input( const InputEventPlus &input ); + virtual bool Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); virtual void HandleMessage( const Message &msg ); - virtual void MenuBack( const InputEventPlus &input ); + virtual bool MenuBack( const InputEventPlus &input ); protected: virtual int GetSelectionIndex( PlayerNumber pn ) = 0; diff --git a/src/ScreenSelectCharacter.cpp b/src/ScreenSelectCharacter.cpp index 86d68c811e..f54c954759 100644 --- a/src/ScreenSelectCharacter.cpp +++ b/src/ScreenSelectCharacter.cpp @@ -157,14 +157,14 @@ ScreenSelectCharacter::~ScreenSelectCharacter() } -void ScreenSelectCharacter::Input( const InputEventPlus &input ) +bool ScreenSelectCharacter::Input( const InputEventPlus &input ) { LOG->Trace( "ScreenSelectCharacter::Input()" ); if( IsTransitioning() ) - return; + return false; - ScreenWithMenuElements::Input( input ); // default input handler + return ScreenWithMenuElements::Input( input ); // default input handler } void ScreenSelectCharacter::HandleScreenMessage( const ScreenMessage SM ) @@ -273,25 +273,27 @@ void ScreenSelectCharacter::AfterValueChange( PlayerNumber pn ) } -void ScreenSelectCharacter::MenuLeft( const InputEventPlus &input ) +bool ScreenSelectCharacter::MenuLeft( const InputEventPlus &input ) { - MenuUp( input ); + return MenuUp( input ); } -void ScreenSelectCharacter::MenuRight( const InputEventPlus &input ) +bool ScreenSelectCharacter::MenuRight( const InputEventPlus &input ) { - MenuDown( input ); + return MenuDown( input ); } -void ScreenSelectCharacter::MenuUp( const InputEventPlus &input ) +bool ScreenSelectCharacter::MenuUp( const InputEventPlus &input ) { Move( input.pn, -1 ); + return true; } -void ScreenSelectCharacter::MenuDown( const InputEventPlus &input ) +bool ScreenSelectCharacter::MenuDown( const InputEventPlus &input ) { Move( input.pn, +1 ); + return true; } void ScreenSelectCharacter::Move( PlayerNumber pn, int deltaValue ) @@ -322,9 +324,10 @@ bool ScreenSelectCharacter::AllAreFinishedChoosing() const return true; } -void ScreenSelectCharacter::MenuStart( const InputEventPlus &input ) +bool ScreenSelectCharacter::MenuStart( const InputEventPlus &input ) { MakeSelection( input.pn ); + return true; } void ScreenSelectCharacter::MakeSelection( PlayerNumber pn ) @@ -364,9 +367,10 @@ void ScreenSelectCharacter::MakeSelection( PlayerNumber pn ) } } -void ScreenSelectCharacter::MenuBack( const InputEventPlus &input ) +bool ScreenSelectCharacter::MenuBack( const InputEventPlus &input ) { Cancel( SM_GoToPrevScreen ); + return true; } void ScreenSelectCharacter::TweenOffScreen() diff --git a/src/ScreenSelectCharacter.h b/src/ScreenSelectCharacter.h index b2959a1a42..f2a3851329 100644 --- a/src/ScreenSelectCharacter.h +++ b/src/ScreenSelectCharacter.h @@ -19,15 +19,15 @@ public: virtual void Init(); virtual ~ScreenSelectCharacter(); - virtual void Input( const InputEventPlus &input ); + virtual bool Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); - void MenuLeft( const InputEventPlus &input ); - void MenuRight( const InputEventPlus &input ); - void MenuUp( const InputEventPlus &input ); - void MenuDown( const InputEventPlus &input ); - void MenuStart( const InputEventPlus &input ); - void MenuBack( const InputEventPlus &input ); + bool MenuLeft( const InputEventPlus &input ); + bool MenuRight( const InputEventPlus &input ); + bool MenuUp( const InputEventPlus &input ); + bool MenuDown( const InputEventPlus &input ); + bool MenuStart( const InputEventPlus &input ); + bool MenuBack( const InputEventPlus &input ); void TweenOffScreen(); diff --git a/src/ScreenSelectLanguage.cpp b/src/ScreenSelectLanguage.cpp index e8cdc241c9..9fbe5338b5 100644 --- a/src/ScreenSelectLanguage.cpp +++ b/src/ScreenSelectLanguage.cpp @@ -42,7 +42,7 @@ void ScreenSelectLanguage::BeginScreen() ScreenSelectMaster::BeginScreen(); } -void ScreenSelectLanguage::MenuStart( const InputEventPlus &input ) +bool ScreenSelectLanguage::MenuStart( const InputEventPlus &input ) { int iIndex = this->GetSelectionIndex( input.pn ); RString sLangCode = m_aGameCommands[iIndex].m_sName; @@ -52,11 +52,12 @@ void ScreenSelectLanguage::MenuStart( const InputEventPlus &input ) m_soundStart.Play(); this->PostScreenMessage( SM_BeginFadingOut, 0 ); + return true; } -void ScreenSelectLanguage::MenuBack( const InputEventPlus &input ) +bool ScreenSelectLanguage::MenuBack( const InputEventPlus &input ) { - return; // ignore the press + return false; // ignore the press } /* diff --git a/src/ScreenSelectLanguage.h b/src/ScreenSelectLanguage.h index 1a4192176f..337cb31344 100644 --- a/src/ScreenSelectLanguage.h +++ b/src/ScreenSelectLanguage.h @@ -10,8 +10,8 @@ public: virtual void Init(); virtual RString GetDefaultChoice(); virtual void BeginScreen(); - virtual void MenuStart( const InputEventPlus &input ); - virtual void MenuBack( const InputEventPlus &input ); + virtual bool MenuStart( const InputEventPlus &input ); + virtual bool MenuBack( const InputEventPlus &input ); }; #endif diff --git a/src/ScreenSelectMaster.cpp b/src/ScreenSelectMaster.cpp index c5f45b3b69..ab979cc502 100644 --- a/src/ScreenSelectMaster.cpp +++ b/src/ScreenSelectMaster.cpp @@ -408,19 +408,19 @@ try_again: return ChangeSelection( pn, dir, iSwitchToIndex ); } -void ScreenSelectMaster::MenuLeft( const InputEventPlus &input ) +bool ScreenSelectMaster::MenuLeft( const InputEventPlus &input ) { PlayerNumber pn = input.pn; if( m_fLockInputSecs > 0 || m_bChosen[pn] ) - return; + return false; if( input.type == IET_RELEASE ) - return; + return false; if( input.type != IET_FIRST_PRESS ) { if( !ALLOW_REPEATING_INPUT ) - return; + return false; if( m_TrackingRepeatingInput != input.MenuI ) - return; + return false; } if( Move(pn, MenuDir_Left) ) { @@ -434,22 +434,24 @@ void ScreenSelectMaster::MenuLeft( const InputEventPlus &input ) { m_bDoubleChoice[pn] = false; // player has cancelled their selection } + return true; } + return false; } -void ScreenSelectMaster::MenuRight( const InputEventPlus &input ) +bool ScreenSelectMaster::MenuRight( const InputEventPlus &input ) { PlayerNumber pn = input.pn; if( m_fLockInputSecs > 0 || m_bChosen[pn] ) - return; + return false; if( input.type == IET_RELEASE ) - return; + return false; if( input.type != IET_FIRST_PRESS ) { if( !ALLOW_REPEATING_INPUT ) - return; + return false; if( m_TrackingRepeatingInput != input.MenuI ) - return; + return false; } if( Move(pn, MenuDir_Right) ) { @@ -463,22 +465,24 @@ void ScreenSelectMaster::MenuRight( const InputEventPlus &input ) { m_bDoubleChoice[pn] = false; // player has cancelled their selection } + return true; } + return false; } -void ScreenSelectMaster::MenuUp( const InputEventPlus &input ) +bool ScreenSelectMaster::MenuUp( const InputEventPlus &input ) { PlayerNumber pn = input.pn; if( m_fLockInputSecs > 0 || m_bChosen[pn] ) - return; + return false; if( input.type == IET_RELEASE ) - return; + return false; if( input.type != IET_FIRST_PRESS ) { if( !ALLOW_REPEATING_INPUT ) - return; + return false; if( m_TrackingRepeatingInput != input.MenuI ) - return; + return false; } if( Move(pn, MenuDir_Up) ) { @@ -492,22 +496,24 @@ void ScreenSelectMaster::MenuUp( const InputEventPlus &input ) { m_bDoubleChoice[pn] = false; // player has cancelled their selection } + return true; } + return false; } -void ScreenSelectMaster::MenuDown( const InputEventPlus &input ) +bool ScreenSelectMaster::MenuDown( const InputEventPlus &input ) { PlayerNumber pn = input.pn; if( m_fLockInputSecs > 0 || m_bChosen[pn] ) - return; + return false; if( input.type == IET_RELEASE ) - return; + return false; if( input.type != IET_FIRST_PRESS ) { if( !ALLOW_REPEATING_INPUT ) - return; + return false; if( m_TrackingRepeatingInput != input.MenuI ) - return; + return false; } if( Move(pn, MenuDir_Down) ) { @@ -521,7 +527,9 @@ void ScreenSelectMaster::MenuDown( const InputEventPlus &input ) { m_bDoubleChoice[pn] = false; // player has cancelled their selection } + return true; } + return false; } bool ScreenSelectMaster::ChangePage( int iNewChoice ) @@ -775,29 +783,29 @@ float ScreenSelectMaster::DoMenuStart( PlayerNumber pn ) return fSecs; } -void ScreenSelectMaster::MenuStart( const InputEventPlus &input ) +bool ScreenSelectMaster::MenuStart( const InputEventPlus &input ) { if( input.type != IET_FIRST_PRESS ) - return; + return false; PlayerNumber pn = input.pn; if( m_fLockInputSecs > 0 ) - return; + return false; if( SHARED_SELECTION || GetCurrentPage() == PAGE_2 ) { // Return if any player has chosen FOREACH_EnabledPlayer( p ) { if( m_bChosen[p] ) - return; + return false; } } else if( m_bChosen[pn] ) // Return if this player has already chosen - return; + return false; if( !ProcessMenuStart( pn ) ) - return; + return false; // double press is enabled and the player hasn't made their first press if(DOUBLE_PRESS_TO_SELECT && !m_bDoubleChoice[pn]) @@ -811,7 +819,7 @@ void ScreenSelectMaster::MenuStart( const InputEventPlus &input ) vScroll[m_iChoice[pn]]->PlayCommand( "InitialSelection" ); } - return; + return true; } const GameCommand &mc = m_aGameCommands[m_iChoice[pn]]; @@ -819,7 +827,7 @@ void ScreenSelectMaster::MenuStart( const InputEventPlus &input ) /* If no options are playable, then we're just waiting for one to become available. * If any options are playable, then the selection must be playable. */ if( !AnyOptionsArePlayable() ) - return; + return false; SOUND->PlayOnceFromDir( ANNOUNCER->GetPathTo(ssprintf("%s comment %s",m_sName.c_str(), mc.m_sName.c_str())) ); @@ -835,7 +843,7 @@ void ScreenSelectMaster::MenuStart( const InputEventPlus &input ) Message msg( MessageIDToString((MessageID)(Message_MenuStartP1+pn)) ); msg.SetParam( "ScreenEmpty", true ); MESSAGEMAN->Broadcast( msg ); - return; + return true; } float fSecs = 0; @@ -863,6 +871,7 @@ void ScreenSelectMaster::MenuStart( const InputEventPlus &input ) MESSAGEMAN->Broadcast( (MessageID)(Message_MenuStartP1+pn) ); this->PostScreenMessage( SM_BeginFadingOut, fSecs );// tell our owner it's time to move on } + return true; } /* We want all items to always run OnCommand and either GainFocus or LoseFocus diff --git a/src/ScreenSelectMaster.h b/src/ScreenSelectMaster.h index 39e3d4f147..732e0cdbfe 100644 --- a/src/ScreenSelectMaster.h +++ b/src/ScreenSelectMaster.h @@ -30,11 +30,11 @@ public: virtual RString GetDefaultChoice(); virtual void BeginScreen(); - virtual void MenuLeft( const InputEventPlus &input ); - virtual void MenuRight( const InputEventPlus &input ); - virtual void MenuUp( const InputEventPlus &input ); - virtual void MenuDown( const InputEventPlus &input ); - virtual void MenuStart( const InputEventPlus &input ); + virtual bool MenuLeft( const InputEventPlus &input ); + virtual bool MenuRight( const InputEventPlus &input ); + virtual bool MenuUp( const InputEventPlus &input ); + virtual bool MenuDown( const InputEventPlus &input ); + virtual bool MenuStart( const InputEventPlus &input ); virtual void TweenOnScreen(); virtual void TweenOffScreen(); diff --git a/src/ScreenSelectMusic.cpp b/src/ScreenSelectMusic.cpp index 28700a0fef..c5eaa06bda 100644 --- a/src/ScreenSelectMusic.cpp +++ b/src/ScreenSelectMusic.cpp @@ -392,7 +392,7 @@ void ScreenSelectMusic::Update( float fDeltaTime ) CheckBackgroundRequests( false ); } -void ScreenSelectMusic::Input( const InputEventPlus &input ) +bool ScreenSelectMusic::Input( const InputEventPlus &input ) { // HACK: This screen eats mouse inputs if we don't check for them first. bool mouse_evt = false; @@ -403,8 +403,7 @@ void ScreenSelectMusic::Input( const InputEventPlus &input ) } if (mouse_evt) { - ScreenWithMenuElements::Input(input); - return; + return ScreenWithMenuElements::Input(input); } // LOG->Trace( "ScreenSelectMusic::Input()" ); @@ -416,11 +415,11 @@ void ScreenSelectMusic::Input( const InputEventPlus &input ) if( input.DeviceI.device == DEVICE_KEYBOARD && input.DeviceI.button == KEY_F9 ) { if( input.type != IET_FIRST_PRESS ) - return; + return false; PREFSMAN->m_bShowNativeLanguage.Set( !PREFSMAN->m_bShowNativeLanguage ); MESSAGEMAN->Broadcast( "DisplayLanguageChanged" ); m_MusicWheel.RebuildWheelItems(); - return; + return true; } if( !IsTransitioning() && m_SelectionState != SelectionState_Finalized ) @@ -454,20 +453,20 @@ void ScreenSelectMusic::Input( const InputEventPlus &input ) m_MusicWheel.ChangeSort( so ); m_MusicWheel.SetOpenSection( ssprintf("%c", c ) ); AfterMusicChange(); - return; + return true; } } } if( !input.GameI.IsValid() ) - return; // don't care + return false; // don't care // Handle late joining if( m_SelectionState != SelectionState_Finalized && input.MenuI == GAME_BUTTON_START && input.type == IET_FIRST_PRESS && GAMESTATE->JoinInput(input.pn) ) - return; // don't handle this press again below + return true; // don't handle this press again below if( !GAMESTATE->IsHumanPlayer(input.pn) ) - return; + return false; // Check for "Press START again for options" button press if( m_SelectionState == SelectionState_Finalized && @@ -476,13 +475,13 @@ void ScreenSelectMusic::Input( const InputEventPlus &input ) OPTIONS_MENU_AVAILABLE.GetValue() ) { if( m_bGoToOptions ) - return; // got it already + return false; // got it already if( !m_bAllowOptionsMenu ) - return; // not allowed + return false; // not allowed if( !m_bAllowOptionsMenuRepeat && input.type == IET_REPEAT ) { - return; // not allowed yet + return false; // not allowed yet } m_bGoToOptions = true; @@ -495,11 +494,11 @@ void ScreenSelectMusic::Input( const InputEventPlus &input ) this->ClearMessageQueue( SM_BeginFadingOut ); this->PostScreenMessage( SM_BeginFadingOut, this->GetTweenTimeLeft() ); - return; + return true; } if( IsTransitioning() ) - return; // ignore + return false; // ignore // Handle unselect steps // xxx: select button could conflict with OptionsList here -aj @@ -510,12 +509,12 @@ void ScreenSelectMusic::Input( const InputEventPlus &input ) msg.SetParam( "Player", input.pn ); MESSAGEMAN->Broadcast( msg ); m_bStepsChosen[input.pn] = false; - return; + return true; } if( m_SelectionState == SelectionState_Finalized || m_bStepsChosen[input.pn] ) - return; // ignore + return false; // ignore if( USE_PLAYER_SELECT_MENU ) { @@ -533,9 +532,7 @@ void ScreenSelectMusic::Input( const InputEventPlus &input ) { if( m_OptionsList[pn].IsOpened() ) { - m_OptionsList[pn].Input( input ); - - return; + return m_OptionsList[pn].Input( input ); } else { @@ -587,7 +584,7 @@ void ScreenSelectMusic::Input( const InputEventPlus &input ) g_CanOpenOptionsList.Touch(); if( g_CanOpenOptionsList.Ago() > OPTIONS_LIST_TIMEOUT ) m_bAcceptSelectRelease[input.pn] = false; - return; + return true; } if( m_SelectionState == SelectionState_SelectingSong && @@ -596,7 +593,7 @@ void ScreenSelectMusic::Input( const InputEventPlus &input ) { // If we're rouletting, hands off. if( m_MusicWheel.IsRouletting() ) - return; + return false; bool bLeftIsDown = false; bool bRightIsDown = false; @@ -669,7 +666,7 @@ void ScreenSelectMusic::Input( const InputEventPlus &input ) { // Avoid any event not being first press if( input.type != IET_FIRST_PRESS ) - return; + return false; if( m_SelectionState == SelectionState_SelectingSong ) { @@ -695,7 +692,7 @@ void ScreenSelectMusic::Input( const InputEventPlus &input ) if( CHANGE_GROUPS_WITH_GAME_BUTTONS ) { if( input.type != IET_FIRST_PRESS) - return; + return false; if( m_SelectionState == SelectionState_SelectingSong ) { @@ -856,9 +853,9 @@ void ScreenSelectMusic::Input( const InputEventPlus &input ) } if( input.type == IET_FIRST_PRESS && DetectCodes(input) ) - return; + return true; - ScreenWithMenuElements::Input( input ); + return ScreenWithMenuElements::Input( input ); } bool ScreenSelectMusic::DetectCodes( const InputEventPlus &input ) @@ -1168,21 +1165,21 @@ void ScreenSelectMusic::HandleScreenMessage( const ScreenMessage SM ) ScreenWithMenuElements::HandleScreenMessage( SM ); } -void ScreenSelectMusic::MenuStart( const InputEventPlus &input ) +bool ScreenSelectMusic::MenuStart( const InputEventPlus &input ) { if( input.type != IET_FIRST_PRESS ) - return; + return false; /* If select is being pressed at the same time, this is probably an attempt * to change the sort, not to pick a song or difficulty. If it gets here, * the actual select press was probably hit during a tween and ignored. * Ignore it. */ if( input.pn != PLAYER_INVALID && INPUTMAPPER->IsBeingPressed(GAME_BUTTON_SELECT, input.pn) ) - return; + return false; // Honor locked input for start presses. if( m_fLockInputSecs > 0 ) - return; + return false; switch( m_SelectionState ) { @@ -1190,7 +1187,7 @@ void ScreenSelectMusic::MenuStart( const InputEventPlus &input ) case SelectionState_SelectingSong: // If false, we don't have a selection just yet. if( !m_MusicWheel.Select() ) - return; + return false; // a song was selected if( m_MusicWheel.GetSelectedSong() != NULL ) @@ -1258,7 +1255,7 @@ void ScreenSelectMusic::MenuStart( const InputEventPlus &input ) else { // We haven't made a selection yet. - return; + return false; } // I believe this is for those who like pump pro. -aj MESSAGEMAN->Broadcast("SongChosen"); @@ -1355,7 +1352,7 @@ void ScreenSelectMusic::MenuStart( const InputEventPlus &input ) { /* They selected non-Routine steps, so we can't * select Routine steps. */ - return; + return false; } } } @@ -1371,7 +1368,7 @@ void ScreenSelectMusic::MenuStart( const InputEventPlus &input ) Message msg("StepsChosen"); msg.SetParam( "Player", pn ); MESSAGEMAN->Broadcast( msg ); - return; + return true; } } break; @@ -1485,10 +1482,11 @@ void ScreenSelectMusic::MenuStart( const InputEventPlus &input ) m_MenuTimer->Start(); } } + return true; } -void ScreenSelectMusic::MenuBack( const InputEventPlus & /* input */ ) +bool ScreenSelectMusic::MenuBack( const InputEventPlus & /* input */ ) { // Handle unselect song (ffff) // todo: this isn't right at all. -aj @@ -1506,13 +1504,14 @@ void ScreenSelectMusic::MenuBack( const InputEventPlus & /* input */ ) msg.SetParam( "Player", input.pn ); MESSAGEMAN->Broadcast( msg ); m_SelectionState = SelectionState_SelectingSong; - return; + return true; } */ m_BackgroundLoader.Abort(); Cancel( SM_GoToPrevScreen ); + return true; } void ScreenSelectMusic::AfterStepsOrTrailChange( const vector &vpns ) diff --git a/src/ScreenSelectMusic.h b/src/ScreenSelectMusic.h index aa2e9465d6..da3c41a836 100644 --- a/src/ScreenSelectMusic.h +++ b/src/ScreenSelectMusic.h @@ -33,13 +33,13 @@ public: virtual void BeginScreen(); virtual void Update( float fDeltaTime ); - virtual void Input( const InputEventPlus &input ); + virtual bool Input( const InputEventPlus &input ); virtual void HandleMessage( const Message &msg ); virtual void HandleScreenMessage( const ScreenMessage SM ); virtual bool AllowLateJoin() const { return true; } - virtual void MenuStart( const InputEventPlus &input ); - virtual void MenuBack( const InputEventPlus &input ); + virtual bool MenuStart( const InputEventPlus &input ); + virtual bool MenuBack( const InputEventPlus &input ); // ScreenWithMenuElements override: never play music here; we do it ourself. virtual void StartPlayingMusic() { } diff --git a/src/ScreenSelectProfile.cpp b/src/ScreenSelectProfile.cpp index c0d91d9c36..301a549e87 100644 --- a/src/ScreenSelectProfile.cpp +++ b/src/ScreenSelectProfile.cpp @@ -19,92 +19,96 @@ void ScreenSelectProfile::Init() ScreenWithMenuElements::Init(); } -void ScreenSelectProfile::Input( const InputEventPlus &input ) +bool ScreenSelectProfile::Input( const InputEventPlus &input ) { if( IsTransitioning() ) - return; + return false; - ScreenWithMenuElements::Input( input ); + return ScreenWithMenuElements::Input( input ); } -void ScreenSelectProfile::MenuLeft( const InputEventPlus &input ) +bool ScreenSelectProfile::MenuLeft( const InputEventPlus &input ) { PlayerNumber pn = input.pn; if( m_fLockInputSecs > 0 ) - return; + return false; if( input.type == IET_RELEASE ) - return; + return false; if( input.type != IET_FIRST_PRESS ) { /* if( !ALLOW_REPEATING_INPUT ) - return; + return false; */ if( m_TrackingRepeatingInput != input.MenuI ) - return; + return false; } m_TrackingRepeatingInput = input.MenuI; MESSAGEMAN->Broadcast( (MessageID)(Message_MenuLeftP1+pn) ); + return true; } -void ScreenSelectProfile::MenuRight( const InputEventPlus &input ) +bool ScreenSelectProfile::MenuRight( const InputEventPlus &input ) { PlayerNumber pn = input.pn; if( m_fLockInputSecs > 0 ) - return; + return false; if( input.type == IET_RELEASE ) - return; + return false; if( input.type != IET_FIRST_PRESS ) { /* if( !ALLOW_REPEATING_INPUT ) - return; + return false; */ if( m_TrackingRepeatingInput != input.MenuI ) - return; + return false; } m_TrackingRepeatingInput = input.MenuI; MESSAGEMAN->Broadcast( (MessageID)(Message_MenuRightP1+pn) ); + return true; } -void ScreenSelectProfile::MenuUp( const InputEventPlus &input ) +bool ScreenSelectProfile::MenuUp( const InputEventPlus &input ) { PlayerNumber pn = input.pn; if( m_fLockInputSecs > 0 ) - return; + return false; if( input.type == IET_RELEASE ) - return; + return false; if( input.type != IET_FIRST_PRESS ) { /* if( !ALLOW_REPEATING_INPUT ) - return; + return false; */ if( m_TrackingRepeatingInput != input.MenuI ) - return; + return false; } m_TrackingRepeatingInput = input.MenuI; MESSAGEMAN->Broadcast( (MessageID)(Message_MenuUpP1+pn) ); + return true; } -void ScreenSelectProfile::MenuDown( const InputEventPlus &input ) +bool ScreenSelectProfile::MenuDown( const InputEventPlus &input ) { PlayerNumber pn = input.pn; if( m_fLockInputSecs > 0 ) - return; + return false; if( input.type == IET_RELEASE ) - return; + return false; if( input.type != IET_FIRST_PRESS ) { /* if( !ALLOW_REPEATING_INPUT ) - return; + return false; */ if( m_TrackingRepeatingInput != input.MenuI ) - return; + return false; } m_TrackingRepeatingInput = input.MenuI; MESSAGEMAN->Broadcast( (MessageID)(Message_MenuDownP1+pn) ); + return true; } bool ScreenSelectProfile::SetProfileIndex( PlayerNumber pn, int iProfileIndex ) diff --git a/src/ScreenSelectProfile.h b/src/ScreenSelectProfile.h index 9a28e8a1e4..c788decc71 100644 --- a/src/ScreenSelectProfile.h +++ b/src/ScreenSelectProfile.h @@ -9,11 +9,11 @@ class ScreenSelectProfile : public ScreenWithMenuElements { public: virtual void Init(); - virtual void Input( const InputEventPlus &input ); - virtual void MenuLeft( const InputEventPlus &input ); - virtual void MenuRight( const InputEventPlus &input ); - virtual void MenuUp( const InputEventPlus &input ); - virtual void MenuDown( const InputEventPlus &input ); + virtual bool Input( const InputEventPlus &input ); + virtual bool MenuLeft( const InputEventPlus &input ); + virtual bool MenuRight( const InputEventPlus &input ); + virtual bool MenuUp( const InputEventPlus &input ); + virtual bool MenuDown( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); GameButton m_TrackingRepeatingInput; diff --git a/src/ScreenSetTime.cpp b/src/ScreenSetTime.cpp index 2ca906dd34..4062f07c6c 100644 --- a/src/ScreenSetTime.cpp +++ b/src/ScreenSetTime.cpp @@ -100,15 +100,15 @@ void ScreenSetTime::Update( float fDelta ) m_textValue[day] .SetText( ssprintf("%02d",now.tm_mday) ); } -void ScreenSetTime::Input( const InputEventPlus &input ) +bool ScreenSetTime::Input( const InputEventPlus &input ) { if( input.type != IET_FIRST_PRESS && input.type != IET_REPEAT ) - return; // ignore + return false; // ignore if( IsTransitioning() ) - return; + return false; - Screen::Input( input ); // default handler + return Screen::Input( input ); // default handler } void ScreenSetTime::ChangeValue( int iDirection ) @@ -159,27 +159,31 @@ void ScreenSetTime::ChangeSelection( int iDirection ) m_soundChangeSelection.Play(); } -void ScreenSetTime::MenuUp( const InputEventPlus &input ) +bool ScreenSetTime::MenuUp( const InputEventPlus &input ) { ChangeSelection( -1 ); + return true; } -void ScreenSetTime::MenuDown( const InputEventPlus &input ) +bool ScreenSetTime::MenuDown( const InputEventPlus &input ) { ChangeSelection( +1 ); + return true; } -void ScreenSetTime::MenuLeft( const InputEventPlus &input ) +bool ScreenSetTime::MenuLeft( const InputEventPlus &input ) { ChangeValue( -1 ); + return true; } -void ScreenSetTime::MenuRight( const InputEventPlus &input ) +bool ScreenSetTime::MenuRight( const InputEventPlus &input ) { ChangeValue( +1 ); + return true; } -void ScreenSetTime::MenuStart( const InputEventPlus &input ) +bool ScreenSetTime::MenuStart( const InputEventPlus &input ) { bool bHoldingLeftAndRight = INPUTMAPPER->IsBeingPressed( GAME_BUTTON_RIGHT, input.pn ) && @@ -218,16 +222,19 @@ void ScreenSetTime::MenuStart( const InputEventPlus &input ) } else ChangeSelection( +1 ); + return true; } -void ScreenSetTime::MenuSelect( const InputEventPlus &input ) +bool ScreenSetTime::MenuSelect( const InputEventPlus &input ) { ChangeSelection( -1 ); + return true; } -void ScreenSetTime::MenuBack( const InputEventPlus &input ) +bool ScreenSetTime::MenuBack( const InputEventPlus &input ) { StartTransitioningScreen( SM_GoToPrevScreen ); + return true; } /* diff --git a/src/ScreenSetTime.h b/src/ScreenSetTime.h index 5d6efcc69b..35a37b7226 100644 --- a/src/ScreenSetTime.h +++ b/src/ScreenSetTime.h @@ -23,15 +23,15 @@ public: virtual void Init(); virtual void Update( float fDelta ); - virtual void Input( const InputEventPlus &input ); + virtual bool Input( const InputEventPlus &input ); - virtual void MenuUp( const InputEventPlus &input ); - virtual void MenuDown( const InputEventPlus &input ); - virtual void MenuLeft( const InputEventPlus &input ); - virtual void MenuRight( const InputEventPlus &input ); - virtual void MenuStart( const InputEventPlus &input ); - virtual void MenuSelect( const InputEventPlus &input ); - virtual void MenuBack( const InputEventPlus &input ); + virtual bool MenuUp( const InputEventPlus &input ); + virtual bool MenuDown( const InputEventPlus &input ); + virtual bool MenuLeft( const InputEventPlus &input ); + virtual bool MenuRight( const InputEventPlus &input ); + virtual bool MenuStart( const InputEventPlus &input ); + virtual bool MenuSelect( const InputEventPlus &input ); + virtual bool MenuBack( const InputEventPlus &input ); private: SetTimeSelection m_Selection; diff --git a/src/ScreenSplash.cpp b/src/ScreenSplash.cpp index a1f554eac7..84a10d6be1 100644 --- a/src/ScreenSplash.cpp +++ b/src/ScreenSplash.cpp @@ -34,18 +34,20 @@ void ScreenSplash::HandleScreenMessage( const ScreenMessage SM ) ScreenWithMenuElements::HandleScreenMessage( SM ); } -void ScreenSplash::MenuBack( const InputEventPlus &input ) +bool ScreenSplash::MenuBack( const InputEventPlus &input ) { Cancel( SM_GoToPrevScreen ); + return true; } -void ScreenSplash::MenuStart( const InputEventPlus &input ) +bool ScreenSplash::MenuStart( const InputEventPlus &input ) { if( IsTransitioning() ) - return; + return false; if( !ALLOW_START_TO_SKIP ) - return; + return false; StartTransitioningScreen( SM_GoToNextScreen ); + return true; } /* diff --git a/src/ScreenSplash.h b/src/ScreenSplash.h index b6cc657cf0..3e3cbfe80d 100644 --- a/src/ScreenSplash.h +++ b/src/ScreenSplash.h @@ -13,8 +13,8 @@ public: virtual void BeginScreen(); virtual void HandleScreenMessage( const ScreenMessage SM ); - virtual void MenuBack( const InputEventPlus &input ); - virtual void MenuStart( const InputEventPlus &input ); + virtual bool MenuBack( const InputEventPlus &input ); + virtual bool MenuStart( const InputEventPlus &input ); protected: ThemeMetric ALLOW_START_TO_SKIP; diff --git a/src/ScreenTestInput.cpp b/src/ScreenTestInput.cpp index d0390babb1..6105872250 100644 --- a/src/ScreenTestInput.cpp +++ b/src/ScreenTestInput.cpp @@ -90,9 +90,10 @@ REGISTER_ACTOR_CLASS( InputList ); REGISTER_SCREEN_CLASS( ScreenTestInput ); -void ScreenTestInput::Input( const InputEventPlus &input ) +bool ScreenTestInput::Input( const InputEventPlus &input ) { RString sMessage = input.DeviceI.ToString(); + bool bHandled = false; switch( input.type ) { case IET_FIRST_PRESS: @@ -105,29 +106,30 @@ void ScreenTestInput::Input( const InputEventPlus &input ) default: break; } MESSAGEMAN->Broadcast( sMessage ); + bHandled = true; break; } default: break; } - Screen::Input( input ); // default handler + return Screen::Input( input ) || bHandled; // default handler } -void ScreenTestInput::MenuStart( const InputEventPlus &input ) +bool ScreenTestInput::MenuStart( const InputEventPlus &input ) { - MenuBack( input ); + return MenuBack( input ); } -void ScreenTestInput::MenuBack( const InputEventPlus &input ) +bool ScreenTestInput::MenuBack( const InputEventPlus &input ) { if( input.type != IET_REPEAT ) - return; // ignore + return false; // ignore - if( !IsTransitioning() ) - { - SCREENMAN->PlayStartSound(); - StartTransitioningScreen( SM_GoToPrevScreen ); - } + if( IsTransitioning() ) + return false; + SCREENMAN->PlayStartSound(); + StartTransitioningScreen( SM_GoToPrevScreen ); + return true; } /* diff --git a/src/ScreenTestInput.h b/src/ScreenTestInput.h index e3abfe36a9..1f81a41444 100644 --- a/src/ScreenTestInput.h +++ b/src/ScreenTestInput.h @@ -10,10 +10,10 @@ class ScreenTestInput : public ScreenWithMenuElements { public: - virtual void Input( const InputEventPlus &input ); + virtual bool Input( const InputEventPlus &input ); - virtual void MenuStart( const InputEventPlus &input ); - virtual void MenuBack( const InputEventPlus &input ); + virtual bool MenuStart( const InputEventPlus &input ); + virtual bool MenuBack( const InputEventPlus &input ); }; #endif diff --git a/src/ScreenTestLights.cpp b/src/ScreenTestLights.cpp index e83a11f6a5..181bd7ac93 100644 --- a/src/ScreenTestLights.cpp +++ b/src/ScreenTestLights.cpp @@ -88,15 +88,15 @@ void ScreenTestLights::Update( float fDeltaTime ) } -void ScreenTestLights::Input( const InputEventPlus &input ) +bool ScreenTestLights::Input( const InputEventPlus &input ) { if( input.type != IET_FIRST_PRESS && input.type != IET_REPEAT ) - return; // ignore + return false; // ignore - ScreenWithMenuElements::Input( input ); // default handler + return ScreenWithMenuElements::Input( input ); // default handler } -void ScreenTestLights::MenuLeft( const InputEventPlus &input ) +bool ScreenTestLights::MenuLeft( const InputEventPlus &input ) { if( LIGHTSMAN->GetLightsMode() != LIGHTSMODE_TEST_MANUAL_CYCLE ) LIGHTSMAN->SetLightsMode( LIGHTSMODE_TEST_MANUAL_CYCLE ); @@ -105,9 +105,10 @@ void ScreenTestLights::MenuLeft( const InputEventPlus &input ) else LIGHTSMAN->PrevTestGameButtonLight(); m_timerBackToAutoCycle.Touch(); + return true; } -void ScreenTestLights::MenuRight( const InputEventPlus &input ) +bool ScreenTestLights::MenuRight( const InputEventPlus &input ) { if( LIGHTSMAN->GetLightsMode() != LIGHTSMODE_TEST_MANUAL_CYCLE ) LIGHTSMAN->SetLightsMode( LIGHTSMODE_TEST_MANUAL_CYCLE ); @@ -116,20 +117,21 @@ void ScreenTestLights::MenuRight( const InputEventPlus &input ) else LIGHTSMAN->NextTestGameButtonLight(); m_timerBackToAutoCycle.Touch(); + return true; } -void ScreenTestLights::MenuStart( const InputEventPlus &input ) +bool ScreenTestLights::MenuStart( const InputEventPlus &input ) { - MenuBack( input ); + return MenuBack( input ); } -void ScreenTestLights::MenuBack( const InputEventPlus &input ) +bool ScreenTestLights::MenuBack( const InputEventPlus &input ) { - if( !IsTransitioning() ) - { - SCREENMAN->PlayStartSound(); - StartTransitioningScreen( SM_GoToPrevScreen ); - } + if( IsTransitioning() ) + return false; + SCREENMAN->PlayStartSound(); + StartTransitioningScreen( SM_GoToPrevScreen ); + return true; } /* diff --git a/src/ScreenTestLights.h b/src/ScreenTestLights.h index 07a52c1b2d..21091c77ff 100644 --- a/src/ScreenTestLights.h +++ b/src/ScreenTestLights.h @@ -13,12 +13,12 @@ public: virtual void EndScreen(); virtual void Update( float fDelta ); - virtual void Input( const InputEventPlus &input ); + virtual bool Input( const InputEventPlus &input ); - virtual void MenuLeft( const InputEventPlus &input ); - virtual void MenuRight( const InputEventPlus &input ); - virtual void MenuStart( const InputEventPlus &input ); - virtual void MenuBack( const InputEventPlus &input ); + virtual bool MenuLeft( const InputEventPlus &input ); + virtual bool MenuRight( const InputEventPlus &input ); + virtual bool MenuStart( const InputEventPlus &input ); + virtual bool MenuBack( const InputEventPlus &input ); private: BitmapText m_textInputs; diff --git a/src/ScreenTestSound.cpp b/src/ScreenTestSound.cpp index 9883f9fbec..7d86c8b811 100644 --- a/src/ScreenTestSound.cpp +++ b/src/ScreenTestSound.cpp @@ -127,10 +127,10 @@ void ScreenTestSound::Update(float f) } } -void ScreenTestSound::Input( const InputEventPlus &input ) +bool ScreenTestSound::Input( const InputEventPlus &input ) { if( input.type != IET_FIRST_PRESS ) - return; // ignore + return false; // ignore switch( input.DeviceI.device ) { @@ -197,11 +197,13 @@ void ScreenTestSound::Input( const InputEventPlus &input ) obj.SetY(obj.GetY() + 10); break; */ - default: break; + default: + return false; } - default: break; + default: + return false; } - + return true; } /* diff --git a/src/ScreenTestSound.h b/src/ScreenTestSound.h index 42168bc3d5..f6a96afc8a 100644 --- a/src/ScreenTestSound.h +++ b/src/ScreenTestSound.h @@ -14,7 +14,7 @@ public: virtual void Init(); ~ScreenTestSound(); - virtual void Input( const InputEventPlus &input ); + virtual bool Input( const InputEventPlus &input ); void Update(float f); void UpdateText(int n); diff --git a/src/ScreenTextEntry.cpp b/src/ScreenTextEntry.cpp index 620a0f7bcc..49e75bef12 100644 --- a/src/ScreenTextEntry.cpp +++ b/src/ScreenTextEntry.cpp @@ -191,11 +191,12 @@ void ScreenTextEntry::Update( float fDelta ) } } -void ScreenTextEntry::Input( const InputEventPlus &input ) +bool ScreenTextEntry::Input( const InputEventPlus &input ) { if( IsTransitioning() ) - return; + return false; + bool bHandled = false; if( input.DeviceI == DeviceInput(DEVICE_KEYBOARD, KEY_BACK) ) { switch( input.type ) @@ -203,6 +204,7 @@ void ScreenTextEntry::Input( const InputEventPlus &input ) case IET_FIRST_PRESS: case IET_REPEAT: BackspaceInAnswer(); + bHandled = true; default: break; } @@ -216,10 +218,11 @@ void ScreenTextEntry::Input( const InputEventPlus &input ) TryAppendToAnswer( WStringToRString(wstring()+c) ); TextEnteredDirectly(); + bHandled = true; } } - ScreenWithMenuElements::Input( input ); + return ScreenWithMenuElements::Input( input ) || bHandled; } void ScreenTextEntry::TryAppendToAnswer( RString s ) @@ -257,11 +260,15 @@ void ScreenTextEntry::BackspaceInAnswer() UpdateAnswerText(); } -void ScreenTextEntry::MenuStart( const InputEventPlus &input ) +bool ScreenTextEntry::MenuStart( const InputEventPlus &input ) { // HACK: Only allow the screen to end on the Enter key.-aj if( input.DeviceI == DeviceInput(DEVICE_KEYBOARD, KEY_ENTER) && input.type==IET_FIRST_PRESS ) + { End( false ); + return true; + } + return false; } void ScreenTextEntry::End( bool bCancelled ) @@ -303,10 +310,12 @@ void ScreenTextEntry::End( bool bCancelled ) s_sLastAnswer = bCancelled ? RString("") : WStringToRString(m_sAnswer); } -void ScreenTextEntry::MenuBack( const InputEventPlus &input ) +bool ScreenTextEntry::MenuBack( const InputEventPlus &input ) { - if( input.type == IET_FIRST_PRESS ) - End( true ); + if( input.type != IET_FIRST_PRESS ) + return false; + End( true ); + return true; } void ScreenTextEntry::TextEntrySettings::FromStack( lua_State *L ) @@ -698,10 +707,39 @@ void ScreenTextEntryVisual::MoveY( int iDir ) PositionCursor(); } -void ScreenTextEntryVisual::MenuStart( const InputEventPlus &input ) +bool ScreenTextEntryVisual::MenuLeft( const InputEventPlus &input ) { if( input.type != IET_FIRST_PRESS ) - return; + return false; + MoveX(-1); + return true; +} +bool ScreenTextEntryVisual::MenuRight( const InputEventPlus &input ) +{ + if( input.type != IET_FIRST_PRESS ) + return false; + MoveX(+1); + return true; +} +bool ScreenTextEntryVisual::MenuUp( const InputEventPlus &input ) +{ + if( input.type != IET_FIRST_PRESS ) + return false; + MoveY(-1); + return true; +} +bool ScreenTextEntryVisual::MenuDown( const InputEventPlus &input ) +{ + if( input.type != IET_FIRST_PRESS ) + return false; + MoveY(+1); + return true; +} + +bool ScreenTextEntryVisual::MenuStart( const InputEventPlus &input ) +{ + if( input.type != IET_FIRST_PRESS ) + return false; if( m_iFocusY == KEYBOARD_ROW_SPECIAL ) { switch( m_iFocusX ) @@ -719,13 +757,14 @@ void ScreenTextEntryVisual::MenuStart( const InputEventPlus &input ) End( false ); break; default: - break; + return false; } } else { TryAppendToAnswer( g_szKeys[m_iFocusY][m_iFocusX] ); } + return true; } /* diff --git a/src/ScreenTextEntry.h b/src/ScreenTextEntry.h index c3dad0bbb6..ee78688dff 100644 --- a/src/ScreenTextEntry.h +++ b/src/ScreenTextEntry.h @@ -102,7 +102,7 @@ public: virtual void BeginScreen(); virtual void Update( float fDelta ); - virtual void Input( const InputEventPlus &input ); + virtual bool Input( const InputEventPlus &input ); static RString s_sLastAnswer; static bool s_bCancelledLast; @@ -117,8 +117,8 @@ protected: virtual void End( bool bCancelled ); private: - virtual void MenuStart( const InputEventPlus &input ); - virtual void MenuBack( const InputEventPlus &input ); + virtual bool MenuStart( const InputEventPlus &input ); + virtual bool MenuBack( const InputEventPlus &input ); void UpdateAnswerText(); @@ -151,12 +151,12 @@ protected: virtual void TextEnteredDirectly(); - virtual void MenuLeft( const InputEventPlus &input ) { if(input.type==IET_FIRST_PRESS) MoveX(-1); } - virtual void MenuRight( const InputEventPlus &input ) { if(input.type==IET_FIRST_PRESS) MoveX(+1); } - virtual void MenuUp( const InputEventPlus &input ) { if(input.type==IET_FIRST_PRESS) MoveY(-1); } - virtual void MenuDown( const InputEventPlus &input ) { if(input.type==IET_FIRST_PRESS) MoveY(+1); } + virtual bool MenuLeft( const InputEventPlus &input ); + virtual bool MenuRight( const InputEventPlus &input ); + virtual bool MenuUp( const InputEventPlus &input ); + virtual bool MenuDown( const InputEventPlus &input ); - virtual void MenuStart( const InputEventPlus &input ); + virtual bool MenuStart( const InputEventPlus &input ); int m_iFocusX; KeyboardRow m_iFocusY; diff --git a/src/ScreenTitleMenu.cpp b/src/ScreenTitleMenu.cpp index 5c2cce0b5a..54febb1625 100644 --- a/src/ScreenTitleMenu.cpp +++ b/src/ScreenTitleMenu.cpp @@ -41,15 +41,16 @@ void ScreenTitleMenu::Init() static LocalizedString THEME_ ("ScreenTitleMenu","Theme"); static LocalizedString ANNOUNCER_ ("ScreenTitleMenu","Announcer"); -void ScreenTitleMenu::Input( const InputEventPlus &input ) +bool ScreenTitleMenu::Input( const InputEventPlus &input ) { #if defined(DEBUG) LOG->Trace( "ScreenTitleMenu::Input( %d-%d )", input.DeviceI.device, input.DeviceI.button ); // debugging gameport joystick problem #endif if( m_In.IsTransitioning() || m_Cancel.IsTransitioning() ) /* not m_Out */ - return; + return false; + bool bHandled = false; if( input.type == IET_FIRST_PRESS ) { // detect codes @@ -57,6 +58,7 @@ void ScreenTitleMenu::Input( const InputEventPlus &input ) CodeDetector::EnteredCode(input.GameI.controller,CODE_NEXT_THEME2) ) { GameLoop::ChangeTheme( THEME->GetNextSelectableTheme(), m_sName ); + bHandled = true; } if( CodeDetector::EnteredCode(input.GameI.controller,CODE_NEXT_ANNOUNCER) || CodeDetector::EnteredCode(input.GameI.controller,CODE_NEXT_ANNOUNCER2) ) @@ -66,10 +68,11 @@ void ScreenTitleMenu::Input( const InputEventPlus &input ) if( sName=="" ) sName = "(none)"; SCREENMAN->SystemMessage( ANNOUNCER_.GetValue()+": "+sName ); SCREENMAN->SetNewScreen( m_sName ); + bHandled = true; } } - ScreenSelectMaster::Input( input ); + return ScreenSelectMaster::Input( input ) || bHandled; } void ScreenTitleMenu::HandleMessage( const Message &msg ) diff --git a/src/ScreenTitleMenu.h b/src/ScreenTitleMenu.h index 1343d0b288..6177f48197 100644 --- a/src/ScreenTitleMenu.h +++ b/src/ScreenTitleMenu.h @@ -11,7 +11,7 @@ public: ScreenTitleMenu(); virtual void Init(); - virtual void Input( const InputEventPlus &input ); + virtual bool Input( const InputEventPlus &input ); virtual void HandleMessage( const Message &msg ); }; diff --git a/src/ScreenUnlockBrowse.cpp b/src/ScreenUnlockBrowse.cpp index 8d0c908225..9eabc836cf 100644 --- a/src/ScreenUnlockBrowse.cpp +++ b/src/ScreenUnlockBrowse.cpp @@ -46,10 +46,11 @@ void ScreenUnlockBrowse::BeginScreen() HandleMessage( Message(MessageIDToString(Message_MenuSelectionChanged)) ); } -void ScreenUnlockBrowse::MenuStart( const InputEventPlus &input ) +bool ScreenUnlockBrowse::MenuStart( const InputEventPlus &input ) { m_soundStart.Play(); this->PostScreenMessage( SM_BeginFadingOut, 0 ); + return true; } void ScreenUnlockBrowse::HandleMessage( const Message &msg ) diff --git a/src/ScreenUnlockBrowse.h b/src/ScreenUnlockBrowse.h index e285b7fa41..9c5457f9e3 100644 --- a/src/ScreenUnlockBrowse.h +++ b/src/ScreenUnlockBrowse.h @@ -9,7 +9,7 @@ class ScreenUnlockBrowse : public ScreenSelectMaster public: virtual void Init(); virtual void BeginScreen(); - virtual void MenuStart( const InputEventPlus &input ); + virtual bool MenuStart( const InputEventPlus &input ); virtual void HandleMessage( const Message &msg ); diff --git a/src/ScreenUnlockCelebrate.h b/src/ScreenUnlockCelebrate.h index 2d33b00dc2..75c9e398b6 100644 --- a/src/ScreenUnlockCelebrate.h +++ b/src/ScreenUnlockCelebrate.h @@ -7,11 +7,11 @@ class ScreenUnlockCelebrate : public ScreenUnlockBrowse { public: virtual void Init(); - virtual void MenuLeft( const InputEventPlus &input ) { } - virtual void MenuRight( const InputEventPlus &input ) { } - virtual void MenuUp( const InputEventPlus &input ) { } - virtual void MenuDown( const InputEventPlus &input ) { } - virtual void MenuBack( const InputEventPlus &input ) { MenuStart( input ); } + virtual bool MenuLeft( const InputEventPlus &input ) { return false; } + virtual bool MenuRight( const InputEventPlus &input ) { return false; } + virtual bool MenuUp( const InputEventPlus &input ) { return false; } + virtual bool MenuDown( const InputEventPlus &input ) { return false; } + virtual bool MenuBack( const InputEventPlus &input ) { return MenuStart( input ); } protected: }; diff --git a/src/ScreenWithMenuElements.cpp b/src/ScreenWithMenuElements.cpp index 0db311fd6d..6ec6ca04cd 100644 --- a/src/ScreenWithMenuElements.cpp +++ b/src/ScreenWithMenuElements.cpp @@ -347,24 +347,26 @@ void ScreenWithMenuElements::StopTimer() REGISTER_SCREEN_CLASS( ScreenWithMenuElementsSimple ); -void ScreenWithMenuElementsSimple::MenuStart( const InputEventPlus &input ) +bool ScreenWithMenuElementsSimple::MenuStart( const InputEventPlus &input ) { if( IsTransitioning() ) - return; + return false; if( m_fLockInputSecs > 0 ) - return; + return false; StartTransitioningScreen( SM_GoToNextScreen ); + return true; } -void ScreenWithMenuElementsSimple::MenuBack( const InputEventPlus &input ) +bool ScreenWithMenuElementsSimple::MenuBack( const InputEventPlus &input ) { if( IsTransitioning() ) - return; + return false; if( m_fLockInputSecs > 0 ) - return; + return false; Cancel( SM_GoToPrevScreen ); + return true; } // lua start diff --git a/src/ScreenWithMenuElements.h b/src/ScreenWithMenuElements.h index a671e9cfd9..01d55b7b27 100644 --- a/src/ScreenWithMenuElements.h +++ b/src/ScreenWithMenuElements.h @@ -62,8 +62,8 @@ private: class ScreenWithMenuElementsSimple: public ScreenWithMenuElements { public: - void MenuStart( const InputEventPlus &input ); - void MenuBack( const InputEventPlus &input ); + bool MenuStart( const InputEventPlus &input ); + bool MenuBack( const InputEventPlus &input ); // Lua virtual void PushSelf( lua_State *L );