/// <summary>
        /// Adds an item in the collection and in the TreeListView
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        public virtual TreeListViewItem Add(string value)
        {
            TreeListViewItem item = new TreeListViewItem(value);

            Add(item);
            return(item);
        }
        internal void RemoveAtInternal(int index)
        {
            if (TreeListView != null)
            {
                if (TreeListView.InvokeRequired)
                {
                    throw(new Exception("Invoke required"));
                }
            }
            TreeListViewItem item = this[index];

            if (this[index].Visible && this.TreeListView != null)
            {
                item.Hide();
            }
            List.RemoveAt(index);
            item.SetParent(null);
            // Redraw parent if no more children
            if (Count == 0 && TreeListView != null && Parent != null)
            {
                Parent.Redraw();
            }
            // Redraw new last item
            if (Count > 0 && TreeListView != null && index == Count)
            {
                this[index - 1].Redraw();
            }
            OnItemRemoved(new TreeListViewEventArgs(item, TreeListViewAction.Unknown));
        }
        /// <summary>
        /// Adds an item in the collection and in the TreeListView
        /// </summary>
        /// <param name="value"></param>
        /// <param name="imageindex"></param>
        /// <returns></returns>
        public virtual TreeListViewItem Add(string value, int imageindex)
        {
            TreeListViewItem item = new TreeListViewItem(value, imageindex);

            Add(item);
            return(item);
        }
        private bool ListViewContains(TreeListViewItem item)
        {
            if (TreeListView == null)
            {
                return(false);
            }
            if (TreeListView.InvokeRequired)
            {
                throw(new Exception("Invoke required"));
            }
            ListView     listview     = (ListView)TreeListView;
            ListViewItem listviewitem = (ListViewItem)item;

            try{
                foreach (ListViewItem temp in listview.Items)
                {
                    if (temp == listviewitem)
                    {
                        return(true);
                    }
                }
            }
            catch {}
            return(false);
        }
Esempio n. 5
0
 /// <summary>
 /// 改变行背景色
 /// </summary>
 /// <param name="item"></param>
 /// <param name="c"></param>
 private void changeColor(TreeListViewItem item, Color c)
 {
     for (int j = 0; j < item.SubItems.Count; j++)
     {
         item.SubItems[j].BackColor = c;
     }
 }
Esempio n. 6
0
        /// <summary>
        /// Adds an item in the collection and in the TreeListView
        /// </summary>
        /// <param name="item"></param>
        /// <returns>Index of the item in the collection</returns>
        public virtual int Add(TreeListViewItem item)
        {
            if (TreeListView != null)
            {
                if (TreeListView.InvokeRequired)
                {
                    throw(new Exception("Invoke required"));
                }
            }
            // Do not add the item if the collection owns a TreeListView recursively
            // and the item already owns a TreeListView
            if (TreeListView != null && item.ListView != null)
            {
                throw(new Exception("The Item is already in a TreeListView"));
            }
            int index = GetInsertCollectionIndex(item);

            if (index == -1)
            {
                return(-1);
            }
            if (Parent != null)
            {
                item.SetParent(Parent);
            }
            item.Items.Comparer = this.Comparer;
            int treelistviewindex = GetInsertTreeListViewIndex(item, index);

            // Insert in the ListView
            if (treelistviewindex > -1)
            {
                ListView listview = (ListView)TreeListView;
                listview.Items.Insert(treelistviewindex, (ListViewItem)item);
                if (item.IsExpanded)
                {
                    item.Expand();
                }
                item.SetIndentation();
            }
            // Insert in this collection
            if (index > -1)
            {
                List.Insert(index, item);
            }
            if (index > -1)
            {
                OnItemAdded(new TreeListViewEventArgs(item, TreeListViewAction.Unknown));
            }
            if (Count == 1 && TreeListView != null && Parent != null)
            {
                if (Parent.Visible)
                {
                    Parent.Redraw();
                }
            }
            return(index);
        }
            /// <summary>
            /// Compare two TreeListViewItems
            /// </summary>
            /// <param name="x"></param>
            /// <param name="y"></param>
            /// <returns></returns>
            public int Compare(object x, object y)
            {
                if (!(x is TreeListViewItem))
                {
                    return(0);
                }
                if (!(y is TreeListViewItem))
                {
                    return(0);
                }

                TreeListViewItem lvi1 = (TreeListViewItem)x;
                string           str1 = lvi1.SubItems[Column].Text;
                TreeListViewItem lvi2 = (TreeListViewItem)y;
                string           str2 = lvi2.SubItems[Column].Text;

                /*if (SortOrder == SortOrder.Ascending)
                 * {
                 * if (lvi1.isfolder && lvi2.isfolder == false)
                 *      return -1;
                 * else if (lvi1.isfolder==false && lvi1.isfolder)
                 *      return 1;
                 * }
                 * else if (SortOrder == SortOrder.Descending)
                 * {
                 *      if (lvi1.isfolder && lvi2.isfolder == false)
                 *              return 1;
                 *      else if (lvi1.isfolder == false && lvi1.isfolder)
                 *              return -1;
                 * }
                 */
                if (Regex.IsMatch(str1, "^[0-9]+.*[KMGTP]B$") && Regex.IsMatch(str2, "^[0-9]+.*[KMGTP]B$"))
                {
                    if (SortOrder == SortOrder.Ascending)
                    {
                        return(lvi1.nodeSize.kb.CompareTo(lvi2.nodeSize.kb));
                    }
                    else
                    {
                        return(lvi2.nodeSize.kb.CompareTo(lvi1.nodeSize.kb));
                    }
                }
                else
                {
                    if (SortOrder == SortOrder.Ascending)
                    {
                        return(String.Compare(str1, str2));
                    }
                    else
                    {
                        return(String.Compare(str2, str1));
                    }
                }
            }
Esempio n. 8
0
        private void buttonRemove_Click(object sender, System.EventArgs e)
        {
            if (treeView1.SelectedNode == null)
            {
                return;
            }
            TreeListViewItem item = (TreeListViewItem)treeView1.SelectedNode.Tag;

            item.Remove();
            treeView1.SelectedNode.Remove();
        }
Esempio n. 9
0
 /// <summary>
 /// Check if this node is one of the parents of an item (recursively)
 /// </summary>
 /// <param name="item"></param>
 /// <returns></returns>
 public bool IsAParentOf(TreeListViewItem item)
 {
     TreeListViewItem[] parents = item.ParentsInHierarch;
     foreach (TreeListViewItem parent in parents)
     {
         if (parent == this)
         {
             return(true);
         }
     }
     return(false);
 }
Esempio n. 10
0
 /// <summary>
 /// 查找指定主键值的节点(假定主键为第一个隐藏列)
 /// </summary>
 public System.Windows.Forms.TreeListViewItem FindNodeByKey(string ID)
 {
     foreach (System.Windows.Forms.TreeListViewItem root in TreeListView.Items)
     {
         System.Windows.Forms.TreeListViewItem n = FindNodeByKey(root, ID);
         if (n != null)
         {
             return(n);
         }
     }
     return(null);
 }
