private static void SetIsEnabledProperty(FrameworkElement ribbonButton, IMainWindowButton mainWindowButton) { ribbonButton.SetBinding(UIElement.IsEnabledProperty, new System.Windows.Data.Binding("SelectedItem") { Converter = new CustomConverter(mainWindowButton), ElementName = "InstanceList" }); }
private static RoutedEventHandler GetClickHandler(IMainWindowButton mainWindowButton) { var clickHandler = new RoutedEventHandler(delegate { try { if (mainWindowButton != null && mainWindowButton.IsEnabled(MainWindow.Instance, SelectedInstance)) { mainWindowButton.OnClick(MainWindow.Instance, SelectedInstance); } } catch (Exception ex) { WindowHelper.HandleError("Failed to get click handler", true, ex); } }); return(clickHandler); }
private static RoutedEventHandler GetClickHandler(IMainWindowButton mainWindowButton) { var clickHandler = new RoutedEventHandler(delegate { try { if (mainWindowButton != null && mainWindowButton.IsEnabled(MainWindow.Instance, SelectedInstance)) { mainWindowButton.OnClick(MainWindow.Instance, SelectedInstance); MainWindowHelper.RefreshInstances(); } } catch (Exception ex) { WindowHelper.HandleError(ex.Message, true); } }); return(clickHandler); }
private static FrameworkElement GetRibbonButton(MainWindow window, Func <string, ImageSource> getImage, ButtonDefinition button, RibbonGroupBox ribbonGroup, IMainWindowButton mainWindowButton) { Assert.ArgumentNotNull(button, nameof(button)); Assert.ArgumentNotNull(ribbonGroup, nameof(ribbonGroup)); var header = button.Label; var clickHandler = GetClickHandler(mainWindowButton); if (button.Buttons == null || button.Buttons.Length == 0 || button.Buttons.All(x => x == null)) { // create Ribbon Button var imageSource = getImage(button.Image); var fluentButton = new Fluent.Button { Icon = imageSource, LargeIcon = imageSource, Header = header }; fluentButton.Click += clickHandler; ribbonGroup.Items.Add(fluentButton); return(fluentButton); } // create Ribbon Button var splitButton = ribbonGroup.Items.OfType <SplitButton>().SingleOrDefault(x => x.Header.ToString().Trim().EqualsIgnoreCase(header.Trim())); if (splitButton == null) { var imageSource = getImage(button.Image); splitButton = new Fluent.SplitButton { Icon = imageSource, LargeIcon = imageSource, Header = header }; if (mainWindowButton != null) { splitButton.Click += clickHandler; } else { var childrenButtons = new List <KeyValuePair <string, IMainWindowButton> >(); splitButton.Tag = childrenButtons; splitButton.Click += (sender, args) => splitButton.IsDropDownOpen = true; } ribbonGroup.Items.Add(splitButton); } var items = splitButton.Items; Assert.IsNotNull(items, nameof(items)); foreach (var menuItem in button.Buttons) { if (menuItem == null) { continue; } try { var menuHeader = menuItem.Label; if (string.IsNullOrEmpty(menuHeader)) { items.Add(new Separator()); continue; } var largeImage = menuItem.Image; var menuIcon = string.IsNullOrEmpty(largeImage) ? null : getImage(largeImage); var menuHandler = menuItem.Handler; var childrenButtons = splitButton.Tag as ICollection <KeyValuePair <string, IMainWindowButton> >; if (childrenButtons != null) { childrenButtons.Add(new KeyValuePair <string, IMainWindowButton>(menuHeader, menuHandler)); } var menuButton = new Fluent.MenuItem() { Header = menuHeader, IsEnabled = menuHandler?.IsEnabled(window, SelectedInstance) ?? true }; if (menuIcon != null) { menuButton.Icon = menuIcon; } if (menuHandler != null) { // bind IsEnabled event SetIsEnabledProperty(menuButton, menuHandler); menuButton.Click += delegate { try { if (menuHandler.IsEnabled(MainWindow.Instance, SelectedInstance)) { menuHandler.OnClick(MainWindow.Instance, SelectedInstance); RefreshInstances(); } } catch (Exception ex) { WindowHelper.HandleError($"Error during handling menu button click: {menuHandler.GetType().FullName}", true, ex); } }; } items.Add(menuButton); } catch (Exception ex) { WindowHelper.HandleError($"Error during initializing ribbon button: {menuItem.Label}", true, ex); } } return(splitButton); }
public CustomConverter([NotNull] IMainWindowButton mainWindowButton) { Assert.ArgumentNotNull(mainWindowButton, "mainWindowButton"); this.button = mainWindowButton; }
private static FrameworkElement GetRibbonButton(MainWindow window, Func <string, ImageSource> getImage, XmlElement button, RibbonGroupBox ribbonGroup, IMainWindowButton mainWindowButton) { var header = button.GetNonEmptyAttribute("label"); var clickHandler = GetClickHandler(mainWindowButton); if (button.ChildNodes.Count == 0) { // create Ribbon Button var imageSource = getImage(button.GetNonEmptyAttribute("largeImage")); var fluentButton = new Fluent.Button { Icon = imageSource, LargeIcon = imageSource, Header = header }; fluentButton.Click += clickHandler; ribbonGroup.Items.Add(fluentButton); return(fluentButton); } // create Ribbon Button var splitButton = ribbonGroup.Items.OfType <SplitButton>().SingleOrDefault(x => Extensions.EqualsIgnoreCase(x.Header.ToString().Trim(), header.Trim())); if (splitButton == null) { var imageSource = getImage(button.GetNonEmptyAttribute("largeImage")); splitButton = new Fluent.SplitButton { Icon = imageSource, LargeIcon = imageSource, Header = header }; if (mainWindowButton != null) { splitButton.Click += clickHandler; } else { var childrenButtons = new List <KeyValuePair <string, IMainWindowButton> >(); splitButton.Tag = childrenButtons; splitButton.Click += (sender, args) => splitButton.IsDropDownOpen = true; } ribbonGroup.Items.Add(splitButton); } var items = splitButton.Items; Assert.IsNotNull(items, nameof(items)); foreach (var menuItem in button.ChildNodes.OfType <XmlElement>()) { if (menuItem == null) { continue; } try { var name = menuItem.Name; if (name.EqualsIgnoreCase("separator")) { items.Add(new Separator()); continue; } if (!name.EqualsIgnoreCase("button")) { Log.Error($"This element is not supported as SplitButton element: {menuItem.OuterXml}"); continue; } var menuHeader = menuItem.GetAttribute("label"); var largeImage = menuItem.GetAttribute("largeImage"); var menuIcon = string.IsNullOrEmpty(largeImage) ? null : getImage(largeImage); var menuHandler = (IMainWindowButton)Plugin.CreateInstance(menuItem); Assert.IsNotNull(menuHandler, nameof(menuHandler)); var childrenButtons = splitButton.Tag as ICollection <KeyValuePair <string, IMainWindowButton> >; if (childrenButtons != null) { childrenButtons.Add(new KeyValuePair <string, IMainWindowButton>(menuHeader, menuHandler)); } var menuButton = new Fluent.MenuItem() { Header = menuHeader, IsEnabled = menuHandler.IsEnabled(window, SelectedInstance) }; if (menuIcon != null) { menuButton.Icon = menuIcon; } // bind IsEnabled event SetIsEnabledProperty(menuButton, menuHandler); menuButton.Click += delegate { try { if (menuHandler.IsEnabled(MainWindow.Instance, SelectedInstance)) { menuHandler.OnClick(MainWindow.Instance, SelectedInstance); MainWindowHelper.RefreshInstances(); } } catch (Exception ex) { WindowHelper.HandleError("Error during handling menu button click: " + menuHandler.GetType().FullName, true, ex); } }; items.Add(menuButton); } catch (Exception ex) { WindowHelper.HandleError("Error during initializing ribbon button: " + menuItem.OuterXml, true, ex); } } return(splitButton); }
public CustomEnabledConverter([NotNull] IMainWindowButton mainWindowButton) { Assert.ArgumentNotNull(mainWindowButton, nameof(mainWindowButton)); Button = mainWindowButton; }