Added Clear timing in region option to timing menu in edit mode. Disabled pasting clipboard timing if it's not safe to fix crash.

This commit is contained in:
Kyzentun Keeslala
2016-01-18 11:48:50 -07:00
parent e60797c1df
commit ae5ff0724a
5 changed files with 95 additions and 14 deletions
+34 -13
View File
@@ -1051,7 +1051,15 @@ static MenuDef g_SongInformation(
true, EditMode_Full, true, true, 0, NULL )
);
// Ugh, I don't like making this global pointer to clipboardFullTiming, but
// it's the only way to make it visible to EnabledIfClipboardTimingIsSafe for
// making sure it's safe to paste as the timing data for the Steps/Song. -Kyz
static TimingData* clipboard_full_timing= NULL;
static bool EnabledIfClipboardTimingIsSafe();
static bool EnabledIfClipboardTimingIsSafe()
{
return clipboard_full_timing != NULL && clipboard_full_timing->IsSafeFullTiming();
}
static MenuDef g_TimingDataInformation(
"ScreenMiniMenuTimingDataInformation",
MenuRowDef(ScreenEdit::beat_0_offset,
@@ -1102,6 +1110,9 @@ static MenuDef g_TimingDataInformation(
MenuRowDef(ScreenEdit::copy_timing_in_region,
"Copy timing in region",
true, EditMode_Full, true, true, 0, NULL),
MenuRowDef(ScreenEdit::clear_timing_in_region,
"Clear timing in region",
true, EditMode_Full, true, true, 0, NULL),
MenuRowDef(ScreenEdit::paste_timing_from_clip,
"Paste timing from clipboard",
true, EditMode_Full, true, true, 0, NULL),
@@ -1110,7 +1121,7 @@ static MenuDef g_TimingDataInformation(
true, EditMode_Full, true, true, 0, NULL ),
MenuRowDef(ScreenEdit::paste_full_timing,
"Paste timing data",
true, EditMode_Full, true, true, 0, NULL ),
EnabledIfClipboardTimingIsSafe, EditMode_Full, true, true, 0, NULL ),
MenuRowDef(ScreenEdit::erase_step_timing,
"Erase step timing",
true, EditMode_Full, true, true, 0, NULL )
@@ -1502,6 +1513,7 @@ void ScreenEdit::Init()
m_Clipboard.SetNumTracks( m_NoteDataEdit.GetNumTracks() );
clipboardFullTiming = GAMESTATE->m_pCurSong->m_SongTiming; // always have a backup.
clipboard_full_timing= &clipboardFullTiming;
m_bHasUndo = false;
m_Undo.SetNumTracks( m_NoteDataEdit.GetNumTracks() );
@@ -5877,17 +5889,21 @@ void ScreenEdit::HandleTimingDataInformationChoice( TimingDataInformationChoice
break;
}
case shift_timing_in_region_down:
m_timing_is_being_copied= false;
m_timing_change_menu_purpose= menu_is_for_shifting;
m_timing_rows_being_shitted= GetRowsFromAnswers(c, iAnswers);
DisplayTimingChangeMenu();
break;
case shift_timing_in_region_up:
m_timing_is_being_copied= false;
m_timing_change_menu_purpose= menu_is_for_shifting;
m_timing_rows_being_shitted= -GetRowsFromAnswers(c, iAnswers);
DisplayTimingChangeMenu();
break;
case copy_timing_in_region:
m_timing_is_being_copied= true;
m_timing_change_menu_purpose= menu_is_for_copying;
DisplayTimingChangeMenu();
break;
case clear_timing_in_region:
m_timing_change_menu_purpose= menu_is_for_clearing;
DisplayTimingChangeMenu();
break;
case paste_timing_from_clip:
@@ -5900,7 +5916,7 @@ void ScreenEdit::HandleTimingDataInformationChoice( TimingDataInformationChoice
}
case paste_full_timing:
{
if (GAMESTATE->m_bIsUsingStepTiming)
if(GAMESTATE->m_bIsUsingStepTiming)
{
GAMESTATE->m_pCurSteps[PLAYER_1]->m_Timing = clipboardFullTiming;
}
@@ -5972,14 +5988,19 @@ void ScreenEdit::HandleTimingDataChangeChoice(TimingDataChangeChoice choice,
{
end= MAX_NOTE_ROW;
}
if(m_timing_is_being_copied)
switch(m_timing_change_menu_purpose)
{
clipboardFullTiming.Clear();
GetAppropriateTiming().CopyRange(begin, end, change_type, 0, clipboardFullTiming);
}
else
{
GetAppropriateTimingForUpdate().ShiftRange(begin, end, change_type, m_timing_rows_being_shitted);
case menu_is_for_copying:
clipboardFullTiming.Clear();
GetAppropriateTiming().CopyRange(begin, end, change_type, 0, clipboardFullTiming);
break;
case menu_is_for_shifting:
GetAppropriateTimingForUpdate().ShiftRange(begin, end, change_type, m_timing_rows_being_shitted);
break;
case menu_is_for_clearing:
GetAppropriateTimingForUpdate().ClearRange(begin, end, change_type);
break;
default: break;
}
}