Esempio n. 11
0
        private void AddChildren(TreeNode node)
        {
            TreeListViewItem tlvitem = (TreeListViewItem)node.Tag;

            foreach (TreeListViewItem item in tlvitem.Items)
            {
                TreeNode child = new TreeNode(item.Text);
                child.Tag = item;
                node.Nodes.Add(child);
                AddChildren(child);
                child.Expand();
            }
        }
        private int GetInsertTreeListViewIndex(TreeListViewItem item, int collectionindex)
        {
            if (TreeListView == null)
            {
                return(-1);
            }
            if (TreeListView.InvokeRequired)
            {
                throw(new Exception("Invoke required"));
            }
            if (Owner != null)
            {
                int a = 0;
                a++;
            }
            int index = -1;

            // First level item (no parent)
            if (Owner != null && collectionindex != -1)
            {
                if (collectionindex == 0)
                {
                    index = 0;
                }
                else
                {
                    index =
                        this[collectionindex - 1].LastChildIndexInListView + 1;
                }
            }
            else if (Parent != null && collectionindex != -1)
            {
                if (!Parent.Visible || !Parent.IsExpanded)
                {
                    index = -1;
                }
                else
                {
                    if (collectionindex == 0)
                    {
                        index = Parent.Index + 1;
                    }
                    else
                    {
                        index =
                            Parent.Items[collectionindex - 1].LastChildIndexInListView + 1;
                    }
                }
            }
            return(index);
        }
Esempio n. 13
0
        public static void camelcase(Form1.IncrementStatusDel incrementStatus, ref TreeListView change, TreeListViewItem fromthis)
        {
            for (int a = 0; a < fromthis.Items.Count; a++)
            {
                String s = StringExtras.ToCamelCase(fromthis.Items[a].Text, true, null);
                TreeListViewItem TLVI = getItemByName(change, fromthis.Items[a].fullPath);
                if (TLVI != null)
                    TLVI.Text = s;
                fromthis.Items[a].Text = s;

                incrementStatus();
                camelcase(incrementStatus, ref change, fromthis.Items[a]);
            }
        }
        /// <summary>
        /// Remove an item from the collection and the TreeListView
        /// </summary>
        /// <param name="item"></param>
        public virtual void Remove(TreeListViewItem item)
        {
            TreeListView treelistview = this.TreeListView;

            if (treelistview != null)
            {
                treelistview.BeginUpdate();
            }
            RemoveInternal(item);
            if (treelistview != null)
            {
                treelistview.EndUpdate();
            }
        }
Esempio n. 15
0
        /// <summary>
        /// [递归]按树向上搜索第一个具有“下一个兄弟结点”的父级结点
        /// </summary>
        private TreeListViewItem getParentHasNextSibling()
        {
            TreeListViewItem node = null;

            if (Parent != null)
            {
                node = Parent.NextSibling;
                if (node != null)
                {
                    return(Parent);
                }

                return(Parent.getParentHasNextSibling());
            }
            return(null);
        }
Esempio n. 16
0
        /// <summary>
        /// 从指定节点及其下级中查找指定主键值的节点(假定主键为第一个隐藏列)
        /// </summary>
        public System.Windows.Forms.TreeListViewItem FindNodeByKey(System.Windows.Forms.TreeListViewItem node, string ID)
        {
            if (node.SubItems[node.ListView.Columns.Count].Text == ID)
            {
                return(node);
            }

            foreach (System.Windows.Forms.TreeListViewItem tln in node.Items)
            {
                System.Windows.Forms.TreeListViewItem n = FindNodeByKey(tln, ID);
                if (n != null)
                {
                    return(n);
                }
            }
            return(null);
        }
Esempio n. 17
0
        /// <summary>
        /// 绑定指定行的子级
        /// </summary>
        public void BindChildren(System.Windows.Forms.TreeListViewItem node, DataRow dr)
        {
            DataTable dt = dr.Table;
            string    strParentSqlValue = Apq.Data.SqlClient.Common.ConvertToSqlON(dr[Key]);

            DataRow[] drs = dt.Select(Parent + " = " + strParentSqlValue);
            if (!Apq.Convert.LikeDBNull(drs) && drs.Length > 0)
            {
                foreach (DataRow drChild in drs)
                {
                    System.Windows.Forms.TreeListViewItem n = new System.Windows.Forms.TreeListViewItem();
                    node.Items.Add(n);
                    BindRow(n, drChild);
                    BindChildren(n, drChild);
                }
            }
        }
Esempio n. 18
0
        /// <summary>
        /// 绑定数据表
        /// </summary>
        public void BindDataTable(DataTable dt)
        {
            TreeListView.Items.Clear();

            // 记录下需要添加的列
            List <string> hCols = GetHiddenColumns(dt);

            List <DataRow> Roots = Apq.Data.DataTable.GetRootRows(dt, Key, Parent);

            foreach (DataRow dr in Roots)
            {
                System.Windows.Forms.TreeListViewItem node = new System.Windows.Forms.TreeListViewItem();
                TreeListView.Items.Add(node);
                BindRow(node, dr);
                BindChildren(node, dr);
            }
        }
Esempio n. 19
0
 public static void BaseCopy(TreeListViewItem from, ref TreeListViewItem to)
 {
     to = (TreeListViewItem)from.Clone();
     to.fullPath = from.fullPath;
     to.Name = from.fullPath;
     to.nodeSize = from.nodeSize;
     to.isfolder = from.isfolder;
     to.rating = from.rating;
     while (to.SubItems.Count < 4)
     {
         to.SubItems.Add("");
     }
     to.SubItems[1].Text = to.nodeSize.getSizeString();
     to.SubItems[2].Text = to.fullPath;
     if (to.rating > -1)
         to.SubItems[3].Text = to.rating.ToString();
 }
        internal void RemoveInternal(TreeListViewItem item)
        {
            if (TreeListView != null)
            {
                if (TreeListView.InvokeRequired)
                {
                    throw(new Exception("Invoke required"));
                }
            }
            int index = GetIndexOf(item);

            if (index == -1)
            {
                return;
            }
            RemoveAtInternal(index);
        }
        /// <summary>
        /// Transforms the collection to an array
        /// </summary>
        public TreeListViewItem[] ToArray()
        {
            if (TreeListView != null)
            {
                if (TreeListView.InvokeRequired)
                {
                    throw(new Exception("Invoke required"));
                }
            }
            int size = this.Count;

            TreeListViewItem[] eltsArray = new TreeListViewItem[size];
            for (int i = 0; i < size; i++)
            {
                eltsArray[i] = this[i];
            }
            return(eltsArray);
        }
        private int GetInsertCollectionIndex(TreeListViewItem item)
        {
            if (TreeListView != null)
            {
                if (TreeListView.InvokeRequired)
                {
                    throw(new Exception("Invoke required"));
                }
            }
            int index = -1;

            if (!_sortable)
            {
                index = Count;
            }
            else if (!Contains(item) && !ListViewContains(item))
            {
                switch (SortOrder)
                {
                // No sortorder -> at the end of the collection
                case System.Windows.Forms.SortOrder.None:
                    index = this.Count;
                    break;

                default:
                    for (int i = 0; i < this.Count; i++)
                    {
                        // Change the index for the compare if the order is descending
                        int indexcompare = i;
                        int comp         = Comparer.Compare(item, this[indexcompare]);
                        if (comp <= 0)
                        {
                            index = indexcompare;
                            break;
                        }
                    }
                    index = index == -1 ? this.Count : index;
                    break;
                }
            }
            return(index);
        }
