using UnityEngine; using UnityEngine.UI; using UVC.Extension; using UVC.UI.Toolbar.Model; using UVC.UI.Tooltip; namespace UVC.UI.Toolbar.View { /// /// 확장 가능한 툴바 버튼(ToolbarExpandableButton)의 하위 메뉴 UI를 생성, 관리 및 상호작용을 처리하는 헬퍼 클래스입니다. /// ToolbarView로부터 하위 메뉴 관련 로직을 위임받아 처리하여 ToolbarView의 복잡도를 낮춥니다. /// /// /// 주요 역할: /// - 하위 메뉴 토글: 특정 확장 버튼에 대한 하위 메뉴를 열거나 닫습니다. /// - 하위 메뉴 UI 생성: `subMenuPanelPrefab`을 사용하여 하위 메뉴의 패널과 그 안의 버튼들을 동적으로 생성합니다. /// - 위치 계산: 하위 메뉴가 나타날 위치를 주 확장 버튼의 위치를 기준으로 계산하여 설정합니다. /// - 이벤트 처리: 생성된 하위 메뉴의 버튼들에 대한 클릭 이벤트를 설정하고, 클릭 시 메뉴를 닫는 등의 동작을 처리합니다. /// - 외부 클릭 감지: 하위 메뉴가 열려 있을 때 메뉴 영역 바깥을 클릭하면 메뉴가 닫히도록 처리합니다. /// - 리소스 정리: 하위 메뉴가 닫힐 때 생성되었던 모든 UI 요소와 이벤트 리스너를 깨끗하게 제거합니다. /// /// /// /// // 이 클래스는 ToolbarView 내부에서 다음과 같이 사용됩니다. /// /// // 1. ToolbarView의 Awake 메서드에서 SubMenuHandler 인스턴스 생성 /// // public class ToolbarView : MonoBehaviour /// // { /// // private SubMenuHandler _subMenuHandler; /// // /// // void Awake() /// // { /// // _subMenuHandler = new SubMenuHandler(this); /// // } /// // /// // // ... /// // } /// /// // 2. 확장 버튼(ExpandableButton)의 UI 프로세서에서 `ToggleSubMenu` 호출 /// // public class ToolbarExpandableButtonViewProcessor : IButtonViewProcessor /// // { /// // public void SetupButtonInteractions(ToolbarButtonBase buttonModel, GameObject buttonUIObject, ToolbarView viewContext) /// // { /// // ToolbarExpandableButton expandableModel = buttonModel as ToolbarExpandableButton; /// // Button uiButton = buttonUIObject.GetComponent