103 lines
3.5 KiB
C#
103 lines
3.5 KiB
C#
/*
|
|
* Copyright (c) 2025 LG Electronics Inc.
|
|
* SPDX-License-Identifier: LicenseRef-LGE-Proprietary
|
|
*/
|
|
using Aurora.Api;
|
|
using System;
|
|
using System.Windows;
|
|
using System.ComponentModel;
|
|
using System.Windows.Threading;
|
|
using VisionCommon;
|
|
|
|
namespace VisionUI.Camera {
|
|
/// <summary>
|
|
/// 메인 카메라 뷰 윈도우
|
|
/// MainCameraViewWindow.xaml BehindCode
|
|
/// </summary>
|
|
public partial class MainCameraViewWindow : Window {
|
|
private static Logger _Logger = new Logger("MainCameraViewWindow");
|
|
private IDisposable _EventDisposable;
|
|
|
|
/// <summary>Static 객체(싱글톤)</summary>
|
|
public static MainCameraViewWindow _Instance = null;
|
|
private static readonly object _Lock = new object();
|
|
|
|
private bool _IsViewInitialized = false;
|
|
private eDisplayType _displayType = eDisplayType.Main_1;
|
|
|
|
private delegate void HideWindow();
|
|
|
|
/// <summary>
|
|
/// 싱글톤 객체
|
|
/// </summary>
|
|
public static MainCameraViewWindow Instance {
|
|
get {
|
|
lock (_Lock) {
|
|
if (_Instance == null) {
|
|
_Instance = new MainCameraViewWindow();
|
|
}
|
|
return _Instance;
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 생성자
|
|
/// </summary>
|
|
public MainCameraViewWindow() {
|
|
_Instance = this;
|
|
|
|
InitializeComponent();
|
|
CreateView();
|
|
SetObservable();
|
|
}
|
|
|
|
private void SetObservable() {
|
|
if (_EventDisposable == null) {
|
|
var observable = VisionEventId.GetRecipeActivatedObservable();
|
|
_EventDisposable = observable.Subscribe(_ => UpdateView());
|
|
}
|
|
}
|
|
|
|
private void UpdateView()
|
|
{
|
|
Application.Current.Dispatcher.BeginInvoke((Action)(() => {
|
|
var camWindow = MainCameraViewManager.Instance.GetMainCameraView(_displayType);
|
|
// 지속적인 메모리 증가로 인하여 방어코드 생성 - from.MagnetAttch 과제
|
|
if (!gridMainCameraViewWindow.Children.Contains(camWindow))
|
|
{
|
|
MainCameraViewManager.Instance.DisposeMainCameraView(_displayType);
|
|
gridMainCameraViewWindow.Children.Clear();
|
|
gridMainCameraViewWindow.Children.Add(camWindow);
|
|
}
|
|
}));
|
|
}
|
|
|
|
/// <summary>
|
|
/// 카메라 뷰 생성
|
|
/// CameraView를 미리 만들어 놓기 위해 프로그램 로딩시 수행
|
|
/// </summary>
|
|
public void CreateView() {
|
|
Application.Current.Dispatcher.BeginInvoke((Action)(() => {
|
|
if (!_IsViewInitialized) {
|
|
gridMainCameraViewWindow.Children.Add(MainCameraViewManager.Instance.GetMainCameraView(_displayType));
|
|
_IsViewInitialized = true;
|
|
}
|
|
}));
|
|
}
|
|
|
|
protected override void OnClosing(CancelEventArgs e) {
|
|
// Aurora 앱이 닫힌 후에도 해당 팝업이 강제종료될때까지 살아있어, 명시적으로 꺼질 수 있게끔 예외처리코드 추가
|
|
if (Application.Current.MainWindow != null)
|
|
{
|
|
e.Cancel = true;
|
|
Dispatcher.BeginInvoke(DispatcherPriority.Normal, new HideWindow(_HideWindow));
|
|
}
|
|
}
|
|
|
|
private void _HideWindow() {
|
|
CameraUcManager.Instance.StopLiveAll();
|
|
this.Hide();
|
|
}
|
|
}
|
|
} |