Esempio n. 23
0
        public static void AddNode(TreeListViewItem TLVI, ref TreeListView sendto)
        {
            var parenttree = new List<TreeListViewItem>();
            TreeListViewItem curr = TLVI;
            while (curr != null)
            {
                parenttree.Add(curr);
                curr = curr.Parent;
            }

            //initial folder

            TreeListViewItem pop = parenttree[parenttree.Count - 1];
            TreeListViewItem createin = treelistviewfuncs.getItemByText(sendto, pop.Text);
            if (createin == null)
            {
                var create = new TreeListViewItem();
                treelistviewfuncs.BaseCopy(pop, ref create);

                sendto.Items.Add(create);
                createin = treelistviewfuncs.getItemByText(sendto, pop.Text);
            }
            parenttree.RemoveAt(parenttree.Count - 1);

            while (parenttree.Count > 0)
            {
                pop = parenttree[parenttree.Count - 1];
                TreeListViewItem pop2 = treelistviewfuncs.getItemByText(createin, pop.Text);
                if (pop2 == null)
                {
                    var create = new TreeListViewItem();
                    treelistviewfuncs.BaseCopy(pop, ref create);

                    createin.Items.Add(create);
                    createin = treelistviewfuncs.getItemByText(createin, pop.Text);
                }
                else
                    createin = pop2;

                parenttree.RemoveAt(parenttree.Count - 1);
            }
        }
        /// <summary>
        /// Gets the index of an item in the collection
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        public int GetIndexOf(TreeListViewItem item)
        {
            if (TreeListView != null)
            {
                if (TreeListView.InvokeRequired)
                {
                    throw(new Exception("Invoke required"));
                }
            }
            int index = -1;

            for (int i = 0; i < this.Count; i++)
            {
                if (this[i] == item)
                {
                    index = i; break;
                }
            }
            return(index);
        }
Esempio n. 25
0
        /// <summary>
        /// 绑定指定行到指定节点
        /// </summary>
        public void BindRow(System.Windows.Forms.TreeListViewItem node, DataRow dr)
        {
            DataTableMapping dtm = GetTableMapping(dr.Table);

            for (int i = 0; i < TreeListView.Columns.Count; i++)
            {
                string nodeHeaderName = TreeListView.Columns[i].Text;
                int    cmIndex        = dtm.ColumnMappings.IndexOf(nodeHeaderName);
                if (cmIndex > -1)
                {
                    DataColumnMapping dcm          = dtm.ColumnMappings[cmIndex];
                    string            dsColumnName = dcm.DataSetColumn;
                    if (dr.Table.Columns.Contains(dsColumnName))
                    {
                        string str = Apq.Convert.ChangeType <string>(dr[dsColumnName], string.Empty);
                        if (i == 0)
                        {
                            node.Text = str;
                        }
                        else
                        {
                            node.SubItems.Add(str);
                        }
                    }
                    else
                    {
                        if (i > 0)
                        {
                            node.SubItems.Add(string.Empty);
                        }
                    }
                }
            }

            // 添加隐藏数据
            foreach (string ColName in _HiddenColNames)
            {
                string str = Apq.Convert.ChangeType <string>(dr[ColName], string.Empty);
                node.SubItems.Add(str);
            }
        }
        /// <summary>
        /// Returns true if this collection contains an item
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        public virtual bool Contains(TreeListViewItem item)
        {
            if (TreeListView != null)
            {
                if (TreeListView.InvokeRequired)
                {
                    throw(new Exception("Invoke required"));
                }
            }
            bool res = false;

            foreach (TreeListViewItem elt in this)
            {
                if (item == elt)
                {
                    res = true;
                    break;
                }
            }
            return(res);
        }
            /// <summary>
            /// Compare two TreeListViewItems
            /// </summary>
            /// <param name="x"></param>
            /// <param name="y"></param>
            /// <returns></returns>
            public int Compare(object x, object y)
            {
                TreeListViewItem a = (TreeListViewItem)x;
                TreeListViewItem b = (TreeListViewItem)y;
                int res            = 1;

                if (Column < a.SubItems.Count && Column < b.SubItems.Count)
                {
                    res = string.CompareOrdinal(a.SubItems[Column].Text.ToUpper(), b.SubItems[Column].Text.ToUpper());
                }
                switch (SortOrder)
                {
                case SortOrder.Ascending:
                    return(res);

                case SortOrder.Descending:
                    return(-res);

                default:
                    return(1);
                }
            }
 /// <summary>
 /// Remove an item from the collection and the TreeListView
 /// </summary>
 /// <param name="item"></param>
 public virtual void Remove(TreeListViewItem item)
 {
     TreeListView treelistview = this.TreeListView;
     if(treelistview != null) treelistview.BeginUpdate();
     RemoveInternal(item);
     if(treelistview != null) treelistview.EndUpdate();
 }
		/// <summary>
		/// Returns true if the specified item is in the collection
		/// </summary>
		/// <param name="item"></param>
		/// <returns></returns>
		public bool Contains(TreeListViewItem item)
		{
			return(base.Contains((ListViewItem) item));
		}
Esempio n. 30
0
 /// <summary>
 /// Creates a new instance of TreeListViewLabelEditEventArgs
 /// </summary>
 /// <param name="item"></param>
 /// <param name="column"></param>
 /// <param name="label"></param>
 public TreeListViewLabelEditEventArgs(TreeListViewItem item, int column, string label)
     : base()
 {
     _item = item; _colindex = column; _label = label;
 }
Esempio n. 31
0
 /// <summary>
 /// Create a new instance of TreeListViewCancelEvent arguments
 /// </summary>
 /// <param name="item"></param>
 /// <param name="action"></param>
 public TreeListViewCancelEventArgs(TreeListViewItem item, TreeListViewAction action)
     : base(item, action)
 {
 }
 /// <summary>
 /// Create a collection within a TreeListViewItem
 /// </summary>
 /// <param name="parent"></param>
 public TreeListViewItemCollection(TreeListViewItem parent)
 {
     _parent = parent;
 }
 private int GetInsertCollectionIndex(TreeListViewItem item)
 {
     if(TreeListView != null)
         if(TreeListView.InvokeRequired)
             throw(new Exception("Invoke required"));
     int index = -1;
     if(!_sortable) index = Count;
     else if(!Contains(item) && !ListViewContains(item))
     {
         switch(SortOrder)
         {
                 // No sortorder -> at the end of the collection
             case System.Windows.Forms.SortOrder.None:
                 index = this.Count;
                 break;
             default:
                 for(int i = 0 ; i < this.Count ; i++)
                 {
                     // Change the index for the compare if the order is descending
                     int indexcompare = i;
                     int comp = Comparer.Compare(item, this[indexcompare]);
                     if(comp <= 0)
                     {
                         index = indexcompare;
                         break;
                     }
                 }
                 index = index == -1 ? this.Count : index;
                 break;
         }
     }
     return(index);
 }
