using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TMPro; public interface IProgramView { void ShowMessage(string message); void DisplayProgram(string programId); void ShowProgramList(List programIds); void HideProgramList(); void HideProgramSelectPanel(); public event Action OnCreateProgramClicked; public event Action OnLoadProgramListRequested; // 'ºÒ·¯¿À±â' ¹öư Ŭ¸¯ public event Action OnProgramSelectedToLoad; public event Action OnOpenProgramClicked; public event Action OnSaveClicked; public event Action OnAddPointClicked; } public class ProgramView : MonoBehaviour, IProgramView { // --- UI ¿ä¼Ò ÂüÁ¶ --- [SerializeField] private Button loadIconButton; [SerializeField] private Button loadProgramButton; //[SerializeField] private Button saveProgramButton; //[SerializeField] private Button addPointButton; // UI»ó À§Ä¡¸¦ Âï´Â ¹öư //[SerializeField] private TextMeshProUGUI currentProgramIdText; //[SerializeField] private TextMeshProUGUI endpointListText; // --- ÇÁ·Î±×·¥ ¸ñ·Ï ÆÐ³Î --- [SerializeField] private GameObject programSelectPanel; [SerializeField] private GameObject programNewPanel; [SerializeField] private GameObject programListPanel; [SerializeField] private Transform programButtonContent; [SerializeField] private GameObject programButtonPrefab; [SerializeField] private TextMeshProUGUI programIdText; [SerializeField] private Button[] numberPadButtons; // 0-9±îÁöÀÇ ¹öư ¹è¿­ [SerializeField] private Button backspaceButton; [SerializeField] private Button createProgramButton; [SerializeField] private Button openProgramButton; [SerializeField] private Button closeProgramListButton; // --- Presenter¿¡°Ô º¸³¾ À̺¥Æ®µé --- public event Action OnCreateProgramClicked; public event Action OnLoadProgramListRequested; // 'ºÒ·¯¿À±â' ¹öư Ŭ¸¯ public event Action OnProgramSelectedToLoad; public event Action OnOpenProgramClicked; public event Action OnSaveClicked; public event Action OnAddPointClicked; void Start() { loadProgramButton.onClick.AddListener(() => OnLoadProgramListRequested?.Invoke()); openProgramButton.onClick.AddListener(() => OnOpenProgramClicked?.Invoke()); //saveProgramButton.onClick.AddListener(() => OnSaveClicked?.Invoke()); //addPointButton.onClick.AddListener(() => OnAddPointClicked?.Invoke()); for (int i = 0; i < numberPadButtons.Length; i++) { string number = numberPadButtons[i].GetComponentInChildren().text; numberPadButtons[i].onClick.AddListener(() => AppendToInput(number)); } backspaceButton.onClick.AddListener(HandleBackspace); createProgramButton.onClick.AddListener(HandleCreateClick); loadIconButton.onClick.AddListener(HandleLoadIconClick); closeProgramListButton.onClick.AddListener(HideProgramList); programSelectPanel.SetActive(true); programNewPanel.SetActive(true); programListPanel.SetActive(false); loadProgramButton.gameObject.SetActive(false); programIdText.text = string.Empty; } private void AppendToInput(string number) { programIdText.text += number; } private void HandleBackspace() { if (programIdText.text.Length > 0) { programIdText.text = programIdText.text.Substring(0, programIdText.text.Length - 1); } } private void HandleCreateClick() { string inputId = programIdText.text; OnCreateProgramClicked?.Invoke(inputId); } private void HandleLoadIconClick() { loadProgramButton.gameObject.SetActive(true); } // Presenter°¡ È£ÃâÇÒ ¿À·ù ¸Þ½ÃÁö Ç¥½Ã ÇÔ¼ö public void ShowMessage(string message) { Debug.LogWarning(message); } public void DisplayProgram(string programId) { if (programId == null) { //currentProgramIdText.text = "No Program Loaded"; //endpointListText.text = ""; Debug.Log("No Program Loaded"); return; } Debug.Log($"¿¬°áµÈ ÇÁ·Î±×·¥: {programId}.job"); //currentProgramIdText.text = "Current: " + program.programId; //System.Text.StringBuilder sb = new System.Text.StringBuilder(); //for (int i = 0; i < program.endpointPositions.Count; i++) //{ // sb.AppendLine($"P{i + 1}: {program.endpointPositions[i].ToString("F2")}"); //} //endpointListText.text = sb.ToString(); } public void ShowProgramList(List programIds) { foreach (Transform child in programButtonContent) { Destroy(child.gameObject); } foreach (string id in programIds) { GameObject buttonGO = Instantiate(programButtonPrefab, programButtonContent); TextMeshProUGUI buttonText = buttonGO.GetComponentInChildren(); if (buttonText != null) { buttonText.text = id; } Button button = buttonGO.GetComponent