/// <summary> /// Event handler to reenable the 'Expand Current Type Declaration' menu on selection change /// </summary> private void OnActiveItemChanged(object sender, EventArgs e) { PLiXConfiguration plixConfig = (PLiXConfiguration)myConfiguration; plixConfig.FullyExpandCurrentTypeDeclaration = false; plixConfig.FullyExpandCurrentNamespaceDeclaration = false; // Reflector does not have an ActiveItemChanging event, so this event handler // fires after some other windows are already updated, causing the 'expand current type' // setting to be stickier than it should be. To handle this, we track the active item // as well so that this setting can be ignored if the last active item is not the current // active item. myLastActiveItem = myAssemblyBrowser.ActiveItem; }
/// <summary> /// Event handler for toggling the full type expansion option /// </summary> private void OnFullyExpandTypeDeclarationsChanged(object sender, EventArgs e) { PLiXConfiguration config = (PLiXConfiguration)myConfiguration; // If the current is explicitly expanded, then FullyExpandTypeDeclarations will return // true, even if the cached flag is off. if (config.FullyExpandCurrentTypeDeclaration) { config.FullyExpandTypeDeclarations = true; } else { config.FullyExpandTypeDeclarations = !config.FullyExpandTypeDeclarations; } }
/// <summary> /// Event handler for turning on implicit static calls for the context type and all base types /// </summary> private void OnImplicitBaseTypesStaticCallCheckBoxChanged(object sender, EventArgs e) { PLiXConfiguration config = (PLiXConfiguration)myConfiguration; config.StaticCallRenderingOption = StaticCallRenderingOption.ImplicitBaseTypes; }
/// <summary> /// Event handler for turning on explicit call static calls /// </summary> private void OnExplicitStaticCallCheckBoxChanged(object sender, EventArgs e) { PLiXConfiguration config = (PLiXConfiguration)myConfiguration; config.StaticCallRenderingOption = StaticCallRenderingOption.Explicit; }
/// <summary> /// Event handler for toggling the display current namespace option /// </summary> private void OnDisplayContextDataTypeQualifierChanged(object sender, EventArgs e) { PLiXConfiguration config = (PLiXConfiguration)myConfiguration; config.DisplayContextDataTypeQualifier = !config.DisplayContextDataTypeQualifier; }
/// <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); } } }