Esempio n. 34
0
 /// <summary>
 /// expand all nodes from this item to the top
 /// </summary>
 /// <param name="TLVI"></param>
 public void Expand(TreeListViewItem TLVI)
 {
     BeginUpdate();
     SelectedItems.Clear();
     TLVI.Selected = true;
     while (TLVI != null)
     {
         TreeListViewCancelEventArgs e = new TreeListViewCancelEventArgs(
         TLVI, TreeListViewAction.Expand);
         RaiseBeforeExpand(e);
         TLVI = TLVI.Parent;
     }
     EndUpdate();
 }
 private int GetInsertTreeListViewIndex(TreeListViewItem item, int collectionindex)
 {
     if(TreeListView == null) return(-1);
     if(TreeListView.InvokeRequired)
         throw(new Exception("Invoke required"));
     if(Owner != null)
         {
             int a = 0;
             a++;
         }
     int index = -1;
     // First level item (no parent)
     if(Owner != null && collectionindex != -1)
     {
         if(collectionindex == 0) index = 0;
         else index =
                  this[collectionindex - 1].LastChildIndexInListView + 1;
     }
     else if(Parent != null && collectionindex != -1)
     {
         if(!Parent.Visible || !Parent.IsExpanded) index = -1;
         else
         {
             if(collectionindex == 0) index = Parent.Index + 1;
             else index =
                      Parent.Items[collectionindex - 1].LastChildIndexInListView + 1;
         }
     }
     return(index);
 }
Esempio n. 36
0
 internal void SetParent(TreeListViewItem parent)
 {
     _parent = parent;
 }
 /// <summary>
 /// Returns true if the specified item is in the collection
 /// </summary>
 /// <param name="item"></param>
 /// <returns></returns>
 public bool Contains(TreeListViewItem item)
 {
     return(base.Contains((ListViewItem)item));
 }
 /// <summary>
 /// Index of an item
 /// </summary>
 /// <param name="item"></param>
 /// <returns></returns>
 public int IndexOf(TreeListViewItem item)
 {
     return(base.IndexOf((ListViewItem)item));
 }
Esempio n. 39
0
        //from file to tree
        public static void DeserializeTreeListView(Form1.IncrementStatusDel incrementStatus, TreeListView TreeListView, string fileName)
        {
            XmlTextReader reader = null;
            try
            {
                // disabling re-drawing of TreeListView till all nodes are added
                TreeListView.BeginUpdate();
                reader = new XmlTextReader(fileName);
                TreeListViewItem parentNode = null;
                while (reader.Read())
                {
                    if (reader.NodeType == XmlNodeType.Element)
                    {
                        if (reader.Name == XmlNodeTag)
                        {
                            TreeListViewItem newNode = new TreeListViewItem();
                            bool isEmptyElement = reader.IsEmptyElement;

                            // loading node attributes
                            int attributeCount = reader.AttributeCount;
                            if (attributeCount > 0)
                            {
                                for (int i = 0; i < attributeCount; i++)
                                {
                                    reader.MoveToAttribute(i);
                                    SetAttributeValue(newNode, reader.Name, reader.Value);
                                }
                            }
                            newNode.SubItems.Add(newNode.nodeSize.getSizeString());
                            newNode.SubItems.Add(newNode.fullPath);
                            newNode.Name = newNode.fullPath;

                            incrementStatus(true);

                            // add new node to Parent Node or TreeListView
                            if (parentNode != null)
                                parentNode.Items.Add(newNode);
                            else
                                TreeListView.Items.Add(newNode);

                            // making current node 'ParentNode' if its not empty
                            if (!isEmptyElement)
                            {
                                parentNode = newNode;
                            }
                        }
                    }
                    // moving up to in TreeListView if end tag is encountered
                    else if (reader.NodeType == XmlNodeType.EndElement)
                    {
                        if (reader.Name == XmlNodeTag)
                        {
                            parentNode = parentNode.Parent;
                        }
                    }
                }
            }
            finally
            {
                // enabling redrawing of TreeListView after all nodes are added
                TreeListView.EndUpdate();
                reader.Close();
            }
        }
Esempio n. 40
0
        private static void SetAttributeValue(TreeListViewItem node,
					 string propertyName, string value)
        {
            if (propertyName == XmlNodeFullPath)
            {
                node.fullPath = value;
            }
            else if (propertyName == XmlNodeSizeAtt)
            {
                node.nodeSize.kb = long.Parse(value);
            }

            else if (propertyName == XmlNodeIsFolderAtt)
            {
                node.isfolder = bool.Parse(value);
            }
            else if (propertyName == XmlNodeRelativePath)
            {
                node.Text = value;
            }
            else if (propertyName == XmlNodeRating)
            {
                node.rating = int.Parse(value);
            }
        }
 /// <summary>
 /// Transforms the collection to an array
 /// </summary>
 public TreeListViewItem[] ToArray()
 {
     if(TreeListView != null)
         if(TreeListView.InvokeRequired)
             throw(new Exception("Invoke required"));
     int size = this.Count;
     TreeListViewItem[] eltsArray = new TreeListViewItem[size];
     for(int i = 0 ; i < size ; i++)
         eltsArray[i] = this[i];
     return(eltsArray);
 }
 internal void RemoveInternal(TreeListViewItem item)
 {
     if(TreeListView != null)
         if(TreeListView.InvokeRequired)
             throw(new Exception("Invoke required"));
     int index = GetIndexOf(item);
     if(index == -1) return;
     RemoveAtInternal(index);
 }
