Esempio n. 1
0
        public IRibbonService AddRibbonControl(IRibbonControl ribbonControl, string ribbonTabItemName, string ribbonGroupBoxName)
        {
            Argument.IsNotNull("ribbonTabItemName", ribbonTabItemName);
            Argument.IsNotNull("ribbonGroupBoxName", ribbonGroupBoxName);
            RibbonTabItem ribbonTabItem = Ribbon.Tabs.FirstOrDefault(tab => tab.Name.Equals(ribbonTabItemName));

            if (ribbonTabItem == null)
            {
                string error = string.Format("could not find the RibbonTabItem of name:{0}--AddRibbonControl", ribbonTabItemName);
                Log.Error(error);
                return(this);
            }

            RibbonGroupBox ribbonGroupBox = null;

            foreach (var groupBox in ribbonTabItem.Groups)
            {
                if (groupBox.Name.Equals(ribbonGroupBoxName))
                {
                    ribbonGroupBox = groupBox;
                    break;
                }
            }
            if (ribbonGroupBox == null)
            {
                string error = string.Format("could not find the RibbonGroupBox of name:{0}--AddRibbonControl", ribbonGroupBoxName);
                Log.Error(error);
                return(this);
            }
            return(AddRibbonControl(ribbonControl, ribbonGroupBox));
        }
        public void Size_Should_Change_On_Group_State_Change_When_Items_Are_Ribbon_Controls()
        {
            var ribbonGroupBox = new RibbonGroupBox();

            ribbonGroupBox.Items.Add(new Fluent.Button());

            using (new TestRibbonWindow(ribbonGroupBox))
            {
                {
                    ribbonGroupBox.State = RibbonGroupBoxState.Small;
                    UIHelper.DoEvents();

                    Assert.That(ribbonGroupBox.Items.OfType <Fluent.Button>().First().Size, Is.EqualTo(RibbonControlSize.Small));
                }

                {
                    ribbonGroupBox.State = RibbonGroupBoxState.Middle;
                    UIHelper.DoEvents();

                    Assert.That(ribbonGroupBox.Items.OfType <Fluent.Button>().First().Size, Is.EqualTo(RibbonControlSize.Middle));
                }

                {
                    ribbonGroupBox.State = RibbonGroupBoxState.Large;
                    UIHelper.DoEvents();

                    Assert.That(ribbonGroupBox.Items.OfType <Fluent.Button>().First().Size, Is.EqualTo(RibbonControlSize.Large));
                }
            }
        }
Esempio n. 3
0
 /// <summary>
 /// Applies the layout.
 /// </summary>
 /// <param name="groupBox">The group box.</param>
 /// <param name="control">The control.</param>
 /// <param name="layout">The layout.</param>
 public static void ApplyLayout(this RibbonGroupBox groupBox, Control control, IRibbonItemLayout layout)
 {
     if (layout.Width > 0)
     {
         control.Width = layout.Width;
     }
 }
Esempio n. 4
0
 public IRibbonService AddRibbonControl(IRibbonControl ribbonControl, RibbonGroupBox ribbonGroupBox)
 {
     Argument.IsNotNull("ribbonControl", ribbonControl);
     Argument.IsNotNull("ribbonGroupBox", ribbonGroupBox);
     Argument.IsNotNull("ribbonGroupBox.Name", ribbonGroupBox.Name);
     ribbonGroupBox.Items.Add(ribbonControl);
     return(this);
 }
Esempio n. 5
0
        /// <summary>
        /// Adds a new button to the specified <see cref="RibbonGroupBox"/>.
        /// </summary>
        /// <param name="groupBox">The group box.</param>
        /// <param name="header">The header.</param>
        /// <param name="icon">The icon.</param>
        /// <param name="largeIcon">The large icon.</param>
        /// <param name="command">The command.</param>
        /// <returns>The created button.</returns>
        /// <exception cref="ArgumentNullException">The <paramref header="groupBox"/> is <c>null</c>.</exception>
        /// <exception cref="ArgumentException">The <paramref header="header"/> is <c>null</c> or whitespace.</exception>
        /// <exception cref="ArgumentNullException">The <paramref header="command"/> is <c>null</c>.</exception>
        public static Button AddButton(this RibbonGroupBox groupBox, string header, string icon, string largeIcon, ICommand command)
        {
            Argument.IsNotNull("command", command);

            var button = CreateButtonWithoutCommandBinding(groupBox, header, icon, largeIcon);

            button.Command = command;

            return(button);
        }
        /// <inheritdoc />
        public override DataTemplate SelectTemplate(object item, DependencyObject container)
        {
            var element = (FrameworkElement)container;

            if (RibbonGroupBox.GetIsCollapsedHeaderContentPresenter(element))
            {
                return((DataTemplate)element.FindResource("Fluent.Ribbon.Templates.RibbonGroupBox.TwoLineHeaderTemplate"));
            }

            return((DataTemplate)element.FindResource("Fluent.Ribbon.Templates.RibbonGroupBox.OneLineHeaderTemplate"));
        }
 private void AdjustGroupVisibility(RibbonGroupBox groupBox)
 {
     if (groupBox.Items.Count > 0)
     {
         groupBox.Visibility = System.Windows.Visibility.Visible;
     }
     else
     {
         groupBox.Visibility = System.Windows.Visibility.Hidden;
     }
 }
