xm
2021-12-01 6d73bf6e816570291865674bef8bce8972e4de3f
HDL_ON/UI/UI0-Public/Widget/ConfirmDialog.cs
New file
@@ -0,0 +1,229 @@

using System;
using Shared;
using HDL_ON.UI.CSS;
namespace HDL_ON.UI
{
    /// <summary>
    /// 通用二次确认界面
    /// 可以自定义按钮文字、提示内容支持多行显示
    /// </summary>
    public class ConfirmDialog : Dialog
    {
        /// bodyView
        /// </summary>
        FrameLayout bodyView;
        /// <summary>
        /// 是否加载报警颜色窗口(红色)
        /// </summary>
        bool isAlarmColor = false;
        /// <summary>
        ///
        /// </summary>
        public ConfirmDialog()
        {
        }
        /// <summary>
        ///
        /// </summary>
        public ConfirmDialog(bool isAlarmColor)
        {
            this.isAlarmColor = isAlarmColor;
        }
        /// <summary>
        /// 初始化Dialog
        /// </summary>
        /// <param name="titleStr">标题</param>
        /// <param name="msgStr">提示信息</param>
        /// <param name="okAction"></param>
        /// <param name="cancelAction"></param>
        /// <param name="cancelID"></param>
        /// <param name="confirmID"></param>
        void ShowDialogBase(string titleStr, string msgStr, Action okAction, Action cancelAction, int cancelID = StringId.Cancel, int confirmID = StringId.Confirm)
        {
            this.BackgroundColor = CSS_Color.DialogTransparentColor1;
            if (bodyView != null && bodyView.Parent != null)
            {
                bodyView.RemoveFromParent();
            }
            bodyView = new FrameLayout();
            this.AddChidren(bodyView);
            FrameLayout contentView = new FrameLayout()
            {
                Gravity = Gravity.Center,
                Width = Application.GetRealWidth(270),
                Height = Application.GetRealHeight(140),
                BackgroundColor = CSS_Color.MainBackgroundColor,
                BorderColor = 0x00000000,
                BorderWidth = 0,
                Radius = (uint)Application.GetMinRealAverage(10),
            };
            bodyView.AddChidren(contentView);
            Button btnTitle = new Button()
            {
                Y = Application.GetRealHeight(20),
                Height = Application.GetRealHeight(22),
                TextColor = CSS_Color.MainColor,
                TextSize = CSS_FontSize.SubheadingFontSize,
                TextAlignment = TextAlignment.Center,
                IsBold = true,
                Text = titleStr,
            };
            contentView.AddChidren(btnTitle);
            int Width135 = Application.GetRealWidth(135);
            //提示内容按钮
            Button btnMsg = new Button()
            {
                Y = btnTitle.Bottom + Application.GetRealHeight(4),
                X = Application.GetRealWidth(6),
                Height = Application.GetRealHeight(46),
                Width = Application.GetRealWidth(258),
                TextAlignment = TextAlignment.Center,
                TextColor = CSS_Color.TextualColor,
                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                Text = msgStr,
                IsMoreLines = true,
            };
            contentView.AddChidren(btnMsg);
            Button btnLine = new Button()
            {
                Y = Application.GetRealHeight(96),
                Height = Application.GetRealHeight(1),
                Width = Application.GetRealWidth(270 / 2),
                BackgroundColor = CSS_Color.DividingLineColor,
            };
            contentView.AddChidren(btnLine);
            Button btnCancel = new Button()
            {
                Y = btnLine.Bottom,
                Width = Width135,
                Height = Application.GetRealHeight(43),
                TextAlignment = TextAlignment.Center,
                TextColor = CSS_Color.TextualColor,
                TextSize = CSS_FontSize.SubheadingFontSize,
                TextID = cancelID,
            };
            contentView.AddChidren(btnCancel);
            Button btnConfirm = new Button()
            {
                X = contentView.Width - Width135,
                Y = btnLine.Y,
                Width = Width135,
                Height = Application.GetRealHeight(45),
                TextAlignment = TextAlignment.Center,
                //TextColor = CSS_Color.TextualColor,
                TextSize = CSS_FontSize.SubheadingFontSize,
                TextColor = CSS_Color.MainBackgroundColor,
                BackgroundColor = CSS_Color.MainColor,
                TextID = confirmID,
            };
            contentView.AddChidren(btnConfirm);
            //例:右下圆角 大小为50
            int mRectCornerID = HDLUtils.RectCornerBottomRight;
            btnConfirm.SetCornerWithSameRadius((uint)Application.GetMinRealAverage(10), mRectCornerID);
            btnCancel.MouseUpEventHandler += (sender, e) =>
            {
                this.Close();
                cancelAction?.Invoke();
            };
            btnConfirm.MouseUpEventHandler += (sender, e) =>
            {
                this.Close();
                okAction?.Invoke();
            };
            //this.Show();
            if(isAlarmColor)
            {
                btnTitle.TextColor = CSS_Color.WarningColor;
                btnConfirm.TextColor = CSS_Color.MainBackgroundColor;
                btnConfirm.BackgroundColor = CSS_Color.WarningColor;
            }
        }
        /// <summary>
        /// 加载提示Dialog
        /// </summary>
        /// <param name="titleId"></param>
        /// <param name="msgId"></param>
        /// <param name="callBackAction"></param>
        public void ShowDialog(int titleId, int msgId, Action okAction, Action cancelAction = null)
        {
            this.ShowDialogBase(Language.StringByID(titleId), Language.StringByID(msgId), okAction, cancelAction);
            this.Show();
        }
        /// <summary>
        /// 加载提示Dialog
        /// 可以自定义按钮文字
        /// </summary>
        /// <param name="titleId"></param>
        /// <param name="msgId"></param>
        /// <param name="okAction"></param>
        /// <param name="cancelAction"></param>
        /// <param name="cancelID"></param>
        /// <param name="confirmID"></param>
        public void ShowDialog(int titleId, int msgId, Action okAction, Action cancelAction, int cancelID, int confirmID)
        {
            this.ShowDialogBase(Language.StringByID(titleId), Language.StringByID(msgId), okAction, cancelAction, cancelID, confirmID);
            this.Show();
        }
        /// <summary>
        /// 加载提示Dialog
        /// </summary>
        /// <param name="titleId"></param>
        /// <param name="msgId"></param>
        /// <param name="callBackAction"></param>
        public void ShowDialog(string titleStr, string msgStr, Action okAction, Action cancelAction = null)
        {
            this.ShowDialogBase(titleStr, msgStr, okAction, cancelAction);
            this.Show();
        }
        /// <summary>
        /// 加载提示Dialog
        /// 可以自定义按钮文字
        /// </summary>
        /// <param name="titleStr"></param>
        /// <param name="msgStr"></param>
        /// <param name="okAction"></param>
        /// <param name="cancelAction"></param>
        /// <param name="cancelID"></param>
        /// <param name="confirmID"></param>
        public void ShowDialog(string titleStr, string msgStr, Action okAction, Action cancelAction, int cancelID, int confirmID)
        {
            this.ShowDialogBase(titleStr, msgStr, okAction, cancelAction, cancelID, confirmID);
            this.Show();
        }
        /// <summary>
        /// RefreshDialog 在Dialog没关闭情况下调用
        /// 可以自定义按钮文字
        /// </summary>
        /// <param name="titleStr"></param>
        /// <param name="msgStr"></param>
        /// <param name="okAction"></param>
        /// <param name="cancelAction"></param>
        /// <param name="cancelID"></param>
        /// <param name="confirmID"></param>
        public void RefreshDialog(string titleStr, string msgStr, Action okAction, Action cancelAction, int cancelID, int confirmID)
        {
            this.ShowDialogBase(titleStr, msgStr, okAction, cancelAction, cancelID, confirmID);
            //this.Show();不需要show
        }
    }
}