using Aurora; using Aurora.Api.Devices; using Aurora.Api.Manager; using Aurora.View; using AuroraUIComponent.UserControls; using System; using System.Collections.Generic; using System.Windows; using System.Windows.Input; using System.Windows.Threading; namespace WeldingCommon.Views { internal class UCSingleAxisPositionViewModel : NotifyPropertyChangedBase { private readonly IDeviceManager _DeviceManager; private readonly DispatcherTimer _MonitorTimer; #region Binding Properties private List _MotorIDList; public List MotorIDList { get => _MotorIDList; set => SetProperty(ref _MotorIDList, value); } private string _SelectedMotorID; public string SelectedMotorID { get => _SelectedMotorID; set => SetProperty(ref _SelectedMotorID, value); } private MotorStatusTableView _UCMotorStatusTable; public MotorStatusTableView UCMotorStatusTable { get => _UCMotorStatusTable; set => SetProperty(ref _UCMotorStatusTable, value); } #endregion #region EventCommands public ICommand CMD_VisibleChanged { get; } public ICommand CMD_IncreaseComboMotorID { get; } public ICommand CMD_DecreaseComboMotorID { get; } public ICommand CMD_MotorSave { get; } #endregion internal UCSingleAxisPositionViewModel(IAuroraEnvironment aurora) { _DeviceManager = aurora.DeviceManager; #region Initialize Binding Properties // Motor ID 를 List 에 넣기. devicemanager 에서 motor ID 를 받아오자. // motor 가 define 되지 않았으니 테스트를 위해 임시로 몇개 넣어둔다. MotorIDList = new List { "Welding Y1", "Welding Z" }; SelectedMotorID = MotorIDList[0]; #endregion #region DelegateCommands CMD_VisibleChanged = new DelegateCommand(VisibleChanged); CMD_IncreaseComboMotorID = new DelegateCommand(PerformCmdIncreaseComboMotorID); CMD_DecreaseComboMotorID = new DelegateCommand(PerformCmdDecreaseComboMotorID); CMD_MotorSave = new DelegateCommand(PerformCmdMotorSave); #endregion _MonitorTimer = new DispatcherTimer(); _MonitorTimer.Tick += OnMonitoring; _MonitorTimer.Interval = TimeSpan.FromMilliseconds(100); } public void InitMotorStatusTableProperties() { // Init table list } private void VisibleChanged(object obj) { bool visible = (bool)obj; if (visible) { _MonitorTimer.Start(); } else { _MonitorTimer.Stop(); } } private void OnMonitoring(object sender, EventArgs e) { try { var motor = GetComboSelectedBaseMotor(); if (motor != null) { } } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void PerformCmdIncreaseComboMotorID(object obj) { try { int nIndex = MotorIDList.IndexOf(SelectedMotorID); if (nIndex >= MotorIDList.Count - 1) { nIndex = MotorIDList.Count; } else { nIndex++; } SelectedMotorID = MotorIDList[nIndex]; } catch { } } private void PerformCmdDecreaseComboMotorID(object obj) { try { int nIndex = MotorIDList.IndexOf(SelectedMotorID); if (nIndex < 1) { nIndex = 0; } else { nIndex--; } SelectedMotorID = MotorIDList[nIndex]; } catch { } } private void PerformCmdMotorSave(object obj) { try { // table 내용을 어떻게 처리할지 내용 파악할 것 } catch { } } private BaseMotor GetComboSelectedBaseMotor() { return _DeviceManager[SelectedMotorID] as BaseMotor; } } }