public OnlinePackageItem(PackageInfo package, BaseItem parent) : base(package, parent) {}
public BaseItem(BaseItem parent) { this.parent = parent; }
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); }
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; }
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 })); } } }
protected void ReadItemData(BaseItem item) { this.itemsToRead.Enqueue(item); if (!this.itemInfoLoader.IsBusy) { this.itemInfoLoader.RunWorkerAsync(); } }