Exemple #1
0
		public static void UpdateZoneState(GKState state)
		{
			var zone = GKManager.Zones.Union<GKBase>(GKManager.GuardZones).Union(GKManager.SKDZones).FirstOrDefault(z => state.UID == z.UID);
			if (zone == null)
			{
				throw new Exception(string.Format("Зона {0} не найдена.", state.UID));
			}
			var hint = new ElementHint();

			var hintImageSource = zone.ImageSource.Replace("/Controls;component/", "");
			hint.StateHintLines.Add(new HintLine { Text = zone.PresentationName, Icon = (hintImageSource.Trim() != string.Empty) ? GetImageResource(hintImageSource).Item1 : null });

			// Добавляем состояния
			foreach (var stateClass in zone.State.StateClasses)
			{
				//Получаем источник иконки для основного класса
				var iconSourceForStateClasses = stateClass.ToIconSource();
				hint.StateHintLines.Add(
					new HintLine
					{
						Text = stateClass.ToDescription(),
						Icon = iconSourceForStateClasses != null ? GetImageResource(iconSourceForStateClasses.Replace("/Controls;component/", "")).Item1 : null
					});
			}
			// Добавляем доп. состояния
			foreach (var stateClass in zone.State.AdditionalStates)
			{
				//Получаем источник иконки для основного класса
				var iconSourceForAdditionalStateClasses = stateClass.StateClass.ToIconSource();
				hint.StateHintLines.Add(
					new HintLine
					{
						Text = stateClass.Name,
						Icon = iconSourceForAdditionalStateClasses != null ? GetImageResource(iconSourceForAdditionalStateClasses.Replace("/Controls;component/", "")).Item1 : null
					});
			}

			System.Windows.Media.Color background;
			switch (zone.GetType().ToString())
			{
				case "RubezhAPI.GK.GKZone":
					{
						background = GetGKZoneStateColor(state.StateClass);
						break;
					}
				case "RubezhAPI.GK.GKSKDZone":
					{
						background = GetGKSKDZoneStateColor(state.StateClass);
						break;
					}
				case "RubezhAPI.GK.GKGuardZone":
					{
						background = GetGKGuardZoneStateColor(state.StateClass);
						break;
					}
				default:
					{
						background = System.Windows.Media.Colors.Transparent;
						break;
					}
			}

			// Собираем обновление для передачи
			var statusUpdate = new
			{
				Id = "pe" + state.UID,
				Background = new { R = background.R, G = background.G, B = background.B, A = background.A },
				Hint = hint
			};
			PlansUpdater.Instance.UpdateZoneState(statusUpdate);
		}
Exemple #2
0
		public static void UpdateDeviceState(GKState state)
		{
			if (state.BaseObjectType != GKBaseObjectType.Device)
			{
				throw new ArgumentException(@"BaseObjectType должен быть GKBaseObjectType.Device", "state");
			}
			var device = GKManager.Devices.FirstOrDefault(x => x.UID == state.UID);
			if (device == null)
			{
				throw new Exception(string.Format("Устройство {0} не найдено.", state.UID));
			}

			// Получаем обновленную картинку устройства
			var getPictureTask = Task.Factory.StartNewSta(() => GetDeviceStatePic(device, state));
			Task.WaitAll(getPictureTask);
			var pic = getPictureTask.Result;

			var hint = new ElementHint();

			var hintImageSource = device.ImageSource.Replace("/Controls;component/", "");
			hint.StateHintLines.Add(new HintLine { Text = device.PresentationName, Icon = (hintImageSource.Trim() != string.Empty) ? GetImageResource(hintImageSource).Item1 : null });

			// Добавляем состояния
			foreach (var stateClass in device.State.StateClasses)
			{
				//Получаем источник иконки для основного класса
				var iconSourceForStateClasses = stateClass.ToIconSource();
				hint.StateHintLines.Add(
					new HintLine
					{
						Text = stateClass.ToDescription(),
						Icon = iconSourceForStateClasses != null ? GetImageResource(iconSourceForStateClasses.Replace("/Controls;component/", "")).Item1 : null
					});
			}
			// Добавляем доп. состояния
			foreach (var stateClass in device.State.AdditionalStates)
			{
				//Получаем источник иконки для основного класса
				var iconSourceForAdditionalStateClasses = stateClass.StateClass.ToIconSource();
				hint.StateHintLines.Add(
					new HintLine
					{
						Text = stateClass.Name,
						Icon = iconSourceForAdditionalStateClasses != null ? GetImageResource(iconSourceForAdditionalStateClasses.Replace("/Controls;component/", "")).Item1 : null
					});
			}
			// Собираем обновление для передачи
			var statusUpdate = new
			{
				Id = "pe" + state.UID,
				Picture = pic,
				Hint = hint
			};
			PlansUpdater.Instance.UpdateDeviceState(statusUpdate);
		}
