Browse Source

Keep Quick Operation menu Size when zoomed...

So thats it is also usable when zoomed out very wide...
pull/52/head
jkuehner 12 years ago
parent
commit
51c6465ec8
  1. 227
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/QuickOperationMenu.cs

227
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/QuickOperationMenu.cs

@ -6,6 +6,11 @@ using System.Collections.Generic;
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
using System.Windows.Input; using System.Windows.Input;
using System.Windows.Media;
using ICSharpCode.WpfDesign.Designer.Converters;
using System.Globalization;
using System.Windows.Data;
namespace ICSharpCode.WpfDesign.Designer.Controls namespace ICSharpCode.WpfDesign.Designer.Controls
{ {
@ -13,106 +18,124 @@ namespace ICSharpCode.WpfDesign.Designer.Controls
/// A Small icon which shows up a menu containing common properties /// A Small icon which shows up a menu containing common properties
/// </summary> /// </summary>
public class QuickOperationMenu : Control public class QuickOperationMenu : Control
{ {
static QuickOperationMenu() static QuickOperationMenu()
{ {
DefaultStyleKeyProperty.OverrideMetadata(typeof (QuickOperationMenu), new FrameworkPropertyMetadata(typeof (QuickOperationMenu))); DefaultStyleKeyProperty.OverrideMetadata(typeof (QuickOperationMenu), new FrameworkPropertyMetadata(typeof (QuickOperationMenu)));
} }
private MenuItem _mainHeader; public QuickOperationMenu()
{
/// <summary> scaleTransform = new ScaleTransform(1.0, 1.0);
/// Contains Default values in the Sub menu for example "HorizontalAlignment" has "HorizontalAlignment.Stretch" as it's value. this.LayoutTransform = scaleTransform;
/// </summary> }
private readonly Dictionary<MenuItem, MenuItem> _defaults = new Dictionary<MenuItem, MenuItem>();
private ScaleTransform scaleTransform;
/// <summary>
/// Is the main header menu which brings up all the menus. private MenuItem _mainHeader;
/// </summary>
public MenuItem MainHeader { /// <summary>
get { return _mainHeader; } /// Contains Default values in the Sub menu for example "HorizontalAlignment" has "HorizontalAlignment.Stretch" as it's value.
} /// </summary>
private readonly Dictionary<MenuItem, MenuItem> _defaults = new Dictionary<MenuItem, MenuItem>();
/// <summary>
/// Add a submenu with checkable values. /// <summary>
/// </summary> /// Is the main header menu which brings up all the menus.
/// <param name="parent">The parent menu under which to add.</param> /// </summary>
/// <param name="enumValues">All the values of an enum to be showed in the menu</param> public MenuItem MainHeader {
/// <param name="defaultValue">The default value out of all the enums.</param> get { return _mainHeader; }
/// <param name="setValue">The presently set value out of the enums</param> }
public void AddSubMenuCheckable(MenuItem parent, Array enumValues, string defaultValue, string setValue)
{ /// <summary>
foreach (var enumValue in enumValues) { /// Add a submenu with checkable values.
var menuItem = new MenuItem {Header = enumValue.ToString(), IsCheckable = true}; /// </summary>
parent.Items.Add(menuItem); /// <param name="parent">The parent menu under which to add.</param>
if (enumValue.ToString() == defaultValue) /// <param name="enumValues">All the values of an enum to be showed in the menu</param>
_defaults.Add(parent, menuItem); /// <param name="defaultValue">The default value out of all the enums.</param>
if (enumValue.ToString() == setValue) /// <param name="setValue">The presently set value out of the enums</param>
menuItem.IsChecked = true; public void AddSubMenuCheckable(MenuItem parent, Array enumValues, string defaultValue, string setValue)
} {
} foreach (var enumValue in enumValues) {
var menuItem = new MenuItem {Header = enumValue.ToString(), IsCheckable = true};
/// <summary> parent.Items.Add(menuItem);
/// Add a menu in the main header. if (enumValue.ToString() == defaultValue)
/// </summary> _defaults.Add(parent, menuItem);
/// <param name="menuItem">The menu to add.</param> if (enumValue.ToString() == setValue)
public void AddSubMenuInTheHeader(MenuItem menuItem) menuItem.IsChecked = true;
{ }
if (_mainHeader != null) }
_mainHeader.Items.Add(menuItem);
} /// <summary>
/// Add a menu in the main header.
public override void OnApplyTemplate() /// </summary>
{ /// <param name="menuItem">The menu to add.</param>
base.OnApplyTemplate(); public void AddSubMenuInTheHeader(MenuItem menuItem)
var mainHeader = Template.FindName("MainHeader", this) as MenuItem; {
if (mainHeader != null) { if (_mainHeader != null)
_mainHeader = mainHeader; _mainHeader.Items.Add(menuItem);
} }
}
public override void OnApplyTemplate()
/// <summary> {
/// Checks a menu item and making it exclusive. If the check was toggled then the default menu item is selected. base.OnApplyTemplate();
/// </summary> var mainHeader = Template.FindName("MainHeader", this) as MenuItem;
/// <param name="parent">The parent item of the sub menu</param> if (mainHeader != null) {
/// <param name="clickedOn">The Item clicked on</param> _mainHeader = mainHeader;
/// <returns>Returns the Default value if the checkable menu item is toggled or otherwise the new checked menu item.</returns> }
public string UncheckChildrenAndSelectClicked(MenuItem parent, MenuItem clickedOn)
{ var surface = this.TryFindParent<DesignSurface>();
MenuItem defaultMenuItem; if (surface != null && surface.ZoomControl != null)
_defaults.TryGetValue(parent, out defaultMenuItem); {
if (IsAnyItemChecked(parent)) { var bnd = new Binding("CurrentZoom") { Source = surface.ZoomControl };
foreach (var item in parent.Items) { bnd.Converter = InvertedZoomConverter.Instance;
var menuItem = item as MenuItem;
if (menuItem != null) menuItem.IsChecked = false; BindingOperations.SetBinding(scaleTransform, ScaleTransform.ScaleXProperty, bnd);
} BindingOperations.SetBinding(scaleTransform, ScaleTransform.ScaleYProperty, bnd);
clickedOn.IsChecked = true; }
return (string) clickedOn.Header; }
} else {
if (defaultMenuItem != null) { /// <summary>
defaultMenuItem.IsChecked = true; /// Checks a menu item and making it exclusive. If the check was toggled then the default menu item is selected.
return (string) defaultMenuItem.Header; /// </summary>
} /// <param name="parent">The parent item of the sub menu</param>
} /// <param name="clickedOn">The Item clicked on</param>
return null; /// <returns>Returns the Default value if the checkable menu item is toggled or otherwise the new checked menu item.</returns>
} public string UncheckChildrenAndSelectClicked(MenuItem parent, MenuItem clickedOn)
{
/// <summary> MenuItem defaultMenuItem;
/// Checks in the sub-menu whether aby items has been checked or not _defaults.TryGetValue(parent, out defaultMenuItem);
/// </summary> if (IsAnyItemChecked(parent)) {
/// <param name="parent"></param> foreach (var item in parent.Items) {
/// <returns></returns> var menuItem = item as MenuItem;
private bool IsAnyItemChecked(MenuItem parent) if (menuItem != null) menuItem.IsChecked = false;
{ }
bool check = false; clickedOn.IsChecked = true;
if (parent.HasItems) { return (string) clickedOn.Header;
foreach (var item in parent.Items) { } else {
var menuItem = item as MenuItem; if (defaultMenuItem != null) {
if (menuItem != null && menuItem.IsChecked) defaultMenuItem.IsChecked = true;
check = true; return (string) defaultMenuItem.Header;
} }
} }
return check; return null;
} }
}
/// <summary>
/// Checks in the sub-menu whether aby items has been checked or not
/// </summary>
/// <param name="parent"></param>
/// <returns></returns>
private bool IsAnyItemChecked(MenuItem parent)
{
bool check = false;
if (parent.HasItems) {
foreach (var item in parent.Items) {
var menuItem = item as MenuItem;
if (menuItem != null && menuItem.IsChecked)
check = true;
}
}
return check;
}
}
} }

Loading…
Cancel
Save