コード例 #1
0
        protected override void RegionChanged()
        {
            base.RegionChanged();

            Themes.IPartRenderer renderer = BaseApplication.Theme.PartRenderer;

            int minDim = (Region.Width < Region.Height) ? Region.Width : Region.Height;

            int     btnWidth = (int)(minDim * renderer.ComboButtonSizePercent);
            Padding pd       = renderer.ComboButtonPadding;

            m_Button.Region = new Rectangle(Region.Right - btnWidth - pd.Horizontal,
                                            Region.Top + pd.Top,
                                            btnWidth,
                                            Region.Height - pd.Vertical);
        }
コード例 #2
0
ファイル: FieldView.cs プロジェクト: rioka/nfx
//------------------------------------------------------------------------------------------------
        #region Layout Elements

        /// <summary>
        /// Perfoms layout of all elements a control(host) consists of
        /// </summary>
        protected virtual void LayoutElements()
        {
            Themes.IPartRenderer renderer = BaseApplication.Theme.PartRenderer;

            int fh = FontHeight;

            bool symbol = Required || IsReadonly;


            Rectangle captionRegion   = new Rectangle();
            Rectangle dataEntryRegion = new Rectangle();

            switch (m_CaptionPlacement)
            {
            case CaptionPlacement.Left:
            {
                captionRegion = new Rectangle(
                    Padding.Left,
                    (Height / 2) - (fh / 2),
                    m_CaptionHIndent - m_ElementHSpacing,
                    fh
                    );

                dataEntryRegion = new Rectangle(
                    Padding.Left + m_CaptionHIndent,
                    Padding.Top,
                    Width - m_CaptionHIndent - Padding.Horizontal,
                    GetDataEntryElementHeight());

                break;
            }

            case CaptionPlacement.Right:
            {
                captionRegion = new Rectangle(
                    Width - Padding.Right - m_CaptionHIndent + m_ElementHSpacing,
                    (Height / 2) - (fh / 2),
                    m_CaptionHIndent - m_ElementHSpacing,
                    fh
                    );

                dataEntryRegion = new Rectangle(
                    Padding.Left,
                    Padding.Top,
                    Width - m_CaptionHIndent - Padding.Horizontal,
                    GetDataEntryElementHeight());

                break;
            }


            case CaptionPlacement.Bottom:
            {
                captionRegion = new Rectangle(
                    Padding.Left,
                    Height - Padding.Bottom - fh,
                    Width - Padding.Horizontal,
                    fh
                    );


                dataEntryRegion = new Rectangle(
                    Padding.Left,
                    Padding.Top,
                    Width - Padding.Horizontal,
                    GetDataEntryElementHeight());

                break;
            }

            default:        /* and Top*/
            {
                captionRegion = new Rectangle(
                    Padding.Left,
                    Padding.Top,
                    Width - Padding.Horizontal,
                    fh
                    );

                dataEntryRegion = new Rectangle(
                    Padding.Left,
                    Padding.Top + fh + m_ElementVSpacing,
                    Width - Padding.Horizontal,
                    GetDataEntryElementHeight());


                break;
            }
            }

            //place caption and symbol
            if (symbol)
            {
                int symW = 6;
                int symH = 6;

                int symX;
                int symY = (captionRegion.Top + captionRegion.Height / 2) - (symH / 2);


                if (m_CaptionAlignment == StringAlignment.Far)
                {
                    symX = captionRegion.Right - symW;
                    captionRegion.Width -= symW + m_ElementHSpacing;
                }
                else
                {
                    symX = captionRegion.Left;
                    if (m_CaptionAlignment != StringAlignment.Center)
                    {
                        int delta = symW + m_ElementVSpacing;
                        captionRegion.X     += delta;
                        captionRegion.Width -= delta;
                    }
                }

                m_SymbolElement.Region  = new Rectangle(symX, symY, symW, symH);
                m_SymbolElement.Visible = true;
            }
            else
            {
                m_SymbolElement.Visible = false;
            }

            m_CaptionElement.Region    = captionRegion;
            m_CaptionElement.Alignment = m_CaptionAlignment;


            if (m_DataEntryElement != null)
            {
                if (m_DataEntryElement is CheckBoxElement)
                {    //adjust region for checkbox
                    Point midPoint = new Point(
                        dataEntryRegion.Left + dataEntryRegion.Width / 2,
                        dataEntryRegion.Top + dataEntryRegion.Height / 2);

                    Padding cbm = renderer.CheckBoxMetrics;

                    dataEntryRegion = new Rectangle(midPoint.X - fh / 2 - cbm.Left,
                                                    midPoint.Y - fh / 2 - cbm.Top,
                                                    fh + cbm.Right,
                                                    fh + cbm.Bottom);
                }

                if (m_DataEntryElement is RadioGroupElement)
                {
                    RadioGroupElement rgrp = (RadioGroupElement)m_DataEntryElement;
                    rgrp.BeginUpdate();
                    rgrp.ButtonVSpacing = m_ElementVSpacing;
                    rgrp.Padding        = new Padding(m_ElementHSpacing, m_ElementVSpacing, m_ElementHSpacing, m_ElementVSpacing);
                    rgrp.Region         = dataEntryRegion;
                    rgrp.EndUpdate();

                    if (rgrp.UpdateCount > 0)
                    {
                        rgrp.EndUpdate(); //rebuilds RadioGroup
                    }
                }
                else
                {
                    m_DataEntryElement.Region = dataEntryRegion;
                }
            }

            if (m_InternalTextBox != null)
            {
                if (Utils.IsControlDesignerHosted(this))
                {
                    m_InternalTextBox.SetBounds(-1000, -1000, 1, 1);  //adornment painter fix
                }
                else
                {
                    Padding tbm = renderer.FocusedTextBoxMetrics;

                    Rectangle itbRect = new Rectangle(dataEntryRegion.Left + tbm.Left,
                                                      dataEntryRegion.Top + tbm.Top,
                                                      dataEntryRegion.Width - tbm.Horizontal,
                                                      dataEntryRegion.Height - tbm.Vertical);

                    if (m_DataEntryElement is ComboBoxElement && m_ComboButtonVisible)
                    {
                        itbRect.Width = ((int)renderer.ComboTextBoxWidthPercent * dataEntryRegion.Width) - tbm.Horizontal;
                        int btnLeft = ((ComboBoxElement)m_DataEntryElement).ButtonRegion.Left - 1;

                        if ((itbRect.Left + itbRect.Width) > btnLeft)
                        {
                            itbRect.Width = btnLeft - itbRect.Left;
                        }
                    }

                    m_InternalTextBox.SetBounds(
                        itbRect.Left,
                        itbRect.Top,
                        itbRect.Width,
                        itbRect.Height);
                }

                if (m_LineCount > 1)
                {
                    m_InternalTextBox.ScrollBars = ScrollBars.Vertical;
                    m_InternalTextBox.WordWrap   = true;
                }
                else
                {
                    m_InternalTextBox.ScrollBars = ScrollBars.None;
                    m_InternalTextBox.WordWrap   = false;
                }

                m_InternalTextBox.BackColor = renderer.TextBoxBackgroundColor;
            }   //m_InternalTextBox!=null
        }       //LayoutElements()