Пример #1
0
        /// <summary>
        /// 布局样式转换为字符
        /// </summary>
        /// <param name="layoutStyle">布局样式转</param>
        /// <returns>布局样式</returns>
        public static String convertLayoutStyleToStr(FCLayoutStyle layoutStyle)
        {
            String str = "";

            if (layoutStyle == FCLayoutStyle.BottomToTop)
            {
                str = "BottomToTop";
            }
            else if (layoutStyle == FCLayoutStyle.LeftToRight)
            {
                str = "LeftToRight";
            }
            else if (layoutStyle == FCLayoutStyle.None)
            {
                str = "None";
            }
            else if (layoutStyle == FCLayoutStyle.RightToLeft)
            {
                str = "RightToLeft";
            }
            else if (layoutStyle == FCLayoutStyle.TopToBottom)
            {
                str = "TopToBottom";
            }
            return(str);
        }
Пример #2
0
 /// <summary>
 /// 设置属性
 /// </summary>
 /// <param name="name">属性名称</param>
 /// <param name="value">属性值</param>
 public override void setProperty(String name, String value)
 {
     if (name == "autowrap")
     {
         AutoWrap = FCStr.convertStrToBool(value);
     }
     else if (name == "layoutstyle")
     {
         LayoutStyle = FCStr.convertStrToLayoutStyle(value);
     }
     else
     {
         base.setProperty(name, value);
     }
 }
Пример #3
0
        /// <summary>
        /// 菜单触摸移动方法
        /// </summary>
        /// <param name="item">菜单项</param>
        /// <param name="touchInfo">触摸信息</param>
        public virtual void onMenuItemTouchMove(FCMenuItem item, FCTouchInfo touchInfo)
        {
            FCNative native = Native;
            ArrayList <FCMenuItem> items      = null;
            FCMenuItem             parentItem = item.ParentItem;

            if (parentItem != null)
            {
                items = parentItem.getItems();
            }
            else
            {
                items = m_items;
            }
            //关闭其他表格
            bool close = closeMenus(items);

            if (item.getItems().size() > 0)
            {
                FCMenu dropDownMenu = item.DropDownMenu;
                //获取位置和大小
                if (dropDownMenu != null)
                {
                    dropDownMenu.Native = native;
                    FCLayoutStyle layoutStyle = LayoutStyle;
                    FCPoint       location    = new FCPoint(native.clientX(item) + item.Width, native.clientY(item));
                    if (layoutStyle == FCLayoutStyle.LeftToRight || layoutStyle == FCLayoutStyle.RightToLeft)
                    {
                        location.x = native.clientX(item);
                        location.y = native.clientY(item) + item.Height;
                    }
                    //设置弹出位置
                    dropDownMenu.Opacity  = Opacity;
                    dropDownMenu.Location = location;
                    dropDownMenu.bringToFront();
                    dropDownMenu.focus();
                    dropDownMenu.show();
                    adjust(dropDownMenu);
                }
            }
            native.invalidate();
        }
Пример #4
0
        /// <summary>
        /// 布局样式转换为字符
        /// </summary>
        /// <param name="str">字符</param>
        /// <returns>布局样式</returns>
        public static FCLayoutStyle convertStrToLayoutStyle(String str)
        {
            str = str.ToLower();
            FCLayoutStyle layoutStyle = FCLayoutStyle.None;

            if (str == "bottomtotop")
            {
                layoutStyle = FCLayoutStyle.BottomToTop;
            }
            else if (str == "lefttoright")
            {
                layoutStyle = FCLayoutStyle.LeftToRight;
            }
            else if (str == "righttoleft")
            {
                layoutStyle = FCLayoutStyle.RightToLeft;
            }
            else if (str == "toptobottom")
            {
                layoutStyle = FCLayoutStyle.TopToBottom;
            }
            return(layoutStyle);
        }
