using UnityEditor; using UnityEngine; using UnityEngine.UIElements; using UnityEditorToolkit.Editor.Utils; namespace UnityEditorToolkit.Editor { /// /// Database 상태 및 컨트롤을 표시하는 별도 윈도우 /// public class DatabaseStatusWindow : EditorWindow { #region Fields private EditorServerWindow parentWindow; // Data binding source private EditorServerWindowData windowData = new EditorServerWindowData(); // UI Elements - Status private VisualElement dbStatusIndicator; private Label dbStatusLabel; private Label dbFileExistsLabel; private Label dbSyncStatusLabel; // UI Elements - Buttons private Button dbTestButton; private Button dbConnectButton; private Button dbDisconnectButton; private Button dbMigrateButton; private Button dbSyncToggleButton; // UI Elements - Command History private Label dbUndoCount; private Label dbRedoCount; private Button dbUndoButton; private Button dbRedoButton; private Button dbClearHistoryButton; // UI Elements - Messages private HelpBox dbErrorHelp; private HelpBox dbSuccessHelp; #endregion #region Window Management /// /// 윈도우 열기 (팩토리 메서드) /// public static DatabaseStatusWindow Open(EditorServerWindow parentWindow) { ToolkitLogger.LogDebug("DatabaseStatusWindow", $"Open 시작, parentWindow: {(parentWindow != null ? "존재" : "null")}"); var window = GetWindow("Database Status & Controls"); window.minSize = new Vector2(400, 500); ToolkitLogger.LogDebug("DatabaseStatusWindow", $"GetWindow 완료, parentWindow 설정 전: {(window.parentWindow != null ? "존재" : "null")}"); window.parentWindow = parentWindow; ToolkitLogger.LogDebug("DatabaseStatusWindow", $"parentWindow 설정 완료: {(window.parentWindow != null ? "존재" : "null")}"); window.Show(); // CreateGUI()가 parentWindow 설정 전에 실행되었을 수 있으므로 다시 업데이트 ToolkitLogger.LogDebug("DatabaseStatusWindow", "Open에서 UpdateUI() 호출"); window.UpdateUI(); return window; } #endregion #region Unity Lifecycle private void CreateGUI() { ToolkitLogger.LogDebug("DatabaseStatusWindow", $"CreateGUI 시작, parentWindow: {(parentWindow != null ? "존재" : "null")}"); // Load UXML var visualTree = AssetDatabase.LoadAssetAtPath( "Packages/com.devgom.unity-editor-toolkit/Editor/DatabaseStatusWindow.uxml"); if (visualTree == null) { ToolkitLogger.LogError("DatabaseStatusWindow", "UXML file not found!"); return; } visualTree.CloneTree(rootVisualElement); // Set data binding source rootVisualElement.dataSource = windowData; // Load USS (EditorServerWindow.uss 재사용) var styleSheet = AssetDatabase.LoadAssetAtPath( "Packages/com.devgom.unity-editor-toolkit/Editor/EditorServerWindow.uss"); if (styleSheet != null) { rootVisualElement.styleSheets.Add(styleSheet); } // Query UI elements QueryUIElements(); // Register events RegisterEvents(); // Initial UI update ToolkitLogger.LogDebug("DatabaseStatusWindow", "CreateGUI에서 UpdateUI() 호출"); UpdateUI(); } private void OnDestroy() { // Cleanup UnregisterEvents(); } #endregion #region UI Query private void QueryUIElements() { var root = rootVisualElement; // Status dbStatusIndicator = root.Q("db-status-indicator"); dbStatusLabel = root.Q