Exemple #3
0
		private static ElementHint GetElementHint(ElementBase element)
		{
			var hint = new ElementHint();

			//var asDoor = element as ElementGKDoor;
			//if (asDoor != null) {
			//	var door = GKManager.Doors.FirstOrDefault(d => d.UID == asDoor.DoorUID);
			//	if (door != null) {
			//		if (door.PresentationName != null) {
			//			hint.StateHintLines.Add(new HintLine { Text = door.PresentationName, Icon = GetElementHintIcon(asDoor).Item1 });
			//		}
			//	}
			//}

			var asZone = element as IElementZone;
			if (asZone != null)
			{
				if (element is ElementRectangleGKZone || element is ElementPolygonGKZone)
				{
					var zone = GKManager.Zones.FirstOrDefault(z => z.UID == asZone.ZoneUID);
					if (zone != null && zone.PresentationName != null)
					{
						var imagePath = "Images/Zone.png";
						var imageData = GetImageResource(imagePath);
						hint.StateHintLines.Add(new HintLine { Text = zone.PresentationName, Icon = imageData.Item1 });

						// Добавляем состояния
						foreach (var stateClass in zone.State.StateClasses)
						{
							//Получаем источник иконки для основного класса
							var iconSourceForStateClasses = stateClass.ToIconSource();
							hint.StateHintLines.Add(
								new HintLine
								{
									Text = stateClass.ToDescription(),
									Icon = iconSourceForStateClasses != null ? GetImageResource(iconSourceForStateClasses.Replace("/Controls;component/", "")).Item1 : null
								});
						}
						// Добавляем доп. состояния
						foreach (var stateClass in zone.State.AdditionalStates)
						{
							//Получаем источник иконки для основного класса
							var iconSourceForAdditionalStateClassses = stateClass.StateClass.ToIconSource();
							hint.StateHintLines.Add(
								new HintLine
								{
									Text = stateClass.Name,
									Icon = iconSourceForAdditionalStateClassses != null ? GetImageResource(iconSourceForAdditionalStateClassses.Replace("/Controls;component/", "")).Item1 : null
								});
						}

					}
				}
				if (element is ElementRectangleGKGuardZone
					|| element is ElementPolygonGKGuardZone)
				{
					var zone = GKManager.GuardZones.FirstOrDefault(z => z.UID == asZone.ZoneUID);
					if (zone != null && zone.PresentationName != null)
					{
						var imagePath = "Images/GuardZone.png";
						var imageData = GetImageResource(imagePath);
						hint.StateHintLines.Add(new HintLine { Text = zone.PresentationName, Icon = imageData.Item1 });

						// Добавляем состояния
						foreach (var stateClass in zone.State.StateClasses)
						{
							//Получаем источник иконки для основного класса
							var iconSourceForStateClasses = stateClass.ToIconSource();
							hint.StateHintLines.Add(
								new HintLine
								{
									Text = stateClass.ToDescription(),
									Icon = iconSourceForStateClasses != null ? GetImageResource(iconSourceForStateClasses.Replace("/Controls;component/", "")).Item1 : null
								});
						}
						// Добавляем доп. состояния
						foreach (var stateClass in zone.State.AdditionalStates)
						{
							//Получаем источник иконки для основного класса
							var iconSourceForAdditionalStateClassses = stateClass.StateClass.ToIconSource();
							hint.StateHintLines.Add(
								new HintLine
								{
									Text = stateClass.Name,
									Icon = iconSourceForAdditionalStateClassses != null ? GetImageResource(iconSourceForAdditionalStateClassses.Replace("/Controls;component/", "")).Item1 : null
								});
						}

					}

				}
				if (element is ElementRectangleGKSKDZone
					|| element is ElementPolygonGKSKDZone)
				{
					var zone = GKManager.SKDZones.FirstOrDefault(z => z.UID == asZone.ZoneUID);
					if (zone != null && zone.PresentationName != null)
					{
						var imagePath = "Images/Zone.png";
						var imageData = GetImageResource(imagePath);
						hint.StateHintLines.Add(new HintLine { Text = zone.PresentationName, Icon = imageData.Item1 });

						// Добавляем состояния
						foreach (var stateClass in zone.State.StateClasses)
						{
							//Получаем источник иконки для основного класса
							var iconSourceForStateClasses = stateClass.ToIconSource();
							hint.StateHintLines.Add(
								new HintLine
								{
									Text = stateClass.ToDescription(),
									Icon = iconSourceForStateClasses != null ? GetImageResource(iconSourceForStateClasses.Replace("/Controls;component/", "")).Item1 : null
								});
						}
						// Добавляем доп. состояния
						foreach (var stateClass in zone.State.AdditionalStates)
						{
							//Получаем источник иконки для основного класса
							var iconSourceForAdditionalStateClassses = stateClass.StateClass.ToIconSource();
							hint.StateHintLines.Add(
								new HintLine
								{
									Text = stateClass.Name,
									Icon = iconSourceForAdditionalStateClassses != null ? GetImageResource(iconSourceForAdditionalStateClassses.Replace("/Controls;component/", "")).Item1 : null
								});
						}

					}

				}
			}
			var asMpt = element as IElementMPT;
			if (asMpt != null)
			{
				var mpt = GKManager.MPTs.FirstOrDefault(m => m.UID == asMpt.MPTUID);
				if (mpt != null && mpt.PresentationName != null)
				{
					var imagePath = "Images/BMPT.png";
					var imageData = GetImageResource(imagePath);
					hint.StateHintLines.Add(new HintLine { Text = mpt.PresentationName, Icon = imageData.Item1 });

					// Добавляем состояния
					foreach (var stateClass in mpt.State.StateClasses)
					{
						//Получаем источник иконки для основного класса
						var iconSourceForStateClasses = stateClass.ToIconSource();
						hint.StateHintLines.Add(
							new HintLine
							{
								Text = stateClass.ToDescription(),
								Icon = iconSourceForStateClasses != null ? GetImageResource(iconSourceForStateClasses.Replace("/Controls;component/", "")).Item1 : null
							});
					}
					// Добавляем доп. состояния
					foreach (var stateClass in mpt.State.AdditionalStates)
					{
						//Получаем источник иконки для основного класса
						var iconSourceForAdditionalStateClassses = stateClass.StateClass.ToIconSource();
						hint.StateHintLines.Add(
							new HintLine
							{
								Text = stateClass.Name,
								Icon = iconSourceForAdditionalStateClassses != null ? GetImageResource(iconSourceForAdditionalStateClassses.Replace("/Controls;component/", "")).Item1 : null
							});
					}

				}
			}
			//var asDelay = element as IElementDelay;
			//if (asDelay != null) {
			//	var delay = GKManager.Delays.FirstOrDefault(m => m.UID == asDelay.DelayUID);
			//	if (delay != null) {
			//		if (delay.PresentationName != null) {
			//			hint.StateHintLines.Add(new HintLine {
			//				Text = delay.PresentationName,
			//				Icon = new Func<string>(
			//						() => {
			//							var imagePath = delay.ImageSource.Replace("/Controls;component/", "");
			//							var imageData = GetImageResource(imagePath);
			//							return imageData.Item1;
			//						}).Invoke()
			//			});
			//		}
			//	}
			//}
			var asDirection = element as IElementDirection;
			if (asDirection != null)
			{
				var direction = GKManager.Directions.FirstOrDefault(
					d => d.UID == asDirection.DirectionUID);
				if (direction != null && direction.PresentationName != null)
				{
					var imagePath = "Images/Blue_Direction.png";
					var imageData = GetImageResource(imagePath);
					hint.StateHintLines.Add(new HintLine { Text = direction.PresentationName, Icon = imageData.Item1 });

					// Добавляем состояния
					foreach (var stateClass in direction.State.StateClasses)
					{
						//Получаем источник иконки для основного класса
						var iconSourceForStateClasses = stateClass.ToIconSource();
						hint.StateHintLines.Add(
							new HintLine
							{
								Text = stateClass.ToDescription(),
								Icon = iconSourceForStateClasses != null ? GetImageResource(iconSourceForStateClasses.Replace("/Controls;component/", "")).Item1 : null
							});
					}
					// Добавляем доп. состояния
					foreach (var stateClass in direction.State.AdditionalStates)
					{
						//Получаем источник иконки для основного класса
						var iconSourceForAdditionalStateClassses = stateClass.StateClass.ToIconSource();
						hint.StateHintLines.Add(
							new HintLine
							{
								Text = stateClass.Name,
								Icon = iconSourceForAdditionalStateClassses != null ? GetImageResource(iconSourceForAdditionalStateClassses.Replace("/Controls;component/", "")).Item1 : null
							});
					}

				}
			}
			var asDevice = element as ElementGKDevice;
			if (asDevice != null)
			{
				var device = GKManager.Devices.FirstOrDefault(
					d => d.UID == asDevice.DeviceUID);
				if (device != null
					&& device.PresentationName != null)
				{
					hint.StateHintLines.Add(new HintLine { Text = device.PresentationName, Icon = GetElementHintIcon(asDevice).Item1 });

					// Добавляем состояния
					foreach (var stateClass in device.State.StateClasses)
					{
						//Получаем источник иконки для основного класса
						var iconSourceForStateClasses = stateClass.ToIconSource();
						hint.StateHintLines.Add(
							new HintLine
							{
								Text = stateClass.ToDescription(),
								Icon = iconSourceForStateClasses != null ? GetImageResource(iconSourceForStateClasses.Replace("/Controls;component/", "")).Item1 : null
							});
					}
					// Добавляем доп. состояния
					foreach (var stateClass in device.State.AdditionalStates)
					{
						//Получаем источник иконки для основного класса
						var iconSourceForAdditionalStateClassses = stateClass.StateClass.ToIconSource();
						hint.StateHintLines.Add(
							new HintLine
							{
								Text = stateClass.Name,
								Icon = iconSourceForAdditionalStateClassses != null ? GetImageResource(iconSourceForAdditionalStateClassses.Replace("/Controls;component/", "")).Item1 : null
							});
					}
				}
			}
			return hint;
		}