Beispiel #1
0
        private void AddReferenceLine(MetadataReference reference, ToggleButton coreReferencesButton, ToggleButton additionalReferencesButton)
        {
            bool isCore = IsCoreReference(reference.Display);

            Grid referenceGrid = new Grid();

            referenceGrid.ColumnDefinitions.Add(new ColumnDefinition(32, GridUnitType.Pixel));
            referenceGrid.ColumnDefinitions.Add(new ColumnDefinition(1, GridUnitType.Pixel));
            referenceGrid.ColumnDefinitions.Add(new ColumnDefinition(32, GridUnitType.Pixel));
            referenceGrid.ColumnDefinitions.Add(new ColumnDefinition(1, GridUnitType.Pixel));
            referenceGrid.ColumnDefinitions.Add(new ColumnDefinition(32, GridUnitType.Pixel));
            referenceGrid.ColumnDefinitions.Add(new ColumnDefinition(1, GridUnitType.Pixel));
            referenceGrid.ColumnDefinitions.Add(new ColumnDefinition(1, GridUnitType.Star));

            Button removeButton = new Button()
            {
                Content = new DiagnosticIcons.MinusIcon(), Width = 20, Height = 20, Margin = new Thickness(6, 0, 6, 0)
            };

            removeButton.Classes.Add("AddRemove");
            referenceGrid.Children.Add(removeButton);

            Control icon;

            if (isCore)
            {
                icon = new DiagnosticIcons.CoreReferenceIcon();
                referenceGrid.Bind <bool>(Grid.IsVisibleProperty, coreReferencesButton.GetBindingObservable(ToggleButton.IsCheckedProperty).Select(x => x.Value.Value));
            }
            else
            {
                icon = new DiagnosticIcons.AssemblyReferenceIcon();
                referenceGrid.Bind <bool>(Grid.IsVisibleProperty, additionalReferencesButton.GetBindingObservable(ToggleButton.IsCheckedProperty).Select(x => x.Value.Value));
            }

            icon.Margin = new Thickness(6, 0, 6, 0);

            Grid.SetColumn(icon, 2);
            referenceGrid.Children.Add(icon);

            Canvas nameBackground = new Canvas()
            {
                Margin = new Thickness(5, 2, 5, 2), Height = 20, VerticalAlignment = Avalonia.Layout.VerticalAlignment.Center, ClipToBounds = true
            };

            TextBlock nameBlock = new TextBlock()
            {
                Text = reference.Display, ClipToBounds = true
            };

            nameBackground.Children.Add(nameBlock);
            Grid.SetColumn(nameBackground, 6);
            referenceGrid.Children.Add(nameBackground);

            Canvas documentationIcon = new Canvas()
            {
                Width = 16, Height = 16
            };

            Button documentationStatus = new Button()
            {
                Content = documentationIcon, Width = 20, Height = 20, HorizontalAlignment = Avalonia.Layout.HorizontalAlignment.Center
            };

            documentationStatus.Classes.Add("AddRemove");

            DocumentationProvider documentationProvider = GetDocumentationProvider(reference);

            string typeName = documentationProvider.GetType().Name;

            if (documentationProvider is XmlDocumentationProvider && typeName != "NullXmlDocumentationProvider")
            {
                documentationIcon.Children.Add(new DiagnosticIcons.TickIcon());
                ToolTip.SetTip(documentationStatus, "XML documentation available");
            }
            else if (isCore)
            {
                documentationIcon.Children.Add(new DiagnosticIcons.BlueTickIcon());
                ToolTip.SetTip(documentationStatus, "Core assembly documentation");
            }
            else
            {
                documentationIcon.Children.Add(new DiagnosticIcons.ErrorIcon());
                ToolTip.SetTip(documentationStatus, "XML documentation not available");
            }

            Grid.SetColumn(documentationStatus, 4);
            referenceGrid.Children.Add(documentationStatus);

            this.FindControl <StackPanel>("ReferencesContainer").Children.Add(referenceGrid);

            referenceGrid.Tag = reference;

            removeButton.Click += async(s, e) =>
            {
                this.FindControl <StackPanel>("ReferencesContainer").Children.Remove(referenceGrid);


                if (!(referenceGrid.Tag is MetadataReference referenceToRemove))
                {
                    referenceToRemove = (MetadataReference)(CachedMetadataReference)referenceGrid.Tag;
                }

                this.References = this.References.Remove(referenceToRemove);

                Editor editor = this.FindAncestorOfType <Editor>();

                await editor.SetReferences(References, false);
            };

            documentationStatus.Click += async(s, e) =>
            {
                await DocumentationButtonClicked(reference, documentationIcon, referenceGrid);
            };
        }