/* Copyright (c) Citrix Systems, 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. * * 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 HOLDER 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. */ using System; using System.ComponentModel; using System.Collections.Generic; using System.Diagnostics; using System.Text; using System.Windows.Forms; using XenAdmin.Actions; namespace XenAdmin.Controls { public class FilterStatusToolStripDropDownButton : ToolStripDropDownButton { [Browsable(true)] public event Action FilterChanged; private bool internalUpdating; private ToolStripMenuItem toolStripMenuItemComplete; private ToolStripMenuItem toolStripMenuItemInProgress; private ToolStripMenuItem toolStripMenuItemError; private ToolStripMenuItem toolStripMenuItemCancelled; private ToolStripMenuItem toolStripMenuItemAll; public FilterStatusToolStripDropDownButton() { toolStripMenuItemComplete = new ToolStripMenuItem { Text = Messages.STATUS_FILTER_COMPLETE, Checked = true, CheckOnClick = true }; toolStripMenuItemInProgress = new ToolStripMenuItem { Text = Messages.STATUS_FILTER_IN_PROGRESS, Checked = true, CheckOnClick = true }; toolStripMenuItemError = new ToolStripMenuItem { Text = Messages.STATUS_FILTER_ERROR, Checked = true, CheckOnClick = true }; toolStripMenuItemCancelled = new ToolStripMenuItem { Text = Messages.STATUS_FILTER_CANCEL, Checked = true, CheckOnClick = true }; toolStripMenuItemAll = new ToolStripMenuItem { Text = Messages.FILTER_SHOW_ALL, Enabled = false }; DropDownItems.AddRange(new ToolStripItem[] { toolStripMenuItemComplete, toolStripMenuItemInProgress, toolStripMenuItemError, toolStripMenuItemCancelled, new ToolStripSeparator(), toolStripMenuItemAll }); toolStripMenuItemComplete.CheckedChanged += Item_CheckedChanged; toolStripMenuItemInProgress.CheckedChanged += Item_CheckedChanged; toolStripMenuItemError.CheckedChanged += Item_CheckedChanged; toolStripMenuItemCancelled.CheckedChanged += Item_CheckedChanged; } public bool HideByStatus(ActionBase action) { bool cancelled = action.IsCompleted && !action.Succeeded && (action.Exception is CancelledException); bool error = action.IsCompleted && !action.Succeeded && !(action.Exception is CancelledException); return !((toolStripMenuItemComplete.Checked && action.Succeeded) || (toolStripMenuItemError.Checked && error) || (toolStripMenuItemInProgress.Checked && !action.IsCompleted) || (toolStripMenuItemCancelled.Checked && cancelled)); } public bool FilterIsOn { get { return !toolStripMenuItemComplete.Checked || !toolStripMenuItemInProgress.Checked || !toolStripMenuItemError.Checked || !toolStripMenuItemCancelled.Checked; } } protected override void OnDropDownItemClicked(ToolStripItemClickedEventArgs e) { base.OnDropDownItemClicked(e); if (e.ClickedItem == toolStripMenuItemAll) { internalUpdating = true; toolStripMenuItemComplete.Checked = true; toolStripMenuItemInProgress.Checked = true; toolStripMenuItemError.Checked = true; toolStripMenuItemCancelled.Checked = true; internalUpdating = false; Item_CheckedChanged(null, null); } } private void Item_CheckedChanged(object sender, EventArgs e) { if (!internalUpdating) { toolStripMenuItemAll.Enabled = FilterIsOn; if (FilterChanged != null) FilterChanged(); } } } }