Esempio n. 1
0
        ////////////////////////////////////////////////////////////////////////////

        ////////////////////////////////////////////////////////////////////////////
        private void DrawPane(object sender, DrawEventArgs e)
        {
            if (Items != null && Items.Count > 0)
            {
                SkinText  font = Skin.Layers["Control"].Text;
                SkinLayer sel  = Skin.Layers["ListView.Selection"];
                int       h    = (int)font.Font.Resource.MeasureString(Items[0][0].ToString()).Y;
                int       v    = (sbVert.Value / 10);
                int       p    = (sbVert.PageSize / 10);
                int       d    = (int)(((sbVert.Value % 10) / 10f) * h);
                int       c    = Items.Count;
                int       s    = itemIndex;

                FormatHeaders(Headers);

                //e.Renderer.DrawString(this, Skin.Layers["Control"], stufs, new Rectangle(e.Rectangle.Left, e.Rectangle.Top, e.Rectangle.Width, h), false);

                for (int i = v; i <= v + p + 1; i++)
                {
                    if (i < c)
                    {
                        DrawStrings(e, this, Skin.Layers["Control"], Items[i], new Rectangle(e.Rectangle.Left, e.Rectangle.Top - d + ((i - v) * h), e.Rectangle.Width, h), false);
                    }
                }
                if (s >= 0 && s < c && (Focused || !hideSelection))
                {
                    int pos = -d + ((s - v) * h);
                    if (pos > -h && pos < (p + 1) * h)
                    {
                        e.Renderer.DrawLayer(this, sel, new Rectangle(0, pos, e.Rectangle.Width, h));
                        DrawStrings(e, this, sel, Items[s], new Rectangle(e.Rectangle.Left, e.Rectangle.Top + pos, e.Rectangle.Width, h), false);
                    }
                }
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Overridden DrawControl method
        /// </summary>
        /// <param name="renderer"></param>
        /// <param name="rect"></param>
        /// <param name="gameTime"></param>
        protected override void DrawControl(Renderer renderer, Rectangle rect, GameTime gameTime)
        {
            base.DrawControl(renderer, rect, gameTime);

            if (data.Count > 0)
            {
                if (origin == TextOrigin.BOTTOM)
                {
                    String[] arr  = Reverse(data);
                    SkinText font = Skin.Layers["Control"].Text;
                    int      h    = (int)font.Font.Resource.MeasureString(data.Peek()).Y;
                    int      v    = ((vert.Range - vert.PageSize - vert.Value) / 10);
                    int      p    = (vert.PageSize / 10);
                    int      d    = (int)(((vert.Value % 10) / 10f) * h);
                    int      c    = data.Count;

                    for (int i = v; i <= v + p; i++)
                    {
                        if (i < c)
                        {
                            renderer.DrawString(this, Skin.Layers["Control"], arr[i],
                                                new Rectangle(rect.Left + 5, (rect.Height - h) - ((i - v) * h), rect.Width, h));
                        }
                    }
                }
                else if (origin == TextOrigin.TOP)
                {
                    rect.Y      += 5;
                    rect.Height += 15;
                    String[] arr = Reverse(data);

                    SkinText font = Skin.Layers["Control"].Text;
                    int      h    = (int)font.Font.Resource.MeasureString(data.Peek()).Y;
                    int      v    = (vert.Value / 10);
                    int      p    = (vert.PageSize / 10);
                    int      d    = (int)(((vert.Value % 10) / 10f) * h);
                    int      c    = data.Count;

                    for (int i = v; i <= v + p + 1; i++)
                    {
                        if (i < c)
                        {
                            renderer.DrawString(this, Skin.Layers["Control"], arr[i],
                                                new Rectangle(rect.Left + 5, rect.Top - d + ((i - v) * h), rect.Width, h));
                        }
                    }
                }
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Draws the list pane containing the collection items.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public override void DrawPane(object sender, DrawEventArgs e)
        {
            // Collection is non-empty?
            if (items != null && items.Count > 0)
            {
                SkinText  font = Skin.Layers["Control"].Text;
                SkinLayer sel  = Skin.Layers["ListBox.Selection"];
                int       h    = (items[0] as T).Height;
                int       v    = (sbVert.Value / 10);
                int       p    = (sbVert.PageSize / 10);
                int       d    = (int)(((sbVert.Value % 10) / 10f) * h);
                int       c    = items.Count;
                int       s    = itemIndex;
                // Draw selection overlay?
                if (s >= 0 && s < c && (Focused || !hideSelection))
                {
                    int pos = -d + ((s - v) * h);

                    // Selected index is visible?
                    if (pos > -h && pos < (p + 1) * h)
                    {
                        e.Renderer.DrawLayer(this, sel, new Rectangle(e.Rectangle.Left, e.Rectangle.Top + pos, e.Rectangle.Width, h));
                    }
                }
                // Draw the visible collection items in the list pane.
                for (int i = v; i <= v + p + 1; i++)
                {
                    if (i < c)
                    {
                        foreach (Control ctr in (items[i] as T).Controls)
                        {
                            ctr.DrawControl(e.Renderer, new Rectangle(e.Rectangle.Left + ctr.Left, (e.Rectangle.Top - d + ((i - v) * h)) + ctr.Top, e.Rectangle.Width, h), e.GameTime);
                        }
                    }
                }
                // Draw selection overlay?
                if (s >= 0 && s < c && (Focused || !hideSelection))
                {
                    int pos = -d + ((s - v) * h);

                    // Selected index is visible?
                    if (pos > -h && pos < (p + 1) * h)
                    {
                        e.Renderer.DrawLayer(sel, new Rectangle(e.Rectangle.Left, e.Rectangle.Top + pos, e.Rectangle.Width, h), Color.White * .2f, 0);
                    }
                }
            }
        }
Esempio n. 4
0
        ////////////////////////////////////////////////////////////////////////////

        ////////////////////////////////////////////////////////////////////////////
        private void TrackItem(int x, int y)
        {
            y -= Headers.Height;

            if (Items != null && Items.Count > 0 && (pane.ControlRect.Contains(new Point(x, y + Headers.Height))))
            {
                SkinText font = Skin.Layers["Control"].Text;
                int      h    = (int)font.Font.Resource.MeasureString(Items[0][0].ToString()).Y;
                int      d    = (int)(((sbVert.Value % 10) / 10f) * h);
                int      i    = (int)Math.Floor((sbVert.Value / 10f) + ((float)y / h));
                if (i >= 0 && i < Items.Count && i >= (int)Math.Floor((float)sbVert.Value / 10f) && i < (int)Math.Ceiling((float)(sbVert.Value + sbVert.PageSize) / 10f))
                {
                    ItemIndex = i;
                }
                Focused = true;
            }
        }
Esempio n. 5
0
        ////////////////////////////////////////////////////////////////////////////

        ////////////////////////////////////////////////////////////////////////////
        private void ItemsChanged()
        {
            if (Items != null && Items.Count > 0)
            {
                SkinText font = Skin.Layers["Control"].Text;
                int      h    = (int)font.Font.Resource.MeasureString(Items[0][0].ToString()).Y;

                int sizev = Height - Skin.Layers["Control"].ContentMargins.Vertical;
                sbVert.Range    = Items.Count * 10;
                sbVert.PageSize = (int)Math.Floor((float)sizev * 10 / h);
                Invalidate();
            }
            else if (Items == null || Items.Count <= 0)
            {
                sbVert.Range    = 1;
                sbVert.PageSize = 1;
                Invalidate();
            }

            RescaleHeaders();
        }
Esempio n. 6
0
        /// <summary>
        /// Sizes the list pane so the specified number of items will be able to be
        /// displayed in it without needing a scroll bar.
        /// </summary>
        /// <param name="maxItems">Number of items that can be displayed without needing a scroll bar.</param>
        public override void AutoHeight(int maxItems)
        {
            // Collection has less than the maximum items specified?
            if (items != null && items.Count < maxItems)
            {
                maxItems = items.Count;
            }

            // Adjust width of the pane to account for scroll bar visibility.
            if (maxItems < 3)
            {
                //maxItems = 3;
                sbVert.Visible = false;
                pane.Width     = Width - Skin.Layers["Control"].ContentMargins.Horizontal - 1;
            }

            else
            {
                pane.Width     = Width - sbVert.Width - Skin.Layers["Control"].ContentMargins.Horizontal - 1;
                sbVert.Visible = true;
            }

            // Get the list box font resource.
            SkinText font = Skin.Layers["Control"].Text;

            // Non-empty collection? Measure the height of a line of font and set the
            // height of the list pane based on the specified number of items that
            // should be able to display in it.
            if (items != null && items.Count > 0)
            {
                int h = (items[0] as T).Height;
                Height = (h * maxItems) + (Skin.Layers["Control"].ContentMargins.Vertical);// - Skin.OriginMargins.Vertical);
            }

            // Empty collection. Default height to 32.
            else
            {
                Height = 32;
            }
        }
Esempio n. 7
0
        ////////////////////////////////////////////////////////////////////////////

        ////////////////////////////////////////////////////////////////////////////
        public virtual void AutoHeight(int maxItems)
        {
            if (Items != null && Items.Count < maxItems)
            {
                maxItems = Items.Count;
            }
            if (maxItems < 3)
            {
                maxItems = 3;
            }

            SkinText font = Skin.Layers["Control"].Text;

            if (Items != null && Items.Count > 0)
            {
                int h = (int)font.Font.Resource.MeasureString(Items[0][0].ToString()).Y;
                Height = (h * maxItems) + (Skin.Layers["Control"].ContentMargins.Vertical);// - Skin.OriginMargins.Vertical);
            }
            else
            {
                Height = 32;
            }
        }
Esempio n. 8
0
        /// <summary>
        /// Event handler that will resize the scrollbars when resizes take place or strings are added
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void Recalc(object sender, ResizeEventArgs e)
        {
            if (!vert.Enabled)
            {
                vert.Enabled = true;
            }

            if (data != null && data.Count > 0)
            {
                SkinText font = Skin.Layers["Control"].Text;
                int      h    = (int)font.Font.Resource.MeasureString(data.Peek()).Y;

                int sizev = Height - Skin.Layers["Control"].ContentMargins.Vertical;
                vert.Range    = data.Count * 10;
                vert.PageSize = (int)Math.Floor((float)sizev * 10 / h);
                Invalidate();
            }
            else if (data == null || data.Count <= 0)
            {
                vert.Range    = 1;
                vert.PageSize = 1;
                Invalidate();
            }
        }