Esempio n. 43
0
        /// <summary>
        /// WndProc
        /// </summary>
        /// <param name="m"></param>
        protected override void WndProc(ref System.Windows.Forms.Message m)
        {
            #region View messages
            if(false)
            {
                string val;
                val = Enum.GetName(typeof(APIsEnums.ListViewMessages), (APIsEnums.ListViewMessages) m.Msg);
                if(val != "" && val != null)
                    Debug.WriteLine(val);
                else
                {
                    val = Enum.GetName(typeof(APIsEnums.WindowMessages), (APIsEnums.WindowMessages) m.Msg);
                    if(val != "" && val != null)
                    Debug.WriteLine(val);
                }
                if(val != "" && val != null)
                    Debug.WriteLine(m.Msg.ToString());
                if(val == "LBUTTONDOWN")
                {
                    int a= 0;
                    a++;
                }
            }
            #endregion

            TreeListViewItem item = null; Rectangle rec;
            switch((APIsEnums.WindowMessages) m.Msg)
            {
                #region NOTIFY
                case APIsEnums.WindowMessages.NOTIFY:
                case (APIsEnums.WindowMessages) APIsEnums.ReflectedMessages.NOTIFY:
                    APIsStructs.NMHDR nmhdr = (APIsStructs.NMHDR) m.GetLParam(typeof(APIsStructs.NMHDR));
                    APIsStructs.NMHEADER nmheader =(APIsStructs.NMHEADER) m.GetLParam(typeof(APIsStructs.NMHEADER));
                    switch((APIsEnums.ListViewNotifications) nmhdr.code)
                    {
                        #region APIsEnums.ListViewNotifications.MARQUEEBEGIN
                        case APIsEnums.ListViewNotifications.MARQUEEBEGIN:
                            if((MouseButtons & MouseButtons.Left) != MouseButtons.Left)
                                m.Result = (IntPtr)1;
                            else
                                _hasMarquee = true;
                            break;
                        #endregion
                        #region APIsEnums.ListViewNotifications.ITEMCHANGING
                        case APIsEnums.ListViewNotifications.ITEMCHANGING:
                            APIsStructs.NMLISTVIEW nmlistview = (APIsStructs.NMLISTVIEW) m.GetLParam(typeof(APIsStructs.NMLISTVIEW));
                            if(nmlistview.iItem < 0) break;
                            if((item = GetTreeListViewItemFromIndex(nmlistview.iItem)) == null) break;
                            bool cancel = false;
                            if(nmlistview.Select)
                            {
                                if(_selectionMark == null) _selectionMark = item;
                                else if(!_selectionMark.Visible) _selectionMark = item;
                                if(HasMarquee) item.Focused = true;
                            }
                            else if(nmlistview.UnSelect && HasMarquee)
                            {
                                if(item.NextVisibleItem != null)
                                    if(item.NextVisibleItem.Selected)
                                        item.NextVisibleItem.Focused = true;
                                if(item.PrevVisibleItem != null)
                                    if(item.PrevVisibleItem.Selected)
                                        item.PrevVisibleItem.Focused = true;
                            }
                            #region Select after dbl click
                            // Disable the selection after a double click (normaly, if the control scrolls after
                            // a collapse, the new item under the cursor is automatically selected...)
                            if(_dblclicktime.AddMilliseconds(500).CompareTo(DateTime.Now) > 0 &&
                                (nmlistview.Select || nmlistview.Focus) &&
                                FocusedItem != item)
                                cancel = true;
                            #endregion
                            #region Wrong Level Select
                            if(((APIsEnums.ListViewItemStates)nmlistview.uNewState & APIsEnums.ListViewItemStates.SELECTED) == APIsEnums.ListViewItemStates.SELECTED &&
                                MultiSelect)
                                if(SelectedIndices.Count > 0)
                                    if(GetTreeListViewItemFromIndex(nmlistview.iItem).Parent != SelectedItems[0].Parent)
                                        cancel = true;
                            #endregion
                            #region Check during selection
                            // Disable check boxes check when :
                            // - the Marquee selection tool is being used
                            // - the Ctrl or Shift keys are down
                            bool state = (nmlistview.uChanged & (uint)APIsEnums.ListViewItemFlags.STATE) == (uint)APIsEnums.ListViewItemFlags.STATE;
                            bool ctrlKeyDown = (ModifierKeys & Keys.Control) == Keys.Control;
                            bool shiftKeyDown = (ModifierKeys & Keys.Shift) == Keys.Shift;
                            if((nmlistview.Check || nmlistview.UnCheck) &&
                                (HasMarquee || ctrlKeyDown || shiftKeyDown))
                            {
            //									MessageBox.Show(this,
            //										"uChanged = " + nmlistview->uChanged.ToString() + "\n\n" +
            //										"uOld = " + nmlistview->uOldState.ToString() + "\n" +
            //										"uNew = " + nmlistview->uChanged.ToString() + "\n\n" +
            //										"OldCheck : " + (oldCheck ? "true" : "false") + "\n" +
            //										"NewCheck : " + (newCheck ? "true" : "false"));
                                cancel = true;
                            }
                            #endregion
                            if(cancel)
                            {
                                m.Result = (IntPtr)1;
                                return;
                            }
                            break;
                        #endregion

                        #region APIsEnums.ListViewNotifications.BEGINLABELEDIT
                        case APIsEnums.ListViewNotifications.BEGINLABELEDIT:
                            // Cancel label edit if the message is sent just after a double click
                            if(_lastdoubleclick.AddMilliseconds(450) > DateTime.Now)
                            {
                                Message canceledit = Message.Create(Handle, (int) APIsEnums.ListViewMessages.CANCELEDITLABEL, IntPtr.Zero, IntPtr.Zero);
                                WndProc(ref canceledit);
                                m.Result = (IntPtr) 1;
                                return;
                            }
                            item = _lastitemclicked.Item;
                            item.EnsureVisible();
                            // Add subitems if needed
                            while(item.SubItems.Count-1 < _lastitemclicked.ColumnIndex) item.SubItems.Add("");
                            TreeListViewBeforeLabelEditEventArgs beforeed = new TreeListViewBeforeLabelEditEventArgs(
                                FocusedItem, _lastitemclicked.ColumnIndex, item.SubItems[_lastitemclicked.ColumnIndex].Text);
                            OnBeforeLabelEdit(beforeed);
                            if(beforeed.Cancel)
                            {
                                Message canceledit = Message.Create(Handle, (int) APIsEnums.ListViewMessages.CANCELEDITLABEL, IntPtr.Zero, IntPtr.Zero);
                                WndProc(ref canceledit);
                                m.Result = (IntPtr) 1;
                                return;
                            }
                            _inedit = true;
                            // Get edit handle
                            Message mess = Message.Create(Handle, (int)APIsEnums.ListViewMessages.GETEDITCONTROL, IntPtr.Zero, IntPtr.Zero);
                            WndProc(ref mess);
                            IntPtr edithandle = mess.Result;
                            _customedit = new CustomEdit(edithandle, this, beforeed.Editor);
                            _editeditem = new EditItemInformations(
                                FocusedItem, beforeed.ColumnIndex, FocusedItem.SubItems[beforeed.ColumnIndex].Text);
                            m.Result = IntPtr.Zero;
                            return;
                        #endregion
                        #region APIsEnums.ListViewNotifications.ENDLABELEDIT
                        case APIsEnums.ListViewNotifications.ENDLABELEDIT:
                            if(_customedit != null)
                                _customedit.HideEditControl();
                            _customedit = null;
                            _inedit = false;
                            _editeditem = new EditItemInformations();
                            m.Result = IntPtr.Zero;
                            return;
                        #endregion

                        #region CUSTOMDRAW
                        case (APIsEnums.ListViewNotifications) APIsEnums.NotificationMessages.CUSTOMDRAW:
                            base.WndProc(ref m);
                            CustomDraw(ref m);
                            return;
                        #endregion

                        #region BEGINSCROLL
                        case APIsEnums.ListViewNotifications.BEGINSCROLL:
                            _updating = true;
                            break;
                        #endregion
                        #region ENDSCROLL
                        case APIsEnums.ListViewNotifications.ENDSCROLL:
                            _updating = false;
                            // Disable display bug with vertical lines (slow...)
            //							if(ShowPlusMinus)
            //							{
            //								DrawPlusMinusItemsLines();
            //								DrawPlusMinusItems();
            //							}
                            break;
                        #endregion

                        #region APIsEnums.HeaderControlNotifications.BEGINDRAG
                        case (APIsEnums.ListViewNotifications) APIsEnums.HeaderControlNotifications.BEGINDRAG:
                            nmheader =(APIsStructs.NMHEADER) m.GetLParam(typeof(APIsStructs.NMHEADER));
                            if(nmheader.iItem == 0)
                            {
                                m.Result = (IntPtr)1;
                                return;
                            }
                            break;
                        #endregion
                        #region APIsEnums.HeaderControlNotifications.ENDDRAG
                        case (APIsEnums.ListViewNotifications) APIsEnums.HeaderControlNotifications.ENDDRAG:
                            nmheader =(APIsStructs.NMHEADER) m.GetLParam(typeof(APIsStructs.NMHEADER));
                            // Get mouse position in header coordinates
                            IntPtr headerHandle = (IntPtr) APIsUser32.SendMessage(Handle, (int) APIsEnums.ListViewMessages.GETHEADER, IntPtr.Zero, IntPtr.Zero);
                            APIsStructs.POINTAPI pointapi = new APIsStructs.POINTAPI(MousePosition);
                            APIsUser32.ScreenToClient(headerHandle, ref pointapi);
                            // HeaderItem Rect
                            APIsStructs.RECT headerItemRect = new APIsStructs.RECT();
                            APIsUser32.SendMessage(headerHandle, (int)APIsEnums.HeaderControlMessages.GETITEMRECT, 0, ref headerItemRect);
                            int headerItemWidth = headerItemRect.right - headerItemRect.left;
                            // Cancel the drag operation if the first column is moved
                            // or destination is the first column
                            if(pointapi.x <= headerItemRect.left + headerItemWidth / 2 ||
                                nmheader.iItem == 0)
                            {
                                m.Result = (IntPtr)1;
                                return;
                            }
                            break;
                        #endregion
                        #region APIsEnums.HeaderControlNotifications.TRACK / ENDTRACK
            //						case (APIsEnums.ListViewNotifications)APIsEnums.HeaderControlNotifications.TRACK:
                        case (APIsEnums.ListViewNotifications)APIsEnums.HeaderControlNotifications.ENDTRACK:
                            Invalidate();
                            break;
                        #endregion
                    }
                    break;
                #endregion

                #region LBUTTONDOWN
                    // Cancel the click on checkboxes if the item is not "checkable"
                    case APIsEnums.WindowMessages.LBUTTONDOWN:
                        if(Columns.Count == 0) break;
                        // Set the clickeditem and column
                        int colclicked = GetColumnAt(MousePosition);
                        if(colclicked == -1) colclicked = 0;
                        item = GetItemAtFullRow(PointToClient(MousePosition));
                        _lastitemclicked = new EditItemInformations(item, colclicked, "");
                        if(_selectionMark == null || !_selectionMark.Visible) _selectionMark = item;
                        if(((APIsEnums.KeyStatesMasks)(int)m.WParam & APIsEnums.KeyStatesMasks.SHIFT) != APIsEnums.KeyStatesMasks.SHIFT &&
                            !(((APIsEnums.KeyStatesMasks)(int)m.WParam & APIsEnums.KeyStatesMasks.CONTROL) == APIsEnums.KeyStatesMasks.CONTROL &&
                            item.Parent != _selectionMark.Parent))
                            _selectionMark = item;
                        // Get where the mouse has clicked
                        APIsStructs.LVHITTESTINFO lvhittest = new APIsStructs.LVHITTESTINFO();
                        lvhittest.pt = new APIsStructs.POINTAPI(PointToClient(MousePosition));
                        APIsUser32.SendMessage(Handle, (Int32) APIsEnums.ListViewMessages.HITTEST, 0, ref lvhittest);
                        if(item == null) break;
                        // Plus / Minus click
                        if(item.GetBounds(TreeListViewItemBoundsPortion.PlusMinus).Contains(PointToClient(MousePosition)) &&
                            ShowPlusMinus && item.Items.Count > 0 &&
                            Columns[0].Width > (item.Level+1)*SystemInformation.SmallIconSize.Width)
                        {
                            Focus();
                            if(item.IsExpanded) item.Collapse();
                            else item.Expand();
                            OnMouseDown(new MouseEventArgs(MouseButtons.Left, 1, PointToClient(MousePosition).X, PointToClient(MousePosition).Y, 0));
                            return;
                        }
                        // Cancel mouse click if multiselection on a wrong item
                        if(SelectedIndices.Count > 0 &&
                            (((APIsEnums.KeyStatesMasks)(int)m.WParam & APIsEnums.KeyStatesMasks.SHIFT) == APIsEnums.KeyStatesMasks.SHIFT ||
                            ((APIsEnums.KeyStatesMasks)(int)m.WParam & APIsEnums.KeyStatesMasks.CONTROL) == APIsEnums.KeyStatesMasks.CONTROL) &&
                            MultiSelect)
                        {
                            if(_selectionMark.Parent == item.Parent &&
                                ((APIsEnums.KeyStatesMasks)(int)m.WParam & APIsEnums.KeyStatesMasks.SHIFT) == APIsEnums.KeyStatesMasks.SHIFT)
                            {
                                _updating = true;
                                SetSelectedItemsRange(item, _selectionMark);
                                // Prevent all item at the wrong level of being selected
                                m.WParam = (IntPtr) APIsEnums.KeyStatesMasks.CONTROL;
                                base.WndProc(ref m);
                                item.Selected = true;
                                _updating = false;
                                DrawSelectedItemsFocusCues();
                                return;
                            }
                        }
                        break;
                #endregion
                #region LBUTTONDBLCLK
                    // Disable this notification to remove the auto-check when
                    // the user double-click on an item and append the expand / collapse function
                case APIsEnums.WindowMessages.LBUTTONDBLCLK:
                    _lastdoubleclick = DateTime.Now;
                    if(FocusedItem != null)
                    {
                        item = FocusedItem;
                        bool doExpColl = false;
                        switch(ExpandMethod)
                        {
                            case TreeListViewExpandMethod.IconDbleClick:
                                rec = item.GetBounds(ItemBoundsPortion.Icon);
                                if(rec.Contains(PointToClient(MousePosition))) doExpColl = true;
                                break;
                            case TreeListViewExpandMethod.ItemOnlyDbleClick:
                                rec = item.GetBounds(ItemBoundsPortion.ItemOnly);
                                if(rec.Contains(PointToClient(MousePosition))) doExpColl = true;
                                break;
                            case TreeListViewExpandMethod.EntireItemDbleClick:
                                rec = item.GetBounds(ItemBoundsPortion.Entire);
                                if(rec.Contains(PointToClient(MousePosition))) doExpColl = true;
                                break;
                            default:
                                break;
                        }
                        if(doExpColl)
                        {
                            _dblclicktime = DateTime.Now;
                            Cursor = Cursors.WaitCursor;
                            BeginUpdate();
                            if(item.IsExpanded) item.Collapse();
                            else item.Expand();
                            EndUpdate();
                            Cursor = Cursors.Default;
                        }
                    }
                    OnDoubleClick(new EventArgs());
                    return;
                #endregion
                #region MOUSEMOVE
                case APIsEnums.WindowMessages.MOUSEMOVE:
                    if((MouseButtons & MouseButtons.Left) != MouseButtons.Left && HasMarquee)
                        _hasMarquee = false;
                    break;
                #endregion
                #region UNICHAR, CHAR, KEYDOWN
                case APIsEnums.WindowMessages.UNICHAR:
                case APIsEnums.WindowMessages.CHAR:
                    CharPressed((char) m.WParam);
                    return;
                case APIsEnums.WindowMessages.KEYDOWN:
                    OnKeyDown(new KeyEventArgs((Keys)(int) m.WParam));
                    return;
                #endregion
                #region PAINT
                case APIsEnums.WindowMessages.PAINT:
                    if(InEdit && EditedItem.Item != null)
                    {
                        APIsStructs.RECT rect = new APIsStructs.RECT(
                            EditedItem.Item.GetBounds(ItemBoundsPortion.Entire));
                        APIsUser32.ValidateRect(Handle, ref rect);
                    }
                    base.WndProc(ref m);
                    DrawIntermediateStateItems();
                    DrawSelectedItemsFocusCues();
                    return;
                #endregion
                #region VSCROLL, HSCROLL, ENSUREVISIBLE
                case APIsEnums.WindowMessages.VSCROLL:
                case APIsEnums.WindowMessages.HSCROLL:
                case (APIsEnums.WindowMessages)APIsEnums.ListViewMessages.ENSUREVISIBLE:
                    if(!Scrollable)
                    {
                        m.Result = (IntPtr)0;
                        return;
                    }
                    break;
                #endregion
            }
            base.WndProc(ref m);
        }
 /// <summary>
 /// Create a collection within a TreeListViewItem
 /// </summary>
 /// <param name="parent"></param>
 public TreeListViewItemCollection(TreeListViewItem parent)
 {
     _parent = parent;
 }
