Split the Editor's Area menu into two menus.

Use the "Enter" key for the old menu,
and the "A" key for the Alter menu
(requires having selected an area of notes).
This commit is contained in:
Jason Felds
2011-06-10 03:04:47 -04:00
parent 61880f7688
commit 61d935ba70
5 changed files with 307 additions and 224 deletions
+8
View File
@@ -8,7 +8,15 @@ ________________________________________________________________________________
StepMania 5.0 Preview 2 | 20110??? StepMania 5.0 Preview 2 | 20110???
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
2011/06/10
----------
* [ScreenEdit] Split the Area Menu into the Area Menu and Alter Menu. Use the
"A" key to enter the Alter Menu when a selection of notes/rows are
highlighted. Use the Enter key to enter the old Area Menu for the options that
do not depend on selecting NoteData. [Wolfman2000]
2011/06/09 2011/06/09
----------
* [ScreenSyncOverlay] Ensure that F11 / F12 work with all charts due to Split * [ScreenSyncOverlay] Ensure that F11 / F12 work with all charts due to Split
Timing. [Wolfman2000] Timing. [Wolfman2000]
+2 -1
View File
@@ -1257,7 +1257,7 @@ Enter a new min BPM.=Enter the minimum displayed BPM.
Enter a new max BPM.=Enter the maximum displayed BPM. Enter a new max BPM.=Enter the maximum displayed BPM.
More than %d notes per measure is not allowed. This change has been reverted.=More than %d notes per measure is not allowed. This change has been reverted. More than %d notes per measure is not allowed. This change has been reverted.=More than %d notes per measure is not allowed. This change has been reverted.
No backgrounds available=No backgrounds available No backgrounds available=No backgrounds available
EditHelpText=Up/Down:\n change beat\nLeft/Right:\n change snap\nNumber keys:\n add/remove\n tap note\nN and M keys:\n swap tap notes\nCreate hold note:\n Hold a number\n while moving\n Up or Down\nCreate roll note:\n Hold Shift,\n then create a\n hold note.\nSpace bar:\n Set area\n marker\nT key:\n Switch Timing\nEnter:\n Area Menu\nEscape:\n Main Menu\nF4:\n Timing Menu\nF1:\n Show help\n EditHelpText=Up/Down:\n change beat\nLeft/Right:\n change snap\nNumber keys:\n add/remove\n tap note\nN and M keys:\n swap tap notes\nCreate hold note:\n Hold a number\n while moving\n Up or Down\nCreate roll note:\n Hold Shift,\n then create a\n hold note.\nSpace bar:\n Set area\n marker\nT key:\n Switch Timing\nEnter:\n Area Menu\nA Key: Alter Menu\nEscape:\n Main Menu\nF4:\n Timing Menu\nF1:\n Show help\n
PlayRecordHelpText=Press START to end PlayRecordHelpText=Press START to end
Save successful.=Save successful. Save successful.=Save successful.
Saved as SM and DWI.=Saved as SM and DWI. Saved as SM and DWI.=Saved as SM and DWI.
@@ -1269,6 +1269,7 @@ This change creates notes past the end of the music and is not allowed.=This cha
This will destroy all unsaved changes.=This will destroy all unsaved changes. This will destroy all unsaved changes.=This will destroy all unsaved changes.
Undo=Undo Undo=Undo
You must be in Song Timing Mode to edit BG Changes.=You must be in Song Timing Mode to edit BG Changes. You must be in Song Timing Mode to edit BG Changes.=You must be in Song Timing Mode to edit BG Changes.
You must have an area selected to enter the Alter Menu.=You must have an area selected to enter the Alter Menu.
Current beat=Current beat Current beat=Current beat
Current second=Current second Current second=Current second
+3
View File
@@ -3752,6 +3752,9 @@ TitleX=SCREEN_CENTER_X-80
[ScreenMiniMenuAreaMenu] [ScreenMiniMenuAreaMenu]
Fallback="ScreenMiniMenu" Fallback="ScreenMiniMenu"
[ScreenMiniMenuAlterMenu]
Fallback="ScreenMiniMenu"
[ScreenMiniMenuStepsInformation] [ScreenMiniMenuStepsInformation]
Fallback="ScreenMiniMenu" Fallback="ScreenMiniMenu"
+145 -103
View File
@@ -61,6 +61,7 @@ const float RECORD_HOLD_SECONDS = 0.3f;
AutoScreenMessage( SM_UpdateTextInfo ); AutoScreenMessage( SM_UpdateTextInfo );
AutoScreenMessage( SM_BackFromMainMenu ); AutoScreenMessage( SM_BackFromMainMenu );
AutoScreenMessage( SM_BackFromAreaMenu ); AutoScreenMessage( SM_BackFromAreaMenu );
AutoScreenMessage( SM_BackFromAlterMenu );
AutoScreenMessage( SM_BackFromStepsInformation ); AutoScreenMessage( SM_BackFromStepsInformation );
AutoScreenMessage( SM_BackFromOptions ); AutoScreenMessage( SM_BackFromOptions );
AutoScreenMessage( SM_BackFromSongInformation ); AutoScreenMessage( SM_BackFromSongInformation );
@@ -170,6 +171,7 @@ void ScreenEdit::InitEditMappings()
m_EditMappingsMenuButton.button [EDIT_BUTTON_OPEN_EDIT_MENU][0] = GAME_BUTTON_START; m_EditMappingsMenuButton.button [EDIT_BUTTON_OPEN_EDIT_MENU][0] = GAME_BUTTON_START;
m_EditMappingsMenuButton.button [EDIT_BUTTON_OPEN_EDIT_MENU][1] = GAME_BUTTON_BACK; m_EditMappingsMenuButton.button [EDIT_BUTTON_OPEN_EDIT_MENU][1] = GAME_BUTTON_BACK;
// Escape, Enter = exit play/record // Escape, Enter = exit play/record
m_PlayMappingsDeviceInput.button [EDIT_BUTTON_RETURN_TO_EDIT][0] = DeviceInput(DEVICE_KEYBOARD, KEY_ENTER); m_PlayMappingsDeviceInput.button [EDIT_BUTTON_RETURN_TO_EDIT][0] = DeviceInput(DEVICE_KEYBOARD, KEY_ENTER);
m_PlayMappingsDeviceInput.button [EDIT_BUTTON_RETURN_TO_EDIT][1] = DeviceInput(DEVICE_KEYBOARD, KEY_ESC); m_PlayMappingsDeviceInput.button [EDIT_BUTTON_RETURN_TO_EDIT][1] = DeviceInput(DEVICE_KEYBOARD, KEY_ESC);
@@ -280,6 +282,7 @@ void ScreenEdit::InitEditMappings()
m_EditMappingsMenuButton.button[EDIT_BUTTON_OPEN_EDIT_MENU][0] = GAME_BUTTON_START; m_EditMappingsMenuButton.button[EDIT_BUTTON_OPEN_EDIT_MENU][0] = GAME_BUTTON_START;
m_EditMappingsMenuButton.button[EDIT_BUTTON_OPEN_EDIT_MENU][1] = GAME_BUTTON_BACK; m_EditMappingsMenuButton.button[EDIT_BUTTON_OPEN_EDIT_MENU][1] = GAME_BUTTON_BACK;
m_EditMappingsDeviceInput.button[EDIT_BUTTON_OPEN_AREA_MENU][0] = DeviceInput(DEVICE_KEYBOARD, KEY_ENTER); m_EditMappingsDeviceInput.button[EDIT_BUTTON_OPEN_AREA_MENU][0] = DeviceInput(DEVICE_KEYBOARD, KEY_ENTER);
m_EditMappingsDeviceInput.button[EDIT_BUTTON_OPEN_ALTER_MENU][0] = DeviceInput(DEVICE_KEYBOARD, KEY_Ca);
m_EditMappingsDeviceInput.button[EDIT_BUTTON_OPEN_INPUT_HELP][0] = DeviceInput(DEVICE_KEYBOARD, KEY_F1); m_EditMappingsDeviceInput.button[EDIT_BUTTON_OPEN_INPUT_HELP][0] = DeviceInput(DEVICE_KEYBOARD, KEY_F1);
m_EditMappingsDeviceInput.button[EDIT_BUTTON_BAKE_RANDOM_FROM_SONG_GROUP][0] = DeviceInput(DEVICE_KEYBOARD, KEY_Cb); m_EditMappingsDeviceInput.button[EDIT_BUTTON_BAKE_RANDOM_FROM_SONG_GROUP][0] = DeviceInput(DEVICE_KEYBOARD, KEY_Cb);
@@ -505,26 +508,48 @@ static MenuDef g_MainMenu(
MenuRowDef( ScreenEdit::exit, "Exit Edit Mode", true, EditMode_Practice, true, true, 0, NULL ) MenuRowDef( ScreenEdit::exit, "Exit Edit Mode", true, EditMode_Practice, true, true, 0, NULL )
); );
static MenuDef g_AlterMenu(
"ScreenMiniMenuAlterMenu",
MenuRowDef(ScreenEdit::cut, "Cut", true,
EditMode_Practice, true, true, 0, NULL ),
MenuRowDef(ScreenEdit::copy, "Copy", true,
EditMode_Practice, true, true, 0, NULL ),
MenuRowDef(ScreenEdit::clear, "Clear area", true,
EditMode_Practice, true, true, 0, NULL ),
MenuRowDef(ScreenEdit::quantize, "Quantize", true,
EditMode_Practice, true, true, 0,
"4th","8th","12th","16th","24th","32nd","48th","64th","192nd"),
MenuRowDef(ScreenEdit::turn, "Turn", true,
EditMode_Practice, true, true, 0, "Left","Right","Mirror","Shuffle","SuperShuffle" ),
MenuRowDef(ScreenEdit::transform, "Transform", true,
EditMode_Practice, true, true, 0, "NoHolds","NoMines","Little","Wide",
"Big","Quick","Skippy","Mines","Echo","Stomp","Planted","Floored",
"Twister","NoJumps","NoHands","NoQuads","NoStretch" ),
MenuRowDef(ScreenEdit::alter, "Alter", true,
EditMode_Practice, 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" ),
MenuRowDef(ScreenEdit::tempo, "Tempo", true,
EditMode_Full, true, true, 0, "Compress 2x","Compress 3->2",
"Compress 4->3","Expand 3->4","Expand 2->3","Expand 2x" ),
MenuRowDef(ScreenEdit::play, "Play selection", true,
EditMode_Practice, true, true, 0, NULL ),
MenuRowDef(ScreenEdit::record, "Record in selection", true,
EditMode_Practice, true, true, 0, NULL ),
MenuRowDef(ScreenEdit::convert_to_pause, "Convert selection to pause", true,
EditMode_Full, true, true, 0, NULL )
);
static MenuDef g_AreaMenu( static MenuDef g_AreaMenu(
"ScreenMiniMenuAreaMenu", "ScreenMiniMenuAreaMenu",
MenuRowDef( ScreenEdit::cut, "Cut", true, EditMode_Practice, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::copy, "Copy", true, EditMode_Practice, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::paste_at_current_beat, "Paste at current beat", true, EditMode_Practice, true, true, 0, NULL ), MenuRowDef( ScreenEdit::paste_at_current_beat, "Paste at current beat", true, EditMode_Practice, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::paste_at_begin_marker, "Paste at begin marker", true, EditMode_Practice, true, true, 0, NULL ), MenuRowDef( ScreenEdit::paste_at_begin_marker, "Paste at begin marker", true, EditMode_Practice, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::clear, "Clear area", true, EditMode_Practice, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::quantize, "Quantize", true, EditMode_Practice, true, true, 0, "4th","8th","12th","16th","24th","32nd","48th","64th","192nd"),
MenuRowDef( ScreenEdit::turn, "Turn", true, EditMode_Practice, true, true, 0, "Left","Right","Mirror","Shuffle","SuperShuffle" ),
MenuRowDef( ScreenEdit::transform, "Transform", true, EditMode_Practice, true, true, 0, "NoHolds","NoMines","Little","Wide","Big","Quick","Skippy","Mines","Echo","Stomp","Planted","Floored","Twister","NoJumps","NoHands","NoQuads","NoStretch" ),
MenuRowDef( ScreenEdit::alter, "Alter", true, EditMode_Practice, 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" ),
MenuRowDef( ScreenEdit::tempo, "Tempo", true, EditMode_Full, true, true, 0, "Compress 2x","Compress 3->2","Compress 4->3","Expand 3->4","Expand 2->3","Expand 2x" ),
MenuRowDef( ScreenEdit::play, "Play selection", true, EditMode_Practice, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::record, "Record in selection", true, EditMode_Practice, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::insert_and_shift, "Insert beat and shift down", true, EditMode_Practice, true, true, 0, NULL ), MenuRowDef( ScreenEdit::insert_and_shift, "Insert beat and shift down", true, EditMode_Practice, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::delete_and_shift, "Delete beat and shift up", true, EditMode_Practice, true, true, 0, NULL ), MenuRowDef( ScreenEdit::delete_and_shift, "Delete beat and shift up", true, EditMode_Practice, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::shift_pauses_forward, "Shift all timing changes down", true, EditMode_Full, true, true, 0, NULL ), MenuRowDef( ScreenEdit::shift_pauses_forward, "Shift all timing changes down", true, EditMode_Full, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::shift_pauses_backward, "Shift all timing changes up", true, EditMode_Full, true, true, 0, NULL ), MenuRowDef( ScreenEdit::shift_pauses_backward, "Shift all timing changes up", true, EditMode_Full, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::convert_to_pause, "Convert selection to pause", true, EditMode_Full, true, true, 0, NULL ), MenuRowDef(ScreenEdit::convert_pause_to_beat, "Convert pause to beats", true,
MenuRowDef( ScreenEdit::convert_pause_to_beat, "Convert pause to beats", true, EditMode_Full, true, true, 0, NULL ), EditMode_Full, true, true, 0, NULL ),
MenuRowDef( ScreenEdit::undo, "Undo", true, EditMode_Practice, true, true, 0, NULL ) MenuRowDef( ScreenEdit::undo, "Undo", true, EditMode_Practice, true, true, 0, NULL )
); );
@@ -1299,7 +1324,7 @@ static int FindAttackAtTime( const AttackArray& attacks, float fStartTime )
} }
static LocalizedString BG_CHANGE_STEP_TIMING ( "ScreenEdit", "You must be in Song Timing Mode to edit BG Changes." ); static LocalizedString BG_CHANGE_STEP_TIMING ( "ScreenEdit", "You must be in Song Timing Mode to edit BG Changes." );
static LocalizedString ALTER_MENU_NO_SELECTION ( "ScreenEdit", "You must have an area selected to enter the Alter Menu." );
static LocalizedString SWITCHED_TO ( "ScreenEdit", "Switched to" ); static LocalizedString SWITCHED_TO ( "ScreenEdit", "Switched to" );
static LocalizedString NO_BACKGROUNDS_AVAILABLE ( "ScreenEdit", "No backgrounds available" ); static LocalizedString NO_BACKGROUNDS_AVAILABLE ( "ScreenEdit", "No backgrounds available" );
static ThemeMetric<bool> INVERT_SCROLL_BUTTONS ( "ScreenEdit", "InvertScrollSpeedButtons" ); static ThemeMetric<bool> INVERT_SCROLL_BUTTONS ( "ScreenEdit", "InvertScrollSpeedButtons" );
@@ -1561,24 +1586,27 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB )
case EDIT_BUTTON_OPEN_AREA_MENU: case EDIT_BUTTON_OPEN_AREA_MENU:
{ {
// update enabled/disabled in g_AreaMenu // update enabled/disabled in g_AreaMenu
bool bAreaSelected = m_NoteFieldEdit.m_iBeginMarker!=-1 && m_NoteFieldEdit.m_iEndMarker!=-1;
g_AreaMenu.rows[cut].bEnabled = bAreaSelected;
g_AreaMenu.rows[copy].bEnabled = bAreaSelected;
g_AreaMenu.rows[paste_at_current_beat].bEnabled = !m_Clipboard.IsEmpty(); g_AreaMenu.rows[paste_at_current_beat].bEnabled = !m_Clipboard.IsEmpty();
g_AreaMenu.rows[paste_at_begin_marker].bEnabled = !m_Clipboard.IsEmpty() != 0 && m_NoteFieldEdit.m_iBeginMarker!=-1; g_AreaMenu.rows[paste_at_begin_marker].bEnabled = !m_Clipboard.IsEmpty() != 0 && m_NoteFieldEdit.m_iBeginMarker!=-1;
g_AreaMenu.rows[clear].bEnabled = bAreaSelected;
g_AreaMenu.rows[quantize].bEnabled = bAreaSelected;
g_AreaMenu.rows[turn].bEnabled = bAreaSelected;
g_AreaMenu.rows[transform].bEnabled = bAreaSelected;
g_AreaMenu.rows[alter].bEnabled = bAreaSelected;
g_AreaMenu.rows[tempo].bEnabled = bAreaSelected;
g_AreaMenu.rows[play].bEnabled = bAreaSelected;
g_AreaMenu.rows[record].bEnabled = bAreaSelected;
g_AreaMenu.rows[convert_to_pause].bEnabled = bAreaSelected;
g_AreaMenu.rows[undo].bEnabled = m_bHasUndo; g_AreaMenu.rows[undo].bEnabled = m_bHasUndo;
EditMiniMenu( &g_AreaMenu, SM_BackFromAreaMenu ); EditMiniMenu( &g_AreaMenu, SM_BackFromAreaMenu );
} }
break; break;
case EDIT_BUTTON_OPEN_ALTER_MENU:
{
bool bAreaSelected = m_NoteFieldEdit.m_iBeginMarker!=-1 && m_NoteFieldEdit.m_iEndMarker!=-1;
if (!bAreaSelected)
{
SCREENMAN->SystemMessage( ALTER_MENU_NO_SELECTION );
SCREENMAN->PlayInvalidSound();
}
else
{
EditMiniMenu(&g_AlterMenu, SM_BackFromAlterMenu);
}
break;
}
case EDIT_BUTTON_OPEN_EDIT_MENU: case EDIT_BUTTON_OPEN_EDIT_MENU:
EditMiniMenu( &g_MainMenu, SM_BackFromMainMenu ); EditMiniMenu( &g_MainMenu, SM_BackFromMainMenu );
break; break;
@@ -2044,7 +2072,7 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB )
case EDIT_BUTTON_RECORD_SELECTION: case EDIT_BUTTON_RECORD_SELECTION:
if( m_NoteFieldEdit.m_iBeginMarker!=-1 && m_NoteFieldEdit.m_iEndMarker!=-1 ) if( m_NoteFieldEdit.m_iBeginMarker!=-1 && m_NoteFieldEdit.m_iEndMarker!=-1 )
{ {
HandleAreaMenuChoice( record ); HandleAlterMenuChoice( record );
} }
else else
{ {
@@ -2644,6 +2672,10 @@ void ScreenEdit::HandleScreenMessage( const ScreenMessage SM )
{ {
HandleAreaMenuChoice( (AreaMenuChoice)ScreenMiniMenu::s_iLastRowCode, ScreenMiniMenu::s_viLastAnswers ); HandleAreaMenuChoice( (AreaMenuChoice)ScreenMiniMenu::s_iLastRowCode, ScreenMiniMenu::s_viLastAnswers );
} }
else if( SM == SM_BackFromAlterMenu )
{
HandleAlterMenuChoice( (AlterMenuChoice)ScreenMiniMenu::s_iLastRowCode, ScreenMiniMenu::s_viLastAnswers );
}
else if( SM == SM_BackFromStepsInformation ) else if( SM == SM_BackFromStepsInformation )
{ {
HandleStepsInformationChoice( (StepsInformationChoice)ScreenMiniMenu::s_iLastRowCode, ScreenMiniMenu::s_viLastAnswers ); HandleStepsInformationChoice( (StepsInformationChoice)ScreenMiniMenu::s_iLastRowCode, ScreenMiniMenu::s_viLastAnswers );
@@ -3248,7 +3280,7 @@ void ScreenEdit::HandleMainMenuChoice( MainMenuChoice c, const vector<int> &iAns
DEFAULT_FAIL( c ); DEFAULT_FAIL( c );
case play_selection: case play_selection:
if( m_NoteFieldEdit.m_iBeginMarker!=-1 && m_NoteFieldEdit.m_iEndMarker!=-1 ) if( m_NoteFieldEdit.m_iBeginMarker!=-1 && m_NoteFieldEdit.m_iEndMarker!=-1 )
HandleAreaMenuChoice( play ); HandleAlterMenuChoice( play );
else if( m_NoteFieldEdit.m_iBeginMarker!=-1 ) else if( m_NoteFieldEdit.m_iBeginMarker!=-1 )
HandleMainMenuChoice( play_selection_start_to_end ); HandleMainMenuChoice( play_selection_start_to_end );
else else
@@ -3464,34 +3496,17 @@ void ScreenEdit::HandleMainMenuChoice( MainMenuChoice c, const vector<int> &iAns
GAMESTATE->SetProcessedTimingData(NULL); GAMESTATE->SetProcessedTimingData(NULL);
} }
void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, const vector<int> &iAnswers, bool bAllowUndo ) void ScreenEdit::HandleAlterMenuChoice(AlterMenuChoice c, const vector<int> &iAnswers, bool bAllowUndo)
{ {
bool bSaveUndo = false; bool bSaveUndo = true;
switch( c ) switch (c)
{ {
DEFAULT_FAIL( c );
case cut: case cut:
case copy: case copy:
case play: {
case record:
case undo:
bSaveUndo = false; bSaveUndo = false;
break; }
case paste_at_current_beat: default:
case paste_at_begin_marker:
case clear:
case quantize:
case turn:
case transform:
case alter:
case tempo:
case insert_and_shift:
case delete_and_shift:
case shift_pauses_forward:
case shift_pauses_backward:
case convert_to_pause:
case convert_pause_to_beat:
bSaveUndo = true;
break; break;
} }
@@ -3507,13 +3522,12 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, const vector<int> &iAns
if( bSaveUndo ) if( bSaveUndo )
SaveUndo(); SaveUndo();
switch( c ) switch(c)
{ {
DEFAULT_FAIL( c );
case cut: case cut:
{ {
HandleAreaMenuChoice( copy ); HandleAlterMenuChoice( copy );
HandleAreaMenuChoice( clear ); HandleAlterMenuChoice( clear );
} }
break; break;
case copy: case copy:
@@ -3523,26 +3537,6 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, const vector<int> &iAns
m_Clipboard.CopyRange( m_NoteDataEdit, m_NoteFieldEdit.m_iBeginMarker, m_NoteFieldEdit.m_iEndMarker ); m_Clipboard.CopyRange( m_NoteDataEdit, m_NoteFieldEdit.m_iBeginMarker, m_NoteFieldEdit.m_iEndMarker );
} }
break; break;
case paste_at_current_beat:
case paste_at_begin_marker:
{
int iDestFirstRow = -1;
switch( c )
{
DEFAULT_FAIL( c );
case paste_at_current_beat:
iDestFirstRow = BeatToNoteRow( GetAppropriatePosition().m_fSongBeat );
break;
case paste_at_begin_marker:
ASSERT( m_NoteFieldEdit.m_iBeginMarker!=-1 );
iDestFirstRow = m_NoteFieldEdit.m_iBeginMarker;
break;
}
int iRowsToCopy = m_Clipboard.GetLastRow()+1;
m_NoteDataEdit.CopyRange( m_Clipboard, 0, iRowsToCopy, iDestFirstRow );
}
break;
case clear: case clear:
{ {
ASSERT( m_NoteFieldEdit.m_iBeginMarker!=-1 && m_NoteFieldEdit.m_iEndMarker!=-1 ); ASSERT( m_NoteFieldEdit.m_iBeginMarker!=-1 && m_NoteFieldEdit.m_iEndMarker!=-1 );
@@ -3552,13 +3546,15 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, const vector<int> &iAns
case quantize: case quantize:
{ {
NoteType nt = (NoteType)iAnswers[c]; NoteType nt = (NoteType)iAnswers[c];
NoteDataUtil::SnapToNearestNoteType( m_NoteDataEdit, nt, nt, m_NoteFieldEdit.m_iBeginMarker, m_NoteFieldEdit.m_iEndMarker ); NoteDataUtil::SnapToNearestNoteType(m_NoteDataEdit, nt, nt,
} m_NoteFieldEdit.m_iBeginMarker,
m_NoteFieldEdit.m_iEndMarker );
break; break;
}
case turn: case turn:
{ {
const NoteData OldClipboard( m_Clipboard ); const NoteData OldClipboard( m_Clipboard );
HandleAreaMenuChoice( cut ); HandleAlterMenuChoice( cut );
StepsType st = GAMESTATE->GetCurrentStyle()->m_StepsType; StepsType st = GAMESTATE->GetCurrentStyle()->m_StepsType;
TurnType tt = (TurnType)iAnswers[c]; TurnType tt = (TurnType)iAnswers[c];
@@ -3607,12 +3603,12 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, const vector<int> &iAns
// bake in the additions // bake in the additions
NoteDataUtil::ConvertAdditionsToRegular( m_NoteDataEdit ); NoteDataUtil::ConvertAdditionsToRegular( m_NoteDataEdit );
}
break; break;
}
case alter: case alter:
{ {
const NoteData OldClipboard( m_Clipboard ); const NoteData OldClipboard( m_Clipboard );
HandleAreaMenuChoice( cut ); HandleAlterMenuChoice( cut );
AlterType at = (AlterType)iAnswers[c]; AlterType at = (AlterType)iAnswers[c];
switch( at ) switch( at )
@@ -3643,8 +3639,8 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, const vector<int> &iAns
HandleAreaMenuChoice( paste_at_begin_marker ); HandleAreaMenuChoice( paste_at_begin_marker );
m_Clipboard = OldClipboard; m_Clipboard = OldClipboard;
}
break; break;
}
case tempo: case tempo:
{ {
// This affects all steps. // This affects all steps.
@@ -3670,33 +3666,15 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, const vector<int> &iAns
NoteDataUtil::ScaleRegion( m_NoteDataEdit, fScale, iStartIndex, iEndIndex ); NoteDataUtil::ScaleRegion( m_NoteDataEdit, fScale, iStartIndex, iEndIndex );
// scale timing data // scale timing data
GetAppropriateTiming().ScaleRegion( fScale, m_NoteFieldEdit.m_iBeginMarker, m_NoteFieldEdit.m_iEndMarker, true ); GetAppropriateTiming().ScaleRegion(fScale,
m_NoteFieldEdit.m_iBeginMarker,
m_NoteFieldEdit.m_iEndMarker, true );
// scale all other steps.
/*
const vector<Steps*> sIter = m_pSong->GetAllSteps();
RString sTempStyle, sTempDiff;
for( unsigned i = 0; i < sIter.size(); i++ )
{
if( sIter[i]->IsAutogen() )
continue;
// XXX: Edits are distinguished by description.
// Compare vs m_pSteps.
if( (sIter[i]->m_StepsType == GAMESTATE->m_pCurSteps[PLAYER_1]->m_StepsType) &&
(sIter[i]->GetDifficulty() == GAMESTATE->m_pCurSteps[PLAYER_1]->GetDifficulty()) )
continue;
NoteData ndTemp;
sIter[i]->GetNoteData( ndTemp );
NoteDataUtil::ScaleRegion( ndTemp, fScale, m_NoteFieldEdit.m_iBeginMarker, m_NoteFieldEdit.m_iEndMarker );
sIter[i]->SetNoteData( ndTemp );
}
*/
m_NoteFieldEdit.m_iEndMarker = iNewEndIndex; m_NoteFieldEdit.m_iEndMarker = iNewEndIndex;
break;
} }
break;
case play: case play:
ASSERT( m_NoteFieldEdit.m_iBeginMarker!=-1 && m_NoteFieldEdit.m_iEndMarker!=-1 ); ASSERT( m_NoteFieldEdit.m_iBeginMarker!=-1 && m_NoteFieldEdit.m_iEndMarker!=-1 );
m_iStartPlayingAt = m_NoteFieldEdit.m_iBeginMarker; m_iStartPlayingAt = m_NoteFieldEdit.m_iBeginMarker;
@@ -3709,6 +3687,70 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, const vector<int> &iAns
m_iStopPlayingAt = m_NoteFieldEdit.m_iEndMarker; m_iStopPlayingAt = m_NoteFieldEdit.m_iEndMarker;
TransitionEditState( STATE_RECORDING ); TransitionEditState( STATE_RECORDING );
break; break;
}
}
void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, const vector<int> &iAnswers, bool bAllowUndo )
{
bool bSaveUndo = false;
switch( c )
{
DEFAULT_FAIL( c );
case play:
case record:
case undo:
bSaveUndo = false;
break;
case paste_at_current_beat:
case paste_at_begin_marker:
case insert_and_shift:
case delete_and_shift:
case shift_pauses_forward:
case shift_pauses_backward:
case convert_to_pause:
case convert_pause_to_beat:
bSaveUndo = true;
break;
}
if( bSaveUndo )
SetDirty( true );
/* We call HandleAreaMenuChoice recursively. Only the outermost
* HandleAreaMenuChoice should allow Undo so that the inner calls don't
* also save Undo and mess up the outermost */
if( !bAllowUndo )
bSaveUndo = false;
if( bSaveUndo )
SaveUndo();
switch( c )
{
DEFAULT_FAIL( c );
case paste_at_current_beat:
case paste_at_begin_marker:
{
int iDestFirstRow = -1;
switch( c )
{
DEFAULT_FAIL( c );
case paste_at_current_beat:
iDestFirstRow = BeatToNoteRow( GetAppropriatePosition().m_fSongBeat );
break;
case paste_at_begin_marker:
ASSERT( m_NoteFieldEdit.m_iBeginMarker!=-1 );
iDestFirstRow = m_NoteFieldEdit.m_iBeginMarker;
break;
}
int iRowsToCopy = m_Clipboard.GetLastRow()+1;
m_NoteDataEdit.CopyRange( m_Clipboard, 0, iRowsToCopy, iDestFirstRow );
}
break;
case insert_and_shift: case insert_and_shift:
NoteDataUtil::InsertRows( m_NoteDataEdit, BeatToNoteRow( GetBeat() ), BeatToNoteRow(1) ); NoteDataUtil::InsertRows( m_NoteDataEdit, BeatToNoteRow( GetBeat() ), BeatToNoteRow(1) );
break; break;
+38 -9
View File
@@ -87,6 +87,7 @@ enum EditButton
EDIT_BUTTON_OPEN_EDIT_MENU, EDIT_BUTTON_OPEN_EDIT_MENU,
EDIT_BUTTON_OPEN_TIMING_MENU, EDIT_BUTTON_OPEN_TIMING_MENU,
EDIT_BUTTON_OPEN_ALTER_MENU,
EDIT_BUTTON_OPEN_AREA_MENU, EDIT_BUTTON_OPEN_AREA_MENU,
EDIT_BUTTON_OPEN_BGCHANGE_LAYER1_MENU, EDIT_BUTTON_OPEN_BGCHANGE_LAYER1_MENU,
EDIT_BUTTON_OPEN_BGCHANGE_LAYER2_MENU, EDIT_BUTTON_OPEN_BGCHANGE_LAYER2_MENU,
@@ -209,7 +210,12 @@ public:
virtual void PushSelf( lua_State *L ); virtual void PushSelf( lua_State *L );
protected: protected:
virtual ScreenType GetScreenType() const { return m_EditState==STATE_PLAYING ? gameplay : ScreenWithMenuElements::GetScreenType(); } virtual ScreenType GetScreenType() const
{
return m_EditState==STATE_PLAYING ?
gameplay :
ScreenWithMenuElements::GetScreenType();
}
void TransitionEditState( EditState em ); void TransitionEditState( EditState em );
void ScrollTo( float fDestinationBeat ); void ScrollTo( float fDestinationBeat );
@@ -268,7 +274,8 @@ protected:
BitmapText m_textPlayRecordHelp; BitmapText m_textPlayRecordHelp;
// keep track of where we are and what we're doing // keep track of where we are and what we're doing
float m_fTrailingBeat; // this approaches GAMESTATE->m_fSongBeat, which is the actual beat float m_fTrailingBeat;
// the above approaches GAMESTATE->m_fSongBeat, which is the actual beat
/** /**
* @brief The location we were at when shift was pressed. * @brief The location we were at when shift was pressed.
* *
@@ -365,13 +372,12 @@ public:
void HandleMainMenuChoice( MainMenuChoice c ) { const vector<int> v; HandleMainMenuChoice( c, v ); } void HandleMainMenuChoice( MainMenuChoice c ) { const vector<int> v; HandleMainMenuChoice( c, v ); }
MainMenuChoice m_CurrentAction; MainMenuChoice m_CurrentAction;
enum AreaMenuChoice enum AlterMenuChoice
{ {
cut, cut,
copy, copy,
paste_at_current_beat,
paste_at_begin_marker,
clear, clear,
// clear_undo,
quantize, quantize,
turn, turn,
transform, transform,
@@ -379,17 +385,37 @@ public:
tempo, tempo,
play, play,
record, record,
convert_to_pause,
NUM_ALTER_MENU_CHOICES
};
enum AreaMenuChoice
{
paste_at_current_beat,
paste_at_begin_marker,
insert_and_shift, insert_and_shift,
delete_and_shift, delete_and_shift,
shift_pauses_forward, shift_pauses_forward,
shift_pauses_backward, shift_pauses_backward,
convert_to_pause,
convert_pause_to_beat, convert_pause_to_beat,
undo, undo,
NUM_AREA_MENU_CHOICES NUM_AREA_MENU_CHOICES
}; };
void HandleAlterMenuChoice(AlterMenuChoice c,
const vector<int> &iAnswers,
bool bAllowUndo = true);
void HandleAlterMenuChoice(AlterMenuChoice c,
bool bAllowUndo = true)
{
const vector<int> v; HandleAlterMenuChoice(c, v, bAllowUndo);
}
void HandleAreaMenuChoice( AreaMenuChoice c, const vector<int> &iAnswers, bool bAllowUndo = true ); void HandleAreaMenuChoice( AreaMenuChoice c, const vector<int> &iAnswers, bool bAllowUndo = true );
void HandleAreaMenuChoice( AreaMenuChoice c, bool bAllowUndo = true ) { const vector<int> v; HandleAreaMenuChoice( c, v, bAllowUndo ); } void HandleAreaMenuChoice( AreaMenuChoice c, bool bAllowUndo = true )
{
const vector<int> v; HandleAreaMenuChoice( c, v, bAllowUndo );
}
/** @brief How should the selected notes be transformed? */ /** @brief How should the selected notes be transformed? */
enum TurnType enum TurnType
{ {
@@ -511,7 +537,8 @@ public:
NUM_TIMING_DATA_INFORMATION_CHOICES NUM_TIMING_DATA_INFORMATION_CHOICES
}; };
void HandleTimingDataInformationChoice ( TimingDataInformationChoice c, const vector<int> &iAnswers ); void HandleTimingDataInformationChoice (TimingDataInformationChoice c,
const vector<int> &iAnswers );
enum BGChangeChoice enum BGChangeChoice
{ {
@@ -581,7 +608,9 @@ public:
MapEditButtonToMenuButton m_RecordPausedMappingsMenuButton; MapEditButtonToMenuButton m_RecordPausedMappingsMenuButton;
void MakeFilteredMenuDef( const MenuDef* pDef, MenuDef &menu ); void MakeFilteredMenuDef( const MenuDef* pDef, MenuDef &menu );
void EditMiniMenu( const MenuDef* pDef, ScreenMessage SM_SendOnOK = SM_None, ScreenMessage SM_SendOnCancel = SM_None ); void EditMiniMenu(const MenuDef* pDef,
ScreenMessage SM_SendOnOK = SM_None,
ScreenMessage SM_SendOnCancel = SM_None );
private: private:
/** /**
* @brief Retrieve the appropriate TimingData based on GAMESTATE. * @brief Retrieve the appropriate TimingData based on GAMESTATE.