2026-04-14 20:44:08 +09:00

94 lines
3.5 KiB
C#

using Aurora;
using Aurora.Api;
using Aurora.View;
using AuroraCAS;
using MilUI;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reactive.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
using VisionCommon;
namespace WeldingCommon.Views
{
public class UCManualScannerOperationViewModel : NotifyPropertyChangedBase
{
private readonly Logger Log = new Logger("UCManualScannerOperationViewModel");
public ICommand CMD_ShowSelectFieldWindow { get; } // 메뉴얼의 SelectField 팝업 버튼
private readonly IAuroraEnvironment _Aurora;
private WDSelectScoutField _SelectFieldWindow;
public UCScannerMotionViewModel ScannerMotionViewModel { get; }
public UCScannerLaserControlViewModel ScannerLaserControlViewModel { get; }
public bool IsManualStatus { get => _IsManualStatus; set => SetProperty(ref _IsManualStatus, value); }
private bool _IsManualStatus = true;
public UCManualScannerOperationViewModel(IAuroraEnvironment aurora, string scannerId, bool isUseMarkingOntheFly = false)
{
_Aurora = aurora;
CMD_ShowSelectFieldWindow = new DelegateCommand(PerformCmdShowSelectFieldWindow, CanShowSelectFieldWindow);
ScannerMotionViewModel = new UCScannerMotionViewModel(_Aurora, scannerId);
ScannerLaserControlViewModel = new UCScannerLaserControlViewModel(_Aurora, scannerId, isUseMarkingOntheFly);
VisionEnv.AuroraEnv.EventObservable.AsObservable(VisionEventId.SAVE_CHILD_IMAGE_SETTING).
Where(x => x.From == eCamId.CAM1.ToString()).Subscribe(msg => ShowSelectFieldWindow(msg));
_Aurora.EventObservable.AsObservable(CommonEventIds.EVENT_EQUIPMENT_STATUS_CHANGE)
.Subscribe(x => IsManualStatus = Status.EquipmentStatus == eEqpStatus.Manual);
}
private bool CanShowSelectFieldWindow(object o) => _SelectFieldWindow == null;
private void PerformCmdShowSelectFieldWindow(object o)
{
ShowSelectFieldWindow(null);
}
private void ShowSelectFieldWindow(EventMessage msg) {
try {
Application.Current.Dispatcher.Invoke(
new Action(() => {
if (_SelectFieldWindow != null) {
_SelectFieldWindow.Closed -= (sender, _) => { _SelectFieldWindow = null; };
_SelectFieldWindow.Close();
_SelectFieldWindow = null;
}
_SelectFieldWindow = new WDSelectScoutField(_Aurora) {
Owner = Application.Current.MainWindow
};
_SelectFieldWindow.Closed += (sender, _) => { _SelectFieldWindow = null; };
_SelectFieldWindow.Show();
}));
}
catch {
}
}
// TODO: View 에서 해당 button 이 주석 처리 되어 있음.
//private bool CanShowMotionWindow(object o) => _MotionWindow == null;
//private void PerformCmdShowMotionWindow(object o)
//{
// if (_MotionWindow == null) {
// _MotionWindow = new WDSingleAxisControl(_AuroraEnv) {
// Owner = Application.Current.MainWindow,
// };
// _MotionWindow.Closed += (sender, _) => { _MotionWindow = null; };
// }
// _MotionWindow.ShowDialog();
//}
}
}