void PostExecuteUpdate(bool isInvoke)
    {
        if (!postExecuteEnabled)
        {
            return;
        }

        ChartEditor editor = ChartEditor.Instance;

        if (!bpmAnchorFixupCommandsGenerated)
        {
            GenerateFixUpBPMAnchorCommands();
        }

        if (isInvoke)
        {
            foreach (ICommand command in bpmAnchorFixup)
            {
                command.Invoke();
            }
        }
        else
        {
            foreach (ICommand command in bpmAnchorFixup)
            {
                command.Revoke();
            }
        }

        editor.currentChart.UpdateCache();
        editor.currentSong.UpdateCache();

        if (Toolpane.currentTool != Toolpane.Tools.Note)
        {
            editor.currentSelectedObject = null;
        }

        ChartEditor.isDirty = true;

        var        soList       = validatedSongObjects.Count > 0 ? validatedSongObjects : songObjects;
        SongObject lowestTickSo = null;

        foreach (SongObject songObject in soList)
        {
            if (lowestTickSo == null || songObject.tick < lowestTickSo.tick)
            {
                lowestTickSo = songObject;
            }
        }

        if (lowestTickSo != null)
        {
            uint             jumpToPos = lowestTickSo.tick;
            Globals.ViewMode viewMode  = lowestTickSo.GetType().IsSubclassOf(typeof(ChartObject)) ? Globals.ViewMode.Chart : Globals.ViewMode.Song;
            editor.FillUndoRedoSnapInfo(jumpToPos, viewMode);
        }
    }
示例#2
0
    void PostExecuteUpdate(bool isInvoke)
    {
        if (!postExecuteEnabled)
        {
            return;
        }

        ChartEditor      editor   = ChartEditor.Instance;
        UndoRedoJumpInfo jumpInfo = GetUndoRedoJumpInfo();

        if (!bpmAnchorFixupCommandsGenerated)
        {
            GenerateFixUpBPMAnchorCommands();
        }

        if (!cannotBeForcedFixupCommandsGenerated)
        {
            GenerateForcedFlagFixupCommands(jumpInfo);
        }

        if (isInvoke)
        {
            foreach (ICommand command in bpmAnchorFixup)
            {
                command.Invoke();
            }

            foreach (ICommand command in forcedFlagFixup)
            {
                command.Invoke();
            }
        }

        editor.currentChart.UpdateCache();
        editor.currentSong.UpdateCache();

        if (editor.toolManager.currentToolId != EditorObjectToolManager.ToolID.Note)
        {
            editor.selectedObjectsManager.currentSelectedObject = null;
        }

        ChartEditor.isDirty = true;

        if (jumpInfo.IsValid)
        {
            editor.FillUndoRedoSnapInfo(jumpInfo.jumpToPos.Value, jumpInfo.viewMode);
        }

        editor.selectedObjectsManager.TryFindAndSelectSongObjects(selectedSongObjects);
        selectedSongObjects.Clear();
    }