Esempio n. 45
0
 private void SetSelectedItemsRange(TreeListViewItem item1, TreeListViewItem item2)
 {
     if(InvokeRequired)
             throw(new Exception("Invoke required"));
         if(item1 == null || item2 == null) return;
         if(!item1.Visible || !item2.Visible) return;
         if(item1.Parent != item2.Parent) return;
         TreeListViewItemCollection items = item1.Container;
         int index1 = items.GetIndexOf(item1);
         int index2 = items.GetIndexOf(item2);
         ListViewItem[] selItems = new ListViewItem[base.SelectedItems.Count];
         base.SelectedItems.CopyTo(selItems, 0);
         foreach(ListViewItem selItem in selItems)
         {
             int selItemIndex = items.GetIndexOf((TreeListViewItem)selItem);
             if(selItemIndex < Math.Min(index1, index2) ||
                 selItemIndex > Math.Max(index1, index2))
                 selItem.Selected = false;
         }
         for(int i = Math.Min(index1, index2); i <= Math.Max(index1, index2); i++)
             if(!items[i].Selected) items[i].Selected = true;
 }
 private bool ListViewContains(TreeListViewItem item)
 {
     if(TreeListView == null) return(false);
     if(TreeListView.InvokeRequired)
         throw(new Exception("Invoke required"));
     ListView listview = (ListView) TreeListView;
     ListViewItem listviewitem = (ListViewItem) item;
     try{
         foreach(ListViewItem temp in listview.Items)
             if(temp == listviewitem) return(true);}
     catch{}
     return(false);
 }
