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&lt;MLifter.BusinessLayer.FolderIndexEntry&gt;"/> 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&lt;MLifter.BusinessLayer.IConnectionString&gt;"/> 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;
        }
示例#4
0
        /// <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&lt;MLifter.BusinessLayer.FolderIndexEntry&gt;"/> 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;
        }
示例#5
0
        /// <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&lt;MLifter.BusinessLayer.IConnectionString&gt;"/> 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;
        }