Esempio n. 8
0
        private RibbonGroupBox GetLayerRibbonGoupBox()
        {
            RibbonGroupBox ribbonGroupBox = new RibbonGroupBox()
            {
                Header = "图层"
            };

            ribbonGroupBox.Items.Add(ControlExtensions.GetFluentButton("添加", GetAddLayersCommand(), "pack://application:,,,/EM.GIS.Resources;Component/Images/Add16.png", "pack://application:,,,/EM.GIS.Resources;Component/Images/Add32.png", "添加图层"));
            ribbonGroupBox.Items.Add(ControlExtensions.GetFluentButton("移除", GetRemoveLayersCommand(), "pack://application:,,,/EM.GIS.Resources;Component/Images/Remove16.png", "pack://application:,,,/EM.GIS.Resources;Component/Images/Remove32.png", "移除图层"));
            return(ribbonGroupBox);
        }
        private static RibbonGroupBox CreateGroup(RibbonTabItem tab, string name)
        {
            var group = new RibbonGroupBox
            {
                Name   = "{0}{1}Group".FormatWith(tab.Name, name.Replace(" ", "_")),
                Header = name
            };

            tab.Groups.Add(group);

            return(group);
        }
Esempio n. 10
0
        private RibbonGroupBox GetLayerRibbonGoupBox()
        {
            RibbonGroupBox ribbonGroupBox = new RibbonGroupBox()
            {
                Header = "图层"
            };
            var command = AppManager.CommandFactory.GetAddLayersCommand(Map, Map.Layers);

            AddButton(command, ribbonGroupBox.Items);
            command = AppManager.CommandFactory.GetRemoveSelectedLayersCommand(Map);
            AddButton(command, ribbonGroupBox.Items);
            return(ribbonGroupBox);
        }
Esempio n. 11
0
        private static RibbonGroupBox CreateRibbonGroupBox(bool isSharedSizeScope)
        {
            var ribbonGroupBox = new RibbonGroupBox
            {
                Header = "Test-Header",
                Height = 94
            };

            Grid.SetIsSharedSizeScope(ribbonGroupBox, isSharedSizeScope);

            AddControls(ribbonGroupBox.Items);

            return(ribbonGroupBox);
        }
        private void AddRibbonTab_OnClick(object sender, RoutedEventArgs e)
        {
            var tab = new RibbonTabItem
            {
                Header = "Test"
            };

            var group = new RibbonGroupBox();

            group.Items.Add(this.CreateRibbonButton());
            tab.Groups.Add(group);

            this.ribbon.Tabs.Add(tab);
        }
        private RibbonGroupBox FindOrCreateGroup(RibbonTabItem tabItem, string header)
        {
            var groupBox = tabItem.Groups
                           .FirstOrDefault(g => g.Header.ToString() == header);

            if (groupBox == null)
            {
                groupBox        = new RibbonGroupBox();
                groupBox.Header = header;
                tabItem.Groups.Add(groupBox);
            }

            return(groupBox);
        }
Esempio n. 14
0
        /// <summary>
        /// Creates the button without command binding.
        /// </summary>
        /// <param name="groupBox">The group box.</param>
        /// <param name="header">The header.</param>
        /// <param name="icon">The icon.</param>
        /// <param name="largeIcon">The large icon.</param>
        /// <returns>Button.</returns>
        /// <exception cref="ArgumentNullException">The <paramref header="groupBox"/> is <c>null</c>.</exception>
        /// <exception cref="ArgumentException">The <paramref header="header"/> is <c>null</c> or whitespace.</exception>
        private static Button CreateButtonWithoutCommandBinding(this RibbonGroupBox groupBox, string header, string icon, string largeIcon)
        {
            Argument.IsNotNull("groupBox", groupBox);
            Argument.IsNotNullOrWhitespace("header", header);

            var button = new Button();

            button.Header    = header;
            button.Icon      = icon;
            button.LargeIcon = largeIcon;

            groupBox.Items.Add(button);

            return(button);
        }
