/// <inheritdoc/>
        public virtual IEnumerable <ItemContainerInfo> RemoveRange(int startingIndex, int count)
        {
            var result = new List <ItemContainerInfo>();

            if (count > 0)
            {
                for (var i = startingIndex; i < startingIndex + count; ++i)
                {
                    ItemContainerInfo found;

                    if (_containers.TryGetValue(i, out found))
                    {
                        result.Add(found);
                    }

                    _containers.Remove(i);
                }

                var toMove = _containers.Where(x => x.Key >= startingIndex).ToList();

                foreach (var i in toMove)
                {
                    _containers.Remove(i.Key);
                    i.Value.Index -= count;
                    _containers.Add(i.Value.Index, i.Value);
                }

                Dematerialized?.Invoke(this, new ItemContainerEventArgs(startingIndex, result));
            }

            return(result);
        }
Beispiel #2
0
        /// <inheritdoc/>
        public virtual IEnumerable <ItemContainer> RemoveRange(int startingIndex, int count)
        {
            var result = _containers.GetRange(startingIndex, count);

            _containers.RemoveRange(startingIndex, count);
            Dematerialized?.Invoke(this, new ItemContainerEventArgs(startingIndex, result));
            return(result);
        }
Beispiel #3
0
        /// <summary>
        /// Removes a container from the index.
        /// </summary>
        /// <param name="container">The item container.</param>
        public void Remove(IControl container)
        {
            var item = _containerToItem[container];

            _containerToItem.Remove(container);
            _itemToContainer.Remove(item);

            Dematerialized?.Invoke(
                this,
                new ItemContainerEventArgs(0, new ItemContainer(container, item, 0)));
        }
Beispiel #4
0
        /// <inheritdoc/>
        public virtual IEnumerable <ItemContainer> Clear()
        {
            var result = _containers.Where(x => x != null).ToList();

            _containers = new List <ItemContainer>();

            if (result.Count > 0)
            {
                Dematerialized?.Invoke(this, new ItemContainerEventArgs(0, result));
            }

            return(result);
        }
        /// <summary>
        /// Removes a set of containers from the index.
        /// </summary>
        /// <param name="startingIndex">The index of the first item.</param>
        /// <param name="containers">The item containers.</param>
        public void Remove(int startingIndex, IEnumerable <ItemContainerInfo> containers)
        {
            foreach (var container in containers)
            {
                var item = _containerToItem[container.ContainerControl];
                _containerToItem.Remove(container.ContainerControl);
                RemoveContainer(container.ContainerControl, item);
            }

            Dematerialized?.Invoke(
                this,
                new ItemContainerEventArgs(startingIndex, containers.ToList()));
        }
        /// <inheritdoc/>
        public virtual IEnumerable <ItemContainerInfo> Clear()
        {
            var result = Containers.ToList();

            _containers.Clear();

            if (result.Count > 0)
            {
                Dematerialized?.Invoke(this, new ItemContainerEventArgs(0, result));
            }

            return(result);
        }
        /// <inheritdoc/>
        public virtual IEnumerable <ItemContainer> RemoveRange(int startingIndex, int count)
        {
            List <ItemContainer> result = new List <ItemContainer>();

            if (startingIndex < _containers.Count)
            {
                result.AddRange(_containers.GetRange(startingIndex, count));
                _containers.RemoveRange(startingIndex, count);
                Dematerialized?.Invoke(this, new ItemContainerEventArgs(startingIndex, result));
            }

            return(result);
        }
        /// <inheritdoc/>
        public virtual IEnumerable <ItemContainerInfo> Dematerialize(int startingIndex, int count)
        {
            var result = new List <ItemContainerInfo>();

            for (int i = startingIndex; i < startingIndex + count; ++i)
            {
                result.Add(_containers[i]);
                _containers.Remove(i);
            }

            Dematerialized?.Invoke(this, new ItemContainerEventArgs(startingIndex, result));

            return(result);
        }
Beispiel #9
0
        /// <inheritdoc/>
        public virtual IEnumerable <ItemContainerInfo> RemoveRange(int startingIndex, int count)
        {
            var result = new List <ItemContainerInfo>();

            if (count > 0)
            {
                for (var i = startingIndex; i < startingIndex + count; ++i)
                {
                    if (_containers.TryGetValue(i, out var found))
                    {
                        result.Add(found);
                    }

                    _containers.Remove(i);
                }

                var toMove = _containers.Where(x => x.Key >= startingIndex)
                             .OrderBy(x => x.Key).ToArray();

                foreach (var i in toMove)
                {
                    _containers.Remove(i.Key);
                    i.Value.Index -= count;
                    _containers.Add(i.Value.Index, i.Value);
                }

                Dematerialized?.Invoke(this, new ItemContainerEventArgs(startingIndex, result));

                if (toMove.Length > 0)
                {
                    var containers = toMove.Select(x => x.Value).ToArray();
                    Recycled?.Invoke(this, new ItemContainerEventArgs(containers[0].Index, containers));
                }
            }

            return(result);
        }