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:
+34
-13
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user