Esempio n. 15
0
        public IRibbonService AddRibbonGroupBox(RibbonGroupBox ribbonGroupBox, string ribbonTabItemName)
        {
            Argument.IsNotNull("ribbonTabItemName", ribbonTabItemName);
            Argument.IsNotNull("ribbonGroupBox.Name", ribbonGroupBox.Name);
            RibbonTabItem ribbonTabItem = Ribbon.Tabs.FirstOrDefault(tab => tab.Name.Equals(ribbonTabItemName));

            if (ribbonTabItem == null)
            {
                string error = string.Format("could not find the RibbonTabItem of name:{0}--AddRibbonGroupBox", ribbonTabItemName);
                Log.Error(error);
                return(this);
            }
            ribbonTabItem.Groups.Add(ribbonGroupBox);
            return(this);
        }
Esempio n. 16
0
        private RibbonGroupBox GetNavigateRibbonGoupBox()
        {
            RibbonGroupBox ribbonGroupBox = new RibbonGroupBox()
            {
                Header = "导航"
            };

            ribbonGroupBox.Items.Add(ControlExtensions.GetFluentButton("平移", GetActivePanToolCommand(), "pack://application:,,,/EM.GIS.Resources;Component/Images/Pan16.png", "pack://application:,,,/EM.GIS.Resources;Component/Images/Pan32.png", "平移工具"));
            ribbonGroupBox.Items.Add(ControlExtensions.GetFluentButton("全图", GetZoomToMaxExtentCommand(), "pack://application:,,,/EM.GIS.Resources;Component/Images/Global16.png", "pack://application:,,,/EM.GIS.Resources;Component/Images/Global32.png", "缩放至全图", RibbonControlSize.Middle));
            ribbonGroupBox.Items.Add(ControlExtensions.GetFluentButton("放大", GetActiveZoomInToolCommand(), "pack://application:,,,/EM.GIS.Resources;Component/Images/ZoomIn16.png", "pack://application:,,,/EM.GIS.Resources;Component/Images/ZoomIn32.png", "放大工具", RibbonControlSize.Middle));
            ribbonGroupBox.Items.Add(ControlExtensions.GetFluentButton("后退", GetZoomToPreviousViewCommand(), "pack://application:,,,/EM.GIS.Resources;Component/Images/Pre16.png", "pack://application:,,,/EM.GIS.Resources;Component/Images/Pre32.png", "后退至前一视图", RibbonControlSize.Middle));
            ribbonGroupBox.Items.Add(ControlExtensions.GetFluentButton("识别", GetActiveIdentifyToolCommand(), "pack://application:,,,/EM.GIS.Resources;Component/Images/Identify16.png", "pack://application:,,,/EM.GIS.Resources;Component/Images/Identify32.png", "识别工具", RibbonControlSize.Middle));
            ribbonGroupBox.Items.Add(ControlExtensions.GetFluentButton("缩小", GetActiveZoomOutToolCommand(), "pack://application:,,,/EM.GIS.Resources;Component/Images/ZoomOut16.png", "pack://application:,,,/EM.GIS.Resources;Component/Images/ZoomOut32.png", "缩小工具", RibbonControlSize.Middle));
            ribbonGroupBox.Items.Add(ControlExtensions.GetFluentButton("前进", GetZoomToNextViewCommand(), "pack://application:,,,/EM.GIS.Resources;Component/Images/Next16.png", "pack://application:,,,/EM.GIS.Resources;Component/Images/Next32.png", "前进至后一视图", RibbonControlSize.Middle));
            return(ribbonGroupBox);
        }
Esempio n. 17
0
        /// <summary>
        /// Adds a new button to the specified <see cref="RibbonGroupBox"/>.
        /// </summary>
        /// <param name="groupBox">The group box.</param>
        /// <param name="header">The header.</param>
        /// <param name="icon">The icon.</param>
        /// <param name="largeIcon">The large icon.</param>
        /// <param name="commandName">The command name.</param>
        /// <param name="commandSource">The command source, can be <c>null</c> to respect the data context.</param>
        /// <returns>The created button.</returns>
        /// <exception cref="ArgumentNullException">The <paramref header="groupBox"/> is <c>null</c>.</exception>
        /// <exception cref="ArgumentException">The <paramref header="header"/> is <c>null</c> or whitespace.</exception>
        /// <exception cref="ArgumentException">The <paramref header="commandName"/> is <c>null</c> or whitespace.</exception>
        public static Button AddButton(this RibbonGroupBox groupBox, string header, string icon, string largeIcon, string commandName, object commandSource = null)
        {
            Argument.IsNotNullOrWhitespace("commandName", commandName);

            var button = CreateButtonWithoutCommandBinding(groupBox, header, icon, largeIcon);

            var commandBinding = new Binding(commandName);

            if (commandSource != null)
            {
                commandBinding.Source = commandSource;
            }

            button.SetBinding(ButtonBase.CommandProperty, commandBinding);

            return(button);
        }
