Example #1
0
        /// <summary>
        /// Construct a ListBox instance from the given template.
        /// </summary>
        /// <param name="template"></param>
        public TreeView(TreeViewTemplate template)
            : base(template)
        {
            _items = template.Items;
            Title  = template.Title ?? "";

            CurrentSelected = -1;
            OwnerDraw       = template.OwnerDraw;

            if (this.Size.Width < 3 || this.Size.Height < 3)
            {
                template.HasFrameBorder = false;
            }

            HasFrame             = template.HasFrameBorder;
            _useSmallVersion     = template.FrameTitle;
            HilightWhenMouseOver = template.HilightWhenMouseOver;
            CanHaveKeyboardFocus = template.CanHaveKeyboardFocus;

            LabelAlignment  = template.LabelAlignment;
            TitleAlignment  = template.TitleAlignment;
            CurrentSelected = template.InitialSelectedIndex;

            _mouseOverIndex = -1;

//			Queue<TreeNode> nodesToProcess = new Queue<TreeNode>();

            _nodeCount = 0;

            foreach (var node in _items)
            {
                NavigateNodes(node, n => _nodeCount++);
            }

//			foreach (var node in Items)
//				nodesToProcess.Enqueue(node);
//
//			while (nodesToProcess.Count > 0) {
//				var treeNode = nodesToProcess.Dequeue();
//
//				if (treeNode.HasChildren)
//					foreach (var node in treeNode.Nodes)
//						nodesToProcess.Enqueue(node);
//
//				nodeCount++;
//			}

            _currNumberOfItemsDisplay = _nodeCount;

            CalcMetrics(template);
        }
Example #2
0
        private void CalcMetrics(TreeViewTemplate template)
        {
            int numItems    = _nodeCount;
            int expandTitle = 0;

            int delta = Size.Height - numItems - 1;

            if (template.HasFrameBorder)
            {
                if (template.FrameTitle)
                {
                    delta -= 1;
                }
                else
                {
                    delta -= 3;
                }
            }

            _numberItemsDisplayed = _nodeCount;
            if (delta < 0)
            {
                _numberItemsDisplayed += delta;
            }
            else if (delta > 0)
            {
                expandTitle = delta;
            }

            int titleWidth = Size.Width;

            int titleHeight = 1 + expandTitle;

            if (Title != "")
            {
                if (template.HasFrameBorder)
                {
                    _titleRect = new Rectangle(Point.One,
                                               new Size(titleWidth - 2, titleHeight));
                }
                else
                {
                    _titleRect = new Rectangle(Point.Origin,
                                               new Size(titleWidth, titleHeight));
                }
            }

            int itemsWidth  = Size.Width;
            int itemsHeight = _numberItemsDisplayed;

            if (template.HasFrameBorder)
            {
                if (template.FrameTitle)
                {
                    _itemsRect = new Rectangle(Point.One, new Size(itemsWidth - 2, itemsHeight));
                }
                else
                {
                    _itemsRect = new Rectangle(_titleRect.BottomLeft.Shift(0, 1), new Size(itemsWidth - 2, itemsHeight));
                }
            }
            else
            {
                _itemsRect = new Rectangle(_titleRect.BottomLeft,
                                           new Size(itemsWidth, itemsHeight));
            }
        }