using System.Collections.Generic; using System.Windows; using System.Windows.Controls; namespace VisionCommon { /// /// 다른 디스플레이에서 동일 카메라 라이브 동작시, 버튼 UI Sync를 맞추기 위함. /// public class CamLiveBtnManager { private static Dictionary> _DicLiveBtns = new Dictionary>(); public static void SetLiveBtnsForVisibility(eDisplayType displayType, FovInfo fovInfo, Button btnLiveStart, Button btnLiveStop) { if (!_DicLiveBtns.ContainsKey(displayType)) { _DicLiveBtns.Add(displayType, new Dictionary()); } _DicLiveBtns[displayType][fovInfo] = new LiveBtns(btnLiveStart, btnLiveStop); } public static void SetVisibilityAsLiveStart(eDisplayType displayType, FovInfo fovInfo) { Application.Current.Dispatcher.BeginInvoke( new System.Action(() => { var camRecipe = VisionRecipeManager.GetCamRecipe(fovInfo); // 같은 CamId를 사용하는 디스플레이의 라이브 버튼 모두 끄기 foreach (Dictionary dicLiveBtns in _DicLiveBtns.Values) { foreach (FovInfo curFovInfo in dicLiveBtns.Keys) { var curCamRecipe = VisionRecipeManager.GetCamRecipe(curFovInfo); if (curCamRecipe == null) { continue; } if (camRecipe.CamId == curCamRecipe.CamId) { LiveBtns liveBtns = dicLiveBtns[curFovInfo]; liveBtns.BtnLiveStart.Visibility = Visibility.Visible; liveBtns.BtnLiveStop.Visibility = Visibility.Collapsed; } } } // 내 Fov를 사용하는 디스플레이만 라이브 버튼 켜기 if (_DicLiveBtns.ContainsKey(displayType)) { if (_DicLiveBtns[displayType].ContainsKey(fovInfo)) { LiveBtns liveBtns = _DicLiveBtns[displayType][fovInfo]; liveBtns.BtnLiveStart.Visibility = Visibility.Collapsed; liveBtns.BtnLiveStop.Visibility = Visibility.Visible; } } })); } public static void SetVisibilityAsLiveStop(FovInfo fovInfo) { Application.Current.Dispatcher.BeginInvoke( new System.Action(() => { var camRecipe = VisionRecipeManager.GetCamRecipe(fovInfo); // 같은 CamId를 사용하는 디스플레이의 라이브 버튼 모두 끄기 foreach (Dictionary dicLiveBtns in _DicLiveBtns.Values) { foreach (FovInfo key in dicLiveBtns.Keys) { var curCamRecipe = VisionRecipeManager.GetCamRecipe(key); if (curCamRecipe == null) { continue; } if (camRecipe.CamId == curCamRecipe.CamId) { LiveBtns liveBtns = dicLiveBtns[key]; liveBtns.BtnLiveStart.Visibility = Visibility.Visible; liveBtns.BtnLiveStop.Visibility = Visibility.Collapsed; } } } })); } } public class LiveBtns { public Button BtnLiveStart { get; set; } public Button BtnLiveStop { get; set; } public LiveBtns(Button btnLiveStart, Button btnLiveStop) { BtnLiveStart = btnLiveStart; BtnLiveStop = btnLiveStop; } } }