Only rebuild the option rows when they've actually changed.
This commit is contained in:
@@ -163,17 +163,11 @@ void ScreenOptionsManageCourses::Init()
|
|||||||
|
|
||||||
EDIT_MODE.Load( m_sName,"EditMode" );
|
EDIT_MODE.Load( m_sName,"EditMode" );
|
||||||
GAMESTATE->m_MasterPlayerNumber = GAMESTATE->GetFirstHumanPlayer();
|
GAMESTATE->m_MasterPlayerNumber = GAMESTATE->GetFirstHumanPlayer();
|
||||||
|
RebuildOptionRows();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScreenOptionsManageCourses::BeginScreen()
|
void ScreenOptionsManageCourses::RebuildOptionRows()
|
||||||
{
|
{
|
||||||
if( GAMESTATE->m_stEdit == STEPS_TYPE_INVALID ||
|
|
||||||
GAMESTATE->m_cdEdit == DIFFICULTY_INVALID )
|
|
||||||
{
|
|
||||||
SetNextCombination();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
vector<OptionRowHandler*> vHands;
|
vector<OptionRowHandler*> vHands;
|
||||||
|
|
||||||
int iIndex = 0;
|
int iIndex = 0;
|
||||||
@@ -188,24 +182,26 @@ void ScreenOptionsManageCourses::BeginScreen()
|
|||||||
iIndex++;
|
iIndex++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_vpCourses.clear();
|
||||||
SONGMAN->GetAllCourses( m_vpCourses, false );
|
SONGMAN->GetAllCourses( m_vpCourses, false );
|
||||||
|
|
||||||
switch( EDIT_MODE.GetValue() )
|
switch( EDIT_MODE.GetValue() )
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
ASSERT(0);
|
RageException::Throw( "ScreenOptionsManageCourses: Invalid edit mode:",
|
||||||
case EditMode_Practice:
|
EditModeToString(EDIT_MODE.GetValue()).c_str() );
|
||||||
case EditMode_Home:
|
case EditMode_Practice:
|
||||||
// Strip out non-edits.
|
case EditMode_Home:
|
||||||
// VC6 is missing mem_fun for const members. Lame. Work around by not using mem_fun. */
|
// Strip out non-edits.
|
||||||
for( int i=m_vpCourses.size()-1; i>=0; i-- )
|
// VC6 is missing mem_fun for const members. Lame. Work around by not using mem_fun. */
|
||||||
{
|
for( int i=m_vpCourses.size()-1; i>=0; i-- )
|
||||||
if( m_vpCourses[i]->IsAnEdit() )
|
{
|
||||||
m_vpCourses.erase( m_vpCourses.begin()+i );
|
if( m_vpCourses[i]->IsAnEdit() )
|
||||||
}
|
m_vpCourses.erase( m_vpCourses.begin()+i );
|
||||||
break;
|
}
|
||||||
case EditMode_Full:
|
break;
|
||||||
break;
|
case EditMode_Full:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
FOREACH_CONST( Course*, m_vpCourses, c )
|
FOREACH_CONST( Course*, m_vpCourses, c )
|
||||||
@@ -215,18 +211,18 @@ void ScreenOptionsManageCourses::BeginScreen()
|
|||||||
|
|
||||||
switch( EDIT_MODE.GetValue() )
|
switch( EDIT_MODE.GetValue() )
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
ASSERT(0);
|
ASSERT(0);
|
||||||
case EditMode_Practice:
|
case EditMode_Practice:
|
||||||
case EditMode_Home:
|
case EditMode_Home:
|
||||||
def.m_sName = CourseTypeToLocalizedString( (*c)->GetCourseType() );
|
def.m_sName = CourseTypeToLocalizedString( (*c)->GetCourseType() );
|
||||||
break;
|
break;
|
||||||
case EditMode_Full:
|
case EditMode_Full:
|
||||||
if( (*c)->IsAnEdit() )
|
if( (*c)->IsAnEdit() )
|
||||||
def.m_sName = "Edit";
|
def.m_sName = "Edit";
|
||||||
else
|
else
|
||||||
def.m_sName = SONGMAN->ShortenGroupName( (*c)->m_sGroupName );
|
def.m_sName = SONGMAN->ShortenGroupName( (*c)->m_sGroupName );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
def.m_sName = ssprintf( "%3d %s", iIndex, def.m_sName.c_str() );
|
def.m_sName = ssprintf( "%3d %s", iIndex, def.m_sName.c_str() );
|
||||||
@@ -239,6 +235,19 @@ void ScreenOptionsManageCourses::BeginScreen()
|
|||||||
}
|
}
|
||||||
|
|
||||||
ScreenOptions::InitMenu( vHands );
|
ScreenOptions::InitMenu( vHands );
|
||||||
|
m_bForceRebuild = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScreenOptionsManageCourses::BeginScreen()
|
||||||
|
{
|
||||||
|
if( GAMESTATE->m_stEdit == STEPS_TYPE_INVALID ||
|
||||||
|
GAMESTATE->m_cdEdit == DIFFICULTY_INVALID )
|
||||||
|
{
|
||||||
|
SetNextCombination();
|
||||||
|
}
|
||||||
|
|
||||||
|
if( m_bForceRebuild )
|
||||||
|
RebuildOptionRows();
|
||||||
|
|
||||||
ScreenOptions::BeginScreen();
|
ScreenOptions::BeginScreen();
|
||||||
|
|
||||||
@@ -256,6 +265,12 @@ void ScreenOptionsManageCourses::BeginScreen()
|
|||||||
AfterChangeRow( GAMESTATE->m_MasterPlayerNumber );
|
AfterChangeRow( GAMESTATE->m_MasterPlayerNumber );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ScreenOptionsManageCourses::ReloadScreen()
|
||||||
|
{
|
||||||
|
m_bForceRebuild = true;
|
||||||
|
ScreenOptionsEditCourseSubMenu::ReloadScreen();
|
||||||
|
}
|
||||||
|
|
||||||
static LocalizedString COURSE_WILL_BE_LOST ( "ScreenOptionsManageCourses", "This course will be lost permanently." );
|
static LocalizedString COURSE_WILL_BE_LOST ( "ScreenOptionsManageCourses", "This course will be lost permanently." );
|
||||||
static LocalizedString CONTINUE_WITH_DELETE ( "ScreenOptionsManageCourses", "Continue with delete?" );
|
static LocalizedString CONTINUE_WITH_DELETE ( "ScreenOptionsManageCourses", "Continue with delete?" );
|
||||||
static LocalizedString ENTER_COURSE_NAME ( "ScreenOptionsManageCourses", "Enter a name for the course." );
|
static LocalizedString ENTER_COURSE_NAME ( "ScreenOptionsManageCourses", "Enter a name for the course." );
|
||||||
@@ -273,7 +288,7 @@ void ScreenOptionsManageCourses::HandleScreenMessage( const ScreenMessage SM )
|
|||||||
if( !pCourse->IsAnEdit() )
|
if( !pCourse->IsAnEdit() )
|
||||||
FILEMAN->Remove( pCourse->GetCacheFilePath() );
|
FILEMAN->Remove( pCourse->GetCacheFilePath() );
|
||||||
delete pCourse;
|
delete pCourse;
|
||||||
SCREENMAN->SetNewScreen( this->m_sName ); // reload
|
ReloadScreen();
|
||||||
}
|
}
|
||||||
else if( SM == SM_Failure )
|
else if( SM == SM_Failure )
|
||||||
{
|
{
|
||||||
@@ -325,7 +340,7 @@ void ScreenOptionsManageCourses::HandleScreenMessage( const ScreenMessage SM )
|
|||||||
WriteCourse();
|
WriteCourse();
|
||||||
|
|
||||||
RefreshTrail();
|
RefreshTrail();
|
||||||
|
m_bForceRebuild = true;
|
||||||
this->HandleScreenMessage( SM_GoToNextScreen );
|
this->HandleScreenMessage( SM_GoToNextScreen );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -347,7 +362,7 @@ void ScreenOptionsManageCourses::HandleScreenMessage( const ScreenMessage SM )
|
|||||||
pCourse->m_sPath = sDir + sNewName + sExt;
|
pCourse->m_sPath = sDir + sNewName + sExt;
|
||||||
pCourse->m_sMainTitle = sNewName;
|
pCourse->m_sMainTitle = sNewName;
|
||||||
WriteCourse();
|
WriteCourse();
|
||||||
SCREENMAN->SetNewScreen( this->m_sName ); // reload
|
ReloadScreen();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if( SM == SM_BackFromContextMenu )
|
else if( SM == SM_BackFromContextMenu )
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ class ScreenOptionsManageCourses : public ScreenOptionsEditCourseSubMenu
|
|||||||
public:
|
public:
|
||||||
void Init();
|
void Init();
|
||||||
virtual void BeginScreen();
|
virtual void BeginScreen();
|
||||||
|
virtual void ReloadScreen();
|
||||||
virtual void HandleScreenMessage( const ScreenMessage SM );
|
virtual void HandleScreenMessage( const ScreenMessage SM );
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@@ -34,11 +34,13 @@ protected:
|
|||||||
virtual void AfterChangeRow( PlayerNumber pn );
|
virtual void AfterChangeRow( PlayerNumber pn );
|
||||||
virtual void ProcessMenuStart( const InputEventPlus &input );
|
virtual void ProcessMenuStart( const InputEventPlus &input );
|
||||||
|
|
||||||
|
private:
|
||||||
Course *GetCourseWithFocus() const;
|
Course *GetCourseWithFocus() const;
|
||||||
|
void RebuildOptionRows();
|
||||||
|
|
||||||
vector<Course*> m_vpCourses;
|
vector<Course*> m_vpCourses;
|
||||||
ThemeMetricEnum<EditMode> EDIT_MODE;
|
ThemeMetricEnum<EditMode> EDIT_MODE;
|
||||||
|
bool m_bForceRebuild;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user