using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Windows.Forms; using DevComponents.DotNetBar.Metro; using POSV.Bean; using DevComponents.DotNetBar; using POSV.Utils; using System.Threading.Tasks; using POSV.Entity; using POSV.Helper; namespace POSV.Component { [ToolboxItem(true)] public partial class TableAttributeX : BaseUserControl { /// /// 绑定的数据源 /// private List _dataSource = null; /// /// 当前选择的项 /// private MetroTileItem _selectedItem = null; public TableAttributeX() { InitializeComponent(); this.BackColor = Color.Transparent; } protected override void OnPaint(PaintEventArgs e) { Rectangle rect = new Rectangle(0 , 0 , this.Width , this.Height); ControlPaint.DrawBorder(e.Graphics , rect , Color.Transparent , ButtonBorderStyle.Solid); } protected override void OnLoad(EventArgs e) { base.OnLoad(e); if (this.DesignMode) return; this.Height = (this.Visible ? this.ItemHeight : 0); this.InitTableStatus(); this.InitTableAttribute(); this.BindDataSource(); } private void InitTableAttribute() { try { this._dataSource = new List(); var entity = new TableAttribute(); entity.Id = Constant.ALL_TABLE_TAG; entity.Name = "全部"; entity.Expression = string.Empty; entity.TableStatus = -1; this._dataSource.Add(entity); entity = new TableAttribute(); entity.Id = IdWorkerUtils.Instance.NextId(); entity.Name = "4人桌"; entity.Expression = " = 4 "; entity.TableStatus = -1; this._dataSource.Add(entity); entity = new TableAttribute(); entity.Id = IdWorkerUtils.Instance.NextId(); entity.Name = "6人桌"; entity.Expression = " = 6 "; entity.TableStatus = -1; this._dataSource.Add(entity); entity = new TableAttribute(); entity.Id = IdWorkerUtils.Instance.NextId(); entity.Name = "8人以上"; entity.Expression = " >= 8 "; entity.TableStatus = -1; this._dataSource.Add(entity); } catch (Exception ex) { LOGGER.Error(ex , "加载桌台属性异常"); } } private void InitTableStatus() { this.leftPanel.Controls.Clear(); var dic = EnumHelper.EnumSortedDictionary(typeof(TableStatus)); dic.Reverse(); foreach (var item in dic) { var ctrl = new TouchLabelX(); ctrl.Font = new System.Drawing.Font("宋体" , 10.5F , System.Drawing.FontStyle.Regular , System.Drawing.GraphicsUnit.Point , ((byte)(134))); ctrl.SymbolColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))) , ((int)(((byte)(0)))) , ((int)(((byte)(0))))); ctrl.SymbolSize = 10F; ctrl.Tag = item.Key; ctrl.Text = item.Value; ctrl.TextAlignment = DevComponents.DotNetBar.eStyleTextAlignment.Near; ctrl.TextLineAlignment = DevComponents.DotNetBar.eStyleTextAlignment.Center; ctrl.Symbol = "\uf10c"; ctrl.Dock = DockStyle.Right; ctrl.Width = 55; ctrl.TouchClick += this.OnTableStatusTouchClick; this.leftPanel.Controls.Add(ctrl); } this.leftPanel.AutoSize = true; } private void BindDataSource() { try { if (this._dataSource == null) { return; } //总记录 this.TotalCount = this._dataSource.Count; //每页的显示数量 this.PageSize = this.Rows * this.Columns; //清空历史数据 itemPanel.Items.Clear(); this.itemPanel.Font = this.GetSystemFont(this.FontSize); var pager = this.ListPager(this._dataSource); ItemContainer ic = new ItemContainer(); ic.MultiLine = (this.Rows > 1); ic.ItemSpacing = 2; ic.LayoutOrientation = eOrientation.Horizontal; foreach (var entity in pager) { MetroTileItem item = this.GetItemTemplate(); item.Name = entity.Id; item.Checked = false; //绑定到Tag属性 item.Tag = entity; //绑定编码到TitleText属性 //item.TitleText = entity.No; //绑定名称到Text属性 item.Text = entity.Name; ic.SubItems.Add(item); if (this._selectedItem == null) { this._selectedItem = item; } } this.itemPanel.Items.Add(ic); this.itemPanel.Invalidate(); } catch (Exception ex) { LOGGER.Error(ex , "绑定桌台数据源异常"); } finally { if (this._selectedItem != null) { //选中情况下的文字颜色 this._selectedItem.TileStyle.TextColor = ColorTranslator.FromHtml(this.TextColor2); this._selectedItem.TitleTextColor = ColorTranslator.FromHtml(this.TextColor2); //选中情况下的背景颜色 this._selectedItem.TileStyle.BackColor = ColorTranslator.FromHtml(this.BackColor2); this._selectedItem.TileStyle.BackColor2 = ColorTranslator.FromHtml(this.BackColor2); //边框颜色 this._selectedItem.TileStyle.BorderColor = ColorTranslator.FromHtml(this.BackColor2); this._selectedItem.TileStyle.BorderColor2 = ColorTranslator.FromHtml(this.BackColor2); } } } private MetroTileItem GetItemTemplate() { MetroTileItem template = new MetroTileItem(); template.TileStyle.PaddingLeft = template.TileStyle.PaddingRight = -2; template.EnableMarkup = true; template.OptionGroup = "TableAttributeX"; template.CheckBehavior = eMetroTileCheckBehavior.LeftMouseButtonClick; template.TileStyle.Font = itemPanel.Font; //对齐方式 template.TileStyle.TextAlignment = DevComponents.DotNetBar.eStyleTextAlignment.Center; template.TileStyle.TextLineAlignment = DevComponents.DotNetBar.eStyleTextAlignment.Center; //正常情况下的文字颜色 template.TileStyle.TextColor = ColorTranslator.FromHtml(this.TextColor1); template.TitleTextColor = ColorTranslator.FromHtml(this.TextColor1); //正常情况下的背景颜色 template.TileStyle.BackColor = ColorTranslator.FromHtml(this.BackColor1); template.TileStyle.BackColor2 = ColorTranslator.FromHtml(this.BackColor1); //无边框 template.TileStyle.BorderColor = Color.Transparent; template.TileStyle.BorderColor2 = Color.Transparent; template.TileStyle.BorderWidth = 1; template.TileStyle.CornerDiameter = 6; template.TileStyle.CornerType = eCornerType.Rounded; //显示大小 template.TileSize = new Size(this.ItemWidth , this.ItemHeight); template.MouseDown += OnMouseDown; return template; } private void OnMouseDown(object sender , MouseEventArgs e) { MetroTileItem current = (MetroTileItem)sender; current.Checked = false; foreach (BaseItem item in current.Parent.SubItems) { if (item == current) { continue; } MetroTileItem b = item as MetroTileItem; if (b != null && b.OptionGroup == current.OptionGroup) { //正常情况下的文字颜色 b.TileStyle.TextColor = ColorTranslator.FromHtml(this.TextColor1); b.TitleTextColor = ColorTranslator.FromHtml(this.TextColor1); //正常情况下的背景颜色 b.TileStyle.BackColor = ColorTranslator.FromHtml(this.BackColor1); b.TileStyle.BackColor2 = ColorTranslator.FromHtml(this.BackColor1); //无边框 b.TileStyle.BorderColor = Color.Transparent; b.TileStyle.BorderColor2 = Color.Transparent; } } this._selectedItem = current; //选中情况下的文字颜色 current.TileStyle.TextColor = ColorTranslator.FromHtml(this.TextColor2); current.TitleTextColor = ColorTranslator.FromHtml(this.TextColor2); //选中情况下的背景颜色 current.TileStyle.BackColor = ColorTranslator.FromHtml(this.BackColor2); current.TileStyle.BackColor2 = ColorTranslator.FromHtml(this.BackColor2); //边框颜色 current.TileStyle.BorderColor = ColorTranslator.FromHtml(this.BackColor2); current.TileStyle.BorderColor2 = ColorTranslator.FromHtml(this.BackColor2); OnTableAttributeCheckedChanged(new TableAttributeEventArgs((TableAttribute)current.Tag)); } /// /// 获取当前选择的桌台属性 /// public TableAttribute SelectedTableAttribute => this._selectedItem.Tag as TableAttribute; public event TableAttributeEventHandler TableAttributeCheckedChanged; protected virtual void OnTableAttributeCheckedChanged(TableAttributeEventArgs e) { TableAttributeCheckedChanged?.Invoke(this , e); } /// /// 分页List数据 /// /// /// public List ListPager(List data) { var result = new List(); result.AddRange(data.Skip((this.PageNumber - 1) * this.PageSize).Take(this.PageSize)); return result; } /// /// 每页的大小 /// public int PageSize { get; private set; } /// /// 总页数 /// public int PageCount => this.PageSize <= 0 ? 0 : ((this.TotalCount + this.PageSize - 1) / this.PageSize); /// /// 当前页码 /// public int PageNumber { get; set; } /// /// 总数量 /// public int TotalCount { get; private set; } public int Rows { get; } = 1; public int Columns { get; } = 4; /// /// 宽度 /// public int ItemWidth { get; } = 90; /// /// 高度 /// public int ItemHeight { get; } = 45; /// /// 正常背景颜色 /// public string BackColor1 { get; set; } = ColorTranslator.ToHtml(Color.Transparent); /// /// 选中后背景颜色 /// public string BackColor2 { get; set; } = ColorTranslator.ToHtml(Color.DimGray); /// /// 字体大小 /// public SystemFont FontSize { get; set; } = SystemFont.默认; /// /// 正常文字颜色 /// public string TextColor1 { get; set; } = ColorTranslator.ToHtml(Color.Black); /// /// 选中的颜色 /// public string TextColor2 { get; set; } = ColorTranslator.ToHtml(Color.White); private void OnTableStatusTouchClick(object sender , EventArgs e) { var current = sender as TouchLabelX; var items = this.leftPanel.Controls; foreach(var item in items) { if (item == current) continue; ((TouchLabelX)item).Symbol = "\uf10c"; } current.Symbol = "\uf111"; var selected = (TableAttribute)this._selectedItem.Tag; selected.TableStatus = Convert.ToInt16(current.Tag); OnTableAttributeCheckedChanged(new TableAttributeEventArgs(selected)); } } public delegate void TableAttributeEventHandler(object sender , TableAttributeEventArgs e); public class TableAttributeEventArgs : EventArgs { public TableAttribute Data; public TableAttributeEventArgs(TableAttribute data) { this.Data = data; } } public class TableAttribute { /// /// 本地主键 /// public string Id { get; set; } /// /// 名称 /// public string Name { get; set; } /// /// 条件表达式 /// public string Expression { get; set; } = string.Empty; /// /// 桌台状态 /// public int TableStatus { get; set; } = -1; } }