public void UpdateContentInfo(IItemBundleInfo[] bundles) { // Update content info _contentCount.Clear(); // Update item-count information foreach (var item in bundles) { if (!_contentCount.ContainsKey(item.GetInfoItemDescription())) { _contentCount[item.GetInfoItemDescription()] = item.GetInfoItemCount(); } else { _contentCount[item.GetInfoItemDescription()] += item.GetInfoItemCount(); } } // Update the visual controls foreach (var item in bundles) { // Check whether it is a new item if (!_blocksContent.ContainsKey(item.GetInfoItemDescription())) { // New item - init visual control TextBlock textBlock = new TextBlock() { Padding = new Thickness(3), FontFamily = VisualizationConstants.ItemFont }; if (item.GetInfoItemDescription() is IColoredLetterDescriptionInfo) { IColoredLetterDescriptionInfo itemDescription = item.GetInfoItemDescription() as IColoredLetterDescriptionInfo; textBlock.Background = VisualizationConstants.LetterColorBackgroundBrushes[itemDescription.GetInfoColor()]; textBlock.Foreground = VisualizationConstants.LetterColorComplete; textBlock.Text = itemDescription.GetInfoLetter() + "/" + _contentCount[itemDescription]; } else { if (item.GetInfoItemDescription() is ISimpleItemDescriptionInfo) { ISimpleItemDescriptionInfo itemDescription = item.GetInfoItemDescription() as ISimpleItemDescriptionInfo; textBlock.Background = ColorManager.GenerateHueBrush(itemDescription.GetInfoHue()); textBlock.Foreground = VisualizationConstants.SimpleItemColorComplete; textBlock.Text = (itemDescription.GetInfoID().ToString() + "(" + _contentCount[itemDescription] + ")").PadBoth(VisualizationConstants.SIMPLE_ITEM_BUNDLE_MIN_CHAR_COUNT); } else { textBlock.Text = item.GetInfoItemDescription().GetInfoDescription(); } } // Add the control _blocksContent[item.GetInfoItemDescription()] = textBlock; _contentHost.Items.Add(textBlock); } else { // Visual control already exists - grab and update it if (item.GetInfoItemDescription() is IColoredLetterDescriptionInfo) { IColoredLetterDescriptionInfo itemDescription = item.GetInfoItemDescription() as IColoredLetterDescriptionInfo; _blocksContent[item.GetInfoItemDescription()].Text = itemDescription.GetInfoLetter() + "/" + _contentCount[itemDescription]; } else { if (item.GetInfoItemDescription() is ISimpleItemDescriptionInfo) { ISimpleItemDescriptionInfo itemDescription = item.GetInfoItemDescription() as ISimpleItemDescriptionInfo; _blocksContent[item.GetInfoItemDescription()].Text = (itemDescription.GetInfoID().ToString() + "(" + _contentCount[itemDescription] + ")").PadBoth(VisualizationConstants.SIMPLE_ITEM_BUNDLE_MIN_CHAR_COUNT); } else { _blocksContent[item.GetInfoItemDescription()].Text = item.GetInfoItemDescription().GetInfoDescription(); } } } } // Remove controls showing items not present in the pod anymore foreach (var itemDescription in _blocksContent.Keys.Except(bundles.Select(b => b.GetInfoItemDescription())).ToArray()) { _contentHost.Items.Remove(_blocksContent[itemDescription]); _blocksContent.Remove(itemDescription); } }
public void UpdateContentInfo() { // Update the visual controls foreach (var item in _pod.GetInfoInstance().GetInfoItemDescriptions()) { // Check whether the item is contained in the pod if (_pod.GetInfoContent(item) > 0) { // Check whether it is a new item if (!_blocksContent.ContainsKey(item)) { // New item - init visual control TextBlock textBlock = new TextBlock() { Padding = new Thickness(3), FontFamily = VisualizationConstants.ItemFont }; if (item is IColoredLetterDescriptionInfo) { IColoredLetterDescriptionInfo itemDescription = item as IColoredLetterDescriptionInfo; textBlock.Background = VisualizationConstants.LetterColorBackgroundBrushes[itemDescription.GetInfoColor()]; textBlock.Foreground = VisualizationConstants.LetterColorComplete; textBlock.Text = itemDescription.GetInfoLetter() + "/" + _pod.GetInfoContent(itemDescription); } else { if (item is ISimpleItemDescriptionInfo) { ISimpleItemDescriptionInfo itemDescription = item as ISimpleItemDescriptionInfo; textBlock.Background = ColorManager.GenerateHueBrush(itemDescription.GetInfoHue()); textBlock.Foreground = VisualizationConstants.SimpleItemColorComplete; textBlock.Text = (itemDescription.GetInfoID().ToString() + "(" + _pod.GetInfoContent(itemDescription) + ")").PadBoth(VisualizationConstants.SIMPLE_ITEM_BUNDLE_MIN_CHAR_COUNT); } else { textBlock.Text = item.GetInfoDescription(); } } // Add the control _blocksContent[item] = textBlock; _contentHost.Items.Add(textBlock); } else { // Visual control already exists - grab and update it if (item is IColoredLetterDescriptionInfo) { IColoredLetterDescriptionInfo itemDescription = item as IColoredLetterDescriptionInfo; _blocksContent[item].Text = itemDescription.GetInfoLetter() + "/" + _pod.GetInfoContent(itemDescription); } else { if (item is ISimpleItemDescriptionInfo) { ISimpleItemDescriptionInfo itemDescription = item as ISimpleItemDescriptionInfo; _blocksContent[item].Text = (itemDescription.GetInfoID().ToString() + "(" + _pod.GetInfoContent(itemDescription) + ")").PadBoth(VisualizationConstants.SIMPLE_ITEM_BUNDLE_MIN_CHAR_COUNT); } else { _blocksContent[item].Text = item.GetInfoDescription(); } } } } } // Remove controls showing items not present in the pod anymore foreach (var item in _pod.GetInfoInstance().GetInfoItemDescriptions()) { if (_pod.GetInfoContent(item) <= 0 && _blocksContent.ContainsKey(item)) { _contentHost.Items.Remove(_blocksContent[item]); _blocksContent.Remove(item); } } }
public void Update(IEnumerable <IOrderInfo> openOrders, IEnumerable <IOrderInfo> completedOrders) { // Add new controls for the orders foreach (var order in openOrders.Concat(completedOrders)) { // Check whether a control for this order is already available if (!_orderStatusOpen.ContainsKey(order)) { // Create a container for this order _orderControls[order] = new WrapPanel() { Orientation = Orientation.Horizontal }; RootOpenOrders.Items.Add(_orderControls[order]); // Create the controls for every element of the order _itemControls[order] = new Dictionary <IItemDescriptionInfo, TextBlock>(); foreach (var position in order.GetInfoPositions()) { TextBlock positionBlock = new TextBlock() { Padding = new Thickness(3), FontFamily = VisualizationConstants.ItemFont }; if (position is IColoredLetterDescriptionInfo) { IColoredLetterDescriptionInfo itemDescription = position as IColoredLetterDescriptionInfo; positionBlock.Background = VisualizationConstants.LetterColorBackgroundBrushes[itemDescription.GetInfoColor()]; positionBlock.Foreground = VisualizationConstants.LetterColorIncomplete; positionBlock.Text = itemDescription.GetInfoLetter() + "(0/" + order.GetInfoDemandCount(position) + ")"; } else { if (position is ISimpleItemDescriptionInfo) { ISimpleItemDescriptionInfo itemDescription = position as ISimpleItemDescriptionInfo; positionBlock.Background = ColorManager.GenerateHueBrush(itemDescription.GetInfoHue()); positionBlock.Foreground = VisualizationConstants.SimpleItemColorIncomplete; positionBlock.Text = (itemDescription.GetInfoID().ToString() + "(0/" + order.GetInfoDemandCount(position) + ")").PadLeft(VisualizationConstants.SIMPLE_ITEM_ORDER_MIN_CHAR_COUNT); } else { positionBlock.Text = position.GetInfoDescription() + "(0/" + order.GetInfoDemandCount(position) + ")"; } } _itemControls[order][position] = positionBlock; _orderControls[order].Children.Add(positionBlock); } // Add the order to the list and mark it as open _openOrders.Add(order); _openOrderCount++; _orderStatusOpen[order] = true; } } // Update served quantities of existing orders foreach (var order in _openOrders) { // Refresh order status if (order.GetInfoIsCompleted()) { _orderStatusOpen[order] = false; } // Update all positions foreach (var position in order.GetInfoPositions()) { if (position is IColoredLetterDescriptionInfo) { // Update the position's text (use the coloring too) IColoredLetterDescriptionInfo itemDescription = position as IColoredLetterDescriptionInfo; _itemControls[order][position].Text = itemDescription.GetInfoLetter() + "(" + order.GetInfoServedCount(position).ToString() + "/" + order.GetInfoDemandCount(position).ToString() + ")"; } else { if (position is ISimpleItemDescriptionInfo) { // Update the position's text (use the coloring too) ISimpleItemDescriptionInfo itemDescription = position as ISimpleItemDescriptionInfo; _itemControls[order][position].Text = (itemDescription.GetInfoID().ToString() + "(" + order.GetInfoServedCount(position).ToString() + "/" + order.GetInfoDemandCount(position).ToString() + ")") .PadLeft(VisualizationConstants.SIMPLE_ITEM_ORDER_MIN_CHAR_COUNT); } else { // Update the position's text _itemControls[order][position].Text = position.GetInfoDescription() + "(" + order.GetInfoServedCount(position).ToString() + "/" + order.GetInfoDemandCount(position).ToString() + ")"; } } // Set color according to completed position _itemControls[order][position].Foreground = order.GetInfoServedCount(position) == order.GetInfoDemandCount(position) ? // Check whether position is complete VisualizationConstants.LetterColorComplete : // Completed the position VisualizationConstants.LetterColorIncomplete; // Position is incomplete } } // Move newly completed orders from open to complete node foreach (var order in _openOrders.Where(o => !_orderStatusOpen[o]).ToList()) { _openOrders.Remove(order); _completedOrders.Add(order); RootOpenOrders.Items.Remove(_orderControls[order]); RootCompletedOrders.Items.Insert(0, _orderControls[order]); _openOrderCount--; _completedOrderCount++; } // Remove completed orders if list gets too long if (_completedOrders.Count > _orderCount) { // Manage the list of the currently displayed orders List <IOrderInfo> removedOrders = _completedOrders.Take(_completedOrders.Count - _orderCount).ToList(); _droppedOrders.AddRange(removedOrders); _completedOrders.RemoveRange(0, _completedOrders.Count - _orderCount); foreach (var removedOrder in removedOrders) { RootCompletedOrders.Items.Remove(_orderControls[removedOrder]); } // Remove the controls foreach (var removedOrder in removedOrders) { foreach (var position in removedOrder.GetInfoPositions()) { _itemControls[removedOrder].Remove(position); } _itemControls.Remove(removedOrder); _orderControls.Remove(removedOrder); } } // Update order count info RootOpenOrders.Header = _headerOpenOrders + " (" + _openOrderCount + ")"; RootCompletedOrders.Header = _headerCompletedOrders + " (" + Math.Min(_orderCount, _completedOrderCount) + "/" + _completedOrderCount + ")"; }