private Task InstantiateNewToolWindow(object parameter) { ToolWindowFactoryInfo factoryInfo = (ToolWindowFactoryInfo)parameter; BaseToolWindow toolWindow = ConstructToolWindow(factoryInfo); IDockable toolWindowDock = null; if (factoryInfo.ToolWindowAttribute.ToolWindowType == ToolWindowType.Document) { toolWindowDock = new DocumentDock() { Proportion = Double.NaN, ActiveDockable = toolWindow, VisibleDockables = CreateList <IDockable>(toolWindow) }; } else { toolWindowDock = new ToolDock() { Proportion = Double.NaN, ActiveDockable = toolWindow, VisibleDockables = CreateList <IDockable>(toolWindow) }; } toolWindowDock.Id = factoryInfo.ToolWindowAttribute.DisplayName; toolWindowDock.Title = factoryInfo.ToolWindowAttribute.DisplayName; var window = CreateWindowFrom(toolWindowDock); window.Owner = _rootDock; window.Factory = this; // REEEEEEEEEEE why is there no f*****g documentation for this f*****g library? AddWindow(_rootDock, window); // DO NOT set this boolean to true. Don't do it. Trust me. window.Present(false); return(Task.CompletedTask); }
private void AddToolWindow(Type toolType) { if (!CanInjectToolConstructor(toolType)) { return; } ToolWindowAttribute toolWindowAttribute = toolType.GetCustomAttribute <ToolWindowAttribute>(); DefaultToolWindowAttribute defaultToolWindowAttribute = toolType.GetCustomAttribute <DefaultToolWindowAttribute>(); ToolWindowFactoryInfo info = new ToolWindowFactoryInfo(); info.Type = toolType; info.ToolWindowAttribute = toolWindowAttribute; info.DefaultToolWindowAttribute = defaultToolWindowAttribute; info.Instances = new List <BaseToolWindow>(); if (toolWindowAttribute.ToolWindowType == ToolWindowType.Floating) { _floatingToolWindows.Add(toolWindowAttribute.DisplayName, info); } else { _documentToolWindows.Add(toolWindowAttribute.DisplayName, info); } if (defaultToolWindowAttribute != null) { if (toolWindowAttribute.ToolWindowType == ToolWindowType.Floating) { _defaultFloatingTools.Add(toolWindowAttribute.DisplayName, info); } else { _defaultDocumentTools.Add(toolWindowAttribute.DisplayName, info); } } }
private BaseToolWindow ConstructToolWindow(ToolWindowFactoryInfo factoryInfo) { if (factoryInfo.ToolWindowAttribute.ShareViewModelInstance) { if (factoryInfo.Instances.Count == 0) { factoryInfo.Instances.Add(Activator.CreateInstance(factoryInfo.Type, GetConstructorArguments(factoryInfo.Type)) as BaseToolWindow); } return(factoryInfo.Instances[0]); } else { BaseToolWindow toolWindow = Activator.CreateInstance(factoryInfo.Type, GetConstructorArguments(factoryInfo.Type)) as BaseToolWindow; factoryInfo.Instances.Add(toolWindow); return(toolWindow); } }