Esempio n. 18
0
        /// <summary>
        /// 初始化顶部菜单,内容多少由取决于<see cref="MenuItems"/>
        /// </summary>
        private void initTopContentControl()
        {
            TopContentControl = new Ribbon()
            {
                IsMinimized = true,
                AutomaticStateManagement       = false,
                CanCustomizeQuickAccessToolBar = false,
            };
            foreach (var menuitem in this.MenuItems)
            {
                try
                {
                    //大tab
                    RibbonTabItem ribbonTabItem = new RibbonTabItem();
                    ribbonTabItem.Header = menuitem.Header;
                    TopContentControl.Tabs.Add(ribbonTabItem);

                    //每个tab
                    RibbonGroupBox ribbonGroupBox = new RibbonGroupBox();
                    ribbonTabItem.Groups.Add(ribbonGroupBox);
                    ribbonGroupBox.Header = menuitem.Header.ToString();

                    //tab里面的内容
                    foreach (var menuItemChild in menuitem.Items)
                    {
                        Fluent.Button button       = new Fluent.Button();
                        TreeViewItem  treeViewItem = menuItemChild as TreeViewItem;
                        var           solutionTreeViewItemChild = treeViewItem.Tag as MenuModule;

                        button.Header  = treeViewItem.Header;
                        button.ToolTip = treeViewItem.ToolTip;
                        MenuModule module = treeViewItem.Tag as MenuModule;
                        button.Command          = this.MenuCommand;
                        button.CommandParameter = menuItemChild;
                        button.LargeIcon        = module.Icon ?? @"pack://application:,,,/Solution.Desktop.Resource;component/Images/logo_32X32.ico";
                        ribbonGroupBox.Items.Add(button);
                    }
                }
                catch (Exception ex)
                {
                    LogHelper.Error("初始化顶部菜单时错误。", ex);
                }
            }
        }
Esempio n. 19
0
        public void Size_Should_Change_On_Group_State_Change_When_Items_Are_Bound()
        {
            var items = new List <ItemViewModel>
            {
                new ItemViewModel()
            };

            var ribbonGroupBox = new RibbonGroupBox
            {
                ItemsSource  = items,
                ItemTemplate = CreateDataTemplateForItemViewModel()
            };

            using (new TestRibbonWindow(ribbonGroupBox))
            {
                {
                    {
                        ribbonGroupBox.State = RibbonGroupBoxState.Small;
                        UIHelper.DoEvents();
                    }

                    Assert.That(items.First().ControlSize, Is.EqualTo(RibbonControlSize.Small));
                }

                {
                    {
                        ribbonGroupBox.State = RibbonGroupBoxState.Middle;
                        UIHelper.DoEvents();
                    }

                    Assert.That(items.First().ControlSize, Is.EqualTo(RibbonControlSize.Middle));
                }

                {
                    {
                        ribbonGroupBox.State = RibbonGroupBoxState.Large;
                        UIHelper.DoEvents();
                    }

                    Assert.That(items.First().ControlSize, Is.EqualTo(RibbonControlSize.Large));
                }
            }
        }
