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 POSV.Entity; using POSV.Bean; using DevComponents.DotNetBar.Metro; using DevComponents.DotNetBar; using POSV.Utils; namespace POSV.Component { [ToolboxItem(true)] public partial class TableAreaX : BaseUserControl { /// /// 绑定的数据源 /// private List _dataSource = null; /// /// 当前选择的项 /// private MetroTileItem _selectedItem = null; public TableAreaX() { InitializeComponent(); this.BackColor = Color.Transparent; } protected override void OnLoad(EventArgs e) { base.OnLoad(e); if (this.DesignMode) return; //当前页码 this.PageNumber = 1; this.Height = (this.Visible ? this.Rows * this.ItemHeight : 0); this.InitTableArea(); this.BindDataSource(); } private void InitTableArea() { try { this._dataSource = new List(); //当前的桌台 using (var db = Global.Instance.OpenDataBase) { this._dataSource = db.Query().ToList(); } } catch (Exception ex) { LOGGER.Error(ex , "加载桌台异常"); } } 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); } private void BindDataSource() { try { if (this._dataSource == null) { return; } if(this._dataSource.Count > 0 && !this._dataSource.Exists(x=>x.No.Equals(Constant.ALL_TABLE_TAG))) { var all = new TableArea(); all.Id = IdWorkerUtils.Instance.NextId(); all.No = Constant.ALL_TABLE_TAG; all.Name = "全部"; this._dataSource.Insert(0 , all); } //总记录 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); } } } /// /// 获取当前选择的桌台区域 /// public TableArea SelectedTableArea => this._selectedItem.Tag as TableArea; /// /// 分页List数据 /// /// /// public List ListPager(List data) { var result = new List(); result.AddRange(data.Skip((this.PageNumber - 1) * this.PageSize).Take(this.PageSize)); return result; } private MetroTileItem GetItemTemplate() { MetroTileItem template = new MetroTileItem(); template.TileStyle.PaddingLeft = template.TileStyle.PaddingRight = -2; template.EnableMarkup = true; template.OptionGroup = "TableX"; 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; switch (this.TableAreaCornerType) { case CornerType.默认: { template.TileStyle.CornerType = eCornerType.Square; } break; case CornerType.圆角: { template.TileStyle.CornerType = eCornerType.Rounded; } break; case CornerType.棱角: { template.TileStyle.CornerType = eCornerType.Diagonal; } break; } //显示大小 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); OnTableAreaCheckedChanged(new TableAreaEventArgs((TableArea)current.Tag)); } /// /// 每页的大小 /// 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; } = 7; /// /// 宽度 /// 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); /// /// 显示样式 /// public CornerType TableAreaCornerType { get; set; } = CornerType.圆角; public event TableAreaEventHandler TableAreaCheckedChanged; protected virtual void OnTableAreaCheckedChanged(TableAreaEventArgs e) { TableAreaCheckedChanged?.Invoke(this, e); } } public delegate void TableAreaEventHandler(object sender, TableAreaEventArgs e); public class TableAreaEventArgs : EventArgs { public TableArea Data; public TableAreaEventArgs(TableArea data) { this.Data = data; } } }