Esempio n. 47
0
        internal void ExpandInternal()
        {
            if (IsInATreeListView)
            {
                if (ListView.InvokeRequired)
                {
                    throw(new Exception("Invoke Required"));
                }
            }

            TreeListViewItem selItem = null;

            if (TreeListView != null)
            {
                selItem = TreeListView.FocusedItem;
            }

            // Must set ListView.checkDirection to CheckDirection.None.
            // Forbid recursively checking.
            CheckDirection oldDirection = CheckDirection.All;

            if (ListView != null)
            {
                oldDirection             = ListView._checkDirection;
                ListView._checkDirection = CheckDirection.None;
            }

            // The item wasn't expanded -> raise an event
            if (Visible && !_isexpanded && ListView != null)
            {
                TreeListViewCancelEventArgs e = new TreeListViewCancelEventArgs(
                    this, TreeListViewAction.Expand);
                ListView.RaiseBeforeExpand(e);
                if (e.Cancel)
                {
                    return;
                }
            }

            if (Visible)
            {
                for (int i = Items.Count - 1; i >= 0; i--)
                {
                    TreeListViewItem item = this.Items[i];
                    if (!item.Visible)
                    {
                        ListView LView = this.ListView;
                        LView.Items.Insert(
                            this.Index + 1, item);
                        item.SetIndentation();
                    }
                    if (item.IsExpanded)
                    {
                        item.Expand();
                    }
                }
            }
            // The item wasn't expanded -> raise an event
            if (Visible && !_isexpanded && IsInATreeListView)
            {
                this._isexpanded = true;
                TreeListViewEventArgs e = new TreeListViewEventArgs(
                    this, TreeListViewAction.Expand);
                ListView.RaiseAfterExpand(e);
                if (AfterExpand != null)
                {
                    AfterExpand(this);
                }
            }
            this._isexpanded = true;

            // Reset ListView.checkDirection
            if (IsInATreeListView)
            {
                ListView._checkDirection = oldDirection;
            }
            if (TreeListView != null && selItem != null)
            {
                if (selItem.Visible)
                {
                    selItem.Focused = true;
                }
            }
        }
Esempio n. 48
0
 /// <summary>
 /// Raises the KeyDown event
 /// </summary>
 /// <param name="e"></param>
 protected override void OnKeyDown(KeyEventArgs e)
 {
     Keys key = e.KeyCode;
         if(FocusedItem == null)
         {
             if(base.Items.Count > 0 &&
                 (key == Keys.Down || key == Keys.Up || key == Keys.Left || key == Keys.Right))
             {
                 base.Items[0].Selected = true;
                 base.Items[0].Focused = true;
                 base.Items[0].EnsureVisible();
             }
             base.OnKeyDown(e);
             return;
         }
         TreeListViewItem item = FocusedItem;
         switch(key)
         {
             case Keys.Down:
                 if(item.NextVisibleItem != null)
                 {
                     TreeListViewItem nextitem = item.NextVisibleItem;
                     if((Control.ModifierKeys & Keys.Shift) == Keys.Shift &&
                         MultiSelect)
                     {
                         if(item.Parent != nextitem.Parent && item.Selected)
                         {
                             while((nextitem = nextitem.NextVisibleItem) != null)
                                 if(nextitem.Parent == item.Parent)
                                     break;
                         }
                         if(nextitem != null)
                             SetSelectedItemsRange(_selectionMark, nextitem);
                         else
                             nextitem = item.NextVisibleItem;
                     }
                     else if((Control.ModifierKeys & Keys.Control) != Keys.Control)
                     {
                         SetSelectedItemsRange(nextitem, nextitem);
                         _selectionMark = nextitem;
                     }
                     nextitem.Focused = true;
                     nextitem.EnsureVisible();
                 }
                 break;
             case Keys.Up:
                 if(item.PrevVisibleItem != null)
                 {
                     TreeListViewItem previtem = item.PrevVisibleItem;
                     if((Control.ModifierKeys & Keys.Shift) == Keys.Shift &&
                         MultiSelect)
                     {
                         if(item.Parent != previtem.Parent && item.Selected)
                         {
                             while((previtem = previtem.PrevVisibleItem) != null)
                                 if(previtem.Parent == item.Parent)
                                     break;
                         }
                         if(previtem != null)
                             SetSelectedItemsRange(_selectionMark, previtem);
                         else
                             previtem = item.PrevVisibleItem;
                     }
                     else if((Control.ModifierKeys & Keys.Control) != Keys.Control)
                     {
                         SetSelectedItemsRange(previtem, previtem);
                         _selectionMark = previtem;
                     }
                     previtem.Focused = true;
                     previtem.EnsureVisible();
                 }
                 break;
             case Keys.Enter:
                 base.SelectedItems.Clear();
                 if(item.IsExpanded) item.Collapse();
                 else item.Expand();
                 item.Selected = true;
                 item.EnsureVisible();
                 break;
             case Keys.Left:
                 if(item.IsExpanded)
                 {
                     base.SelectedItems.Clear();
                     item.Selected = true;
                     item.Collapse();
                     item.EnsureVisible();
                 }
                 else if(item.Parent != null)
                 {
                     base.SelectedItems.Clear();
                     item.Parent.Selected = true;
                     item.Parent.Focused = true;
                     item.Parent.EnsureVisible();
                 }
                 break;
             case Keys.Right:
                 if(item.Items.Count == 0) break;
                 if(!item.IsExpanded)
                 {
                     base.SelectedItems.Clear();
                     item.Selected = true;
                     item.Expand();
                     item.EnsureVisible();
                 }
                 else
                 {
                     base.SelectedItems.Clear();
                     item.Items[item.Items.Count-1].Selected = true;
                     item.Items[item.Items.Count-1].Focused = true;
                     item.Items[item.Items.Count-1].EnsureVisible();
                 }
                 break;
             case Keys.Space:
                 if(base.CheckBoxes) item.Checked = !item.Checked;
                 break;
         }
         base.OnKeyDown(e);
 }
