add EDIT_MODE_PRACTICE

This commit is contained in:
Chris Danford
2005-04-14 06:34:17 +00:00
parent 767a8b9296
commit 976e497de7
13 changed files with 287 additions and 283 deletions
+1 -7
View File
@@ -12,7 +12,7 @@ StepsTypesToHide=dance-couple,dance-solo,pump-halfdouble,lights-cabinet
ScreenWidth=640 ScreenWidth=640
ScreenHeight=480 ScreenHeight=480
OverlayScreens=ScreenSystemLayer OverlayScreens=ScreenSystemLayer
HomeEditMode=0 EditMode=2
MaxCourseEntriesBeforeShowVarious=6 MaxCourseEntriesBeforeShowVarious=6
[ModeSwitcher] [ModeSwitcher]
@@ -2189,12 +2189,6 @@ MeterX=SCREEN_CENTER_X+170
MeterY=SCREEN_CENTER_Y-20 MeterY=SCREEN_CENTER_Y-20
SourceMeterX=SCREEN_CENTER_X+170 SourceMeterX=SCREEN_CENTER_X+170
SourceMeterY=SCREEN_CENTER_Y+60 SourceMeterY=SCREEN_CENTER_Y+60
MeterNumberX=SCREEN_CENTER_X+100
MeterNumberY=SCREEN_CENTER_Y-20
MeterNumberOnCommand=zoom,0.7
SourceMeterNumberX=SCREEN_CENTER_X+100
SourceMeterNumberY=SCREEN_CENTER_Y+60
SourceMeterNumberOnCommand=zoom,0.7
RowLabelsX=SCREEN_LEFT+40 RowLabelsX=SCREEN_LEFT+40
RowLabelOnCommand=zoom,0.7 RowLabelOnCommand=zoom,0.7
RowValue1X=SCREEN_CENTER_X RowValue1X=SCREEN_CENTER_X
+1 -1
View File
@@ -15,7 +15,7 @@ ThemeMetric<CString> DEFAULT_MODIFIERS ("Common","DefaultModifiers" );
ThemeMetric<CString> DEFAULT_CPU_MODIFIERS ("Common","DefaultCpuModifiers" ); ThemeMetric<CString> DEFAULT_CPU_MODIFIERS ("Common","DefaultCpuModifiers" );
ThemeMetric1D<RageColor> PLAYER_COLOR ("Common",PLAYER_COLOR_NAME,NUM_PLAYERS); ThemeMetric1D<RageColor> PLAYER_COLOR ("Common",PLAYER_COLOR_NAME,NUM_PLAYERS);
ThemeMetric<CString> WINDOW_TITLE ("Common","WindowTitle"); ThemeMetric<CString> WINDOW_TITLE ("Common","WindowTitle");
ThemeMetric<bool> HOME_EDIT_MODE ("Common","HomeEditMode"); ThemeMetricEnum<EditMode> EDIT_MODE ("Common","EditMode");
ThemeMetric<int> MAX_COURSE_ENTRIES_BEFORE_VARIOUS ("Common","MaxCourseEntriesBeforeShowVarious"); ThemeMetric<int> MAX_COURSE_ENTRIES_BEFORE_VARIOUS ("Common","MaxCourseEntriesBeforeShowVarious");
ThemeMetric<float> TICK_EARLY_SECONDS ("ScreenGameplay","TickEarlySeconds"); ThemeMetric<float> TICK_EARLY_SECONDS ("ScreenGameplay","TickEarlySeconds");
ThemeMetricDifficultiesToShow DIFFICULTIES_TO_SHOW ("Common","DifficultiesToShow"); ThemeMetricDifficultiesToShow DIFFICULTIES_TO_SHOW ("Common","DifficultiesToShow");
+9 -1
View File
@@ -39,6 +39,14 @@ public:
private: private:
vector<StepsType> m_v; vector<StepsType> m_v;
}; };
template <class T>
class ThemeMetricEnum : public ThemeMetric<int>
{
public:
ThemeMetricEnum( const CString& sGroup, const CString& sName ) : ThemeMetric<int>(sGroup,sName) {}
T GetValue() const { return (T)ThemeMetric<int>::GetValue(); }
bool operator ==( T other ) const { return GetValue() == other; }
};
// //
@@ -50,7 +58,7 @@ extern ThemeMetric<CString> DEFAULT_MODIFIERS;
extern ThemeMetric<CString> DEFAULT_CPU_MODIFIERS; extern ThemeMetric<CString> DEFAULT_CPU_MODIFIERS;
extern ThemeMetric1D<RageColor> PLAYER_COLOR; extern ThemeMetric1D<RageColor> PLAYER_COLOR;
extern ThemeMetric<CString> WINDOW_TITLE; extern ThemeMetric<CString> WINDOW_TITLE;
extern ThemeMetric<bool> HOME_EDIT_MODE; extern ThemeMetricEnum<EditMode> EDIT_MODE;
extern ThemeMetric<int> MAX_COURSE_ENTRIES_BEFORE_VARIOUS; extern ThemeMetric<int> MAX_COURSE_ENTRIES_BEFORE_VARIOUS;
extern ThemeMetric<float> TICK_EARLY_SECONDS; extern ThemeMetric<float> TICK_EARLY_SECONDS;
extern ThemeMetricDifficultiesToShow DIFFICULTIES_TO_SHOW; extern ThemeMetricDifficultiesToShow DIFFICULTIES_TO_SHOW;
+3 -3
View File
@@ -45,9 +45,9 @@ enum CourseEntryMenuRow
static Menu g_CourseOptionsMenu( static Menu g_CourseOptionsMenu(
"ScreenMiniMenuCourseOptions", "ScreenMiniMenuCourseOptions",
MenuRow( repeat, "Repeat", true, true, 0, "NO","YES" ), MenuRow( repeat, "Repeat", true, EDIT_MODE_FULL, 0, "NO","YES" ),
MenuRow( randomize, "Randomize", true, true, 0, "NO","YES" ), MenuRow( randomize, "Randomize", true, EDIT_MODE_FULL, 0, "NO","YES" ),
MenuRow( lives, "Lives", true, true, 4, "Use Bar Life","1","2","3","4","5","6","7","8","9","10" ) MenuRow( lives, "Lives", true, EDIT_MODE_FULL, 4, "Use Bar Life","1","2","3","4","5","6","7","8","9","10" )
); );
enum CourseOptionsMenuRow enum CourseOptionsMenuRow
+37 -71
View File
@@ -58,7 +58,7 @@ static void GetSongsToShowForGroup( const CString &sGroup, vector<Song*> &vpSong
{ {
vpSongsOut.clear(); vpSongsOut.clear();
SONGMAN->GetSongs( vpSongsOut, sGroup ); SONGMAN->GetSongs( vpSongsOut, sGroup );
if( HOME_EDIT_MODE ) if( EDIT_MODE == EDIT_MODE_HOME )
{ {
// strip groups that have no unlocked songs // strip groups that have no unlocked songs
for( int i=vpSongsOut.size()-1; i>=0; i-- ) for( int i=vpSongsOut.size()-1; i>=0; i-- )
@@ -154,36 +154,6 @@ EditMenu::EditMenu()
// //
GetGroupsToShow( m_sGroups ); GetGroupsToShow( m_sGroups );
m_StepsTypes = STEPS_TYPES_TO_SHOW.GetValue(); m_StepsTypes = STEPS_TYPES_TO_SHOW.GetValue();
if( HOME_EDIT_MODE )
{
m_vDifficulties.push_back( DIFFICULTY_EDIT );
}
else
{
FOREACH_Difficulty( dc )
m_vDifficulties.push_back( dc );
}
m_vSourceDifficulties.push_back( DIFFICULTY_INVALID ); // "blank"
FOREACH_Difficulty( dc )
m_vSourceDifficulties.push_back( dc );
// start out on easy if available, or "blank"
{
vector<Difficulty>::const_iterator it = find( m_vDifficulties.begin(), m_vDifficulties.end(), DIFFICULTY_EASY );
if( it != m_vDifficulties.end() )
m_iSelection[ROW_STEPS] = it - m_vDifficulties.begin();
else
m_iSelection[ROW_STEPS] = 0;
}
// start out on easy
{
vector<Difficulty>::const_iterator it = find( m_vSourceDifficulties.begin(), m_vSourceDifficulties.end(), DIFFICULTY_EASY );
ASSERT( it != m_vDifficulties.end() );
m_iSelection[ROW_SOURCE_STEPS] = it - m_vSourceDifficulties.begin();
}
RefreshAll(); RefreshAll();
@@ -226,7 +196,7 @@ void EditMenu::RefreshAll()
for( unsigned i=0; i<m_vpSteps.size(); i++ ) for( unsigned i=0; i<m_vpSteps.size(); i++ )
{ {
const Steps *pSteps = m_vpSteps[i]; const Steps *pSteps = m_vpSteps[i].pSteps;
if( pSteps == GAMESTATE->m_pCurSteps[PLAYER_1] ) if( pSteps == GAMESTATE->m_pCurSteps[PLAYER_1] )
{ {
m_iSelection[ROW_STEPS] = i; m_iSelection[ROW_STEPS] = i;
@@ -357,24 +327,36 @@ void EditMenu::OnRowValueChanged( EditMenuRow row )
// fall through // fall through
case ROW_STEPS_TYPE: case ROW_STEPS_TYPE:
m_textValue[ROW_STEPS_TYPE].SetText( GAMEMAN->StepsTypeToThemedString(GetSelectedStepsType()) ); m_textValue[ROW_STEPS_TYPE].SetText( GAMEMAN->StepsTypeToThemedString(GetSelectedStepsType()) );
CLAMP( m_iSelection[ROW_STEPS], 0, m_vDifficulties.size()-1 ); // jump back to the slot for DIFFICULTY_EDIT
m_vpSteps.clear(); m_vpSteps.clear();
FOREACH( Difficulty, m_vDifficulties, dc )
FOREACH_Difficulty( dc )
{ {
if( *dc == DIFFICULTY_EDIT ) if( dc == DIFFICULTY_EDIT )
{ {
vector<Steps*> v; vector<Steps*> v;
GetSelectedSong()->GetSteps( v, GetSelectedStepsType(), DIFFICULTY_EDIT ); GetSelectedSong()->GetSteps( v, GetSelectedStepsType(), DIFFICULTY_EDIT );
StepsUtil::SortStepsByDescription( v ); StepsUtil::SortStepsByDescription( v );
m_vpSteps.insert( m_vpSteps.end(), v.begin(), v.end() ); FOREACH_CONST( Steps*, v, p )
m_vpSteps.push_back( NULL ); // "New Edit" m_vpSteps.push_back( StepsAndDifficulty(*p,dc) );
if( EDIT_MODE != EDIT_MODE_PRACTICE )
m_vpSteps.push_back( StepsAndDifficulty(NULL,dc) ); // "New Edit"
} }
else else
{ {
Steps *pSteps = GetSelectedSong()->GetStepsByDifficulty( GetSelectedStepsType(), *dc ); // don't show non-edits in HomeMode
m_vpSteps.push_back( pSteps ); if( EDIT_MODE == EDIT_MODE_HOME )
continue;
Steps *pSteps = GetSelectedSong()->GetStepsByDifficulty( GetSelectedStepsType(), dc );
if( pSteps || EDIT_MODE != EDIT_MODE_PRACTICE )
m_vpSteps.push_back( StepsAndDifficulty(pSteps,dc) );
} }
} }
CLAMP( m_iSelection[ROW_STEPS], 0, m_vpSteps.size()-1 );
// fall through // fall through
case ROW_STEPS: case ROW_STEPS:
{ {
@@ -393,7 +375,7 @@ void EditMenu::OnRowValueChanged( EditMenuRow row )
s = DifficultyToThemedString(GetSelectedDifficulty()); s = DifficultyToThemedString(GetSelectedDifficulty());
// UGLY. "Edit" -> "New Edit" // UGLY. "Edit" -> "New Edit"
if( HOME_EDIT_MODE ) if( EDIT_MODE == EDIT_MODE_HOME )
s = "New " + s; s = "New " + s;
} }
m_textValue[ROW_STEPS].SetText( s ); m_textValue[ROW_STEPS].SetText( s );
@@ -408,32 +390,28 @@ void EditMenu::OnRowValueChanged( EditMenuRow row )
m_textValue[ROW_SOURCE_STEPS_TYPE].SetHidden( GetSelectedSteps() ? true : false ); m_textValue[ROW_SOURCE_STEPS_TYPE].SetHidden( GetSelectedSteps() ? true : false );
m_textValue[ROW_SOURCE_STEPS_TYPE].SetText( GAMEMAN->StepsTypeToThemedString(GetSelectedSourceStepsType()) ); m_textValue[ROW_SOURCE_STEPS_TYPE].SetText( GAMEMAN->StepsTypeToThemedString(GetSelectedSourceStepsType()) );
CLAMP( m_iSelection[ROW_SOURCE_STEPS], 0, m_vSourceDifficulties.size()-1 ); // jump back to the slot for DIFFICULTY_EDIT
m_vpSourceSteps.clear(); m_vpSourceSteps.clear();
FOREACH( Difficulty, m_vSourceDifficulties, dc ) m_vpSourceSteps.push_back( StepsAndDifficulty(NULL,DIFFICULTY_INVALID) ); // "blank"
FOREACH_Difficulty( dc )
{ {
if( *dc == DIFFICULTY_INVALID ) // fill in pSteps
if( dc != DIFFICULTY_EDIT )
{ {
m_vpSourceSteps.push_back( NULL ); Steps *pSteps = GetSelectedSong()->GetStepsByDifficulty( GetSelectedSourceStepsType(), dc );
} m_vpSourceSteps.push_back( StepsAndDifficulty(pSteps,dc) );
else if( *dc == DIFFICULTY_EDIT )
{
vector<Steps*> v;
GetSelectedSong()->GetSteps( v, GetSelectedSourceStepsType(), DIFFICULTY_EDIT );
StepsUtil::SortStepsByDescription( v );
m_vpSourceSteps.insert( m_vpSourceSteps.end(), v.begin(), v.end() );
// if we don't have any edits, pad with NULL so that we have one slot for every difficulty
if( v.empty() )
m_vpSourceSteps.push_back( NULL );
} }
else else
{ {
Steps *pSteps = GetSelectedSong()->GetStepsByDifficulty( GetSelectedSourceStepsType(), *dc ); vector<Steps*> v;
m_vpSourceSteps.push_back( pSteps ); GetSelectedSong()->GetSteps( v, GetSelectedSourceStepsType(), dc );
StepsUtil::SortStepsByDescription( v );
FOREACH_CONST( Steps*, v, pSteps )
m_vpSourceSteps.push_back( StepsAndDifficulty(*pSteps,dc) );
if( v.empty() )
m_vpSourceSteps.push_back( StepsAndDifficulty(NULL,dc) );
} }
} }
CLAMP( m_iSelection[ROW_SOURCE_STEPS], 0, m_vpSourceSteps.size()-1 );
// fall through // fall through
case ROW_SOURCE_STEPS: case ROW_SOURCE_STEPS:
{ {
@@ -463,6 +441,7 @@ void EditMenu::OnRowValueChanged( EditMenuRow row )
if( GetSelectedSteps() ) if( GetSelectedSteps() )
{ {
m_Actions.push_back( EDIT_MENU_ACTION_EDIT ); m_Actions.push_back( EDIT_MENU_ACTION_EDIT );
if( EDIT_MODE != EDIT_MODE_PRACTICE )
m_Actions.push_back( EDIT_MENU_ACTION_DELETE ); m_Actions.push_back( EDIT_MENU_ACTION_DELETE );
} }
else else
@@ -480,19 +459,6 @@ void EditMenu::OnRowValueChanged( EditMenuRow row )
} }
} }
Difficulty EditMenu::GetSelectedDifficulty()
{
int i = m_iSelection[ROW_STEPS];
CLAMP( i, 0, m_vDifficulties.size()-1 );
return m_vDifficulties[i];
}
Difficulty EditMenu::GetSelectedSourceDifficulty()
{
int i = m_iSelection[ROW_SOURCE_STEPS];
CLAMP( i, 0, m_vSourceDifficulties.size()-1 );
return m_vSourceDifficulties[i];
}
/* /*
* (c) 2001-2004 Chris Danford * (c) 2001-2004 Chris Danford
+12 -9
View File
@@ -62,14 +62,13 @@ public:
CString GetSelectedGroup() const { ASSERT(m_iSelection[ROW_GROUP] < (int)m_sGroups.size()); return m_sGroups[m_iSelection[ROW_GROUP]]; } CString GetSelectedGroup() const { ASSERT(m_iSelection[ROW_GROUP] < (int)m_sGroups.size()); return m_sGroups[m_iSelection[ROW_GROUP]]; }
Song* GetSelectedSong() const { ASSERT(m_iSelection[ROW_SONG] < (int)m_pSongs.size()); return m_pSongs[m_iSelection[ROW_SONG]]; } Song* GetSelectedSong() const { ASSERT(m_iSelection[ROW_SONG] < (int)m_pSongs.size()); return m_pSongs[m_iSelection[ROW_SONG]]; }
StepsType GetSelectedStepsType() const { ASSERT(m_iSelection[ROW_STEPS_TYPE] < (int)m_StepsTypes.size()); return m_StepsTypes[m_iSelection[ROW_STEPS_TYPE]]; } StepsType GetSelectedStepsType() const { ASSERT(m_iSelection[ROW_STEPS_TYPE] < (int)m_StepsTypes.size()); return m_StepsTypes[m_iSelection[ROW_STEPS_TYPE]]; }
Steps* GetSelectedSteps() const { ASSERT(m_iSelection[ROW_STEPS] < (int)m_vpSteps.size()); return m_vpSteps[m_iSelection[ROW_STEPS]]; } Steps* GetSelectedSteps() const { ASSERT(m_iSelection[ROW_STEPS] < (int)m_vpSteps.size()); return m_vpSteps[m_iSelection[ROW_STEPS]].pSteps; }
Difficulty GetSelectedDifficulty() const { ASSERT(m_iSelection[ROW_STEPS] < (int)m_vpSteps.size()); return m_vpSteps[m_iSelection[ROW_STEPS]].dc; }
StepsType GetSelectedSourceStepsType() const { ASSERT(m_iSelection[ROW_SOURCE_STEPS_TYPE]< (int)m_StepsTypes.size()); return m_StepsTypes[m_iSelection[ROW_SOURCE_STEPS_TYPE]]; } StepsType GetSelectedSourceStepsType() const { ASSERT(m_iSelection[ROW_SOURCE_STEPS_TYPE]< (int)m_StepsTypes.size()); return m_StepsTypes[m_iSelection[ROW_SOURCE_STEPS_TYPE]]; }
Steps* GetSelectedSourceSteps() const { ASSERT(m_iSelection[ROW_SOURCE_STEPS] < (int)m_vpSourceSteps.size()); return m_vpSourceSteps[m_iSelection[ROW_SOURCE_STEPS]]; } Steps* GetSelectedSourceSteps() const { ASSERT(m_iSelection[ROW_SOURCE_STEPS] < (int)m_vpSourceSteps.size()); return m_vpSourceSteps[m_iSelection[ROW_SOURCE_STEPS]].pSteps; }
Difficulty GetSelectedSourceDifficulty() const { ASSERT(m_iSelection[ROW_SOURCE_STEPS] < (int)m_vpSourceSteps.size()); return m_vpSourceSteps[m_iSelection[ROW_SOURCE_STEPS]].dc; }
EditMenuAction GetSelectedAction() const { ASSERT(m_iSelection[ROW_ACTION] < (int)m_Actions.size()); return m_Actions[m_iSelection[ROW_ACTION]]; } EditMenuAction GetSelectedAction() const { ASSERT(m_iSelection[ROW_ACTION] < (int)m_Actions.size()); return m_Actions[m_iSelection[ROW_ACTION]]; }
Difficulty GetSelectedDifficulty();
Difficulty GetSelectedSourceDifficulty();
EditMenuRow GetSelectedRow() const { return m_SelectedRow; } EditMenuRow GetSelectedRow() const { return m_SelectedRow; }
private: private:
@@ -88,14 +87,18 @@ private:
DifficultyMeter m_SourceMeter; DifficultyMeter m_SourceMeter;
vector<Difficulty> m_vDifficulties; struct StepsAndDifficulty
vector<Difficulty> m_vSourceDifficulties; {
StepsAndDifficulty( Steps *s, Difficulty d ) { pSteps = s; dc = d; }
Steps *pSteps;
Difficulty dc;
};
CStringArray m_sGroups; CStringArray m_sGroups;
vector<Song*> m_pSongs; vector<Song*> m_pSongs;
vector<StepsType> m_StepsTypes; vector<StepsType> m_StepsTypes;
vector<Steps*> m_vpSteps; vector<StepsAndDifficulty> m_vpSteps;
vector<Steps*> m_vpSourceSteps; vector<StepsAndDifficulty> m_vpSourceSteps;
vector<EditMenuAction> m_Actions; vector<EditMenuAction> m_Actions;
void OnRowValueChanged( EditMenuRow row ); void OnRowValueChanged( EditMenuRow row );
+10
View File
@@ -371,6 +371,16 @@ const CString& GoalTypeToString( GoalType gt );
GoalType StringToGoalType( const CString& s ); GoalType StringToGoalType( const CString& s );
enum EditMode
{
EDIT_MODE_PRACTICE, // subset of EDIT_MODE_HOME
EDIT_MODE_HOME, // subset of EDIT_MODE_FULL
EDIT_MODE_FULL, // complete
NUM_EDIT_MODES,
EDIT_MODE_INVALID,
};
#endif #endif
/* /*
+1 -1
View File
@@ -485,7 +485,7 @@ void NoteField::DrawPrimitives()
// //
// BGChange text // BGChange text
// //
if( !HOME_EDIT_MODE ) if( EDIT_MODE == EDIT_MODE_FULL )
{ {
vector<BackgroundChange> &aBackgroundChanges = GAMESTATE->m_pCurSong->m_BackgroundChanges; vector<BackgroundChange> &aBackgroundChanges = GAMESTATE->m_pCurSong->m_BackgroundChanges;
for( unsigned i=0; i<aBackgroundChanges.size(); i++ ) for( unsigned i=0; i<aBackgroundChanges.size(); i++ )
+173 -153
View File
@@ -309,161 +309,161 @@ bool ScreenEdit::EditIsBeingPressed( EditButton button ) const
const MapEditToDI *ScreenEdit::GetCurrentMap() const const MapEditToDI *ScreenEdit::GetCurrentMap() const
{ {
switch( m_EditMode ) switch( m_EditState )
{ {
case MODE_EDITING: return &g_EditMappings; case STATE_EDITING: return &g_EditMappings;
case MODE_PLAYING: return &g_PlayMappings; case STATE_PLAYING: return &g_PlayMappings;
case MODE_RECORDING: return &g_RecordMappings; case STATE_RECORDING: return &g_RecordMappings;
default: FAIL_M( ssprintf("%i",m_EditMode) ); default: FAIL_M( ssprintf("%i",m_EditState) );
} }
} }
static Menu g_EditHelp( static Menu g_EditHelp(
"ScreenMiniMenuEditHelp", "ScreenMiniMenuEditHelp",
#if defined(XBOX) #if defined(XBOX)
MenuRow( -1, "L + Up/Down: Change zoom", false, true, 0, NULL ), MenuRow( -1, "L + Up/Down: Change zoom", false, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( -1, "R + Up/Down: Drag area marker", false, true, 0, NULL ), MenuRow( -1, "R + Up/Down: Drag area marker", false, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( -1, "L + Select: Play selection", false, true, 0, NULL ), MenuRow( -1, "L + Select: Play selection", false, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( -1, "R + Start: Play whole song", false, true, 0, NULL ), MenuRow( -1, "R + Start: Play whole song", false, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( -1, "R + Select: Record", false, true, 0, NULL ), MenuRow( -1, "R + Select: Record", false, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( -1, "L + Black: Toggle assist tick", false, true, 0, NULL ), MenuRow( -1, "L + Black: Toggle assist tick", false, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( -1, "R + White: Insert beat and shift down", false, true, 0, NULL ), MenuRow( -1, "R + White: Insert beat and shift down", false, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( -1, "R + Black: Delete beat and shift up", false, true, 0, NULL ), MenuRow( -1, "R + Black: Delete beat and shift up", false, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( -1, "R + button: Lay mine", false, true, 0, NULL ), MenuRow( -1, "R + button: Lay mine", false, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( -1, "L + button: Add to/remove from right half", false, true, 0, NULL ) MenuRow( -1, "L + button: Add to/remove from right half", false, EDIT_MODE_PRACTICE, 0, NULL )
#else #else
MenuRow( -1, "PgUp/PgDn: jump measure", false, true, 0, NULL ), MenuRow( -1, "PgUp/PgDn: jump measure", false, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( -1, "Home/End: jump to first/last beat", false, true, 0, NULL ), MenuRow( -1, "Home/End: jump to first/last beat", false, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( -1, "Ctrl + Up/Down: Change zoom", false, true, 0, NULL ), MenuRow( -1, "Ctrl + Up/Down: Change zoom", false, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( -1, "Shift + Up/Down: Drag area marker", false, true, 0, NULL ), MenuRow( -1, "Shift + Up/Down: Drag area marker", false, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( -1, "P: Play selection", false, true, 0, NULL ), MenuRow( -1, "P: Play selection", false, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( -1, "Ctrl + P: Play whole song", false, true, 0, NULL ), MenuRow( -1, "Ctrl + P: Play whole song", false, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( -1, "Shift + P: Play current beat to end", false, true, 0, NULL ), MenuRow( -1, "Shift + P: Play current beat to end", false, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( -1, "Ctrl + R: Record", false, true, 0, NULL ), MenuRow( -1, "Ctrl + R: Record", false, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( -1, "F4: Toggle assist tick", false, true, 0, NULL ), MenuRow( -1, "F4: Toggle assist tick", false, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( -1, "F5/F6: Next/prev steps of same StepsType", false, true, 0, NULL ), MenuRow( -1, "F5/F6: Next/prev steps of same StepsType", false, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( -1, "F7/F8: Decrease/increase BPM at cur beat", false, true, 0, NULL ), MenuRow( -1, "F7/F8: Decrease/increase BPM at cur beat", false, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( -1, "F9/F10: Decrease/increase stop at cur beat", false, true, 0, NULL ), MenuRow( -1, "F9/F10: Decrease/increase stop at cur beat", false, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( -1, "F11/F12: Decrease/increase music offset", false, true, 0, NULL ), MenuRow( -1, "F11/F12: Decrease/increase music offset", false, EDIT_MODE_PRACTICE, 0, NULL ),
/* XXX: This would be better as a single submenu, to let people tweak /* XXX: This would be better as a single submenu, to let people tweak
* and play the sample several times (without having to re-enter the * and play the sample several times (without having to re-enter the
* menu each time), so it doesn't use a whole bunch of hotkeys. */ * menu each time), so it doesn't use a whole bunch of hotkeys. */
MenuRow( -1, "[ and ]: Decrease/increase sample music start", false, true, 0, NULL ), MenuRow( -1, "[ and ]: Decrease/increase sample music start", false, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( -1, "{ and }: Decrease/increase sample music length", false, true, 0, NULL ), MenuRow( -1, "{ and }: Decrease/increase sample music length", false, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( -1, "M: Play sample music", false, true, 0, NULL ), MenuRow( -1, "M: Play sample music", false, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( -1, "B: Add/Edit Background Change", false, true, 0, NULL ), MenuRow( -1, "B: Add/Edit Background Change", false, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( -1, "Insert: Insert beat and shift down", false, true, 0, NULL ), MenuRow( -1, "Insert: Insert beat and shift down", false, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( -1, "Ctrl + Insert: Shift BPM changes and stops down one beat", MenuRow( -1, "Ctrl + Insert: Shift BPM changes and stops down one beat",
false, true, 0, NULL ), false, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( -1, "Delete: Delete beat and shift up", false, true, 0, NULL ), MenuRow( -1, "Delete: Delete beat and shift up", false, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( -1, "Ctrl + Delete: Shift BPM changes and stops up one beat", MenuRow( -1, "Ctrl + Delete: Shift BPM changes and stops up one beat",
false, true, 0, NULL ), false, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( -1, "Shift + number: Lay mine", false, true, 0, NULL ), MenuRow( -1, "Shift + number: Lay mine", false, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( -1, "Alt + number: Add to/remove from right half", false, true, 0, NULL ) MenuRow( -1, "Alt + number: Add to/remove from right half", false, EDIT_MODE_PRACTICE, 0, NULL )
#endif #endif
); );
static Menu g_MainMenu( static Menu g_MainMenu(
"ScreenMiniMenuMainMenu", "ScreenMiniMenuMainMenu",
MenuRow( ScreenEdit::edit_steps_information, "Edit Steps Information", true, true, 0, NULL ), MenuRow( ScreenEdit::edit_steps_information, "Edit Steps Information", true, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( ScreenEdit::play_whole_song, "Play Whole Song", true, true, 0, NULL ), MenuRow( ScreenEdit::play_whole_song, "Play Whole Song", true, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( ScreenEdit::play_current_beat_to_end, "Play Current Beat to End", true, true, 0, NULL ), MenuRow( ScreenEdit::play_current_beat_to_end, "Play Current Beat to End", true, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( ScreenEdit::save, "Save", true, true, 0, NULL ), MenuRow( ScreenEdit::save, "Save", true, EDIT_MODE_HOME, 0, NULL ),
MenuRow( ScreenEdit::revert_to_last_save, "Revert to Last Save", true, true, 0, NULL ), MenuRow( ScreenEdit::revert_to_last_save, "Revert to Last Save", true, EDIT_MODE_HOME, 0, NULL ),
MenuRow( ScreenEdit::player_options, "Player Options", true, true, 0, NULL ), MenuRow( ScreenEdit::player_options, "Player Options", true, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( ScreenEdit::song_options, "Song Options", true, true, 0, NULL ), MenuRow( ScreenEdit::song_options, "Song Options", true, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( ScreenEdit::edit_song_info, "Edit Song Info", true, false, 0, NULL ), MenuRow( ScreenEdit::edit_song_info, "Edit Song Info", true, EDIT_MODE_FULL, 0, NULL ),
MenuRow( ScreenEdit::edit_bpm, "Edit BPM Change", true, false, 0, NULL ), MenuRow( ScreenEdit::edit_bpm, "Edit BPM Change", true, EDIT_MODE_FULL, 0, NULL ),
MenuRow( ScreenEdit::edit_stop, "Edit Stop", true, false, 0, NULL ), MenuRow( ScreenEdit::edit_stop, "Edit Stop", true, EDIT_MODE_FULL, 0, NULL ),
MenuRow( ScreenEdit::edit_bg_change, "Add/Edit Background Change", true, false, 0, NULL ), MenuRow( ScreenEdit::edit_bg_change, "Add/Edit Background Change", true, EDIT_MODE_FULL, 0, NULL ),
MenuRow( ScreenEdit::play_preview_music, "Play Preview Music", true, false, 0, NULL ), MenuRow( ScreenEdit::play_preview_music, "Play Preview Music", true, EDIT_MODE_FULL, 0, NULL ),
MenuRow( ScreenEdit::preferences, "Preferences", true, false, 0, NULL ), MenuRow( ScreenEdit::preferences, "Preferences", true, EDIT_MODE_FULL, 0, NULL ),
MenuRow( ScreenEdit::exit, "Exit", true, true, 0, NULL ) MenuRow( ScreenEdit::exit, "Exit", true, EDIT_MODE_PRACTICE, 0, NULL )
); );
static Menu g_AreaMenu( static Menu g_AreaMenu(
"ScreenMiniMenuAreaMenu", "ScreenMiniMenuAreaMenu",
MenuRow( ScreenEdit::cut, "Cut", true, true, 0, NULL ), MenuRow( ScreenEdit::cut, "Cut", true, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( ScreenEdit::copy, "Copy", true, true, 0, NULL ), MenuRow( ScreenEdit::copy, "Copy", true, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( ScreenEdit::paste_at_current_beat, "Paste at current beat", true, true, 0, NULL ), MenuRow( ScreenEdit::paste_at_current_beat, "Paste at current beat", true, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( ScreenEdit::paste_at_begin_marker, "Paste at begin marker", true, true, 0, NULL ), MenuRow( ScreenEdit::paste_at_begin_marker, "Paste at begin marker", true, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( ScreenEdit::clear, "Clear area", true, true, 0, NULL ), MenuRow( ScreenEdit::clear, "Clear area", true, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( ScreenEdit::quantize, "Quantize", true, true, 0, "4th","8th","12th","16th","24th","32nd","48th","64th","192nd"), MenuRow( ScreenEdit::quantize, "Quantize", true, EDIT_MODE_PRACTICE, 0, "4th","8th","12th","16th","24th","32nd","48th","64th","192nd"),
MenuRow( ScreenEdit::turn, "Turn", true, true, 0, "Left","Right","Mirror","Shuffle","SuperShuffle" ), MenuRow( ScreenEdit::turn, "Turn", true, EDIT_MODE_PRACTICE, 0, "Left","Right","Mirror","Shuffle","SuperShuffle" ),
MenuRow( ScreenEdit::transform, "Transform", true, true, 0, "NoHolds","NoMines","Little","Wide","Big","Quick","Skippy","Mines","Echo","Stomp","Planted","Floored","Twister","NoJumps","NoHands","NoQuads" ), MenuRow( ScreenEdit::transform, "Transform", true, EDIT_MODE_PRACTICE, 0, "NoHolds","NoMines","Little","Wide","Big","Quick","Skippy","Mines","Echo","Stomp","Planted","Floored","Twister","NoJumps","NoHands","NoQuads" ),
MenuRow( ScreenEdit::alter, "Alter", true, true, 0, "Autogen To Fill Width","Backwards","Swap Sides","Copy Left To Right","Copy Right To Left","Clear Left","Clear Right","Collapse To One","Collapse Left","Shift Left","Shift Right" ), MenuRow( ScreenEdit::alter, "Alter", true, EDIT_MODE_PRACTICE, 0, "Autogen To Fill Width","Backwards","Swap Sides","Copy Left To Right","Copy Right To Left","Clear Left","Clear Right","Collapse To One","Collapse Left","Shift Left","Shift Right" ),
MenuRow( ScreenEdit::tempo, "Tempo", true, false, 0, "Compress 2x","Compress 3->2","Compress 4->3","Expand 3->4","Expand 2->3","Expand 2x" ), MenuRow( ScreenEdit::tempo, "Tempo", true, EDIT_MODE_FULL, 0, "Compress 2x","Compress 3->2","Compress 4->3","Expand 3->4","Expand 2->3","Expand 2x" ),
MenuRow( ScreenEdit::play, "Play selection", true, true, 0, NULL ), MenuRow( ScreenEdit::play, "Play selection", true, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( ScreenEdit::record, "Record in selection", true, true, 0, NULL ), MenuRow( ScreenEdit::record, "Record in selection", true, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( ScreenEdit::insert_and_shift, "Insert beat and shift down", true, true, 0, NULL ), MenuRow( ScreenEdit::insert_and_shift, "Insert beat and shift down", true, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( ScreenEdit::delete_and_shift, "Delete beat and shift up", true, true, 0, NULL ), MenuRow( ScreenEdit::delete_and_shift, "Delete beat and shift up", true, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( ScreenEdit::shift_pauses_forward, "Shift pauses and BPM changes down",true, false, 0, NULL ), MenuRow( ScreenEdit::shift_pauses_forward, "Shift pauses and BPM changes down",true, EDIT_MODE_FULL, 0, NULL ),
MenuRow( ScreenEdit::shift_pauses_backward, "Shift pauses and BPM changes up", true, false, 0, NULL ), MenuRow( ScreenEdit::shift_pauses_backward, "Shift pauses and BPM changes up", true, EDIT_MODE_FULL, 0, NULL ),
MenuRow( ScreenEdit::convert_beat_to_pause, "Convert beats to pause", true, false, 0, NULL ), MenuRow( ScreenEdit::convert_beat_to_pause, "Convert beats to pause", true, EDIT_MODE_FULL, 0, NULL ),
MenuRow( ScreenEdit::convert_pause_to_beat, "Convert pause to beats", true, false, 0, NULL ), MenuRow( ScreenEdit::convert_pause_to_beat, "Convert pause to beats", true, EDIT_MODE_FULL, 0, NULL ),
MenuRow( ScreenEdit::undo, "Undo", true, true, 0, NULL ) MenuRow( ScreenEdit::undo, "Undo", true, EDIT_MODE_PRACTICE, 0, NULL )
); );
static Menu g_StepsInformation( static Menu g_StepsInformation(
"ScreenMiniMenuStepsInformation", "ScreenMiniMenuStepsInformation",
MenuRow( ScreenEdit::difficulty, "Difficulty", true, true, 0, "BEGINNER","EASY","MEDIUM","HARD","CHALLENGE","EDIT" ), MenuRow( ScreenEdit::difficulty, "Difficulty", true, EDIT_MODE_PRACTICE, 0, "BEGINNER","EASY","MEDIUM","HARD","CHALLENGE","EDIT" ),
MenuRow( ScreenEdit::meter, "Meter", true, true, 0, "1","2","3","4","5","6","7","8","9","10","11","12","13" ), MenuRow( ScreenEdit::meter, "Meter", true, EDIT_MODE_PRACTICE, 0, "1","2","3","4","5","6","7","8","9","10","11","12","13" ),
MenuRow( ScreenEdit::description, "Description", true, true, 0, NULL ), MenuRow( ScreenEdit::description, "Description", true, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( ScreenEdit::predict_meter, "Predicted Meter", false, true, 0, NULL ), MenuRow( ScreenEdit::predict_meter, "Predicted Meter", false, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( ScreenEdit::tap_notes, "Tap Steps", false, true, 0, NULL ), MenuRow( ScreenEdit::tap_notes, "Tap Steps", false, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( ScreenEdit::jumps, "Jumps", false, true, 0, NULL ), MenuRow( ScreenEdit::jumps, "Jumps", false, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( ScreenEdit::hands, "Hands", false, true, 0, NULL ), MenuRow( ScreenEdit::hands, "Hands", false, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( ScreenEdit::quads, "Quads", false, true, 0, NULL ), MenuRow( ScreenEdit::quads, "Quads", false, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( ScreenEdit::holds, "Holds", false, true, 0, NULL ), MenuRow( ScreenEdit::holds, "Holds", false, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( ScreenEdit::mines, "Mines", false, true, 0, NULL ), MenuRow( ScreenEdit::mines, "Mines", false, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( ScreenEdit::stream, "Stream", false, false, 0, NULL ), MenuRow( ScreenEdit::stream, "Stream", false, EDIT_MODE_FULL, 0, NULL ),
MenuRow( ScreenEdit::voltage, "Voltage", false, false, 0, NULL ), MenuRow( ScreenEdit::voltage, "Voltage", false, EDIT_MODE_FULL, 0, NULL ),
MenuRow( ScreenEdit::air, "Air", false, false, 0, NULL ), MenuRow( ScreenEdit::air, "Air", false, EDIT_MODE_FULL, 0, NULL ),
MenuRow( ScreenEdit::freeze, "Freeze", false, false, 0, NULL ), MenuRow( ScreenEdit::freeze, "Freeze", false, EDIT_MODE_FULL, 0, NULL ),
MenuRow( ScreenEdit::chaos, "Chaos", false, false, 0, NULL ) MenuRow( ScreenEdit::chaos, "Chaos", false, EDIT_MODE_FULL, 0, NULL )
); );
static Menu g_SongInformation( static Menu g_SongInformation(
"ScreenMiniMenuSongInfomation", "ScreenMiniMenuSongInfomation",
MenuRow( ScreenEdit::main_title, "Main title", true, true, 0, NULL ), MenuRow( ScreenEdit::main_title, "Main title", true, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( ScreenEdit::sub_title, "Sub title", true, true, 0, NULL ), MenuRow( ScreenEdit::sub_title, "Sub title", true, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( ScreenEdit::artist, "Artist", true, true, 0, NULL ), MenuRow( ScreenEdit::artist, "Artist", true, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( ScreenEdit::credit, "Credit", true, true, 0, NULL ), MenuRow( ScreenEdit::credit, "Credit", true, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( ScreenEdit::main_title_transliteration, "Main title transliteration", true, true, 0, NULL ), MenuRow( ScreenEdit::main_title_transliteration, "Main title transliteration", true, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( ScreenEdit::sub_title_transliteration, "Sub title transliteration", true, true, 0, NULL ), MenuRow( ScreenEdit::sub_title_transliteration, "Sub title transliteration", true, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( ScreenEdit::artist_transliteration, "Artist transliteration", true, true, 0, NULL ) MenuRow( ScreenEdit::artist_transliteration, "Artist transliteration", true, EDIT_MODE_PRACTICE, 0, NULL )
); );
static Menu g_BackgroundChange( static Menu g_BackgroundChange(
"ScreenMiniMenuBackgroundChange", "ScreenMiniMenuBackgroundChange",
MenuRow( ScreenEdit::rate, "Rate (applies to new adds)", true, true, 10, "0%","10%","20%","30%","40%","50%","60%","70%","80%","90%","100%","120%","140%","160%","180%","200%" ), MenuRow( ScreenEdit::rate, "Rate (applies to new adds)", true, EDIT_MODE_PRACTICE, 10, "0%","10%","20%","30%","40%","50%","60%","70%","80%","90%","100%","120%","140%","160%","180%","200%" ),
MenuRow( ScreenEdit::fade_last, "Fade Last (applies to new adds)", true, true, 0, "NO","YES" ), MenuRow( ScreenEdit::fade_last, "Fade Last (applies to new adds)", true, EDIT_MODE_PRACTICE, 0, "NO","YES" ),
MenuRow( ScreenEdit::rewind_movie, "Rewind Movie (applies to new adds)", true, true, 0, "NO","YES" ), MenuRow( ScreenEdit::rewind_movie, "Rewind Movie (applies to new adds)", true, EDIT_MODE_PRACTICE, 0, "NO","YES" ),
MenuRow( ScreenEdit::loop, "Loop (applies to new adds)", true, true, 1, "NO","YES" ), MenuRow( ScreenEdit::loop, "Loop (applies to new adds)", true, EDIT_MODE_PRACTICE, 1, "NO","YES" ),
MenuRow( ScreenEdit::add_random, "Add Change to random", true, true, 0, NULL ), MenuRow( ScreenEdit::add_random, "Add Change to random", true, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( ScreenEdit::add_song_bganimation, "Add Change to song BGAnimation", true, true, 0, NULL ), MenuRow( ScreenEdit::add_song_bganimation, "Add Change to song BGAnimation", true, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( ScreenEdit::add_song_movie, "Add Change to song Movie", true, true, 0, NULL ), MenuRow( ScreenEdit::add_song_movie, "Add Change to song Movie", true, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( ScreenEdit::add_song_still, "Add Change to song Still", true, true, 0, NULL ), MenuRow( ScreenEdit::add_song_still, "Add Change to song Still", true, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( ScreenEdit::add_global_random_movie, "Add Change to global Random Movie", true, true, 0, NULL ), MenuRow( ScreenEdit::add_global_random_movie, "Add Change to global Random Movie", true, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( ScreenEdit::add_global_bganimation, "Add Change to global BGAnimation", true, true, 0, NULL ), MenuRow( ScreenEdit::add_global_bganimation, "Add Change to global BGAnimation", true, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( ScreenEdit::add_global_visualization, "Add Change to global Visualization", true, true, 0, NULL ), MenuRow( ScreenEdit::add_global_visualization, "Add Change to global Visualization", true, EDIT_MODE_PRACTICE, 0, NULL ),
MenuRow( ScreenEdit::delete_change, "Remove Change", true, true, 0, NULL ) MenuRow( ScreenEdit::delete_change, "Remove Change", true, EDIT_MODE_PRACTICE, 0, NULL )
); );
static Menu g_Prefs( static Menu g_Prefs(
"ScreenMiniMenuPreferences", "ScreenMiniMenuPreferences",
MenuRow( ScreenEdit::pref_show_bgs_play, "Show BGChanges during Play/Record", true, true, 0, "NO","YES" ) MenuRow( ScreenEdit::pref_show_bgs_play, "Show BGChanges during Play/Record", true, EDIT_MODE_PRACTICE, 0, "NO","YES" )
); );
static Menu g_InsertAttack( static Menu g_InsertAttack(
"ScreenMiniMenuInsertAttack", "ScreenMiniMenuInsertAttack",
MenuRow( -1, "Duration seconds", true, true, 3, "5","10","15","20","25","30","35","40","45" ), MenuRow( -1, "Duration seconds", true, EDIT_MODE_PRACTICE, 3, "5","10","15","20","25","30","35","40","45" ),
MenuRow( -1, "Set modifiers", true, true, 0, "PRESS START" ) MenuRow( -1, "Set modifiers", true, EDIT_MODE_PRACTICE, 0, "PRESS START" )
); );
static Menu g_CourseMode( static Menu g_CourseMode(
"ScreenMiniMenuCourseDisplay", "ScreenMiniMenuCourseDisplay",
MenuRow( -1, "Play mods from course", true, true, 0, NULL ) MenuRow( -1, "Play mods from course", true, EDIT_MODE_PRACTICE, 0, NULL )
); );
// HACK: need to remember the track we're inserting on so // HACK: need to remember the track we're inserting on so
@@ -525,8 +525,8 @@ void ScreenEdit::Init()
g_iShiftAnchor = -1; g_iShiftAnchor = -1;
m_EditMode = MODE_INVALID; m_EditState = STATE_INVALID;
TransitionEditMode( MODE_EDITING ); TransitionEditState( STATE_EDITING );
this->AddChild( &m_Background ); this->AddChild( &m_Background );
@@ -616,7 +616,7 @@ ScreenEdit::~ScreenEdit()
// play assist ticks // play assist ticks
void ScreenEdit::PlayTicks() void ScreenEdit::PlayTicks()
{ {
if( !GAMESTATE->m_SongOptions.m_bAssistTick || m_EditMode != MODE_PLAYING ) if( !GAMESTATE->m_SongOptions.m_bAssistTick || m_EditState != STATE_PLAYING )
return; return;
/* Sound cards have a latency between when a sample is Play()ed and when the sound /* Sound cards have a latency between when a sample is Play()ed and when the sound
@@ -673,7 +673,7 @@ void ScreenEdit::Update( float fDeltaTime )
GAMESTATE->UpdateSongPosition( fSeconds, GAMESTATE->m_pCurSong->m_Timing, tm ); GAMESTATE->UpdateSongPosition( fSeconds, GAMESTATE->m_pCurSong->m_Timing, tm );
} }
if( m_EditMode == MODE_RECORDING ) if( m_EditState == STATE_RECORDING )
{ {
// add or extend holds // add or extend holds
@@ -700,13 +700,13 @@ void ScreenEdit::Update( float fDeltaTime )
} }
} }
if( m_EditMode == MODE_RECORDING || m_EditMode == MODE_PLAYING ) if( m_EditState == STATE_RECORDING || m_EditState == STATE_PLAYING )
{ {
// check for end of playback/record // check for end of playback/record
if( GAMESTATE->m_fSongBeat > NoteRowToBeat(m_NoteFieldEdit.m_iEndMarker) + 4 ) // give a one measure lead out if( GAMESTATE->m_fSongBeat > NoteRowToBeat(m_NoteFieldEdit.m_iEndMarker) + 4 ) // give a one measure lead out
{ {
TransitionEditMode( MODE_EDITING ); TransitionEditState( STATE_EDITING );
GAMESTATE->m_fSongBeat = NoteRowToBeat( m_NoteFieldEdit.m_iEndMarker ); GAMESTATE->m_fSongBeat = NoteRowToBeat( m_NoteFieldEdit.m_iEndMarker );
} }
} }
@@ -734,7 +734,7 @@ void ScreenEdit::UpdateTextInfo()
return; return;
// Don't update the text during playback or record. It causes skips. // Don't update the text during playback or record. It causes skips.
if( m_EditMode != MODE_EDITING ) if( m_EditState != STATE_EDITING )
return; return;
if( !m_bTextInfoNeedsUpdate ) if( !m_bTextInfoNeedsUpdate )
@@ -755,10 +755,9 @@ void ScreenEdit::UpdateTextInfo()
sText += ssprintf( "Current sec:\n %.3f\n", m_pSong->GetElapsedTimeFromBeat(GAMESTATE->m_fSongBeat) ); sText += ssprintf( "Current sec:\n %.3f\n", m_pSong->GetElapsedTimeFromBeat(GAMESTATE->m_fSongBeat) );
sText += ssprintf( "Snap to:\n %s\n", sNoteType.c_str() ); sText += ssprintf( "Snap to:\n %s\n", sNoteType.c_str() );
sText += ssprintf( "Selection beat:\n %s\n %s\n", m_NoteFieldEdit.m_iBeginMarker==-1 ? "----" : ssprintf("%.3f",NoteRowToBeat(m_NoteFieldEdit.m_iBeginMarker)).c_str(), m_NoteFieldEdit.m_iEndMarker==-1 ? "----" : ssprintf("%.3f",NoteRowToBeat(m_NoteFieldEdit.m_iEndMarker)).c_str() ); sText += ssprintf( "Selection beat:\n %s\n %s\n", m_NoteFieldEdit.m_iBeginMarker==-1 ? "----" : ssprintf("%.3f",NoteRowToBeat(m_NoteFieldEdit.m_iBeginMarker)).c_str(), m_NoteFieldEdit.m_iEndMarker==-1 ? "----" : ssprintf("%.3f",NoteRowToBeat(m_NoteFieldEdit.m_iEndMarker)).c_str() );
if( !HOME_EDIT_MODE ) if( EDIT_MODE == EDIT_MODE_FULL )
sText += ssprintf( "Difficulty:\n %s\n", DifficultyToString( m_pSteps->GetDifficulty() ).c_str() );
if( !HOME_EDIT_MODE )
{ {
sText += ssprintf( "Difficulty:\n %s\n", DifficultyToString( m_pSteps->GetDifficulty() ).c_str() );
sText += ssprintf( "Description:\n %s\n", GAMESTATE->m_pCurSteps[PLAYER_1] ? GAMESTATE->m_pCurSteps[PLAYER_1]->GetDescription().c_str() : "no description" ); sText += ssprintf( "Description:\n %s\n", GAMESTATE->m_pCurSteps[PLAYER_1] ? GAMESTATE->m_pCurSteps[PLAYER_1]->GetDescription().c_str() : "no description" );
sText += ssprintf( "Main title:\n %s\n", m_pSong->m_sMainTitle.c_str() ); sText += ssprintf( "Main title:\n %s\n", m_pSong->m_sMainTitle.c_str() );
sText += ssprintf( "Sub title:\n %s\n", m_pSong->m_sSubTitle.c_str() ); sText += ssprintf( "Sub title:\n %s\n", m_pSong->m_sSubTitle.c_str() );
@@ -768,12 +767,12 @@ void ScreenEdit::UpdateTextInfo()
sText += ssprintf( "Hands:\n %d\n", iNumHands ); sText += ssprintf( "Hands:\n %d\n", iNumHands );
sText += ssprintf( "Holds:\n %d\n", iNumHolds ); sText += ssprintf( "Holds:\n %d\n", iNumHolds );
sText += ssprintf( "Mines:\n %d\n", iNumMines ); sText += ssprintf( "Mines:\n %d\n", iNumMines );
if( !HOME_EDIT_MODE ) if( EDIT_MODE == EDIT_MODE_FULL )
{
sText += ssprintf( "Beat 0 Offset:\n %.3f secs\n", m_pSong->m_Timing.m_fBeat0OffsetInSeconds ); sText += ssprintf( "Beat 0 Offset:\n %.3f secs\n", m_pSong->m_Timing.m_fBeat0OffsetInSeconds );
if( !HOME_EDIT_MODE )
sText += ssprintf( "Preview Start:\n %.2f secs\n", m_pSong->m_fMusicSampleStartSeconds ); sText += ssprintf( "Preview Start:\n %.2f secs\n", m_pSong->m_fMusicSampleStartSeconds );
if( !HOME_EDIT_MODE )
sText += ssprintf( "Preview Length:\n %.2f secs\n",m_pSong->m_fMusicSampleLengthSeconds ); sText += ssprintf( "Preview Length:\n %.2f secs\n",m_pSong->m_fMusicSampleLengthSeconds );
}
m_textInfo.SetText( sText ); m_textInfo.SetText( sText );
} }
@@ -800,16 +799,16 @@ void ScreenEdit::Input( const DeviceInput& DeviceI, const InputEventType type, c
EditButton EditB; EditButton EditB;
DeviceToEdit( di, EditB ); DeviceToEdit( di, EditB );
switch( m_EditMode ) switch( m_EditState )
{ {
case MODE_EDITING: case STATE_EDITING:
InputEdit( di, type, GameI, MenuI, StyleI, EditB ); InputEdit( di, type, GameI, MenuI, StyleI, EditB );
m_bTextInfoNeedsUpdate = true; m_bTextInfoNeedsUpdate = true;
break; break;
case MODE_RECORDING: case STATE_RECORDING:
InputRecord( di, type, GameI, MenuI, StyleI, EditB ); InputRecord( di, type, GameI, MenuI, StyleI, EditB );
break; break;
case MODE_PLAYING: case STATE_PLAYING:
InputPlay( di, type, GameI, MenuI, StyleI, EditB ); InputPlay( di, type, GameI, MenuI, StyleI, EditB );
break; break;
default: ASSERT(0); default: ASSERT(0);
@@ -1350,7 +1349,7 @@ void ScreenEdit::InputRecord( const DeviceInput& DeviceI, const InputEventType t
{ {
if( EditB == EDIT_BUTTON_RETURN_TO_EDIT ) if( EditB == EDIT_BUTTON_RETURN_TO_EDIT )
{ {
TransitionEditMode( MODE_EDITING ); TransitionEditState( STATE_EDITING );
return; return;
} }
@@ -1397,7 +1396,7 @@ void ScreenEdit::InputPlay( const DeviceInput& DeviceI, const InputEventType typ
switch( EditB ) switch( EditB )
{ {
case EDIT_BUTTON_RETURN_TO_EDIT: case EDIT_BUTTON_RETURN_TO_EDIT:
TransitionEditMode( MODE_EDITING ); TransitionEditState( STATE_EDITING );
break; break;
case EDIT_BUTTON_TOGGLE_ASSIST_TICK: case EDIT_BUTTON_TOGGLE_ASSIST_TICK:
GAMESTATE->m_SongOptions.m_bAssistTick ^= 1; GAMESTATE->m_SongOptions.m_bAssistTick ^= 1;
@@ -1443,13 +1442,13 @@ void ScreenEdit::InputPlay( const DeviceInput& DeviceI, const InputEventType typ
} }
void ScreenEdit::TransitionEditMode( EditMode em ) void ScreenEdit::TransitionEditState( EditState em )
{ {
EditMode old = m_EditMode; EditState old = m_EditState;
switch( em ) switch( em )
{ {
case MODE_EDITING: case STATE_EDITING:
m_sprOverlay->PlayCommand( "Edit" ); m_sprOverlay->PlayCommand( "Edit" );
/* Important: people will stop playing, change the BG and start again; make sure we reload */ /* Important: people will stop playing, change the BG and start again; make sure we reload */
@@ -1472,7 +1471,7 @@ void ScreenEdit::TransitionEditMode( EditMode em )
GAMESTATE->RebuildPlayerOptionsFromActiveAttacks( PLAYER_1 ); GAMESTATE->RebuildPlayerOptionsFromActiveAttacks( PLAYER_1 );
GAMESTATE->m_pPlayerState[PLAYER_1]->m_CurrentPlayerOptions = GAMESTATE->m_pPlayerState[PLAYER_1]->m_PlayerOptions; GAMESTATE->m_pPlayerState[PLAYER_1]->m_CurrentPlayerOptions = GAMESTATE->m_pPlayerState[PLAYER_1]->m_PlayerOptions;
if( old == MODE_RECORDING ) if( old == STATE_RECORDING )
{ {
SaveUndo(); SaveUndo();
@@ -1484,9 +1483,9 @@ void ScreenEdit::TransitionEditMode( EditMode em )
CheckNumberOfNotesAndUndo(); CheckNumberOfNotesAndUndo();
} }
break; break;
case MODE_RECORDING: case STATE_RECORDING:
break; break;
case MODE_PLAYING: case STATE_PLAYING:
break; break;
default: default:
ASSERT(0); ASSERT(0);
@@ -1496,26 +1495,26 @@ void ScreenEdit::TransitionEditMode( EditMode em )
// //
// Show/hide depending on em // Show/hide depending on em
// //
m_Background.SetHidden( !PREFSMAN->m_bEditorShowBGChangesPlay || em == MODE_EDITING ); m_Background.SetHidden( !PREFSMAN->m_bEditorShowBGChangesPlay || em == STATE_EDITING );
m_sprUnderlay->SetHidden( em != MODE_EDITING ); m_sprUnderlay->SetHidden( em != STATE_EDITING );
m_sprOverlay->SetHidden( em != MODE_EDITING ); m_sprOverlay->SetHidden( em != STATE_EDITING );
m_textInputTips.SetHidden( em != MODE_EDITING ); m_textInputTips.SetHidden( em != STATE_EDITING );
m_textInfo.SetHidden( em != MODE_EDITING ); m_textInfo.SetHidden( em != STATE_EDITING );
// Play the OnCommands again so that these will be re-hidden if the OnCommand hides them. // Play the OnCommands again so that these will be re-hidden if the OnCommand hides them.
if( em == MODE_EDITING ) if( em == STATE_EDITING )
{ {
m_textInputTips.PlayCommand( "On" ); m_textInputTips.PlayCommand( "On" );
m_textInfo.PlayCommand( "On" ); m_textInfo.PlayCommand( "On" );
} }
m_textPlayRecordHelp.SetHidden( em == MODE_EDITING ); m_textPlayRecordHelp.SetHidden( em == STATE_EDITING );
m_SnapDisplay.SetHidden( em != MODE_EDITING ); m_SnapDisplay.SetHidden( em != STATE_EDITING );
m_NoteFieldEdit.SetHidden( em != MODE_EDITING ); m_NoteFieldEdit.SetHidden( em != STATE_EDITING );
m_NoteFieldRecord.SetHidden( em != MODE_RECORDING ); m_NoteFieldRecord.SetHidden( em != STATE_RECORDING );
m_Player.SetHidden( em != MODE_PLAYING ); m_Player.SetHidden( em != STATE_PLAYING );
m_Foreground.SetHidden( !PREFSMAN->m_bEditorShowBGChangesPlay || em == MODE_EDITING ); m_Foreground.SetHidden( !PREFSMAN->m_bEditorShowBGChangesPlay || em == STATE_EDITING );
m_EditMode = em; m_EditState = em;
} }
void ScreenEdit::HandleScreenMessage( const ScreenMessage SM ) void ScreenEdit::HandleScreenMessage( const ScreenMessage SM )
@@ -1773,10 +1772,11 @@ void ScreenEdit::HandleMainMenuChoice( MainMenuChoice c, const vector<int> &iAns
float fMusicSeconds = m_soundMusic.GetLengthSeconds(); float fMusicSeconds = m_soundMusic.GetLengthSeconds();
g_StepsInformation.rows[difficulty].iDefaultChoice = pSteps->GetDifficulty(); g_StepsInformation.rows[difficulty].iDefaultChoice = pSteps->GetDifficulty();
g_StepsInformation.rows[difficulty].bEnabled = !HOME_EDIT_MODE; g_StepsInformation.rows[difficulty].bEnabled = EDIT_MODE == EDIT_MODE_FULL;
g_StepsInformation.rows[difficulty].bEnabled = EDIT_MODE <= EDIT_MODE_HOME;
g_StepsInformation.rows[meter].iDefaultChoice = clamp( pSteps->GetMeter()-1, 0, MAX_METER+1 ); g_StepsInformation.rows[meter].iDefaultChoice = clamp( pSteps->GetMeter()-1, 0, MAX_METER+1 );
g_StepsInformation.rows[predict_meter].choices.resize(1);g_StepsInformation.rows[predict_meter].choices[0] = ssprintf("%.2f",pSteps->PredictMeter()); g_StepsInformation.rows[predict_meter].choices.resize(1);g_StepsInformation.rows[predict_meter].choices[0] = ssprintf("%.2f",pSteps->PredictMeter());
g_StepsInformation.rows[description].choices.resize(1); g_StepsInformation.rows[description].choices[0] = pSteps->GetDescription(); g_StepsInformation.rows[description].bEnabled = !HOME_EDIT_MODE; g_StepsInformation.rows[description].choices.resize(1); g_StepsInformation.rows[description].choices[0] = pSteps->GetDescription(); g_StepsInformation.rows[description].bEnabled = EDIT_MODE == EDIT_MODE_FULL;
g_StepsInformation.rows[tap_notes].choices.resize(1); g_StepsInformation.rows[tap_notes].choices[0] = ssprintf("%d", m_NoteDataEdit.GetNumTapNotes()); g_StepsInformation.rows[tap_notes].choices.resize(1); g_StepsInformation.rows[tap_notes].choices[0] = ssprintf("%d", m_NoteDataEdit.GetNumTapNotes());
g_StepsInformation.rows[jumps].choices.resize(1); g_StepsInformation.rows[jumps].choices[0] = ssprintf("%d", m_NoteDataEdit.GetNumJumps()); g_StepsInformation.rows[jumps].choices.resize(1); g_StepsInformation.rows[jumps].choices[0] = ssprintf("%d", m_NoteDataEdit.GetNumJumps());
g_StepsInformation.rows[hands].choices.resize(1); g_StepsInformation.rows[hands].choices[0] = ssprintf("%d", m_NoteDataEdit.GetNumHands()); g_StepsInformation.rows[hands].choices.resize(1); g_StepsInformation.rows[hands].choices[0] = ssprintf("%d", m_NoteDataEdit.GetNumHands());
@@ -1818,7 +1818,9 @@ void ScreenEdit::HandleMainMenuChoice( MainMenuChoice c, const vector<int> &iAns
pSteps->SetNoteData( m_NoteDataEdit ); pSteps->SetNoteData( m_NoteDataEdit );
pSteps->CalculateRadarValues( pSong->m_fMusicLengthSeconds ); pSteps->CalculateRadarValues( pSong->m_fMusicLengthSeconds );
if( HOME_EDIT_MODE ) switch( EDIT_MODE )
{
case EDIT_MODE_HOME:
{ {
CString s; CString s;
switch( c ) switch( c )
@@ -1829,7 +1831,8 @@ void ScreenEdit::HandleMainMenuChoice( MainMenuChoice c, const vector<int> &iAns
} }
SCREENMAN->AddNewScreenToTop( s ); SCREENMAN->AddNewScreenToTop( s );
} }
else break;
case EDIT_MODE_FULL:
{ {
pSteps->SetSavedToDisk( true ); pSteps->SetSavedToDisk( true );
CopyToLastSave(); CopyToLastSave();
@@ -1847,6 +1850,12 @@ void ScreenEdit::HandleMainMenuChoice( MainMenuChoice c, const vector<int> &iAns
HandleScreenMessage( SM_Success ); HandleScreenMessage( SM_Success );
} }
break;
case EDIT_MODE_PRACTICE:
break;
default:
ASSERT(0);
}
m_soundSave.Play(); m_soundSave.Play();
} }
@@ -2013,11 +2022,22 @@ void ScreenEdit::HandleMainMenuChoice( MainMenuChoice c, const vector<int> &iAns
PlayPreviewMusic(); PlayPreviewMusic();
break; break;
case exit: case exit:
switch( EDIT_MODE )
{
case EDIT_MODE_FULL:
case EDIT_MODE_HOME:
SCREENMAN->Prompt( SCREENMAN->Prompt(
SM_DoSaveAndExit, SM_DoSaveAndExit,
"Do you want to save changes before exiting?", "Do you want to save changes before exiting?",
PROMPT_YES_NO_CANCEL, ANSWER_CANCEL ); PROMPT_YES_NO_CANCEL, ANSWER_CANCEL );
break; break;
case EDIT_MODE_PRACTICE:
SCREENMAN->SendMessageToTopScreen( SM_DoExit );
break;
default:
ASSERT(0);
}
break;
default: default:
ASSERT(0); ASSERT(0);
}; };
@@ -2271,7 +2291,7 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, const vector<int> &iAns
SOUND->PlayMusic(""); SOUND->PlayMusic("");
TransitionEditMode( MODE_PLAYING ); TransitionEditState( STATE_PLAYING );
m_sprOverlay->PlayCommand( "Play" ); m_sprOverlay->PlayCommand( "Play" );
GAMESTATE->m_bPastHereWeGo = true; GAMESTATE->m_bPastHereWeGo = true;
@@ -2323,7 +2343,7 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, const vector<int> &iAns
SOUND->PlayMusic(""); SOUND->PlayMusic("");
TransitionEditMode( MODE_RECORDING ); TransitionEditState( STATE_RECORDING );
m_sprOverlay->PlayCommand( "Record" ); m_sprOverlay->PlayCommand( "Record" );
GAMESTATE->m_bPastHereWeGo = true; GAMESTATE->m_bPastHereWeGo = true;
+3 -3
View File
@@ -139,8 +139,8 @@ public:
protected: protected:
ThemeMetric<CString> PREV_SCREEN; ThemeMetric<CString> PREV_SCREEN;
enum EditMode { MODE_EDITING, MODE_RECORDING, MODE_PLAYING, NUM_EDIT_MODES, MODE_INVALID }; enum EditState { STATE_EDITING, STATE_RECORDING, STATE_PLAYING, NUM_EDIT_STATES, STATE_INVALID };
void TransitionEditMode( EditMode em ); void TransitionEditState( EditState em );
void PlayTicks(); void PlayTicks();
void PlayPreviewMusic(); void PlayPreviewMusic();
@@ -160,7 +160,7 @@ protected:
float GetMaximumBeatForMoving() const; // don't allow Down key to go past this beat. float GetMaximumBeatForMoving() const; // don't allow Down key to go past this beat.
EditMode m_EditMode; EditState m_EditState;
Song* m_pSong; Song* m_pSong;
Steps* m_pSteps; Steps* m_pSteps;
+8 -5
View File
@@ -62,7 +62,7 @@ void DeleteCurSteps( void* pThrowAway )
Song* pSong = GAMESTATE->m_pCurSong; Song* pSong = GAMESTATE->m_pCurSong;
Steps* pStepsToDelete = GAMESTATE->m_pCurSteps[PLAYER_1]; Steps* pStepsToDelete = GAMESTATE->m_pCurSteps[PLAYER_1];
pSong->RemoveSteps( pStepsToDelete ); pSong->RemoveSteps( pStepsToDelete );
if( !HOME_EDIT_MODE ) if( EDIT_MODE == EDIT_MODE_FULL )
{ {
pSong->Save(); pSong->Save();
SCREENMAN->ZeroNextUpdate(); SCREENMAN->ZeroNextUpdate();
@@ -224,13 +224,16 @@ void ScreenEditMenu::MenuStart( PlayerNumber pn )
break; break;
case EDIT_MENU_ACTION_DELETE: case EDIT_MENU_ACTION_DELETE:
ASSERT( pSteps ); ASSERT( pSteps );
if( HOME_EDIT_MODE ) switch( EDIT_MODE )
{ {
case EDIT_MODE_HOME:
SCREENMAN->AddNewScreenToTop( "ScreenEditMenuDeleteSteps" ); SCREENMAN->AddNewScreenToTop( "ScreenEditMenuDeleteSteps" );
} break;
else case EDIT_MODE_FULL:
{
SCREENMAN->Prompt( SM_RefreshSelector, "These steps will be lost permanently.\n\nContinue with delete?", PROMPT_YES_NO, ANSWER_NO, DeleteCurSteps ); SCREENMAN->Prompt( SM_RefreshSelector, "These steps will be lost permanently.\n\nContinue with delete?", PROMPT_YES_NO, ANSWER_NO, DeleteCurSteps );
break;
default:
ASSERT(0);
} }
break; break;
case EDIT_MENU_ACTION_CREATE: case EDIT_MENU_ACTION_CREATE:
+1 -1
View File
@@ -43,7 +43,7 @@ void ScreenMiniMenu::Init( const Menu* pDef, ScreenMessage SM_SendOnOK, ScreenMe
FOREACH_CONST( MenuRow, pDef->rows, r ) FOREACH_CONST( MenuRow, pDef->rows, r )
{ {
// Don't add rows that aren't applicable to HomeEditMode. // Don't add rows that aren't applicable to HomeEditMode.
if( !HOME_EDIT_MODE || r->bShowInHomeEditMode ) if( EDIT_MODE >= r->emShowIn )
m_vMenuRows.push_back( *r ); m_vMenuRows.push_back( *r );
} }
+3 -3
View File
@@ -15,14 +15,14 @@ struct MenuRow
int iRowCode; int iRowCode;
CString sName; CString sName;
bool bEnabled; bool bEnabled;
bool bShowInHomeEditMode; EditMode emShowIn;
int iDefaultChoice; int iDefaultChoice;
vector<CString> choices; vector<CString> choices;
MenuRow() {} MenuRow() {}
MenuRow( int r, CString n, bool e, bool s, int d, const char *c0=NULL, const char *c1=NULL, const char *c2=NULL, const char *c3=NULL, const char *c4=NULL, const char *c5=NULL, const char *c6=NULL, const char *c7=NULL, const char *c8=NULL, const char *c9=NULL, const char *c10=NULL, const char *c11=NULL, const char *c12=NULL, const char *c13=NULL, const char *c14=NULL, const char *c15=NULL, const char *c16=NULL, const char *c17=NULL, const char *c18=NULL, const char *c19=NULL ) MenuRow( int r, CString n, bool e, EditMode s, int d, const char *c0=NULL, const char *c1=NULL, const char *c2=NULL, const char *c3=NULL, const char *c4=NULL, const char *c5=NULL, const char *c6=NULL, const char *c7=NULL, const char *c8=NULL, const char *c9=NULL, const char *c10=NULL, const char *c11=NULL, const char *c12=NULL, const char *c13=NULL, const char *c14=NULL, const char *c15=NULL, const char *c16=NULL, const char *c17=NULL, const char *c18=NULL, const char *c19=NULL )
{ {
iRowCode = r; sName = n; bEnabled = e; bShowInHomeEditMode = s; iDefaultChoice = d; iRowCode = r; sName = n; bEnabled = e; emShowIn = s; iDefaultChoice = d;
#define PUSH( c ) if(c) choices.push_back(c); #define PUSH( c ) if(c) choices.push_back(c);
PUSH(c0);PUSH(c1);PUSH(c2);PUSH(c3);PUSH(c4);PUSH(c5);PUSH(c6);PUSH(c7);PUSH(c8);PUSH(c9);PUSH(c10);PUSH(c11);PUSH(c12);PUSH(c13);PUSH(c14);PUSH(c15);PUSH(c16);PUSH(c17);PUSH(c18);PUSH(c19); PUSH(c0);PUSH(c1);PUSH(c2);PUSH(c3);PUSH(c4);PUSH(c5);PUSH(c6);PUSH(c7);PUSH(c8);PUSH(c9);PUSH(c10);PUSH(c11);PUSH(c12);PUSH(c13);PUSH(c14);PUSH(c15);PUSH(c16);PUSH(c17);PUSH(c18);PUSH(c19);
#undef PUSH #undef PUSH