#region License // Copyright (c) 2010, ClearCanvas Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: // // * Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // * Neither the name of ClearCanvas Inc. nor the names of its contributors // may be used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, // OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE // GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY // OF SUCH DAMAGE. #endregion using System; using System.Windows.Controls; using ClearCanvas.Desktop; using ClearCanvas.Desktop.Actions; namespace Nullstack.ClearCanvasEx.DesktopEx.View.WpfAdapter { public class ActiveMenuItem : MenuItem { private readonly IClickAction _action; private IconSize _iconSize; public ActiveMenuItem(IClickAction action) : this(action, IconSize.Small) {} public ActiveMenuItem(IClickAction action, IconSize iconSize) { _action = action; _iconSize = iconSize; UpdateLabel(); UpdateCheckState(); UpdateVisibility(); UpdateEnablement(); UpdateIcon(); } public IconSize IconSize { get { return _iconSize; } set { if (_iconSize != value) { _iconSize = value; UpdateIcon(); } } } protected override void OnClick() { base.OnClick(); _action.Click(); } private void OnActionCheckedChanged(object sender, EventArgs e) { UpdateCheckState(); } private void OnActionEnabledChanged(object sender, EventArgs e) { UpdateEnablement(); } private void OnActionVisibleChanged(object sender, EventArgs e) { UpdateVisibility(); } private void OnActionAvailableChanged(object sender, EventArgs e) { UpdateEnablement(); UpdateVisibility(); } private void OnActionLabelChanged(object sender, EventArgs e) { UpdateLabel(); } private void OnActionIconSetChanged(object sender, EventArgs e) { UpdateIcon(); } private void UpdateLabel() { var label = _action.Label ?? string.Empty; var index = label.IndexOf('&'); if (index >= 0) label = string.Format("{0}_{1}", label.Substring(0, index), label.Substring(index + 1, label.Length - index - 1)); Header = label; } private void UpdateCheckState() { this.IsChecked = _action.Checked; } private void UpdateVisibility() { //base.Available = _action.Available && _action.Visible && (_action.Permissible || DesktopViewSettings.Default.ShowNonPermissibleActions); } private void UpdateEnablement() { //this.Enabled = _action.Available && _action.Enabled && (_action.Permissible || DesktopViewSettings.Default.EnableNonPermissibleActions); } private void UpdateIcon() { //if (_action.IconSet != null && _action.ResourceResolver != null) //{ // try // { // this.Icon = _action.IconSet. // if (oldImage != null) // oldImage.Dispose(); // } // catch (Exception e) // { // // the icon was either null or not found - log some helpful message // Platform.Log(LogLevel.Error, e); // } // this.UpdateLayout(); //} } } }