/// <summary> /// Update position data in Position table and add journal entry at changed status bit /// </summary> /// <param name="positionNode"></param> /// <param name="statusBit"></param> private void OnPositionNodeStatusChanged(PositionNode positionNode, PositionStatusBit statusBit) { _positionsRepository.Update(positionNode.PositionData); JournalEntry jEntry = new JournalEntry() { DateTime = DateTime.Now, Description = "", Position = positionNode.PositionData, PositionStatusBitInfo = statusBit.StatusBitInfo, IsIncoming = statusBit.Value }; JournalEntryCreatedEv?.Invoke(jEntry); }
/// <summary> /// Constructor without children filling. /// Creating StatusBits from Status. /// </summary> public PositionNode(Position position, IEnumerable <PositionStatusBitInfo> positionStatusBitsInfo) { PositionData = position; Nodes = new ObservableCollection <PositionNode>(); StatusBits = new ObservableCollection <PositionStatusBit>(); foreach (PositionStatusBitInfo statusBitInfo in positionStatusBitsInfo) { if (statusBitInfo.Enable) { var statusBit = new PositionStatusBit(position.Status, statusBitInfo); statusBit.BitChanged += OnStatusBitChanged; StatusBits.Add(statusBit); } } }
/// <summary> /// Invoke PositionStatusChanged event on StatusBit changed. /// </summary> /// <param name="statusBit"></param> private void OnStatusBitChanged(PositionStatusBit statusBit) { PositionData.Status = (PositionData.Status & ~(1 << statusBit.StatusBitInfo.BitNumber)) | (Convert.ToInt64(statusBit.Value) << statusBit.StatusBitInfo.BitNumber); PositionStatusChanged?.Invoke(this, statusBit); }
/// <summary> /// Invoke PositionStatusChanged event on child StatusBit changed. /// </summary> /// <param name="node"></param> /// <param name="statusBit"></param> private void OnChildPositionStatusChanged(PositionNode node, PositionStatusBit statusBit) { PositionStatusChanged?.Invoke(node, statusBit); }