//private List<ERDiagram> _hookedERDiagrams = new List<ERDiagram>(); private void SetupContextMenu(ERDiagram diagram) { if (diagram == null) { return; } //if (_hookedERDiagrams.Contains(diagram)) return; #if DENALI || SQL2014 IDiagramAction actionHideMemberIf = null; foreach (IDiagramAction action in diagram.Actions) #else IViewModelAction actionHideMemberIf = null; foreach (IViewModelAction action in diagram.Actions) #endif { if (action is ERDiagramActionHideMemberIf) { actionHideMemberIf = action; break; } } if (actionHideMemberIf != null) { return; //if this context menu is already part of the diagram, then we're done } ERDiagramActionHideMemberIf levels = new ERDiagramActionHideMemberIf(diagram, this); levels.Text = "Set HideMemberIf..."; levels.DisplayIndex = 0x19f; #if DENALI || SQL2014 IDiagramTag tagHierarchyLevel = (IDiagramTag)diagram.GetType().InvokeMember("tagHierarchyLevel", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.GetField | System.Reflection.BindingFlags.Instance, null, diagram, null); levels.Key = new DiagramObjectKey(@"Actions\{0}", new object[] { "HideMemberIf" }); levels.AvailableRule = delegate(IEnumerable <IEnumerable <IDiagramTag> > tagSets) { return(tagSets.All <IEnumerable <IDiagramTag> >(tagSet => tagSet.Contains <IDiagramTag>(tagHierarchyLevel))); }; #else IViewModelTag tagHierarchyLevel = (IViewModelTag)diagram.GetType().InvokeMember("tagHierarchyLevel", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.GetField | System.Reflection.BindingFlags.Instance, null, diagram, null); levels.Key = new ViewModelObjectKey(@"Actions\{0}", new object[] { "HideMemberIf" }); levels.AvailableRule = delegate(IEnumerable <IEnumerable <IViewModelTag> > tagSets) { return(tagSets.All <IEnumerable <IViewModelTag> >(tagSet => tagSet.Contains <IViewModelTag>(tagHierarchyLevel))); }; #endif diagram.GetType().InvokeMember("InitializeViewStates", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.InvokeMethod, null, diagram, new object[] { levels }); diagram.Actions.Add(levels); //_hookedERDiagrams.Add(diagram); }
private void SetupContextMenu(ERDiagram diagram) { if (diagram == null) { return; } #if DENALI || SQL2014 foreach (IDiagramAction action in diagram.Actions) #else foreach (IViewModelAction action in diagram.Actions) #endif { if (action is ERDiagramActionSyncDescriptions) { return; //if this context menu is already part of the diagram, then we're done } } ERDiagramActionSyncDescriptions syncAction = new ERDiagramActionSyncDescriptions(diagram, this); syncAction.Text = "Sync Descriptions..."; syncAction.DisplayIndex = 0x19f; #if DENALI || SQL2014 IDiagramTag tagTable = (IDiagramTag)diagram.GetType().InvokeMember("tagTable", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.GetField | System.Reflection.BindingFlags.Instance, null, diagram, null); syncAction.Key = new DiagramObjectKey(@"Actions\{0}", new object[] { "SyncDescriptions" }); syncAction.AvailableRule = delegate(IEnumerable <IEnumerable <IDiagramTag> > tagSets) { return(tagSets.All <IEnumerable <IDiagramTag> >(tagSet => tagSet.Contains <IDiagramTag>(tagTable))); }; #else IViewModelTag tagTable = (IViewModelTag)diagram.GetType().InvokeMember("tagTable", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.GetField | System.Reflection.BindingFlags.Instance, null, diagram, null); syncAction.Key = new ViewModelObjectKey(@"Actions\{0}", new object[] { "SyncDescriptions" }); syncAction.AvailableRule = delegate(IEnumerable <IEnumerable <IViewModelTag> > tagSets) { return(tagSets.All <IEnumerable <IViewModelTag> >(tagSet => tagSet.Contains <IViewModelTag>(tagTable))); }; #endif diagram.GetType().InvokeMember("InitializeViewStates", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.InvokeMethod, null, diagram, new object[] { syncAction }); diagram.Actions.Add(syncAction); }