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