Пример #1
0
        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);
        }
Пример #2
0
        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);
                }
            }
        }
Пример #3
0
        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);
            }
        }