internal static void FireOnNodeCopying(CancellableNodeOperationEventHandler Copying, Node sender, CancellableNodeOperationEventArgs e, List <Type> disabledObservers) { InvokeCancelOperationEventHandlers(Copying, sender, e); var observers = NodeTypeManager.Current.NodeObservers; if (observers == null) { return; } if (disabledObservers == null) { foreach (NodeObserver observer in observers) { observer.OnNodeCopying(sender, e); } } else { foreach (NodeObserver observer in observers) { if (!disabledObservers.Contains(observer.GetType())) { observer.OnNodeCopying(sender, e); } } } }
internal static void InvokeCancelOperationEventHandlers(CancellableNodeOperationEventHandler handler, object sender, CancellableNodeOperationEventArgs e) { if (handler == null) { return; } Exception firstException = null; Delegate[] list = (Delegate[])handler.GetInvocationList().Clone(); bool cancel = false; foreach (CancellableNodeOperationEventHandler del in list) { try { del(sender, e); cancel = cancel | e.Cancel; e.Cancel = cancel; } catch (Exception ex) //TODO: catch block { //LogException(source, ex); if (firstException == null) { firstException = ex; } } } if (firstException != null) { throw firstException; } }
internal static void FireOnNodeCopying(CancellableNodeOperationEventHandler Copying, Node sender, CancellableNodeOperationEventArgs e, List <Type> disabledObservers) { InvokeCancelOperationEventHandlers(Copying, sender, e); FireNodeEvent(disabledObservers, observer => { observer.OnNodeCopying(sender, e); }); }