/// <returns>Whether the data was written.</returns> internal bool WriteUpdateMessageFromTransaction(IUpdateEncoder encoder) { if (DeleteSet.Clients.Count == 0 && !AfterState.Any(kvp => !BeforeState.TryGetValue(kvp.Key, out var clockB) || kvp.Value != clockB)) { return(false); } DeleteSet.SortAndMergeDeleteSet(); EncodingUtils.WriteClientsStructs(encoder, Doc.Store, BeforeState); DeleteSet.Write(encoder); return(true); }
/// <summary> /// If 'type.parent' was added in current transaction, 'type' technically did not change, /// it was just added and we should not fire events for 'type'. /// </summary> internal void AddChangedTypeToTransaction(AbstractType type, string parentSub) { var item = type._item; if (item == null || (BeforeState.TryGetValue(item.Id.Client, out int clock) && item.Id.Clock < clock && !item.Deleted)) { if (!Changed.TryGetValue(type, out var set)) { set = new HashSet <string>(); Changed[type] = set; } set.Add(parentSub); } }
//Мышка нажата /// <summary> /// Обработчик события нажатия мышки /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public void MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { if (_isFigurePicked && SelectedFigures != null) { if (IsPointOnFigure(e.Location)) { if ((SelectedFigures != null) && SelectedFigures.ContainsKey(GetFigurePointOn(e.Location))) { _selectedFigure = _presenter.GetFigures() [GetFigurePointOn(e.Location)]; //Сохраняем предыдущее состояние BeforeState?.Clear(); foreach (var figure in SelectedFigures) { if (!_presenter.GetFigures().Contains(figure)) { continue; } var index = figure.Key; BeforeState?.Add(index, FigureFactory.CreateCopy(figure.Value)); } MouseMoveDelegate -= MouseMoveSelecting; MouseMoveDelegate += MouseMoveFigure; MouseUpDelegate += MouseUpFigure; _offsetX = _selectedFigure.Points.GetPoints()[0].X - e.X; _offsetY = _selectedFigure.Points.GetPoints()[0].Y - e.Y; } } else if (IsPointOnMarker(e.Location, out _pickedPoint)) { MouseMoveDelegate -= MouseMoveSelecting; MouseMoveDelegate += MouseMoveMarker; MouseUpDelegate += MouseUpMarker; BeforePointState?.Clear(); foreach (var figure in _presenter.GetFigures()) { if (figure.Key != _pickedFigureIndex) { continue; } _oldFigureIndex = figure.Key; BeforePointState?.Add(_oldFigureIndex, FigureFactory.CreateCopy(figure.Value)); } _offsetX = _pickedPoint.X - e.X; _offsetY = _pickedPoint.Y - e.Y; } else { _isMouseDown = true; } } else { _isMouseDown = true; } _originalMouseDownPoint = e.Location; } }