Esempio n. 20
0
        /// <summary>
        /// Ensures that a groupbox with the specified header exists.
        /// </summary>
        /// <param name="tabItem">The tab item.</param>
        /// <param name="header">The header.</param>
        /// <returns>The existing or newlhy created <see cref="RibbonGroupBox"/>.</returns>
        /// <exception cref="ArgumentNullException">The <paramref header="tabItem"/> is <c>null</c>.</exception>
        /// <exception cref="ArgumentException">The <paramref header="header"/> is <c>null</c> or whitespace.</exception>
        public static RibbonGroupBox EnsureGroupBox(this RibbonTabItem tabItem, string header)
        {
            Argument.IsNotNull("tabItem", tabItem);
            Argument.IsNotNullOrWhitespace("header", header);

            var groupBox = (from ribbonGroup in tabItem.Groups
                            where string.Equals(ribbonGroup.Header, header)
                            select ribbonGroup).FirstOrDefault();

            if (groupBox == null)
            {
                groupBox        = new RibbonGroupBox();
                groupBox.Header = header;

                tabItem.Groups.Add(groupBox);
            }

            return(groupBox);
        }
        public void Initialize()
        {
            #region RIBBON INITIALIZATION
            Ribbon ribbon = EstateApi.Api.Ribbon;

            ResourceDictionary dictionary = new ResourceDictionary();
            dictionary.Source = new Uri("MyCompanyModule;component/RibbonControls.xaml", UriKind.Relative);

            ResourceDictionary tabs = dictionary["Tabs"] as ResourceDictionary;

            #region LOADING TABS:

            if (tabs != null)
            {
                foreach (string key in tabs.Keys)
                {
                    RibbonTabItem newTab = tabs[key] as RibbonTabItem;
                    newTab.IsEnabled = false;
                    foreach (RibbonTabItem t in ribbon.Tabs)
                    {
                        if (t.Header == newTab.Header)
                        {
                            while (newTab.Groups.Count != 0)
                            {
                                RibbonGroupBox newGroup = newTab.Groups[0];
                                newTab.Groups.RemoveAt(0);
                                t.Groups.Add(newGroup);
                            }
                            newTab.IsEnabled = true;
                            break;
                        }
                    }
                    if (!newTab.IsEnabled)
                    {
                        newTab.IsEnabled = true;
                        ribbon.Tabs.Add(newTab);
                    }
                }
            }

            #endregion
            #endregion
        }
Esempio n. 22
0
        public void Configure(RibbonGroupBox ribbongroupExternalTools)
        {
            ribbongroupExternalTools.Items.Clear();

            if (!string.IsNullOrEmpty(XSConfiguration.Instance.Config.ExternalTool1Filename))
            {
                string tool = XSConfiguration.Instance.Config.ExternalTool1Filename;
                string args = XSConfiguration.Instance.Config.ExternalTool1Arguments;

                Button btn = new Button();
                btn.Header    = "(1) " + getAppname(tool);
                btn.LargeIcon = "/Images/Tools_Hammer_32x32.png";   //getIcon(tool).ToBitmap();
                btn.Click    += (sender, e) => run(tool, args);
                ribbongroupExternalTools.Items.Add(btn);
            }

            if (!string.IsNullOrEmpty(XSConfiguration.Instance.Config.ExternalTool2Filename))
            {
                string tool = XSConfiguration.Instance.Config.ExternalTool2Filename;
                string args = XSConfiguration.Instance.Config.ExternalTool2Arguments;

                Button btn = new Button();
                btn.Header    = "(2) " + getAppname(tool);
                btn.LargeIcon = "/Images/Tools_Hammer_32x32.png";   //getIcon(tool).ToBitmap();
                btn.Click    += (sender, e) => run(tool, args);
                ribbongroupExternalTools.Items.Add(btn);
            }

            if (!string.IsNullOrEmpty(XSConfiguration.Instance.Config.ExternalTool3Filename))
            {
                string tool = XSConfiguration.Instance.Config.ExternalTool3Filename;
                string args = XSConfiguration.Instance.Config.ExternalTool3Arguments;

                Button btn = new Button();
                btn.Header    = "(3) " + getAppname(tool);
                btn.LargeIcon = "/Images/Tools_Hammer_32x32.png";   //getIcon(tool).ToBitmap();
                btn.Click    += (sender, e) => run(tool, args);
                ribbongroupExternalTools.Items.Add(btn);
            }
        }
Esempio n. 23
0
        private RibbonGroupBox GetNavigateRibbonGoupBox()
        {
            RibbonGroupBox ribbonGroupBox = new RibbonGroupBox()
            {
                Header = "导航"
            };
            RibbonControlSize size = RibbonControlSize.Middle;
            var command            = AppManager.CommandFactory.GetActivePanToolCommand(Map);

            AddButton(command, ribbonGroupBox.Items);
            command = AppManager.CommandFactory.GetZoomToMaxExtentCommand(Map);
            AddButton(command, ribbonGroupBox.Items, size);
            command = AppManager.CommandFactory.GetActiveZoomInToolCommand(Map);
            AddButton(command, ribbonGroupBox.Items, size);
            command = AppManager.CommandFactory.GetZoomToPreviousViewCommand(Map);
            AddButton(command, ribbonGroupBox.Items, size);
            command = AppManager.CommandFactory.GetActiveIdentifyToolCommand(Map);
            AddButton(command, ribbonGroupBox.Items, size);
            command = AppManager.CommandFactory.GetActiveZoomOutToolCommand(Map);
            AddButton(command, ribbonGroupBox.Items, size);
            command = AppManager.CommandFactory.GetZoomToNextViewCommand(Map);
            AddButton(command, ribbonGroupBox.Items, size);
            return(ribbonGroupBox);
        }
