You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

366 lines
12 KiB
C#

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
{
/// <summary>
/// 绑定的数据源
/// </summary>
private List<TableArea> _dataSource = null;
/// <summary>
/// 当前选择的项
/// </summary>
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<TableArea>();
//当前的桌台
using (var db = Global.Instance.OpenDataBase)
{
this._dataSource = db.Query<TableArea>().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);
}
}
}
/// <summary>
/// 获取当前选择的桌台区域
/// </summary>
public TableArea SelectedTableArea => this._selectedItem.Tag as TableArea;
/// <summary>
/// 分页List数据
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public List<TableArea> ListPager(List<TableArea> data)
{
var result = new List<TableArea>();
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));
}
/// <summary>
/// 每页的大小
/// </summary>
public int PageSize { get; private set; }
/// <summary>
/// 总页数
/// </summary>
public int PageCount => this.PageSize <= 0 ? 0 : ((this.TotalCount + this.PageSize - 1) / this.PageSize);
/// <summary>
/// 当前页码
/// </summary>
public int PageNumber { get; set; }
/// <summary>
/// 总数量
/// </summary>
public int TotalCount { get; private set; }
public int Rows { get; } = 1;
public int Columns { get; } = 7;
/// <summary>
/// 宽度
/// </summary>
public int ItemWidth { get; } = 90;
/// <summary>
/// 高度
/// </summary>
public int ItemHeight { get; } = 45;
/// <summary>
/// 正常背景颜色
/// </summary>
public string BackColor1 { get; set; } = ColorTranslator.ToHtml(Color.Transparent);
/// <summary>
/// 选中后背景颜色
/// </summary>
public string BackColor2 { get; set; } = ColorTranslator.ToHtml(Color.DimGray);
/// <summary>
/// 字体大小
/// </summary>
public SystemFont FontSize { get; set; } = SystemFont.;
/// <summary>
/// 正常文字颜色
/// </summary>
public string TextColor1 { get; set; } = ColorTranslator.ToHtml(Color.Black);
/// <summary>
/// 选中的颜色
/// </summary>
public string TextColor2 { get; set; } = ColorTranslator.ToHtml(Color.White);
/// <summary>
/// 显示样式
/// </summary>
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;
}
}
}