ComponentList > 표시 설정 바로가기 기능 개발
This commit is contained in:
@@ -8,7 +8,6 @@ using UVC.Data.Core;
|
||||
using UVC.Factory;
|
||||
using UVC.Factory.Alarm;
|
||||
using UVC.Factory.Component;
|
||||
using UVC.UI.List.ComponentList;
|
||||
using UVC.Factory.Modal.Settings;
|
||||
using UVC.Factory.Playback;
|
||||
using UVC.Log;
|
||||
@@ -108,7 +107,7 @@ namespace SampleProject
|
||||
|
||||
private void SetupTopMenu()
|
||||
{
|
||||
if(topMenu == null)
|
||||
if (topMenu == null)
|
||||
{
|
||||
Debug.LogError("TopMenuController is not assigned in SceneMain.");
|
||||
return;
|
||||
@@ -167,7 +166,7 @@ namespace SampleProject
|
||||
|
||||
private void SetupSideMenu()
|
||||
{
|
||||
if(sideMenu == null)
|
||||
if (sideMenu == null)
|
||||
{
|
||||
Debug.LogError("SideMenuController is not assigned in SceneMain.");
|
||||
return;
|
||||
|
||||
@@ -8,14 +8,31 @@ namespace UVC.Factory.Modal.Settings
|
||||
public class AlarmSettingTabContent : MonoBehaviour, ITabContent
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// 탭 콘텐츠에 데이터를 전달합니다.
|
||||
/// </summary>
|
||||
/// <param name="data">전달할 데이터 객체</param>
|
||||
public void SetContentData(object? data)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 탭 전환 시 데이터가 있는 경우 전달 되는 데이터. SetContentData 이후 호출 됨
|
||||
/// </summary>
|
||||
/// <param name="data">전달할 데이터 객체</param>
|
||||
public void UpdateContentData(object? data)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 닫힐 때 실행되는 로직을 처리합니다.
|
||||
/// </summary>
|
||||
/// <returns>비동기 닫기 작업을 나타내는 <see cref="UniTask"/>입니다.</returns>
|
||||
public UniTask OnCloseAsync()
|
||||
{
|
||||
return UniTask.CompletedTask;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,12 +77,17 @@ namespace UVC.Factory.Modal.Settings
|
||||
Debug.Log($"OnOrderChanged: {data.Id} from {oldIndex} to {newIndex}");
|
||||
UpdateData();
|
||||
}
|
||||
|
||||
private void OnChangedItemData(ListItemData data)
|
||||
{
|
||||
Debug.Log($"OnChangedItemData: {data.Id} - {data.DisplayName}");
|
||||
UpdateData();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 탭 콘텐츠에 데이터를 전달합니다.
|
||||
/// </summary>
|
||||
/// <param name="data">전달할 데이터 객체</param>
|
||||
private void UpdateData()
|
||||
{
|
||||
Debug.Log($"UpdateData: draggableList != null:{draggableList != null}, viewData != null:{viewData != null}, configKey:{key}");
|
||||
@@ -104,6 +109,23 @@ namespace UVC.Factory.Modal.Settings
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 탭 전환 시 데이터가 있는 경우 전달 되는 데이터. SetContentData 이후 호출 됨
|
||||
/// </summary>
|
||||
/// <param name="data">전달할 데이터 객체</param>
|
||||
public void UpdateContentData(object? data)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 닫힐 때 실행되는 로직을 처리합니다.
|
||||
/// </summary>
|
||||
/// <returns>비동기 닫기 작업을 나타내는 <see cref="UniTask"/>입니다.</returns>
|
||||
public UniTask OnCloseAsync()
|
||||
{
|
||||
return UniTask.CompletedTask;
|
||||
}
|
||||
|
||||
void OnDestroy()
|
||||
{
|
||||
if (draggableList != null)
|
||||
@@ -112,11 +134,6 @@ namespace UVC.Factory.Modal.Settings
|
||||
draggableList.OnChangedItemData -= OnChangedItemData;
|
||||
}
|
||||
}
|
||||
|
||||
public UniTask OnCloseAsync()
|
||||
{
|
||||
return UniTask.CompletedTask;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -12,8 +12,11 @@ namespace UVC.Factory.Modal.Settings
|
||||
{
|
||||
[SerializeField]
|
||||
public TabController tabController; // 탭 컨트롤러
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 탭 콘텐츠에 데이터를 전달합니다.
|
||||
/// </summary>
|
||||
/// <param name="data">전달할 데이터 객체</param>
|
||||
public void SetContentData(object? data)
|
||||
{
|
||||
if (tabController != null)
|
||||
@@ -31,6 +34,37 @@ namespace UVC.Factory.Modal.Settings
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 탭 전환 시 데이터가 있는 경우 전달 되는 데이터. SetContentData 이후 호출 됨
|
||||
/// </summary>
|
||||
/// <param name="data">전달할 데이터 객체</param>
|
||||
public void UpdateContentData(object? data)
|
||||
{
|
||||
if (data != null && data is string content)
|
||||
{
|
||||
Debug.Log($"UpdateContentData: {content}");
|
||||
|
||||
if (content.StartsWith("shortcut:"))
|
||||
{
|
||||
// 특정 탭으로 이동
|
||||
string[] parts = content.Substring("shortcut:".Length - 1).Split('>');
|
||||
if (parts.Length > 1)
|
||||
{
|
||||
// 시간차를 계산해 0.5초 후에 탭을 활성화
|
||||
UniTask.Delay(500).ContinueWith(() => {
|
||||
string tabKey = parts[1];
|
||||
Debug.Log($"ActivateTab2: {tabKey}");
|
||||
tabController?.ActivateTab(tabKey);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 닫힐 때 실행되는 로직을 처리합니다.
|
||||
/// </summary>
|
||||
/// <returns>비동기 닫기 작업을 나타내는 <see cref="UniTask"/>입니다.</returns>
|
||||
public async UniTask OnCloseAsync()
|
||||
{
|
||||
await UserSetting.SaveToAppData(); // 데이터 마스크를 앱 데이터에 저장합니다.
|
||||
|
||||
@@ -14,12 +14,28 @@ namespace UVC.Factory.Modal.Settings
|
||||
[SerializeField]
|
||||
private TextMeshProUGUI text;
|
||||
|
||||
/// <summary>
|
||||
/// 탭 콘텐츠에 데이터를 전달합니다.
|
||||
/// </summary>
|
||||
/// <param name="data">전달할 데이터 객체</param>
|
||||
public void SetContentData(object? data)
|
||||
{
|
||||
Debug.Log("GeneralInfoTabContent: SetContentData called");
|
||||
text.text = $"Version: {Application.version}";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 탭 전환 시 데이터가 있는 경우 전달 되는 데이터. SetContentData 이후 호출 됨
|
||||
/// </summary>
|
||||
/// <param name="data">전달할 데이터 객체</param>
|
||||
public void UpdateContentData(object? data)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 닫힐 때 실행되는 로직을 처리합니다.
|
||||
/// </summary>
|
||||
/// <returns>비동기 닫기 작업을 나타내는 <see cref="UniTask"/>입니다.</returns>
|
||||
public UniTask OnCloseAsync()
|
||||
{
|
||||
Debug.Log("GeneralInfoTabContent: OnClose called");
|
||||
|
||||
@@ -7,12 +7,27 @@ namespace UVC.Factory.Modal.Settings
|
||||
{
|
||||
public class InputSettingTabContent : MonoBehaviour, ITabContent
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// 탭 콘텐츠에 데이터를 전달합니다.
|
||||
/// </summary>
|
||||
/// <param name="data">전달할 데이터 객체</param>
|
||||
public void SetContentData(object? data)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 탭 전환 시 데이터가 있는 경우 전달 되는 데이터. SetContentData 이후 호출 됨
|
||||
/// </summary>
|
||||
/// <param name="data">전달할 데이터 객체</param>
|
||||
public void UpdateContentData(object? data)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 닫힐 때 실행되는 로직을 처리합니다.
|
||||
/// </summary>
|
||||
/// <returns>비동기 닫기 작업을 나타내는 <see cref="UniTask"/>입니다.</returns>
|
||||
public UniTask OnCloseAsync()
|
||||
{
|
||||
return UniTask.CompletedTask;
|
||||
|
||||
@@ -22,12 +22,12 @@ namespace UVC.Factory.Modal.Settings
|
||||
if (tabController != null)
|
||||
{
|
||||
// 코드로 탭 설정하기
|
||||
SetupTabs();
|
||||
SetupTabs(content);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void SetupTabs()
|
||||
private void SetupTabs(ModalContent content)
|
||||
{
|
||||
// 1. TabConfig 설정
|
||||
tabController?.AddTabConfig("GeneralInfo", "일반 정보", "Prefabs/UI/Modal/Setting/GeneralInfoTabContent", "Prefabs/UI/images/icon_info", null, true);
|
||||
@@ -38,10 +38,27 @@ namespace UVC.Factory.Modal.Settings
|
||||
// 2. 컨트롤러 초기화
|
||||
tabController?.Initialize();
|
||||
|
||||
tabController.OnTabChanged += (index) =>
|
||||
if (tabController != null)
|
||||
{
|
||||
Debug.Log($"탭이 변경되었습니다: {index}");
|
||||
};
|
||||
tabController.OnTabChanged += (index) =>
|
||||
{
|
||||
Debug.Log($"탭이 변경되었습니다: {index}");
|
||||
};
|
||||
if(content.Message.StartsWith("shortcut:"))
|
||||
{
|
||||
// 특정 탭으로 이동
|
||||
string[] parts = content.Message.Substring("shortcut:".Length).Split('>');
|
||||
if (parts.Length > 0)
|
||||
{
|
||||
//시간차를 계산해 0.5초 후에 탭을 활성화
|
||||
UniTask.Delay(500).ContinueWith(() => {
|
||||
Debug.Log($"ActivateTab: {parts[0]}");
|
||||
string tabKey = parts[0];
|
||||
tabController.ActivateTab(tabKey, content.Message);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -168,7 +168,7 @@ namespace UVC.UI.List.ComponentList
|
||||
var modalContent = new ModalContent("Prefabs/UI/Modal/SettingModal")
|
||||
{
|
||||
Title = "설정 카테고리",
|
||||
Message = $"DisplaySetting>{itemData.categoryName}"
|
||||
Message = $"shortcut:DisplaySetting>{itemData.categoryName}"
|
||||
};
|
||||
|
||||
// 4. 설정 모달을 엽니다. await 키워드를 사용하여 모달이 닫힐 때까지 기다립니다.
|
||||
@@ -211,6 +211,7 @@ namespace UVC.UI.List.ComponentList
|
||||
FactoryObject? obj = FactoryObjectManager.Instance.FindById(itemData.factoryObjectInfo.Id);
|
||||
if (obj != null)
|
||||
{
|
||||
FactoryObjectSelectionManager.Instance.Deselect(obj);
|
||||
// 객체를 비활성화(숨기기)합니다.
|
||||
obj.gameObject.SetActive(false);
|
||||
|
||||
|
||||
@@ -15,6 +15,12 @@ namespace UVC.UI.Tab
|
||||
/// <param name="data">전달할 데이터 객체</param>
|
||||
void SetContentData(object? data);
|
||||
|
||||
/// <summary>
|
||||
/// 탭 전환 시 데이터가 있는 경우 전달 되는 데이터. SetContentData 이후 호출 됨
|
||||
/// </summary>
|
||||
/// <param name="data">전달할 데이터 객체</param>
|
||||
void UpdateContentData(object? data);
|
||||
|
||||
/// <summary>
|
||||
/// 닫힐 때 실행되는 로직을 처리합니다.
|
||||
/// </summary>
|
||||
|
||||
@@ -47,14 +47,14 @@ namespace UVC.UI.Tab
|
||||
///
|
||||
/// private object CreateAGVData()
|
||||
/// {
|
||||
/// Dictionary<string, string> data = new Dictionary<string, string>();
|
||||
/// return data;
|
||||
/// Dictionary<string, string> updateData = new Dictionary<string, string>();
|
||||
/// return updateData;
|
||||
/// }
|
||||
///
|
||||
/// private object CreateAlarmData()
|
||||
/// {
|
||||
/// Dictionary<string, string> data = new Dictionary<string, string>();
|
||||
/// return data;
|
||||
/// Dictionary<string, string> updateData = new Dictionary<string, string>();
|
||||
/// return updateData;
|
||||
/// }
|
||||
/// }
|
||||
/// </code>
|
||||
@@ -200,7 +200,7 @@ namespace UVC.UI.Tab
|
||||
/// <summary>
|
||||
/// 탭 변경 이벤트 처리
|
||||
/// </summary>
|
||||
private void HandleTabChanged(int newTabIndex)
|
||||
private void HandleTabChanged(int newTabIndex, object? updateData = null)
|
||||
{
|
||||
if (_tabModel == null || tabView == null) return;
|
||||
|
||||
@@ -208,7 +208,7 @@ namespace UVC.UI.Tab
|
||||
if (activeTabData == null) return;
|
||||
|
||||
// TabView에 탭 변경 전달
|
||||
tabView.UpdateActiveTab(newTabIndex, _tabModel.PrevTabIndex, activeTabData).ContinueWith(() =>
|
||||
tabView.UpdateActiveTab(newTabIndex, _tabModel.PrevTabIndex, activeTabData, updateData).ContinueWith(() =>
|
||||
{
|
||||
// 외부 이벤트 발생
|
||||
OnTabChanged?.Invoke(newTabIndex);
|
||||
@@ -223,17 +223,21 @@ namespace UVC.UI.Tab
|
||||
/// <summary>
|
||||
/// ID로 특정 탭을 활성화합니다.
|
||||
/// </summary>
|
||||
public void ActivateTab(string tabID)
|
||||
/// <param name="tabID">활성화할 탭의 ID</param>
|
||||
/// <param name="updateData">탭에 전달할 데이터 (선택적)</param>
|
||||
public void ActivateTab(string tabID, object? updateData = null)
|
||||
{
|
||||
_tabModel?.SwitchToTab(tabID);
|
||||
_tabModel?.SwitchToTab(tabID, updateData);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 인덱스로 특정 탭을 활성화합니다.
|
||||
/// </summary>
|
||||
public void ActivateTab(int tabIndex)
|
||||
/// <param name="tabIndex">활성화할 탭의 인덱스</param>
|
||||
/// <param name="updateData">탭에 전달할 데이터 (선택적)</param>
|
||||
public void ActivateTab(int tabIndex, object? updateData = null)
|
||||
{
|
||||
_tabModel?.SwitchToTab(tabIndex);
|
||||
_tabModel?.SwitchToTab(tabIndex, updateData);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -37,7 +37,7 @@ namespace UVC.UI.Tab
|
||||
/// <summary>
|
||||
/// 탭이 변경될 때 발생하는 이벤트입니다.
|
||||
/// </summary>
|
||||
public event Action<int>? OnTabChanged;
|
||||
public event Action<int, object?>? OnTabChanged;
|
||||
|
||||
/// <summary>
|
||||
/// 새로운 탭을 모델에 추가합니다.
|
||||
@@ -58,7 +58,8 @@ namespace UVC.UI.Tab
|
||||
/// 탭 인덱스로 탭을 전환합니다.
|
||||
/// </summary>
|
||||
/// <param name="tabIndex">활성화할 탭의 인덱스</param>
|
||||
public void SwitchToTab(int tabIndex)
|
||||
/// <param name="updateData">탭 전환 시 전달할 데이터 (선택적)</param>
|
||||
public void SwitchToTab(int tabIndex, object? updateData = null)
|
||||
{
|
||||
// 인덱스 범위 확인
|
||||
if (tabIndex < 0 || tabIndex >= _tabs.Count)
|
||||
@@ -79,20 +80,21 @@ namespace UVC.UI.Tab
|
||||
_activeTabIndex = tabIndex;
|
||||
|
||||
// 이벤트 발생
|
||||
OnTabChanged?.Invoke(_activeTabIndex);
|
||||
OnTabChanged?.Invoke(_activeTabIndex, updateData);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 탭 ID로 탭을 전환합니다.
|
||||
/// </summary>
|
||||
/// <param name="tabID">활성화할 탭의 ID</param>
|
||||
public void SwitchToTab(string tabID)
|
||||
/// <param name="updateData">탭 전환 시 전달할 데이터 (선택적)</param>
|
||||
public void SwitchToTab(string tabID, object? updateData = null)
|
||||
{
|
||||
for (int i = 0; i < _tabs.Count; i++)
|
||||
{
|
||||
if (_tabs[i].tabID == tabID)
|
||||
{
|
||||
SwitchToTab(i);
|
||||
SwitchToTab(i, updateData);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -217,7 +217,8 @@ namespace UVC.UI.Tab
|
||||
/// <param name="tabIndex">활성화할 탭 인덱스</param>
|
||||
/// <param name="prevTabIndex">현재 활성화 된 탭 인덱스. 없으면 -1</param>
|
||||
/// <param name="tabData">탭 데이터</param>
|
||||
public async UniTask UpdateActiveTab(int tabIndex, int prevTabIndex, TabData tabData)
|
||||
/// <param name="updateData">업데이트할 데이터 (선택적)</param>
|
||||
public async UniTask UpdateActiveTab(int tabIndex, int prevTabIndex, TabData tabData, object? updateData = null)
|
||||
{
|
||||
if (tabIndex < 0 || tabIndex >= _tabConfigs.Count) return;
|
||||
var config = _tabConfigs[tabIndex];
|
||||
@@ -273,6 +274,7 @@ namespace UVC.UI.Tab
|
||||
// 데이터 업데이트
|
||||
ITabContent? tabContent = activeContent.GetComponent<ITabContent>();
|
||||
tabContent?.SetContentData(tabData.contentData);
|
||||
if(updateData != null) tabContent?.UpdateContentData(updateData);
|
||||
}
|
||||
|
||||
// 탭 버튼 상태 업데이트
|
||||
|
||||
Reference in New Issue
Block a user