/*
* Copyright (c) 2025 LG Electronics Inc.
* SPDX-License-Identifier: LicenseRef-LGE-Proprietary
*/
using Aurora.Api;
using VisionAligner;
using VisionCommon;
using System;
using System.Windows;
using System.Windows.Controls;
using VisionUI.Pattern;
using System.Windows.Media;
using VisionCommonUI;
using VisionCommonUI.Resources;
namespace VisionUI.Aligner {
///
/// 얼라인 세팅 뷰
/// AlignSettingView.xaml BehindCode
///
public partial class AlignSettingView : UserControl {
private Logger _Logger = new Logger("AlignSettingView");
private SubSysInfo _SubSysInfo;
private SubSysRecipe _SubSysRecipe;
///
/// 생성자
///
/// 서브시스템 정보
public AlignSettingView(SubSysInfo subSysInfo) {
_SubSysInfo = subSysInfo;
_SubSysRecipe = VisionRecipeManager.GetSubSysRecipe(_SubSysInfo);
InitializeComponent();
CreateViews();
CreatePatternLogView();
CreateAlignLogView();
}
private void CreateViews() {
CreateAlignTabControl();
}
///
/// 얼라인 탭 컨트롤 생성
///
public void CreateAlignTabControl() {
var alignInfos = VisionRecipeManager.GetAlignInfos(_SubSysInfo.UnitId, _SubSysInfo.SubSysId);
foreach (AlignInfo alignInfo in alignInfos) {
var alignTabItem = new TabItem() {
Header = alignInfo.AlignName,
Content = CreateAlignRecipeSettingView(alignInfo)
};
alignTabItem.TabIndex = (int)alignInfo.AlignId;
alignTabItem.Style = FindResource("styleSubMenuRootTabItem") as Style;
alignTabControl.Items.Add(alignTabItem);
}
alignTabControl.SelectedIndex = 0;
alignTabControl.SelectionChanged += AlignTabControl_SelectionChanged;
if (alignInfos.Count == 0 || alignTabControl.Items.Count < alignInfos.Count) {
PrintRecipeError(typeof(AlignRecipe).Name, alignTabControl);
}
}
private void AlignTabControl_SelectionChanged(object sender, SelectionChangedEventArgs e) {
var tabControl = sender as TabControl;
(DataContext as AlignSettingViewModel).SetCurrentAlignInfo((eAlignId)tabControl.SelectedIndex);
// gridAlignLogView 여기서 지금 선택된 alignInfo에 해당하는 View만 보이게 만들기
SetAlignLogViewVisible(tabControl.SelectedIndex);
}
private AlignRecipeSettingView CreateAlignRecipeSettingView(AlignInfo alignInfo) {
try {
var alignRecipeSettingView = new AlignRecipeSettingView(alignInfo);
var alignRecipeSettingViewModel = new AlignRecipeSettingViewModel(alignInfo);
alignRecipeSettingView.DataContext = alignRecipeSettingViewModel;
return alignRecipeSettingView;
}
catch (Exception e) {
_Logger.FuncE(e.Message);
}
return null;
}
private void CreatePatternLogView() {
var patternLogView = new PatternLogView(_SubSysInfo);
var patternLogViewModel = new PatternLogViewModel(_SubSysInfo);
patternLogView.DataContext = patternLogViewModel;
gridPatternLogView.Children.Add(patternLogView);
}
private void CreateAlignLogView() {
if (gridAlignLogView.Children.Count == 0) {
foreach (AlignInfo alignInfo in VisionRecipeManager.GetAlignInfos(_SubSysInfo)) {
var alignLogView = new AlignLogView(alignInfo);
var alignLogViewModel = new AlignLogViewModel(alignInfo, alignLogView);
alignLogView.DataContext = alignLogViewModel;
gridAlignLogView.Children.Add(alignLogView);
}
SetAlignLogViewVisible(0);
}
}
private void SetAlignLogViewVisible(int index) {
if(gridAlignLogView != null) {
foreach (var view in gridAlignLogView.Children) {
if ((view as AlignLogView).GetAlignInfo().AlignId == (eAlignId)index) {
(view as AlignLogView).Visibility = Visibility.Visible;
}
else {
(view as AlignLogView).Visibility = Visibility.Collapsed;
}
}
}
}
private void Button_Save_Click(object sender, RoutedEventArgs e) {
UpdateRecipeFromUI_AlignRecipe();
RecipeFileManager.SaveVisionRecipe();
UpdateAlignRecipe(); // 레시피 저장 후, 갱신
MessageBoxUtil.ShowMessageBoxOk(StrTokens.MSG_O_SaveCompleted);
}
private void UpdateAlignRecipe() {
AlignerFactory.Update(_SubSysInfo);
}
private void UpdateRecipeFromUI_AlignRecipe() {
foreach (var item in alignTabControl.Items) {
var tabItem = (TabItem)item;
var alignRecipeSettingView = tabItem.Content as AlignRecipeSettingView;
alignRecipeSettingView.UpdateRecipeFromUI();
}
}
private void PrintRecipeError(string recipeName, TabControl tabControl) {
var errMsg = string.Format(StrTokens.RecipeErrorMessage, recipeName);
var errTabItem = new TabItem() {
Header = "Undefined",
Content = new UCRecipeErrorTextBlock(errMsg) { Margin = new Thickness(15) }
};
errTabItem.Style = FindResource("styleSubMenuRootTabItem") as Style;
errTabItem.VerticalContentAlignment = VerticalAlignment.Center;
errTabItem.HorizontalContentAlignment = HorizontalAlignment.Center;
tabControl.Items.Add(errTabItem);
}
private void UserControl_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e) {
bool isVisible = (bool)e.NewValue;
if (isVisible == true) {
UpdateVisionRecipes();
}
}
private void UpdateVisionRecipes() {
_SubSysRecipe = VisionRecipeManager.GetSubSysRecipe(_SubSysInfo);
}
}
}