/// <summary> /// 주어진 VST 플러그인의 편집기 창을 닫습니다. /// 해당하는 창이 열려있지 않은 경우 아무런 동작도 수행하지 않습니다. /// </summary> /// <param name="plugin">VST 플러그인</param> public void CloseEditor(Vst.PluginBase plugin) { _table.TryGetValue(plugin, out PluginEditorWindow window); window?.Close(); plugin.Disposed -= OnPluginDisposed; }
public PluginEditorWindow(Vst.PluginBase plugin) { Plugin = plugin ?? throw new ArgumentNullException(nameof(plugin)); ResizeMode = ResizeMode.NoResize; SizeToContent = SizeToContent.WidthAndHeight; Content = _host = new PluginEditorHost(plugin); Title = $"플러그인 편집기: {plugin.Name}"; }
/// <summary> /// 주어진 VST 플러그인의 편집기 창을 엽니다. /// 창이 열려있지 않은 경우에는 새로운 창 인스턴스가 생성되고, /// 이미 열려있는 경우에는 기존의 창을 활성화합니다. /// </summary> /// <param name="plugin">VST 플러그인</param> public void OpenEditor(Vst.PluginBase plugin) { if (_table.TryGetValue(plugin, out PluginEditorWindow window)) { // 이미 열려있는 창을 활성화 window.Activate(); } else { // 새로운 창 인스턴스 생성 후 열기 PluginEditorWindow newWindow = new PluginEditorWindow(plugin); newWindow.Closed += PluginWindow_Closed; plugin.Disposed += OnPluginDisposed; if (_table.Count == 0) { System.Diagnostics.Debug.WriteLine("PluginEditorManager::OpenEditor Starting the timer."); _timer.Start(); } _table.Add(plugin, newWindow); newWindow.Show(); } }
/// <summary> /// 새로운 PluginEditorHost 인스턴스를 생성합니다. /// </summary> /// <param name="plugin">편집기를 열 VST 플러그인</param> public PluginEditorHost(Vst.PluginBase plugin) { _plugin = plugin ?? throw new ArgumentNullException(nameof(plugin)); _pluginCmdStub = plugin.PluginCommandStub; }