/// <summary> /// Manage the views contextual menus (those that are defined in the templates) /// </summary> private IEnumerable <IContextualMenu> ManageViewsContextualMenu(ExcelInterop.Worksheet sheet, ExcelInterop.Range range) { List <IContextualMenu> menus = new List <IContextualMenu>(); if (sheet != null && range != null) { ExcelInterop.Range targetRange = range.Cells[1, 1]; lock (syncRoot) { List <ExcelTemplateView> views; if (viewsBySheet.TryGetValue(sheet, out views)) { if (views != null) { foreach (ExcelTemplateView view in views.Where(v => v.IsRendered).Select(v => v)) { ExcelInterop.Range intersect = ExcelApplication.Application.Intersect(view.RenderedRange, targetRange); if (intersect != null) { IBindingContextItem currentContextItem = view.GetConcernedContextItem(targetRange); if (currentContextItem != null) { // User contextual menu IBindingContextElement catchingContextElement = currentContextItem.ParentElement; do { ExcelTemplateDefinitionPart currentTemplateDefinition = catchingContextElement.ParentPart.TemplateDefinitionPart as ExcelTemplateDefinitionPart; if ((currentTemplateDefinition.Parent as ExcelTemplateDefinition).ContextualMenu != null) { ContextualMenu contextualMenu = (currentTemplateDefinition.Parent as ExcelTemplateDefinition).ContextualMenu as ContextualMenu; contextualMenu.SetAction(targetRange, catchingContextElement, currentContextItem.ParentElement); menus.Insert(0, contextualMenu); } catchingContextElement = catchingContextElement.ParentPart.ParentContext == null ? null : catchingContextElement.ParentPart.ParentContext.Parent; }while (catchingContextElement != null); // Etk sort, search and filter IContextualMenu searchSortAndFilterMenu = sortSearchAndFilterMenuManager.GetMenus(view, targetRange, currentContextItem); if (searchSortAndFilterMenu != null) { menus.Insert(0, searchSortAndFilterMenu); } } } } } } } //ExcelApplication.ReleaseComObject(targetRange); targetRange = null; } return(menus); }
public SortSearchAndFilterMenuManager() { // Create the contextual menu instances. Assembly assembly = Assembly.GetExecutingAssembly(); using (TextReader textReader = new StreamReader(assembly.GetManifestResourceStream("Etk.Excel.Resources.ViewSortSearchAndFilterContextualMenu.xml"))) { string menuXml = textReader.ReadToEnd(); sortSearchAndFilersMenu = ContextualMenuFactory.CreateInstance(menuXml); } }
public IContextualMenu GetContextualMenu(string name) { IContextualMenu ret = null; if (!String.IsNullOrEmpty(name)) { lock ((contextualMenuByIdent as ICollection).SyncRoot) { contextualMenuByIdent.TryGetValue(name, out ret); } } return(ret); }
/// <summary> Create a menu and its submenus and manage their actions</summary> /// <param name="parentControls">Control where the menu must be inserted</param> /// <param name="contextualMenu">Menu to insert</param> private void CreateMenus(CommandBarControls parentControls, IContextualMenu contextualMenu) { if (contextualMenu != null && contextualMenu.Items != null) { foreach (IContextualPart part in contextualMenu.Items) { if (part is IContextualMenu) { IContextualMenu contextualSubMenu = part as IContextualMenu; CommandBarPopup subMenu = (CommandBarPopup)parentControls.Add(MsoControlType.msoControlPopup, Type.Missing, Type.Missing, Type.Missing, true); subMenu.Caption = contextualSubMenu.Caption; subMenu.BeginGroup = contextualSubMenu.BeginGroup; CreateMenus(subMenu.Controls, contextualSubMenu); } else { ContextualMenuItem contextualMenuItem = part as ContextualMenuItem; if (contextualMenuItem != null) { MsoControlType menuItem = MsoControlType.msoControlButton; CommandBarButton commandBarButton = (CommandBarButton)parentControls.Add(menuItem, Type.Missing, Type.Missing, Type.Missing, true); commandBarButton.Style = MsoButtonStyle.msoButtonIconAndCaption; commandBarButton.Caption = contextualMenuItem.Caption; commandBarButton.BeginGroup = contextualMenuItem.BeginGroup; if (contextualMenuItem.FaceId != 0) { commandBarButton.FaceId = contextualMenuItem.FaceId; } commandBarButton.Click += (CommandBarButton ctrl, ref bool cancel1) => { try { if (contextualMenuItem.Action != null) { contextualMenuItem.Action(); } } catch (Exception ex) { string methodName = contextualMenuItem.MethodInfo == null ? string.Empty : contextualMenuItem.MethodInfo.Name; throw new EtkException($"Contextual menu: '{methodName}' invocation failed: {ex.Message}."); } }; } } } } }
public static IContextualMenu CreateInstance(string xmlValue) { IContextualMenu ret = null; XmlContextualMenuDefinition definition = null; try { definition = XmlContextualMenuDefinition.CreateInstance(xmlValue); if (definition != null) { definition.Name = definition.Name.EmptyIfNull().Trim(); if (string.IsNullOrEmpty(definition.Name)) { throw new EtkException("Contextual menu must have a name"); } if (definition.Items != null && definition.Items.Count > 0) { List <IContextualPart> items = new List <IContextualPart>(); foreach (XmlContextualMenuPart xmlPart in definition.Items) { if (xmlPart is XmlContextualMenuItemDefinition) { XmlContextualMenuItemDefinition xmlItem = xmlPart as XmlContextualMenuItemDefinition; MethodInfo methodInfo = ConstextualMethodRetriever.RetrieveContextualMethodInfo(xmlItem.Action); IContextualMenuItem menuItem = new ContextualMenuItem(xmlItem.Caption, xmlItem.BeginGroup, methodInfo, xmlItem.FaceId); items.Add((IContextualPart)menuItem); } if (xmlPart is XmlContextualMenuDefinition) { //items.Add((IContextualPart)menuItem); } } if (items.Count > 0) { ret = new ContextualMenu(definition.Name, definition.Caption, definition.BeginGroup, items); } } } } catch (Exception ex) { string message = xmlValue.Length > 350 ? xmlValue.Substring(0, 350) + "..." : xmlValue; throw new EtkException($"Cannot create Event Callbacks from xml '{message}':{ex.Message}"); } return(ret); }
public TemplateContextualMenuManager(ContextualMenuManager contextualMenuManager) { this.contextualMenuManager = contextualMenuManager; // Create the contextual menu instances. Assembly assembly = Assembly.GetExecutingAssembly(); using (TextReader textReader = new StreamReader(assembly.GetManifestResourceStream("Etk.Excel.Resources.TemplateManagerUpdateDeleteContextualMenu.xml"))) { string menuXml = textReader.ReadToEnd(); manageTemplateMenu = null;//ùùmanageTemplateMenu = ContextualMenuFactory.CreateInstance(menuXml); } // Declare the contextual menus activators. contextualMenuManager.OnContextualMenusRequested += ManageTemplateManagerContextualMenu; }
public RequestsManager([Import] IContextualMenuManager contextualMenuManager) { try { // Create the contextual menu instances. Assembly assembly = Assembly.GetExecutingAssembly(); using (TextReader textReader = new StreamReader(assembly.GetManifestResourceStream("Etk.Excel.Resources.RequestsManagerContextualMenu.xml"))) { string menuXml = textReader.ReadToEnd(); RequestManagementMenu = ContextualMenuFactory.CreateInstance(menuXml); } // Declare the contextual menus activators. contextualMenuManager.OnContextualMenusRequested += ManageRequestsContexualMenu; } catch (Exception ex) { throw new EtkException($"UDF manager initialization failed:{ex.Message}", ex); } }
public IContextualMenu RegisterMenuDefinitionFromXml(string xml) { try { IContextualMenu menu = ContextualMenuFactory.CreateInstance(xml); lock ((contextualMenuByIdent as ICollection).SyncRoot) { if (menu != null) { if (contextualMenuByIdent.ContainsKey(menu.Name)) { log.LogFormat(LogType.Warn, "Menu {0} already registered.", menu.Name ?? string.Empty); } contextualMenuByIdent[menu.Name] = menu; } } return(menu); } catch (Exception ex) { string message = xml.Length > 350 ? xml.Substring(0, 350) + "..." : xml; throw new EtkException($"Cannot create contextual menu from xml '{message}':{ex.Message}"); } }
public static IEnumerable <MenuItemToken> MenuItemsFor <T>(this IContextualMenu <T> menu, T target, StringToken name) { return(menu.MenuItemsFor(target, name.Key)); }