using System;
using System.Collections.Generic;
using System.Text;
namespace Shared.Phone
{
///
/// 做成一个存在于右上角的菜单控件(非楼层菜单,都可以使用)
///
public class TopRightMenuControl : FrameLayout
{
#region ■ 变量声明___________________________
///
/// 列表控件
///
private VerticalListControl listView = null;
///
/// 背景容器控件
///
private FrameLayout frameBack = null;
///
/// 行高度
///
private int RowHeight = 150;
///
/// 行宽度
///
private int RowWidth = 395;
///
/// 行数
///
private int RowCount = 0;
#endregion
#region ■ 初始化_____________________________
///
/// 做成一个存在于右上角的菜单控件(非楼层菜单,都可以使用)
///
/// 一共有几行(不含标题)
/// 这个菜单的宽度模式,目前只支持
/// 1: 395宽度
/// 2: 449宽度
///
/// 标题文本(如果不为空,菜单模式变更为拥有标题的模式)
public TopRightMenuControl(int i_RowCount, int i_widthType, string titleText = null)
{
this.RowCount = i_RowCount;
if (i_widthType == 1)
{
this.RowWidth = 395;
}
else if (i_widthType == 2)
{
this.RowWidth = 449;
}
//初始化画面的控件
this.InitFormControl(titleText, i_widthType);
}
///
/// 初始化画面的控件
///
private void InitFormControl(string titleText, int i_widthType)
{
this.BackgroundColor = UserCenterColor.Current.DialogBackColor;
this.MouseUpEventHandler += (sender2, e2) =>
{
//关闭自身
this.RemoveFromParent();
};
var frame = (FrameLayout)UserView.HomePage.Instance.GetChildren(UserView.HomePage.Instance.ChildrenCount - 1);
frame.AddChidren(this);
//最大显示5个
int rowCount = this.RowCount > 5 ? 5 : this.RowCount;
if (titleText != null)
{
//449宽度的时候,即使明细已经超过了5个,但是还是可以+1的,因为这个模式多了一张图片
if (rowCount < 5 || i_widthType == 2)
{
//菜单+1
rowCount++;
}
}
//背景
this.frameBack = new FrameLayout();
frameBack.X = Application.GetRealWidth(662 - (RowWidth - 395));
frameBack.Y = Application.GetRealHeight(161);
frameBack.Width = Application.GetRealWidth(RowWidth);
frameBack.Height = Application.GetRealHeight(RowHeight * rowCount + 16);
frameBack.BackgroundImagePath = "MenuGroud/TopRightMenu" + i_widthType + "_" + rowCount + ".png";
this.AddChidren(frameBack);
var frameTable = new FrameLayout();
frameTable.Y = Application.GetRealHeight(16);
frameTable.Height = Application.GetRealHeight(RowHeight * rowCount);
frameBack.AddChidren(frameTable);
if (titleText != null)
{
var btnTitle = new NormalViewControl(frameBack.Width - Application.GetRealWidth(81), Application.GetRealHeight(58), false);
btnTitle.X = Application.GetRealWidth(81);
btnTitle.Y = Application.GetRealHeight(58 + 16);
btnTitle.Text = titleText;
frameTable.AddChidren(btnTitle);
}
//列表控件
this.listView = new VerticalListControl();
listView.Radius = (uint)Application.GetRealHeight(17);
if (titleText != null)
{
//拥有标题
listView.Y = Application.GetRealHeight(RowHeight);
listView.Height = frameTable.Height - Application.GetRealHeight(RowHeight);
}
else
{
//没有标题
listView.Height = frameTable.Height;
}
frameTable.AddChidren(listView);
}
#endregion
#region ■ 添加菜单___________________________
///
/// 添加菜单行(UI奇葩变更了,暗色图片为选中,黑色图片为非选中)
///
/// 显示的文字
/// 图片(暗色图片)
/// 图片(黑色图片)
/// 单击菜单执行的事件
/// 单击的时候,关闭菜单
public void AddRowMenu(string TextValue, string selectPic, string unSelectPic, Action action, bool closeOnClick = true)
{
var rowFrame = new FrameRowControl();
rowFrame.LeftOffset = Application.GetRealWidth(81) - HdlControlResourse.XXLeft;
rowFrame.Height = Application.GetRealHeight(RowHeight);
listView.AddChidren(rowFrame);
rowFrame.MainKeys = listView.ChildrenCount.ToString();
//这里特殊,移除掉自身的单击事件
rowFrame.RemoveBaseClickEvent();
//图标
var btnIcon = rowFrame.AddLeftIcon(81);
btnIcon.UnSelectedImagePath = unSelectPic;
if (selectPic != null)
{
btnIcon.SelectedImagePath = selectPic;
}
//显示文字
var btnText = rowFrame.AddLeftCaption(TextValue, RowWidth - 173);
btnText.X = Application.GetRealWidth(173);
//底线
if (listView.ChildrenCount != this.RowCount)
{
var btnLine = rowFrame.AddBottomLine();
btnLine.X = Application.GetRealWidth(81);
}
//初始状态全为非选中状态
this.SetRowSelectStatu(rowFrame, false);
bool happenMove = false;
//选择状态(重写底层效果)
rowFrame.SelectStatuEvent += (statu) =>
{
//false为状态还原,但是状态还原放在鼠标弹起事件里面
if (statu == true)
{
//设置为选择状态
this.SetRowSelectStatu(rowFrame, true);
happenMove = false;
}
};
//按键点击
rowFrame.ButtonClickEvent += (sender, e) =>
{
//设置为非选择状态
this.SetRowSelectStatu(rowFrame, false);
if (closeOnClick == true)
{
this.RemoveFromParent();
}
action?.Invoke();
};
//开始触发移动事件(这个事件会频繁的触发)
btnIcon.ButtonHappenMoveEvent += () =>
{
if (happenMove == false)
{
//设置为非选择状态
this.SetRowSelectStatu(rowFrame, false);
}
happenMove = true;
};
}
#endregion
#region ■ 设置选择状态_______________________
///
/// 设置选择状态
///
/// 行控件
/// 选择的状态
private void SetRowSelectStatu(FrameRowControl frame, bool select)
{
//图标
var btnIcon = (IconViewControl)frame.GetChildren(0);
if (btnIcon != null)
{
if (select == true && string.IsNullOrEmpty(btnIcon.SelectedImagePath) == true)
{
//如果不设置这张图片,则什么都不做
}
else
{
btnIcon.IsSelected = select;
}
}
//文本
var btnText = (NormalViewControl)frame.GetChildren(1);
if (btnText != null)
{
btnText.TextColor = select == true ? UserCenterColor.Current.TextGrayColor1 : UserCenterColor.Current.TextColor1;
btnText.IsBold = !select;
}
}
#endregion
#region ■ 一般方法___________________________
///
/// 重新设置白色部分的坐标
///
/// 真实值(不改变的话填-1)
/// 真实值(不改变的话填-1)
public void SetLocation(int XX = -1, int YY = -1)
{
if (XX != -1)
{
frameBack.X = XX;
}
if (YY != -1)
{
frameBack.Y = YY;
}
}
#endregion
}
}