private void InitTreeView() { base.Nodes.Add(mainNode); mainNode.ContentLoadException += new FolderIndexEntry.ContentLoadExceptionEventHandler(mainNode_ContentLoadException); mainNode.Expand(); mainNode.UpdateDetails(); Nodes = new List <FolderTreeNode>(); Nodes.Add(mainNode); Folders = new ObservableList <FolderIndexEntry>(); Folders.ListChanged += new EventHandler <ObservableListChangedEventArgs <FolderIndexEntry> >(Folders_ListChanged); Connections = new ObservableList <IConnectionString>(); Connections.ListChanged += new EventHandler <ObservableListChangedEventArgs <IConnectionString> >(Connections_ListChanged); }
/// <summary> /// Handles the ListChanged event of the Folders list. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="MLifter.Components.ObservableListChangedEventArgs<MLifter.BusinessLayer.FolderIndexEntry>"/> instance containing the event data.</param> /// <remarks>Documented by Dev05, 2009-03-12</remarks> private void Folders_ListChanged(object sender, ObservableListChangedEventArgs <FolderIndexEntry> e) { switch (e.ListChangedType) { case ListChangedType.ItemAdded: if (!Connections.Contains(e.Item.Connection)) { Connections.Add(e.Item.Connection); } if (e.Item.Parent != null) { try { FolderTreeNode entry = new FolderTreeNode(e.Item); entry.ContentLoadException += new FolderIndexEntry.ContentLoadExceptionEventHandler(Folder_ContentLoadException); lock (Nodes) { Nodes.Add(entry); } while (Nodes.Find(n => n.Folder == e.Item.Parent) == null) { Thread.Sleep(10); } if (InvokeRequired) { Invoke((MethodInvoker) delegate { AddFolderToParent(e.Item.Parent, entry); }); } else { entry.UpdateDetails(); } } catch (Exception exp) { Trace.WriteLine("Folder-Added: " + exp.ToString()); } } else { FolderTreeNode node = Nodes.Find(n => n.Connection == e.Item.Connection); if (node != null) { node.SetFolder(e.Item); } else { FolderTreeNode entry = new FolderTreeNode(e.Item); entry.ContentLoadException += new FolderIndexEntry.ContentLoadExceptionEventHandler(Folder_ContentLoadException); lock (Nodes) { Nodes.Add(entry); } Delegate add = (MethodInvoker) delegate { BeginUpdate(); lock (Nodes) { Nodes.Find(n => n.IsMainNode).Nodes.Add(entry); } EndUpdate(); }; if (InvokeRequired) { Invoke((MethodInvoker)add); } else { add.DynamicInvoke(); } entry.UpdateDetails(); } } e.Item.ContentLoading += new EventHandler(Folder_ContentLoading); break; case ListChangedType.ItemDeleted: throw new NotImplementedException(); case ListChangedType.ItemChanged: break; case ListChangedType.Reset: case ListChangedType.ItemMoved: default: throw new NotSupportedException(); } updateTimer.Enabled = true; }
/// <summary> /// Handles the ListChanged event of the Connections control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="MLifter.Components.ObservableListChangedEventArgs<MLifter.BusinessLayer.IConnectionString>"/> instance containing the event data.</param> /// <remarks>Documented by Dev05, 2009-03-12</remarks> private void Connections_ListChanged(object sender, ObservableListChangedEventArgs <IConnectionString> e) { switch (e.ListChangedType) { case ListChangedType.ItemAdded: if (Folders.Find(f => f.Connection == e.Item) == null) { FolderTreeNode entry = new FolderTreeNode(e.Item); entry.ContentLoadException += new FolderIndexEntry.ContentLoadExceptionEventHandler(Folder_ContentLoadException); lock (Nodes) { Nodes.Add(entry); } if (InvokeRequired) { Invoke((MethodInvoker) delegate { AddFolderToMainNode(entry); }); } else { AddFolderToMainNode(entry); } entry.UpdateDetails(); } break; case ListChangedType.ItemDeleted: if (InvokeRequired) { Invoke((MethodInvoker) delegate { lock (Nodes) { Nodes.FindAll(f => f.Connection == e.Item).ForEach(f => base.Nodes.Remove(f)); Nodes.RemoveAll(f => f.Connection == e.Item); } }); } else { lock (Nodes) { Nodes.FindAll(f => f.Connection == e.Item).ForEach(f => base.Nodes.Remove(f)); Nodes.RemoveAll(f => f.Connection == e.Item); } } break; case ListChangedType.ItemChanged: break; case ListChangedType.Reset: foreach (IConnectionString item in Connections) { if (Folders.Find(f => f.Connection == item) == null) { FolderTreeNode entry = new FolderTreeNode(item); entry.ContentLoadException += new FolderIndexEntry.ContentLoadExceptionEventHandler(Folder_ContentLoadException); lock (Nodes) { Nodes.Add(entry); } if (InvokeRequired) { Invoke((MethodInvoker) delegate { AddFolderToMainNode(entry); }); } else { AddFolderToMainNode(entry); } entry.UpdateDetails(); } } break; case ListChangedType.ItemMoved: default: throw new NotSupportedException(); } updateTimer.Enabled = true; }
/// <summary> /// Handles the ListChanged event of the Folders list. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="MLifter.Components.ObservableListChangedEventArgs<MLifter.BusinessLayer.FolderIndexEntry>"/> instance containing the event data.</param> /// <remarks>Documented by Dev05, 2009-03-12</remarks> private void Folders_ListChanged(object sender, ObservableListChangedEventArgs<FolderIndexEntry> e) { switch (e.ListChangedType) { case ListChangedType.ItemAdded: if (!Connections.Contains(e.Item.Connection)) Connections.Add(e.Item.Connection); if (e.Item.Parent != null) { try { FolderTreeNode entry = new FolderTreeNode(e.Item); entry.ContentLoadException += new FolderIndexEntry.ContentLoadExceptionEventHandler(Folder_ContentLoadException); lock (Nodes) { Nodes.Add(entry); } while (Nodes.Find(n => n.Folder == e.Item.Parent) == null) Thread.Sleep(10); if (InvokeRequired) Invoke((MethodInvoker)delegate { AddFolderToParent(e.Item.Parent, entry); }); else entry.UpdateDetails(); } catch (Exception exp) { Trace.WriteLine("Folder-Added: " + exp.ToString()); } } else { FolderTreeNode node = Nodes.Find(n => n.Connection == e.Item.Connection); if (node != null) node.SetFolder(e.Item); else { FolderTreeNode entry = new FolderTreeNode(e.Item); entry.ContentLoadException += new FolderIndexEntry.ContentLoadExceptionEventHandler(Folder_ContentLoadException); lock (Nodes) { Nodes.Add(entry); } Delegate add = (MethodInvoker)delegate { BeginUpdate(); lock (Nodes) { Nodes.Find(n => n.IsMainNode).Nodes.Add(entry); } EndUpdate(); }; if (InvokeRequired) Invoke((MethodInvoker)add); else add.DynamicInvoke(); entry.UpdateDetails(); } } e.Item.ContentLoading += new EventHandler(Folder_ContentLoading); break; case ListChangedType.ItemDeleted: throw new NotImplementedException(); case ListChangedType.ItemChanged: break; case ListChangedType.Reset: case ListChangedType.ItemMoved: default: throw new NotSupportedException(); } updateTimer.Enabled = true; }
/// <summary> /// Handles the ListChanged event of the Connections control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="MLifter.Components.ObservableListChangedEventArgs<MLifter.BusinessLayer.IConnectionString>"/> instance containing the event data.</param> /// <remarks>Documented by Dev05, 2009-03-12</remarks> private void Connections_ListChanged(object sender, ObservableListChangedEventArgs<IConnectionString> e) { switch (e.ListChangedType) { case ListChangedType.ItemAdded: if (Folders.Find(f => f.Connection == e.Item) == null) { FolderTreeNode entry = new FolderTreeNode(e.Item); entry.ContentLoadException += new FolderIndexEntry.ContentLoadExceptionEventHandler(Folder_ContentLoadException); lock (Nodes) { Nodes.Add(entry); } if (InvokeRequired) Invoke((MethodInvoker)delegate { AddFolderToMainNode(entry); }); else AddFolderToMainNode(entry); entry.UpdateDetails(); } break; case ListChangedType.ItemDeleted: if (InvokeRequired) Invoke((MethodInvoker)delegate { lock (Nodes) { Nodes.FindAll(f => f.Connection == e.Item).ForEach(f => base.Nodes.Remove(f)); Nodes.RemoveAll(f => f.Connection == e.Item); } }); else { lock (Nodes) { Nodes.FindAll(f => f.Connection == e.Item).ForEach(f => base.Nodes.Remove(f)); Nodes.RemoveAll(f => f.Connection == e.Item); } } break; case ListChangedType.ItemChanged: break; case ListChangedType.Reset: foreach (IConnectionString item in Connections) { if (Folders.Find(f => f.Connection == item) == null) { FolderTreeNode entry = new FolderTreeNode(item); entry.ContentLoadException += new FolderIndexEntry.ContentLoadExceptionEventHandler(Folder_ContentLoadException); lock (Nodes) { Nodes.Add(entry); } if (InvokeRequired) Invoke((MethodInvoker)delegate { AddFolderToMainNode(entry); }); else AddFolderToMainNode(entry); entry.UpdateDetails(); } } break; case ListChangedType.ItemMoved: default: throw new NotSupportedException(); } updateTimer.Enabled = true; }