///<summary>Sets up a button that can use data for a range of years.</summary> ///<typeparam name="TRow">The strongly-typed Singularity row that the feature uses. These rows are used to populate the years dropdown.</typeparam> ///<param name="button">The button that initiates the action.</param> ///<param name="yearGetter">A delegate that gets the year represented by a row. This is called to populate the years dropdown.</param> ///<param name="showForm">The method bound to the button.</param> ///<param name="defaultYear">The year used when clicking the button itself. This year will also be bolded in the dropdown. Defaults to the current year.</param> public static void SetupYearlyButton <TRow>(this BarButtonItem button, Func <TRow, int?> yearGetter, Action <int> showForm, int?defaultYear = null) where TRow : Row { if (button == null) { throw new ArgumentNullException("button"); } if (yearGetter == null) { throw new ArgumentNullException("yearGetter"); } if (showForm == null) { throw new ArgumentNullException("showForm"); } defaultYear = defaultYear ?? DateTime.Now.Year; var menu = new PopupMenu(button.Manager); button.Disposed += delegate { menu.Dispose(); }; if (button.DropDownSuperTip == null) { button.DropDownSuperTip = Utilities.CreateSuperTip(button.Caption, "Shows a " + button.Caption + " for a specific year"); } button.ButtonStyle = BarButtonStyle.DropDown; button.DropDownControl = menu; button.ItemClick += delegate { showForm(defaultYear.Value); }; menu.BeforePopup += delegate { foreach (var link in menu.ItemLinks.Cast <BarItemLink>().ToList()) //Collection will be modified { button.Manager.Items.Remove(link.Item); } menu.ItemLinks.Clear(); AppFramework.LoadTable <TRow>(); foreach (int dontUse in AppFramework.Table <TRow>().Rows .Select(yearGetter) .Where(y => y.HasValue) .Distinct() .OrderByDescending(y => y)) { int year = dontUse; //Force separate variable per closure var item = new BarButtonItem(button.Manager, year.ToString(CultureInfo.CurrentCulture)); item.ItemClick += delegate { showForm(year); }; if (year == defaultYear) { item.Appearance.Font = new Font(item.Appearance.GetFont(), FontStyle.Bold); } menu.AddItem(item); } }; }
protected override void Dispose(bool disposing) { base.Dispose(disposing); if (disposing) { if (popupMenu != null) { DeletePopupItems(); popupMenu.Dispose(); popupMenu = null; } } }
// IDisposable protected virtual void Dispose(bool disposing) { if (!this.disposedValue) { if (disposing) { if ((m_PopupMenu != null)) { m_PopupMenu.Dispose(); m_PopupMenu = null; } } // TODO: free shared unmanaged resources } this.disposedValue = true; }
protected override void Dispose(bool disposing) { if (disposing) { _popupMenu.Dispose(); _popupMenu = null; GalleryInitDropDownGallery -= FilterGalleryBarItem_GalleryInitDropDownGallery; GalleryItemClick -= FilterGalleryBarItem_GalleryItemClick; if (_ribbon != null) { _ribbon.MergeOwnerChanged -= ribbonControl_MergeOwnerChanged; _ribbon.ShowCustomizationMenu -= Ribbon_ShowCustomizationMenu; if (_mergeOwner != null) { _mergeOwner.ShowCustomizationMenu -= Ribbon_ShowCustomizationMenu; } _mergeOwner = null; _ribbon = null; } } base.Dispose(disposing); GC.Collect(); //GC.SuppressFinalize(this); }
private void GridViewOnPopupMenuShowing(object sender, PopupMenuShowingEventArgs popupMenuShowingEventArgs) { if (popupMenuShowingEventArgs.MenuType == GridMenuType.Row && SelectedItems.Count > 0) { //var meta = SelectedItems[0].GetAccessor() as IObjectMeta; IObject o = SelectedItems[0]; IObjectPermissions p = SelectedItems[0].GetPermissions(); List <ActionMetaItem> actions = ParentLayout.Actions; if (actions.Any(c => c.PanelType == ActionsPanelType.ContextMenu && (c.AppType == ActionsAppType.Win || c.AppType == ActionsAppType.All) && c.IsVisible(SelectedItems, p))) { //SetCustomActions(meta.Actions); var menu = new PopupMenu { Manager = BaseFormManager.MainBarManager }; menu.CloseUp += (s, args) => menu.Dispose(); /* * bool bBeginGroup = false; * actions.Where( * c => c.PanelType == ActionsPanelType.ContextMenu && c.IsVisible(SelectedItems, p)) * .ToList().ForEach(c => * { * BarItem item = null; * if (c.Children(SelectedItems).Any(i => i.IsVisible(SelectedItems, p))) * { * item = new BarSubItem(menu.Manager, BvMessages.Get(c.CaptionId(o, p))) {Tag = c}; * (item as BarSubItem).AddItems(c.Children(SelectedItems).Where(i => i.IsVisible(SelectedItems, p)) * .Select(i => * { * var item2 = new BarButtonItem(menu.Manager, BvMessages.Get(i.CaptionId(o, p))) {Tag = i}; * item2.ItemClick += ItemOnItemClick; * return item2; * }).Cast<BarItem>().ToArray() * ); * } * else if (c.Children(SelectedItems).Any()) * { * } * else if (c.CaptionId(o, p) != "-") * { * item = new BarButtonItem(menu.Manager, BvMessages.Get(c.CaptionId(o, p))) {Tag = c}; * item.ItemClick += ItemOnItemClick; * } * else * { * bBeginGroup = true; * } * * if (item != null) * { * menu.AddItem(item).BeginGroup = bBeginGroup; * bBeginGroup = false; * } * } * ); */ bool bBeginGroup = false; actions.Where( c => c.PanelType == ActionsPanelType.ContextMenu && (c.AppType == ActionsAppType.Win || c.AppType == ActionsAppType.All)) .ToList().ForEach(c => { BarItem item = null; if (c.Children(SelectedItems).Any()) { item = new BarSubItem(menu.Manager, BvMessages.Get(c.CaptionId(o, p))) { Tag = c, Enabled = c.IsVisible(SelectedItems, p) }; c.Children(SelectedItems).ToList().ForEach(cc => { BarItem item2 = null; if (cc.Children(SelectedItems).Any()) { item2 = new BarSubItem(menu.Manager, BvMessages.Get(cc.CaptionId(o, p))) { Tag = cc, Enabled = cc.IsVisible(SelectedItems, p) }; (item2 as BarSubItem).AddItems(cc.Children(SelectedItems) .Select(i => { if (cc.IsFirstUI) { i.AddFirstUIFunc(cc.FirstUIFunc, cc.Parameters); } var item3 = new BarButtonItem(menu.Manager, BvMessages.Get(i.CaptionId(o, p))) { Tag = i, Enabled = i.IsVisible(SelectedItems, p) }; item3.ItemClick += ItemOnItemClick; return(item3); }).Cast <BarItem>().ToArray() ); } else if (cc.CaptionId(o, p) != "-") { if (c.IsFirstUI) { cc.AddFirstUIFunc(c.FirstUIFunc, c.Parameters); } item2 = new BarButtonItem(menu.Manager, BvMessages.Get(cc.CaptionId(o, p))) { Tag = cc, Enabled = cc.IsVisible(SelectedItems, p) }; item2.ItemClick += ItemOnItemClick; } if (item2 != null) { (item as BarSubItem).AddItem(item2); } }); /* * item = new BarSubItem(menu.Manager, BvMessages.Get(c.CaptionId(o, p))) { Tag = c, Enabled = c.IsVisible(SelectedItems, p) }; * (item as BarSubItem).AddItems(c.Children(SelectedItems) * .Select(i => * { * var item2 = new BarButtonItem(menu.Manager, BvMessages.Get(i.CaptionId(o, p))) { Tag = i, Enabled = i.IsVisible(SelectedItems, p) }; * item2.ItemClick += ItemOnItemClick; * return item2; * }).Cast<BarItem>().ToArray() * ); */ } else if (c.CaptionId(o, p) != "-") { item = new BarButtonItem(menu.Manager, BvMessages.Get(c.CaptionId(o, p))) { Tag = c, Enabled = c.IsVisible(SelectedItems, p) }; item.ItemClick += ItemOnItemClick; } else { bBeginGroup = true; } if (item != null) { menu.AddItem(item).BeginGroup = bBeginGroup; bBeginGroup = false; } } ); menu.ShowPopup(menu.Manager, Grid.PointToScreen(popupMenuShowingEventArgs.Point)); popupMenuShowingEventArgs.Allow = false; } } }