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#
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;
|
|
}
|
|
}
|
|
}
|