Esempio n. 24
0
 public static void SetIsGroupFromPage(RibbonGroupBox item, bool value)
 => item.SetValue(IsGroupFromPageProperty, value);
Esempio n. 25
0
 public static bool GetIsGroupFromPage(RibbonGroupBox item)
 => (bool)item.GetValue(IsGroupFromPageProperty);
        private static void InitializeRibbonButton(MainWindow window, Func <string, ImageSource> getImage, ButtonDefinition button, RibbonGroupBox ribbonGroup)
        {
            using (new ProfileSection("Initialize ribbon button"))
            {
                ProfileSection.Argument("button", button);
                ProfileSection.Argument("ribbonGroup", ribbonGroup);
                ProfileSection.Argument("window", window);
                ProfileSection.Argument("getImage", getImage);

                try
                {
                    // create handler
                    var mainWindowButton = button.Handler;

                    FrameworkElement ribbonButton;
                    ribbonButton = GetRibbonButton(window, getImage, button, ribbonGroup, mainWindowButton);

                    Assert.IsNotNull(ribbonButton, nameof(ribbonButton));

                    var    width = button.Width;
                    double d;
                    if (!string.IsNullOrEmpty(width) && double.TryParse(width, out d))
                    {
                        ribbonButton.Width = d;
                    }

                    // bind IsEnabled event
                    if (mainWindowButton != null)
                    {
                        ribbonButton.Tag       = mainWindowButton;
                        ribbonButton.IsEnabled = mainWindowButton.IsEnabled(window, SelectedInstance);
                        SetIsEnabledProperty(ribbonButton, mainWindowButton);
                    }
                }
                catch (Exception ex)
                {
                    WindowHelper.HandleError($"Plugin Button caused an exception: {button.Label}", true, ex);
                }
            }
        }
        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);
        }