Пример #5
0
        /// <summary>
        /// 重置布局
        /// </summary>
        /// <returns></returns>
        public override bool onResetLayout()
        {
            bool reset = false;

            if (Native != null && m_splitter != null && m_firstControl != null && m_secondControl != null)
            {
                FCRect splitRect = new FCRect();
                int    width = Width, height = Height;
                FCRect fRect        = new FCRect();
                FCRect sRect        = new FCRect();
                FCSize splitterSize = new FCSize(0, 0);
                if (m_splitter.Visible)
                {
                    splitterSize.cx = m_splitter.Width;
                    splitterSize.cy = m_splitter.Height;
                }
                FCLayoutStyle layoutStyle = LayoutStyle;
                switch (layoutStyle)
                {
                //自下而上
                case FCLayoutStyle.BottomToTop:
                    //绝对大小
                    if (m_splitMode == FCSizeType.AbsoluteSize || m_oldSize.cy == 0)
                    {
                        splitRect.left   = 0;
                        splitRect.top    = height - (m_oldSize.cy - m_splitter.Top);
                        splitRect.right  = width;
                        splitRect.bottom = splitRect.top + splitterSize.cy;
                    }
                    //百分比大小
                    else if (m_splitMode == FCSizeType.PercentSize)
                    {
                        splitRect.left = 0;
                        if (m_splitPercent == -1)
                        {
                            m_splitPercent = (float)m_splitter.Top / m_oldSize.cy;
                        }
                        splitRect.top    = (int)(height * m_splitPercent);
                        splitRect.right  = width;
                        splitRect.bottom = splitRect.top + splitterSize.cy;
                    }
                    fRect.left   = 0;
                    fRect.top    = splitRect.bottom;
                    fRect.right  = width;
                    fRect.bottom = height;
                    sRect.left   = 0;
                    sRect.top    = 0;
                    sRect.right  = width;
                    sRect.bottom = splitRect.top;
                    break;

                //从左向右
                case FCLayoutStyle.LeftToRight:
                    //绝对大小
                    if (m_splitMode == FCSizeType.AbsoluteSize || m_oldSize.cx == 0)
                    {
                        splitRect.left   = m_splitter.Left;
                        splitRect.top    = 0;
                        splitRect.right  = m_splitter.Left + splitterSize.cx;
                        splitRect.bottom = height;
                    }
                    //百分比大小
                    else if (m_splitMode == FCSizeType.PercentSize)
                    {
                        if (m_splitPercent == -1)
                        {
                            m_splitPercent = (float)m_splitter.Left / m_oldSize.cx;
                        }
                        splitRect.left   = (int)(width * m_splitPercent);
                        splitRect.top    = 0;
                        splitRect.right  = splitRect.left + splitterSize.cx;
                        splitRect.bottom = height;
                    }
                    fRect.left   = 0;
                    fRect.top    = 0;
                    fRect.right  = splitRect.left;
                    fRect.bottom = height;
                    sRect.left   = splitRect.right;
                    sRect.top    = 0;
                    sRect.right  = width;
                    sRect.bottom = height;
                    break;

                //从右向左
                case FCLayoutStyle.RightToLeft:
                    //绝对大小
                    if (m_splitMode == FCSizeType.AbsoluteSize || m_oldSize.cx == 0)
                    {
                        splitRect.left   = width - (m_oldSize.cx - m_splitter.Left);
                        splitRect.top    = 0;
                        splitRect.right  = splitRect.left + splitterSize.cx;
                        splitRect.bottom = height;
                    }
                    //百分比大小
                    else if (m_splitMode == FCSizeType.PercentSize)
                    {
                        if (m_splitPercent == -1)
                        {
                            m_splitPercent = (float)m_splitter.Left / m_oldSize.cx;
                        }
                        splitRect.left   = (int)(width * m_splitPercent);
                        splitRect.top    = 0;
                        splitRect.right  = splitRect.left + splitterSize.cx;
                        splitRect.bottom = height;
                    }
                    fRect.left   = splitRect.right;
                    fRect.top    = 0;
                    fRect.right  = width;
                    fRect.bottom = height;
                    sRect.left   = 0;
                    sRect.top    = 0;
                    sRect.right  = splitRect.left;
                    sRect.bottom = height;
                    break;

                //自上而下
                case FCLayoutStyle.TopToBottom:
                    //绝对大小
                    if (m_splitMode == FCSizeType.AbsoluteSize || m_oldSize.cy == 0)
                    {
                        splitRect.left   = 0;
                        splitRect.top    = m_splitter.Top;
                        splitRect.right  = width;
                        splitRect.bottom = splitRect.top + splitterSize.cy;
                    }
                    //百分比大小
                    else if (m_splitMode == FCSizeType.PercentSize)
                    {
                        splitRect.left = 0;
                        if (m_splitPercent == -1)
                        {
                            m_splitPercent = (float)m_splitter.Top / m_oldSize.cy;
                        }
                        splitRect.top    = (int)(height * m_splitPercent);
                        splitRect.right  = width;
                        splitRect.bottom = splitRect.top + splitterSize.cy;
                    }
                    fRect.left   = 0;
                    fRect.top    = 0;
                    fRect.right  = width;
                    fRect.bottom = splitRect.top;
                    sRect.left   = 0;
                    sRect.top    = splitRect.bottom;
                    sRect.right  = width;
                    sRect.bottom = height;
                    break;
                }
                if (m_splitter.Visible)
                {
                    FCRect spRect = m_splitter.Bounds;
                    if (spRect.left != splitRect.left || spRect.top != splitRect.top || spRect.right != splitRect.right || spRect.bottom != splitRect.bottom)
                    {
                        m_splitter.Bounds = splitRect;
                        reset             = true;
                    }
                    if (m_splitter.AllowDrag)
                    {
                        if (layoutStyle == FCLayoutStyle.LeftToRight || layoutStyle == FCLayoutStyle.RightToLeft)
                        {
                            m_splitter.Cursor = FCCursors.SizeWE;
                        }
                        else
                        {
                            m_splitter.Cursor = FCCursors.SizeNS;
                        }
                        m_splitter.bringToFront();
                    }
                }
                FCRect fcRect = m_firstControl.Bounds;
                if (fcRect.left != fRect.left || fcRect.top != fRect.top || fcRect.right != fRect.right || fcRect.bottom != fRect.bottom)
                {
                    reset = true;
                    m_firstControl.Bounds = fRect;
                    m_firstControl.update();
                }
                FCRect scRect = m_secondControl.Bounds;
                if (scRect.left != sRect.left || scRect.top != sRect.top || scRect.right != sRect.right || scRect.bottom != sRect.bottom)
                {
                    reset = true;
                    m_secondControl.Bounds = sRect;
                    m_secondControl.update();
                }
            }
            m_oldSize = Size;
            return(reset);
        }
