Esempio n. 1
0
		public OnlinePackageItem(PackageInfo package, BaseItem parent) : base(package, parent) {}
Esempio n. 2
0
		public BaseItem(BaseItem parent)
		{
			this.parent = parent;
		}
Esempio n. 3
0
		public LocalPackageItem(LocalPackage package, BaseItem parent) : base(package.Info, parent) {}
		protected override BaseItem CreatePackageItem(object package, BaseItem parentItem)
		{
			return new OnlinePackageItem(package as PackageInfo, parentItem);
		}
Esempio n. 5
0
		public PackageItem(PackageInfo packageInfo, BaseItem parent) : base(parent)
		{
			this.itemPackageInfo = packageInfo;
		}
		private TreePath GetPath(BaseItem item)
		{
			Stack<object> stack = new Stack<object>();
			while (item != null)
			{
				stack.Push(item);
				item = item.Parent;
			}
			return new TreePath(stack.ToArray());
		}
		private int GetItemIndex(BaseItem item)
		{
			if (this.itemFilter == null)
			{
				int index;
				lock (this.itemLock)
				{
					index = this.items.IndexOf(item);
				}
				return index;
			}
			else if (this.itemFilter(item))
			{
				int index = 0;
				lock (this.itemLock)
				{
					foreach (BaseItem i in this.items)
					{
						if (!this.itemFilter(i)) continue;
						if (i == item) break;
						++index;
					}
				}
				return index;
			}
			else
			{
				return -1;
			}
		}
		protected void RemoveItem(BaseItem item)
		{
			int index = GetItemIndex(item);
			lock (this.itemLock)
			{
				this.items.Remove(item);
			}
			if (this.NodesRemoved != null && index != -1)
			{
				this.NodesRemoved(this, new TreeModelEventArgs(this.GetPath(item.Parent), new int[] { index }, new[] { item }));
			}
		}
		private void SubmitItem(BaseItem item)
		{
			lock (this.itemLock)
			{
				// Remove the item, if already part of the list
				int oldIndex = this.items.IndexOf(item);
				if (oldIndex != -1)
					this.items.RemoveAt(oldIndex);

				// Determine where to insert the item
				int newIndex = oldIndex;
				if (this.sortComparer != null)
				{
					for (int i = 0; i < this.items.Count; i++)
					{
						if (this.sortComparer.Compare(this.items[i], item) > 0)
						{
							newIndex = i;
							break;
						}
					}
				}

				// Insert the item
				if (newIndex != -1)
					this.items.Insert(newIndex, item);
				else
					this.items.Add(item);
			}
		}
		protected void ReadItemData(BaseItem item)
		{
			this.itemsToRead.Enqueue(item);
			this.itemsToGetIcon.Enqueue(item);
		}
		protected void AddItem(BaseItem item)
		{
			this.SubmitItem(item);
			this.ReadItemData(item);

			if (this.NodesInserted != null)
			{
				int index = GetItemIndex(item);
				if (index != -1)
				{
					this.NodesInserted(this, new TreeModelEventArgs(this.GetPath(item.Parent), new int[] { index }, new[] { item }));
				}
			}

			// Wake info and icon loaders to read online item data
			this.RunLoadInfoWorkers();
		}
		protected abstract BaseItem CreatePackageItem(object package, BaseItem parentItem);
		protected override BaseItem CreatePackageItem(object package, BaseItem parentItem)
		{
			return new LocalPackageItem(package as LocalPackage, parentItem);
		}
			public ChangeEvent(BaseItem item, ChangeOperation op)
			{
				this.item = item;
				this.operation = op;
			}
Esempio n. 15
0
		protected void AddItem(BaseItem item)
		{
			this.SubmitItem(item);
			this.ReadItemData(item);

			if (this.NodesInserted != null)
			{
				int index = GetItemIndex(item);
				if (index != -1)
				{
					this.NodesInserted(this, new TreeModelEventArgs(this.GetPath(item.Parent), new int[] { index }, new[] { item }));
				}
			}
		}
Esempio n. 16
0
		protected void ReadItemData(BaseItem item)
		{
			this.itemsToRead.Enqueue(item);
			if (!this.itemInfoLoader.IsBusy)
			{
				this.itemInfoLoader.RunWorkerAsync();
			}
		}