Esempio n. 28
0
        public void Opening_And_Closing_DropDown_Should_Not_Change_Size_For_Dynamic_Item_Width()
        {
            var ribbonGroupsContainer = new RibbonGroupsContainer
            {
                Height      = RibbonTabControl.DefaultContentHeight,
                ReduceOrder = "(MyGroup),(MyGroup),(MyGroup),(MyGroup),(MyGroup),(MyGroup),(MyGroup),(MyGroup),(MyGroup),(MyGroup)"
            };

            var groupBox = new RibbonGroupBox
            {
                Name        = "MyGroup",
                BorderBrush = Brushes.Red
            };

            ribbonGroupsContainer.Children.Add(groupBox);

            var firstInRibbonGallery = new InRibbonGallery
            {
                MinItemsInRow = 1,
                MaxItemsInRow = 5,
                ItemHeight    = 18,
                GroupBy       = "Group",
                ResizeMode    = ContextMenuResizeMode.Both,
                ItemsSource   = this.sampleDataItemsForDynamicWidth
            };

            groupBox.Items.Add(firstInRibbonGallery);

            var secondInRibbonGallery = new InRibbonGallery
            {
                MinItemsInRow = 1,
                MaxItemsInRow = 5,
                ItemHeight    = 18,
                GroupBy       = "Group",
                ResizeMode    = ContextMenuResizeMode.Both,
                ItemsSource   = this.sampleDataItemsForDynamicWidth
            };

            groupBox.Items.Add(secondInRibbonGallery);

            using (new TestRibbonWindow(ribbonGroupsContainer))
            {
                UIHelper.DoEvents();

                ribbonGroupsContainer.Width = 620;

                UIHelper.DoEvents();

                Assert.That(firstInRibbonGallery.ActualWidth, Is.EqualTo(247));
                Assert.That(secondInRibbonGallery.ActualWidth, Is.EqualTo(247));
                Assert.That(firstInRibbonGallery.CurrentGalleryPanelState.GalleryPanel.MaxItemsInRow, Is.EqualTo(3));
                Assert.That(secondInRibbonGallery.CurrentGalleryPanelState.GalleryPanel.MaxItemsInRow, Is.EqualTo(3));

                Assert.That(groupBox.ActualWidth, Is.EqualTo(512));

                for (var i = 0; i < 5; i++)
                {
                    UIHelper.DoEvents();

                    Assert.That(firstInRibbonGallery.ActualWidth, Is.EqualTo(247));
                    Assert.That(secondInRibbonGallery.ActualWidth, Is.EqualTo(247));
                    Assert.That(firstInRibbonGallery.CurrentGalleryPanelState.GalleryPanel.MaxItemsInRow, Is.EqualTo(3));
                    Assert.That(secondInRibbonGallery.CurrentGalleryPanelState.GalleryPanel.MaxItemsInRow, Is.EqualTo(3));

                    Assert.That(groupBox.ActualWidth, Is.EqualTo(512));

                    // open and close first
                    {
                        firstInRibbonGallery.IsDropDownOpen = true;
                        UIHelper.DoEvents();

                        Assert.That(firstInRibbonGallery.ActualWidth, Is.EqualTo(247));
                        Assert.That(secondInRibbonGallery.ActualWidth, Is.EqualTo(247));
                        Assert.That(firstInRibbonGallery.CurrentGalleryPanelState.GalleryPanel.MaxItemsInRow, Is.EqualTo(0));
                        Assert.That(secondInRibbonGallery.CurrentGalleryPanelState.GalleryPanel.MaxItemsInRow, Is.EqualTo(3));

                        Assert.That(groupBox.ActualWidth, Is.EqualTo(512));

                        firstInRibbonGallery.IsDropDownOpen = false;
                        UIHelper.DoEvents();

                        Assert.That(firstInRibbonGallery.ActualWidth, Is.EqualTo(247));
                        Assert.That(secondInRibbonGallery.ActualWidth, Is.EqualTo(247));
                        Assert.That(firstInRibbonGallery.CurrentGalleryPanelState.GalleryPanel.MaxItemsInRow, Is.EqualTo(3));
                        Assert.That(secondInRibbonGallery.CurrentGalleryPanelState.GalleryPanel.MaxItemsInRow, Is.EqualTo(3));

                        Assert.That(groupBox.ActualWidth, Is.EqualTo(512));
                    }

                    // open and close second
                    {
                        secondInRibbonGallery.IsDropDownOpen = true;
                        UIHelper.DoEvents();

                        Assert.That(firstInRibbonGallery.ActualWidth, Is.EqualTo(247));
                        Assert.That(secondInRibbonGallery.ActualWidth, Is.EqualTo(247));
                        Assert.That(firstInRibbonGallery.CurrentGalleryPanelState.GalleryPanel.MaxItemsInRow, Is.EqualTo(3));
                        Assert.That(secondInRibbonGallery.CurrentGalleryPanelState.GalleryPanel.MaxItemsInRow, Is.EqualTo(0));

                        Assert.That(groupBox.ActualWidth, Is.EqualTo(512));

                        secondInRibbonGallery.IsDropDownOpen = false;
                        UIHelper.DoEvents();

                        Assert.That(firstInRibbonGallery.ActualWidth, Is.EqualTo(247));
                        Assert.That(secondInRibbonGallery.ActualWidth, Is.EqualTo(247));
                        Assert.That(firstInRibbonGallery.CurrentGalleryPanelState.GalleryPanel.MaxItemsInRow, Is.EqualTo(3));
                        Assert.That(secondInRibbonGallery.CurrentGalleryPanelState.GalleryPanel.MaxItemsInRow, Is.EqualTo(3));

                        Assert.That(groupBox.ActualWidth, Is.EqualTo(512));
                    }

                    ++ribbonGroupsContainer.Width;
                }

                UIHelper.DoEvents();

                Assert.That(firstInRibbonGallery.ActualWidth, Is.EqualTo(247));
                Assert.That(secondInRibbonGallery.ActualWidth, Is.EqualTo(247));
                Assert.That(firstInRibbonGallery.CurrentGalleryPanelState.GalleryPanel.MaxItemsInRow, Is.EqualTo(3));
                Assert.That(secondInRibbonGallery.CurrentGalleryPanelState.GalleryPanel.MaxItemsInRow, Is.EqualTo(3));

                Assert.That(groupBox.ActualWidth, Is.EqualTo(512));

                ribbonGroupsContainer.Width = 670;

                UIHelper.DoEvents();

                Assert.That(firstInRibbonGallery.ActualWidth, Is.EqualTo(323));
                Assert.That(secondInRibbonGallery.ActualWidth, Is.EqualTo(323));
                Assert.That(firstInRibbonGallery.CurrentGalleryPanelState.GalleryPanel.MaxItemsInRow, Is.EqualTo(4));
                Assert.That(secondInRibbonGallery.CurrentGalleryPanelState.GalleryPanel.MaxItemsInRow, Is.EqualTo(4));
                Assert.That(groupBox.ActualWidth, Is.EqualTo(664));

                ribbonGroupsContainer.Width = 900;

                UIHelper.DoEvents();

                Assert.That(firstInRibbonGallery.ActualWidth, Is.EqualTo(399));
                Assert.That(secondInRibbonGallery.ActualWidth, Is.EqualTo(399));
                Assert.That(firstInRibbonGallery.CurrentGalleryPanelState.GalleryPanel.MaxItemsInRow, Is.EqualTo(5));
                Assert.That(secondInRibbonGallery.CurrentGalleryPanelState.GalleryPanel.MaxItemsInRow, Is.EqualTo(5));
                Assert.That(groupBox.ActualWidth, Is.EqualTo(816));
            }
        }
        /// <summary>
        /// Create ribbon menus.
        /// </summary>
        /// <param name="ribbonMenu"></param>
        public override void CreateRibbonMenu(Ribbon ribbonMenu)
        {
            base.CreateRibbonMenu(ribbonMenu);

            // in case the tab group is used for multiple vms, prevent multiple tabs beeing created
            foreach (Fluent.RibbonContextualTabGroup t in ribbonMenu.ContextualGroups)
            {
                if (t.Name == "tabGroupExamplePlugin")
                {
                    exampleTabGroup = t;
                    return;
                }
            }

            // contextual tab, which should only be visible when the example diagram surface is active
            exampleTabGroup             = new RibbonContextualTabGroup();
            exampleTabGroup.Header      = "Example Tab Group";
            exampleTabGroup.BorderBrush = new SolidColorBrush(System.Windows.Media.Colors.LightBlue);
            exampleTabGroup.Background  = new SolidColorBrush(System.Windows.Media.Colors.LightBlue);
            exampleTabGroup.Name        = "tabGroupExamplePlugin";

            // create ribbon bar and associate it with the contextual group
            RibbonTabItem exampleTab = new RibbonTabItem();

            exampleTab.Header = "Example View Operations";
            exampleTab.Group  = exampleTabGroup;

            // Analyze group
            RibbonGroupBox analyzeGroup = new RibbonGroupBox();

            analyzeGroup.Header = "Analyze";
            exampleTab.Groups.Add(analyzeGroup);

            Fluent.Button buttonAnalyze = new Fluent.Button();
            buttonAnalyze.Text      = "Analyze";
            buttonAnalyze.Command   = this.command;
            buttonAnalyze.Size      = RibbonControlSize.Large;
            buttonAnalyze.LargeIcon = GetImage("prepare_32.png");
            analyzeGroup.Items.Add(buttonAnalyze);

            // View group
            RibbonGroupBox viewGroup = new RibbonGroupBox();

            viewGroup.Header = "View";
            exampleTab.Groups.Add(viewGroup);

            Fluent.ToggleButton buttonTree = new Fluent.ToggleButton();
            buttonTree.Text      = "Tree";
            buttonTree.LargeIcon = GetImage("tree-32.png");
            viewGroup.Items.Add(buttonTree);

            Fluent.ToggleButton buttonTable = new Fluent.ToggleButton();
            buttonTable.Text      = "Table";
            buttonTable.LargeIcon = GetImage("table-32.png");
            viewGroup.Items.Add(buttonTable);

            // Export group
            RibbonGroupBox exportGroup = new RibbonGroupBox();

            exportGroup.Header = "Export";
            exampleTab.Groups.Add(exportGroup);

            Fluent.Button buttonExportCSV = new Fluent.Button();
            buttonExportCSV.Text      = "Export as CSV-File";
            buttonExportCSV.Size      = RibbonControlSize.Large;
            buttonExportCSV.LargeIcon = GetImage("csv_32x32.png");
            buttonExportCSV.Command   = this.command;
            exportGroup.Items.Add(buttonExportCSV);

            Fluent.Button buttonExportHTML = new Fluent.Button();
            buttonExportHTML.Text      = "Export as HTML Website";
            buttonExportHTML.Size      = RibbonControlSize.Large;
            buttonExportHTML.LargeIcon = GetImage("html_32x32.png");
            buttonExportHTML.Command   = this.command;
            exportGroup.Items.Add(buttonExportHTML);

            Fluent.Button buttonExportPDF = new Fluent.Button();
            buttonExportPDF.Text      = "Export as PDF Document";
            buttonExportPDF.Size      = RibbonControlSize.Large;
            buttonExportPDF.LargeIcon = GetImage("pdf_32x32.png");
            buttonExportPDF.Command   = this.command;
            exportGroup.Items.Add(buttonExportPDF);

            ribbonMenu.ContextualGroups.Add(exampleTabGroup);
            ribbonMenu.Tabs.Add(exampleTab);
        }
        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);
        }