Пример #6
0
        /// <summary>
        /// 重绘前景方法
        /// </summary>
        /// <param name="paint">绘图对象</param>
        /// <param name="clipRect">裁剪矩形</param>
        public override void onPaintForeground(FCPaint paint, FCRect clipRect)
        {
            int width = Width, height = Height;

            if (width > 0 && height > 0)
            {
                int    right     = width;
                int    midY      = height / 2;
                String text      = Text;
                int    tRight    = 0;
                long   textColor = getPaintingTextColor();
                if (text != null && text.Length > 0)
                {
                    FCFont font  = Font;
                    FCSize tSize = paint.textSize(text, font);
                    FCRect tRect = new FCRect();
                    tRect.left   = 10;
                    tRect.top    = midY - tSize.cy / 2 + 2;
                    tRect.right  = tRect.left + tSize.cx;
                    tRect.bottom = tRect.top + tSize.cy;
                    paint.drawText(text, textColor, font, tRect);
                    tRight = tRect.right + 4;
                }
                //绘制选中
                if (m_checked)
                {
                    FCRect eRect = new FCRect(tRight, height / 2 - 4, tRight + 8, height / 2 + 4);
                    paint.fillEllipse(textColor, eRect);
                }
                //画子菜单的提示箭头
                if (m_items.size() > 0)
                {
                    FCPoint point1 = new FCPoint(), point2 = new FCPoint(), point3 = new FCPoint();
                    FCMenu  menu = m_parentMenu;
                    if (m_parentItem != null)
                    {
                        menu = m_parentItem.DropDownMenu;
                    }
                    FCLayoutStyle layoutStyle = menu.LayoutStyle;
                    //横向
                    if (layoutStyle == FCLayoutStyle.LeftToRight || layoutStyle == FCLayoutStyle.RightToLeft)
                    {
                        point1.x = right - 25;
                        point1.y = midY - 2;
                        point2.x = right - 14;
                        point2.y = midY - 2;
                        point3.x = right - 20;
                        point3.y = midY + 4;
                    }
                    //纵向
                    else
                    {
                        point1.x = right - 15;
                        point1.y = midY;
                        point2.x = right - 25;
                        point2.y = midY - 5;
                        point3.x = right - 25;
                        point3.y = midY + 5;
                    }
                    FCPoint[] points = new FCPoint[] { point1, point2, point3 };
                    paint.fillPolygon(textColor, points);
                }
            }
        }