diff --git a/Docs/Changelog_sm-ssc.txt b/Docs/Changelog_sm-ssc.txt index f96cac4840..ff6011b6ce 100644 --- a/Docs/Changelog_sm-ssc.txt +++ b/Docs/Changelog_sm-ssc.txt @@ -13,6 +13,10 @@ _____________________________________________________________________________ sm-ssc v1.2 | 201012xx -------------------------------------------------------------------------------- +20101222 +-------- +* Added Shift+Ctrl+F2 shortcut for reloading overlay screens (and metrics) [freem] + 20101221 -------- * SM5SVN r28586: Only unload fonts if not used by the next screen. [shakesoda] diff --git a/Themes/_fallback/Languages/en.ini b/Themes/_fallback/Languages/en.ini index b7ea3a02cc..c0ddfd78ee 100644 --- a/Themes/_fallback/Languages/en.ini +++ b/Themes/_fallback/Languages/en.ini @@ -1675,6 +1675,7 @@ W5=Boo Reloaded metrics=Reloaded metrics Reloaded metrics and textures=Reloaded metrics and textures Reloaded scripts=Reloaded scripts +Reloaded overlay screens=Reloaded overlay screens [WorkoutManager] You must supply a name for your workout.=You must supply a name for your workout. diff --git a/src/ScreenManager.cpp b/src/ScreenManager.cpp index 920af22797..f1e1aa0f34 100644 --- a/src/ScreenManager.cpp +++ b/src/ScreenManager.cpp @@ -307,6 +307,28 @@ void ScreenManager::ThemeChanged() this->RefreshCreditsMessages(); } +void ScreenManager::ReloadOverlayScreens() +{ + // unload overlay screens + for( unsigned i=0; iGetMetric( "Common","OverlayScreens" ); + vector asOverlays; + split( sOverlays, ",", asOverlays ); + for( unsigned i=0; iGetName() ); + pScreen->BeginScreen(); + g_OverlayScreens.push_back( pScreen ); + } + + this->RefreshCreditsMessages(); +} + Screen *ScreenManager::GetTopScreen() { if( g_ScreenStack.empty() ) diff --git a/src/ScreenManager.h b/src/ScreenManager.h index 8f143ecbfe..d665dc2b6c 100644 --- a/src/ScreenManager.h +++ b/src/ScreenManager.h @@ -46,7 +46,7 @@ public: void RefreshCreditsMessages(); void ThemeChanged(); - + void ReloadOverlayScreens(); /* Return true if the given screen is in the main screen stack, but not the * bottommost screen. If true, the screen should usually exit by popping diff --git a/src/StepMania.cpp b/src/StepMania.cpp index 51d6cf2035..b54fab4c0c 100644 --- a/src/StepMania.cpp +++ b/src/StepMania.cpp @@ -1277,6 +1277,7 @@ static LocalizedString SERVICE_SWITCH_PRESSED ( "StepMania", "Service switch pre static LocalizedString RELOADED_METRICS( "ThemeManager", "Reloaded metrics" ); static LocalizedString RELOADED_METRICS_AND_TEXTURES( "ThemeManager", "Reloaded metrics and textures" ); static LocalizedString RELOADED_SCRIPTS( "ThemeManager", "Reloaded scripts" ); +static LocalizedString RELOADED_OVERLAY_SCREENS( "ThemeManager", "Reloaded overlay screens" ); bool HandleGlobalInputs( const InputEventPlus &input ) { // None of the globals keys act on types other than FIRST_PRESS @@ -1312,23 +1313,33 @@ bool HandleGlobalInputs( const InputEventPlus &input ) // re-added for StepMania 3.9 veterans, plus it's just plain old faster // than the debug menu. However, this is without the LShift capability // that was in 3.9; if we get enough requests, we'll re-add it, but meh. -aj + bool bIsShiftHeld = INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD, KEY_LSHIFT), &input.InputList) || + INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD, KEY_RSHIFT), &input.InputList); + bool bIsCtrlHeld = INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD, KEY_LCTRL), &input.InputList) || + INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD, KEY_RCTRL), &input.InputList); if( input.DeviceI == DeviceInput(DEVICE_KEYBOARD, KEY_F2) ) { - if( INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD, KEY_LSHIFT), &input.InputList) || - INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD, KEY_RSHIFT), &input.InputList)) + if( bIsShiftHeld && !bIsCtrlHeld ) { // Shift+F2: refresh metrics and CodeDetector cache only THEME->ReloadMetrics(); CodeDetector::RefreshCacheItems(); SCREENMAN->SystemMessage( RELOADED_METRICS ); } - else if(INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD, KEY_LCTRL), &input.InputList) || - INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD, KEY_RCTRL), &input.InputList)) + else if( bIsCtrlHeld && !bIsShiftHeld ) { // Ctrl+F2: reload scripts only THEME->UpdateLuaGlobals(); SCREENMAN->SystemMessage( RELOADED_SCRIPTS ); } + else if( bIsCtrlHeld && bIsShiftHeld ) + { + // Shift+Ctrl+F2: reload overlay screens (and metrics, since themers + // are likely going to do this after changing metrics and be lazy.) + THEME->ReloadMetrics(); + SCREENMAN->ReloadOverlayScreens(); + SCREENMAN->SystemMessage( RELOADED_OVERLAY_SCREENS ); + } else { // F2 alone: refresh metrics, textures, noteskins, codedetector cache diff --git a/src/ThemeManager.h b/src/ThemeManager.h index 474ca5d048..f4e9212a16 100644 --- a/src/ThemeManager.h +++ b/src/ThemeManager.h @@ -99,9 +99,7 @@ public: static RString GetBlankGraphicPath(); - // // For self-registering metrics - // static void Subscribe( IThemeMetric *p ); static void Unsubscribe( IThemeMetric *p ); @@ -113,7 +111,7 @@ protected: void LoadThemeMetrics( const RString &sThemeName, const RString &sLanguage_ ); RString GetMetricRaw( const IniFile &ini, const RString &sMetricsGroup, const RString &sValueName ); bool GetMetricRawRecursive( const IniFile &ini, const RString &sMetricsGroup, const RString &sValueName, RString &sRet ); - + bool GetPathInfoToAndFallback( PathInfo &out, ElementCategory category, const RString &sMetricsGroup, const RString &sFile ); bool GetPathInfoToRaw( PathInfo &out, const RString &sThemeName, ElementCategory category, const RString &sMetricsGroup, const RString &sFile ); static RString GetThemeDirFromName( const RString &sThemeName );