Esempio n. 49
0
        internal void CollapseInternal()
        {
            if (IsInATreeListView)
            {
                if (ListView.InvokeRequired)
                {
                    throw(new Exception("Invoke Required"));
                }
            }
            TreeListViewItem selItem = null;

            if (TreeListView != null)
            {
                selItem = TreeListView.FocusedItem;
            }
            // The item was expanded -> raise an event
            if (Visible && _isexpanded && ListView != null)
            {
                TreeListViewCancelEventArgs e = new TreeListViewCancelEventArgs(
                    this, TreeListViewAction.Collapse);
                ListView.RaiseBeforeCollapse(e);
                if (e.Cancel)
                {
                    return;
                }
            }

            // Collapse
            if (this.Visible)
            {
                foreach (TreeListViewItem item in Items)
                {
                    item.Hide();
                }
            }

            // The item was expanded -> raise an event
            if (Visible && _isexpanded && IsInATreeListView)
            {
                this._isexpanded = false;
                TreeListViewEventArgs e = new TreeListViewEventArgs(
                    this, TreeListViewAction.Collapse);
                ListView.RaiseAfterCollapse(e);
                if (AfterCollapse != null)
                {
                    AfterCollapse(this);
                }
            }
            this._isexpanded = false;
            if (IsInATreeListView && selItem != null)
            {
                if (selItem.Visible)
                {
                    selItem.Focused = true;
                }
                else
                {
                    ListView listview = (ListView)TreeListView;
                    listview.SelectedItems.Clear();
                    TreeListViewItem[] items = selItem.ParentsInHierarch;
                    for (int i = items.Length - 1; i >= 0; i--)
                    {
                        if (items[i].Visible)
                        {
                            items[i].Focused = true;
                            break;
                        }
                    }
                }
            }
        }
Esempio n. 50
0
 /// <summary>
 /// Creates a new instance of EditItemInformations
 /// </summary>
 /// <param name="item"></param>
 /// <param name="column"></param>
 /// <param name="label"></param>
 public EditItemInformations(TreeListViewItem item, int column, string label)
 {
     _item = item; _colindex = column; _label = label; CreationTime = DateTime.Now;
 }
 /// <summary>
 /// Adds an item in the collection and in the TreeListView
 /// </summary>
 /// <param name="item"></param>
 /// <returns>Index of the item in the collection</returns>
 public virtual int Add(TreeListViewItem item)
 {
     if(TreeListView != null)
         if(TreeListView.InvokeRequired)
             throw(new Exception("Invoke required"));
     // Do not add the item if the collection owns a TreeListView recursively
     // and the item already owns a TreeListView
     if(TreeListView != null && item.ListView != null)
         throw(new Exception("The Item is already in a TreeListView"));
     int index = GetInsertCollectionIndex(item);
     if(index == -1) return(-1);
     if(Parent != null) item.SetParent(Parent);
     item.Items.Comparer = this.Comparer;
     int treelistviewindex = GetInsertTreeListViewIndex(item, index);
     // Insert in the ListView
     if(treelistviewindex > -1)
     {
         ListView listview = (ListView) TreeListView;
         listview.Items.Insert(treelistviewindex, (ListViewItem) item);
         if(item.IsExpanded) item.Expand();
         item.SetIndentation();
     }
     // Insert in this collection
     if(index > -1) List.Insert(index, item);
     if(index > -1) OnItemAdded(new TreeListViewEventArgs(item, TreeListViewAction.Unknown));
     if(Count == 1 && TreeListView != null && Parent != null)
         if(Parent.Visible) Parent.Redraw();
     return(index);
 }
Esempio n. 52
0
 /// <summary>
 /// Creates a new instance of TreeListViewBeforeLabelEditEventArgs
 /// </summary>
 /// <param name="item"></param>
 /// <param name="column"></param>
 /// <param name="label"></param>
 public TreeListViewBeforeLabelEditEventArgs(TreeListViewItem item, int column, string label)
     : base(item, column, label)
 {
 }
 /// <summary>
 /// Adds an item in the collection and in the TreeListView
 /// </summary>
 /// <param name="value"></param>
 /// <param name="imageindex"></param>
 /// <returns></returns>
 public virtual TreeListViewItem Add(string value, int imageindex)
 {
     TreeListViewItem item = new TreeListViewItem(value, imageindex);
     Add(item);
     return(item);
 }
Esempio n. 54
0
 /// <summary>
 /// Create a new instance of TreeListViewEvent arguments
 /// </summary>
 /// <param name="item"></param>
 /// <param name="action"></param>
 public TreeListViewEventArgs(TreeListViewItem item, TreeListViewAction action)
 {
     _item = item;
     _action = action;
 }
 /// <summary>
 /// Adds an item in the collection and in the TreeListView
 /// </summary>
 /// <param name="value"></param>
 /// <returns></returns>
 public virtual TreeListViewItem Add(string value)
 {
     TreeListViewItem item = new TreeListViewItem(value);
     Add(item);
     return(item);
 }
Esempio n. 56
0
 /// <summary>
 /// Get SubItem rectangle
 /// </summary>
 /// <param name="item"></param>
 /// <param name="column"></param>
 /// <returns></returns>
 public Rectangle GetSubItemRect(TreeListViewItem item, int column)
 {
     ListViewItem lvitem = (ListViewItem) item;
     return GetSubItemRect(lvitem.Index, column);
 }
 /// <summary>
 /// Returns true if this collection contains an item
 /// </summary>
 /// <param name="item"></param>
 /// <returns></returns>
 public virtual bool Contains(TreeListViewItem item)
 {
     if(TreeListView != null)
         if(TreeListView.InvokeRequired)
             throw(new Exception("Invoke required"));
     bool res = false;
     foreach(TreeListViewItem elt in this)
         if(item == elt)
         {
             res = true;
             break;
         }
     return(res);
 }
		/// <summary>
		/// Index of an item
		/// </summary>
		/// <param name="item"></param>
		/// <returns></returns>
		public int IndexOf(TreeListViewItem item)
		{
			return(base.IndexOf((ListViewItem) item));
		}
 /// <summary>
 /// Gets the index of an item in the collection
 /// </summary>
 /// <param name="item"></param>
 /// <returns></returns>
 public int GetIndexOf(TreeListViewItem item)
 {
     if(TreeListView != null)
         if(TreeListView.InvokeRequired)
             throw(new Exception("Invoke required"));
     int index = -1;
     for(int i = 0 ; i < this.Count ; i++)
         if(this[i] == item) {index = i; break;}
     return(index);
 }