public bool ContainsListener(IGridViewEventListener listener)
        {
            if (this.IsDisposing || this.IsDisposed)
            {
                throw new ObjectDisposedException(nameof(GridViewSynchronizationService));
            }
            GridEventType desiredEvents = listener.DesiredEvents;

            return((desiredEvents & GridEventType.Data) == GridEventType.Data && this.dataEntity.Contains(listener) || (desiredEvents & GridEventType.UI) == GridEventType.UI && this.uiEntity.Contains(listener));
        }
        public bool Contains(IGridViewEventListener listener)
        {
            if (listener == null)
            {
                return(false);
            }
            GridEventProcessMode desiredProcessMode = listener.DesiredProcessMode;

            return((desiredProcessMode & GridEventProcessMode.PreProcess) == GridEventProcessMode.PreProcess && this.preProcessListeners.IndexOf(listener) >= 0 || (desiredProcessMode & GridEventProcessMode.Process) == GridEventProcessMode.Process && this.processListeners.IndexOf(listener) >= 0 || (desiredProcessMode & GridEventProcessMode.PostProcess) == GridEventProcessMode.PostProcess && this.postProcessListeners.IndexOf(listener) >= 0);
        }
        public void Remove(IGridViewEventListener listener)
        {
            GridEventProcessMode desiredProcessMode = listener.DesiredProcessMode;

            if ((desiredProcessMode & GridEventProcessMode.PreProcess) == GridEventProcessMode.PreProcess)
            {
                this.preProcessListeners.Remove(listener);
            }
            if ((desiredProcessMode & GridEventProcessMode.Process) == GridEventProcessMode.Process)
            {
                this.processListeners.Remove(listener);
            }
            if ((desiredProcessMode & GridEventProcessMode.PostProcess) != GridEventProcessMode.PostProcess)
            {
                return;
            }
            this.postProcessListeners.Remove(listener);
        }
        public void RemoveListener(IGridViewEventListener listener)
        {
            GridEventType desiredEvents = listener.DesiredEvents;

            if ((desiredEvents & GridEventType.Data) == GridEventType.Data && this.dataEntity.Contains(listener))
            {
                this.dataEntity.Remove(listener);
            }
            if ((desiredEvents & GridEventType.UI) == GridEventType.UI && this.uiEntity.Contains(listener))
            {
                this.uiEntity.Remove(listener);
            }
            if ((listener.DesiredProcessMode & GridEventProcessMode.AnalyzeQueue) != GridEventProcessMode.AnalyzeQueue || this.queueAnalyzers.IndexOf(listener) < 0)
            {
                return;
            }
            this.queueAnalyzers.Remove(listener);
        }
        public void AddListener(IGridViewEventListener listener)
        {
            GridEventType desiredEvents = listener.DesiredEvents;

            if ((desiredEvents & GridEventType.Data) == GridEventType.Data)
            {
                this.dataEntity.Add(listener);
            }
            if ((desiredEvents & GridEventType.UI) == GridEventType.UI)
            {
                this.uiEntity.Add(listener);
            }
            if ((listener.DesiredProcessMode & GridEventProcessMode.AnalyzeQueue) != GridEventProcessMode.AnalyzeQueue)
            {
                return;
            }
            this.queueAnalyzers.Add(listener);
        }
        public void Add(IGridViewEventListener listener)
        {
            if (!this.VerifyAdd(listener))
            {
                return;
            }
            GridEventProcessMode desiredProcessMode = listener.DesiredProcessMode;

            if ((desiredProcessMode & GridEventProcessMode.PreProcess) == GridEventProcessMode.PreProcess)
            {
                this.preProcessListeners.Add(listener);
            }
            if ((desiredProcessMode & GridEventProcessMode.Process) == GridEventProcessMode.Process)
            {
                this.processListeners.Add(listener);
            }
            if ((desiredProcessMode & GridEventProcessMode.PostProcess) != GridEventProcessMode.PostProcess)
            {
                return;
            }
            this.postProcessListeners.Add(listener);
        }
 private bool VerifyAdd(IGridViewEventListener listener)
 {
     return(!this.owner.IsDisposing && !this.owner.IsDisposed && !this.Contains(listener));
 }