Пример #1
0
        /// <summary>
        /// Updates the rendering state for the specified \a item using the specified
        /// \a index as the data source.
        /// </summary>
        /// <param name="item"></param>
        /// <param name="index"></param>
        /// <param name="maxWidth"></param>
        /// <param name="totalHeight"></param>
        private void UpdateItem(ListViewItemRenderingState item, ModelIndex index, ref float maxWidth, ref float totalHeight)
        {
            var text           = d_itemModel.GetData(index);
            var isSelected     = IsIndexSelected(index);
            var initialColours = isSelected ? _selectionTextColourRect : d_textColourRect;
            var renderedString = GetRenderedStringParser().Parse(text, GetFont(), initialColours);

            item.d_string = renderedString;
            item.d_index  = index;
            item.d_text   = text;
            item.d_icon   = d_itemModel.GetData(index, ItemDataRole.IDR_Icon);

            var iconSize = Sizef.Zero;

            if (!String.IsNullOrEmpty(item.d_icon))
            {
                iconSize = ImageManager.GetSingleton().Get(item.d_icon).GetRenderedSize();
            }

            var textSize = new Sizef(renderedString.GetHorizontalExtent(this), renderedString.GetVerticalExtent(this));

            item.d_size = new Sizef(iconSize.Width + textSize.Width, Math.Max(iconSize.Height, textSize.Height));

            maxWidth = Math.Max(item.d_size.Width, maxWidth);

            totalHeight += item.d_size.Height;

            item.d_isSelected = isSelected;//IsIndexSelected(index);
        }
Пример #2
0
        protected override bool OnChildrenAdded(EventArgs args)
        {
            base.OnChildrenAdded(args);
            var margs = (ModelEventArgs)args;

            if (!d_itemModel.AreIndicesEqual(margs.d_parentIndex, d_itemModel.GetRootIndex()))
            {
                return(true);
            }

            var items = new List <ListViewItemRenderingState>();

            for (var i = 0; i < margs.d_count; ++i)
            {
                var item = new ListViewItemRenderingState(this);

                UpdateItem(item, d_itemModel.MakeIndex(margs.d_startId + i, margs.d_parentIndex), ref d_renderedMaxWidth, ref d_renderedTotalHeight);

                items.Add(item);
            }

            d_items.InsertRange(margs.d_startId, items);

            //TODO: insert in the right place directly!
            ResortListView();
            InvalidateView(false);
            return(true);
        }
Пример #3
0
        public override void PrepareForRender()
        {
            base.PrepareForRender();
            if (d_itemModel == null || !IsDirty())
            {
                return;
            }

            if (d_needsFullRender)
            {
                d_renderedMaxWidth = d_renderedTotalHeight = 0;
                d_items.Clear();
            }

            var rootIndex  = d_itemModel.GetRootIndex();
            var childCount = d_itemModel.GetChildCount(rootIndex);

            for (var child = 0; child < childCount; ++child)
            {
                var index = d_itemModel.MakeIndex(child, rootIndex);

                if (d_needsFullRender)
                {
                    var state = new ListViewItemRenderingState(this);
                    UpdateItem(state, index, ref d_renderedMaxWidth, ref d_renderedTotalHeight);
                    d_items.Add(state);
                }
                else
                {
                    var item = d_items[child];
                    d_renderedTotalHeight -= item.d_size.Height;

                    UpdateItem(item, index, ref d_renderedMaxWidth, ref d_renderedTotalHeight);
                }
            }

            UpdateScrollbars();
            SetIsDirty(false);
            ResortListView();
            d_needsFullRender = false;
        }