using Aurora.Api;
using MilUI;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using VisionCommon;
using VisionCommonUI;
using VisionCommonUI.Resources;
using VisionUI;
namespace WeldingCommon.Vision.Common
{
///
/// 프로젝트 간에 상호 참조를 해결하기 위해 일부 이벤트들을 미리 등록 해놓은 클래스
///
public class VisionEventManager
{
private bool _IsObservableSet = false;
private static VisionEventManager instance = null;
public static VisionEventManager Instance {
get {
if (instance == null) {
instance = new VisionEventManager();
}
return instance;
}
}
public void Init()
{
SetObservable();
}
private void SetObservable()
{
if (!_IsObservableSet) {
VisionEnv.AuroraEnv.EventObservable.
AsObservable(VisionEventId.SHOW_CAM_DEVICE_SETTING_WINDOW).Subscribe(msg => ShowCamDeviceSettingWindow(msg));
VisionEnv.AuroraEnv.EventObservable.
AsObservable(VisionEventId.SHOW_REGISTER_PATTERN_WINDOW).Subscribe(msg => ShowRegisterPatternWindow(msg));
VisionEnv.AuroraEnv.EventObservable.
AsObservable(VisionEventId.SHOW_PATTERN_SETTING_WINDOW).Subscribe(msg => ShowPatternSettingWindow(msg));
VisionEnv.AuroraEnv.EventObservable.
AsObservable(VisionEventId.SHOW_PATTERN_SETTING_WINDOW_FORCE_OK).Subscribe(msg => ShowPatternSettingWindow_ForceOk(msg));
_IsObservableSet = true;
VisionEnv.AuroraEnv.EventObservable.
AsObservable(VisionEventId.CLOSE_VISION_IMAGE_TEST).Subscribe(msg => CloseVisionImageTest(msg));
}
}
#region Camera
private void ShowCamDeviceSettingWindow(EventMessage msg)
{
if (msg.Param != null) {
Application.Current.Dispatcher.BeginInvoke(
new System.Action(() => {
var param = (Tuple)msg.Param;
VisionUI.CamDeviceSettingWindow.Instance?.Show(param.Item1, param.Item2);
}));
}
}
#endregion
#region Pattern
private Window _Window;
private PatternListViewModel _PatternListViewModel;
private int _SelectedIdx = 0;
private void ShowRegisterPatternWindow(EventMessage msg)
{
if (msg.Param != null) {
Application.Current.Dispatcher.BeginInvoke(
new System.Action(() => {
var param = (Tuple)msg.Param;
PatternAgentBase patternAgent = param.Item1;
PatternInfo patternInfo = param.Item2;
_Window = param.Item3;
_PatternListViewModel = param.Item4;
_SelectedIdx = param.Item5;
if (_Window == null || !(_Window is IPatternSettingWindow)) {
_PatternListViewModel.IsViewEnabled = false;
_Window = new RegisterPatternWindow(patternAgent, patternInfo);
(_Window as IPatternSettingWindow).ResetPosition();
_Window.Closed += OnWindowClosed;
_Window.Owner = Application.Current.MainWindow;
_Window.Show();
} else {
_PatternListViewModel.ResetWindow();
}
}));
}
}
private void ShowPatternSettingWindow(EventMessage msg)
{
if (msg.Param != null) {
Application.Current.Dispatcher.BeginInvoke(
new System.Action(() => {
var param = (Tuple)msg.Param;
PatternAgentBase patternAgent = param.Item1;
PatternInfo patternInfo = param.Item2;
ICameraDisplay cameraDisplay = param.Item3;
FovInfo fovInfo = param.Item4;
_Window = param.Item5;
_PatternListViewModel = param.Item6;
_SelectedIdx = param.Item7;
if (_Window == null || !(_Window is IPatternSettingWindow)) {
_PatternListViewModel.IsViewEnabled = false;
patternAgent.ReloadPattern(patternInfo);
_Window = PatternViewUtil.CreatePatternSettingWindow(
patternAgent, patternInfo.Clone() as PatternInfo, _PatternListViewModel.CamViewBase.GetDisplay(), fovInfo);
if (_Window == null) {
MessageBoxUtil.ShowMessageBoxError(StrTokens.MSG_E_PatternNotFound);
} else {
(_Window as IPatternSettingWindow).ResetPosition();
_Window.Closed += OnWindowClosed;
_Window.Show();
}
} else {
_PatternListViewModel.ResetWindow();
}
}));
}
}
private void OnWindowClosed(object sender, EventArgs e)
{
_Window = null;
if (_PatternListViewModel != null) {
_PatternListViewModel.IsViewEnabled = true;
_PatternListViewModel.InitPatternList(_SelectedIdx);
}
}
#endregion
#region ForceOk
private Window _Window_ForceOk;
private ForceOkView _ForceOkView;
private void ShowPatternSettingWindow_ForceOk(EventMessage msg)
{
if (msg.Param != null) {
Application.Current.Dispatcher.BeginInvoke(
new System.Action(() => {
var param = (Tuple)msg.Param;
PatternAgentBase patternAgent = param.Item1;
PatternInfo patternInfo = param.Item2;
ICameraDisplay cameraDisplay = param.Item3;
FovInfo fovInfo = param.Item4;
_Window_ForceOk = param.Item5;
_ForceOkView = param.Item6;
if (_Window_ForceOk == null) {
patternAgent.ReloadPattern(patternInfo);
_Window_ForceOk = PatternViewUtil.CreatePatternSettingWindow(
patternAgent, patternAgent.GetMainPatternInfo(patternInfo), cameraDisplay, fovInfo);
if (_Window_ForceOk != null) {
(_Window_ForceOk as IPatternSettingWindow).ResetPosition();
_Window_ForceOk.Closed += OnWindowClosed;
_Window_ForceOk.Show();
}
} else {
if (_Window_ForceOk.WindowState == WindowState.Minimized) {
_Window_ForceOk.WindowState = WindowState.Normal;
}
(_Window_ForceOk as IPatternSettingWindow).ResetPosition();
}
}));
}
}
private void OnWindowClosed_ForceOk(object sender, EventArgs e)
{
_ForceOkView.Clear();
}
#endregion
#region Vision Image Test
private void CloseVisionImageTest(EventMessage msg)
{
if (msg.Param != null) {
Application.Current.Dispatcher.BeginInvoke(new Action(() => {
var param = (Tuple