Files
HDRobotics/Assets/Scripts/View/ProgramView.cs

174 lines
5.8 KiB
C#
Raw Normal View History

using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
public interface IProgramView
{
void ShowMessage(string message);
2025-10-24 11:55:43 +09:00
void DisplayProgram(string programId);
void ShowProgramList(List<string> programIds);
void HideProgramList();
void HideProgramSelectPanel();
public event Action<string> OnCreateProgramClicked;
public event Action OnLoadProgramListRequested; // '<27>ҷ<EFBFBD><D2B7><EFBFBD><EFBFBD><EFBFBD>' <20><>ư Ŭ<><C5AC>
public event Action<string> OnProgramSelectedToLoad;
public event Action OnOpenProgramClicked;
public event Action OnSaveClicked;
public event Action OnAddPointClicked;
}
public class ProgramView : MonoBehaviour, IProgramView
{
// --- UI <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ---
[SerializeField] private Button loadIconButton;
[SerializeField] private Button loadProgramButton;
//[SerializeField] private Button saveProgramButton;
//[SerializeField] private Button addPointButton; // UI<55><49> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD> <20><>ư
//[SerializeField] private TextMeshProUGUI currentProgramIdText;
//[SerializeField] private TextMeshProUGUI endpointListText;
// --- <20><><EFBFBD>α׷<CEB1> <20><><EFBFBD><EFBFBD> <20>г<EFBFBD> ---
[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<><39><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ư <20>
[SerializeField] private Button backspaceButton;
[SerializeField] private Button createProgramButton;
[SerializeField] private Button openProgramButton;
[SerializeField] private Button closeProgramListButton;
// --- Presenter<65><72><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>̺<EFBFBD>Ʈ<EFBFBD><C6AE> ---
public event Action<string> OnCreateProgramClicked;
public event Action OnLoadProgramListRequested; // '<27>ҷ<EFBFBD><D2B7><EFBFBD><EFBFBD><EFBFBD>' <20><>ư Ŭ<><C5AC>
public event Action<string> OnProgramSelectedToLoad;
public event Action OnOpenProgramClicked;
public event Action OnSaveClicked;
public event Action OnAddPointClicked;
2025-10-24 14:36:33 +09:00
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<TextMeshProUGUI>().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<65><72> ȣ<><C8A3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>޽<EFBFBD><DEBD><EFBFBD> ǥ<><C7A5> <20>Լ<EFBFBD>
public void ShowMessage(string message)
{
Debug.LogWarning(message);
}
2025-10-24 11:55:43 +09:00
public void DisplayProgram(string programId)
{
2025-10-24 11:55:43 +09:00
if (programId == null)
{
//currentProgramIdText.text = "No Program Loaded";
//endpointListText.text = "";
Debug.Log("No Program Loaded");
return;
}
2025-10-24 11:55:43 +09:00
Debug.Log($"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>α׷<CEB1>: {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<string> programIds)
{
foreach (Transform child in programButtonContent)
{
Destroy(child.gameObject);
}
programIds.Sort();
foreach (string id in programIds)
{
GameObject buttonGO = Instantiate(programButtonPrefab, programButtonContent);
TextMeshProUGUI buttonText = buttonGO.GetComponentInChildren<TextMeshProUGUI>();
if (buttonText != null)
{
buttonText.text = id;
}
Button button = buttonGO.GetComponent<Button>();
if (button != null)
{
string currentId = id;
button.onClick.AddListener(() =>
{
OnProgramSelectedToLoad?.Invoke(currentId);
});
}
}
programListPanel.SetActive(true);
programNewPanel.SetActive(false);
}
public void HideProgramList()
{
programListPanel.SetActive(false);
programNewPanel.SetActive(true);
}
public void HideProgramSelectPanel()
{
programSelectPanel.SetActive(false);
}
}