private void CloseToolStripMenuItem_Click(object sender, EventArgs e) { try { MainPanel.Close(); IsSaved = false; SavePath = ""; UpdateTitle(Language.DICT["MainTitleEmptyName"]); Undos.Clear(); Redos.Clear(); CurrentStatusLabel.Text = Language.DICT["StslblCloseSucceed"]; } catch (Exception ex) { MyMessageBox.Show(Language.DICT["MainText"], Language.DICT["MsgFatalClose"] + ex.Message); CurrentStatusLabel.Text = Language.DICT["StslblCloseFailed"]; } }
/// <inheritdoc/> public bool Undo() { if (Undos.Count > 0) { IsPaused = true; var state = Undos.Pop(); if (Undos.Count == 0) { _canUndo.OnNext(false); } state.Undo.Invoke(); Redos.Push(state); _canRedo.OnNext(true); _canClear.OnNext(true); IsPaused = false; return(true); } return(false); }
private void UndoToolStripMenuItem_Click(object sender, EventArgs e) { try { if (Undos.Count > 0) { MakeRedo(); Misc.DeepCopy(Undos.Last(), MainPanel.PalSource.Data); Undos.RemoveAt(Undos.Count - 1); MainPanel.Refresh(); CurrentStatusLabel.Text = Language.DICT["StslblUndoSucceed"]; } } catch (Exception ex) { MyMessageBox.Show(Language.DICT["MainTitle"], Language.DICT["MsgFatalUndo"] + ex.Message); CurrentStatusLabel.Text = Language.DICT["StslblUndoFailed"]; } }
/// <inheritdoc/> public void Snapshot(Action undo, Action redo) { if (undo == null) { throw new ArgumentNullException(nameof(undo)); } if (redo == null) { throw new ArgumentNullException(nameof(redo)); } if (Redos.Count > 0) { Redos.Clear(); _canRedo.OnNext(false); } Undos.Push(new State(undo, redo)); _canUndo.OnNext(true); _canClear.OnNext(true); }
private void PushUndo(Undos undo) { _undos.Push(undo); }