Example #1
0
            /// <summary>
            /// Create a new PLiXConfiguration class
            /// </summary>
            /// <param name="package">The associated PLiXLanguagePackage</param>
            public PLiXConfiguration(PLiXLanguagePackage package)
            {
                myPackage = package;
                IConfigurationManager configManager = (IConfigurationManager)package.myServiceProvider.GetService(typeof(IConfigurationManager));

                myConfiguration = configManager[ConfigurationSection];

                myExampleLanguageName             = myConfiguration.GetProperty(ExampleLanguageValueName, "C#");
                myFullyExpandTypeDeclarations     = 0 == string.Compare(myConfiguration.GetProperty(FullyExpandTypeDeclarationsValueName, "false"), "true", StringComparison.CurrentCultureIgnoreCase);
                myDisplayContextDataTypeQualifier = 0 == string.Compare(myConfiguration.GetProperty(DisplayContextDataTypeQualifierValueName, "false"), "true", StringComparison.CurrentCultureIgnoreCase);
                myStaticCallOption = StaticCallRenderingOption.Explicit;
                string callStaticOptionValue = myConfiguration.GetProperty(StaticCallRendingOptionValueName, "Explicit");

                if (0 == string.Compare(callStaticOptionValue, "ImplicitCurrentType", StringComparison.CurrentCultureIgnoreCase))
                {
                    myStaticCallOption = StaticCallRenderingOption.ImplicitCurrentType;
                }
                else if (0 == string.Compare(callStaticOptionValue, "ImplicitBaseTypes", StringComparison.CurrentCultureIgnoreCase))
                {
                    myStaticCallOption = StaticCallRenderingOption.ImplicitBaseTypes;
                }
            }
Example #2
0
        /// <summary>
        /// Synchronize the example language sub menu with the current set of languages.
        /// Unfortunately, there is no add/remove event when languages are added and removed,
        /// and the DropDown event does not fire on submenus, so we need to synchronize here.
        /// </summary>
        private void OnOpenTopMenu(object sender, EventArgs e)
        {
            ICommandBarItemCollection exampleItems = myExampleLanguageMenu.Items;
            ILanguageCollection       languages    = myLanguageManager.Languages;
            ILanguage         selectedLanguage     = myConfiguration.ExampleLanguage;
            PLiXConfiguration plixConfig           = (PLiXConfiguration)myConfiguration;
            object            activeItem           = myAssemblyBrowser.ActiveItem;
            bool activeItemIsTypeDeclaration       = activeItem is ITypeDeclaration;
            bool activeItemIsNamespaceDeclaration  = !activeItemIsTypeDeclaration && activeItem is INamespace;
            bool alreadyExpandedCurrentType        = plixConfig.FullyExpandCurrentTypeDeclaration;
            bool alwaysExpandTypes = alreadyExpandedCurrentType ? false : myConfiguration.FullyExpandTypeDeclarations;

            if (activeItemIsNamespaceDeclaration)
            {
                myExpandCurrentNamespaceDeclarationButton.Visible = true;
                myExpandCurrentNamespaceDeclarationButton.Enabled = !plixConfig.FullyExpandCurrentNamespaceDeclaration;
            }
            else
            {
                myExpandCurrentNamespaceDeclarationButton.Visible = false;
            }
            if (activeItemIsTypeDeclaration)
            {
                myExpandCurrentTypeDeclarationButton.Visible = !alwaysExpandTypes;
                myExpandCurrentTypeDeclarationButton.Enabled = !alreadyExpandedCurrentType;
            }
            else
            {
                myExpandCurrentTypeDeclarationButton.Visible = false;
            }
            myFullyExpandTypeDeclarationsCheckBox.Checked     = alwaysExpandTypes;
            myDisplayContextDataTypeQualifierCheckBox.Checked = plixConfig.DisplayContextDataTypeQualifier;
            StaticCallRenderingOption staticRender = plixConfig.StaticCallRenderingOption;

            myExplicitStaticCallCheckBox.Checked            = staticRender == StaticCallRenderingOption.Explicit;
            myImplicitCurrentTypeStaticCallCheckBox.Checked = staticRender == StaticCallRenderingOption.ImplicitCurrentType;
            myImplicitBaseTypesStaticCallCheckBox.Checked   = staticRender == StaticCallRenderingOption.ImplicitBaseTypes;
            int itemsCount = exampleItems.Count;
            ICommandBarCheckBox currentItem;

            if (itemsCount == 0)
            {
                currentItem         = exampleItems.AddCheckBox("None");
                currentItem.Checked = selectedLanguage == null;
                currentItem.Click  += new EventHandler(OnExampleLanguageClick);
                ++itemsCount;
            }
            else
            {
                currentItem = (ICommandBarCheckBox)exampleItems[0];
                if (currentItem.Checked ^ (selectedLanguage == null))
                {
                    currentItem.Checked = selectedLanguage == null;
                }
            }

            int languagesCount   = languages.Count;
            int currentItemIndex = 1;             // None is at the zero position

            for (int iLanguage = 0; iLanguage < languagesCount; ++iLanguage)
            {
                ILanguage currentLanguage = languages[iLanguage];
                bool      isChecked       = currentLanguage == selectedLanguage;
                string    languageName    = currentLanguage.Name;
                if (currentLanguage != myLanguage && !languageName.StartsWith("IL"))
                {
                    if (currentItemIndex >= itemsCount)
                    {
                        currentItem       = exampleItems.AddCheckBox(languageName);
                        currentItem.Value = currentLanguage;
                        if (isChecked)
                        {
                            currentItem.Checked = true;
                        }
                        currentItem.Click += new EventHandler(OnExampleLanguageClick);
                        // No need to adjust currentItemIndex here, we'll continue to add to the end of the list
                    }
                    else
                    {
                        currentItem = (ICommandBarCheckBox)exampleItems[currentItemIndex];
                        ILanguage testLanguage = (ILanguage)currentItem.Value;
                        if (testLanguage == currentLanguage)
                        {
                            ++currentItemIndex;
                            if (currentItem.Checked ^ isChecked)
                            {
                                currentItem.Checked = isChecked;
                            }
                            continue;
                        }
                        else
                        {
                            // If the testLanguage appears later in the language list, then we need
                            // to insert the new language here. Otherwise, we need to remove the
                            // existing item.
                            int matchingLanguage = iLanguage + 1;
                            for (; matchingLanguage < languagesCount; ++matchingLanguage)
                            {
                                if (testLanguage == languages[matchingLanguage])
                                {
                                    break;
                                }
                            }
                            if (matchingLanguage < languagesCount)
                            {
                                // The language at this item will match later. Insert the currentLanguage at this position
                                currentItem       = exampleItems.InsertCheckBox(currentItemIndex, languageName);
                                currentItem.Value = currentLanguage;
                                if (isChecked)
                                {
                                    currentItem.Checked = true;
                                }
                                currentItem.Click += new EventHandler(OnExampleLanguageClick);
                                ++itemsCount;
                                ++currentItemIndex;
                            }
                            else
                            {
                                // The item needs to be removed
                                exampleItems.Remove(currentItem);
                                --itemsCount;
                            }
                        }
                    }
                }
            }
            // Remove any remaining items that we didn't match with a language
            if (currentItemIndex < itemsCount)
            {
                for (int i = itemsCount - 1; i >= currentItemIndex; --i)
                {
                    exampleItems.RemoveAt(i);
                }
            }
        }