/// <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); }
/// <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); } }
/// <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(); }
/// <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); }
/// <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); }
/// <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); } } }