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.

2239 lines
82 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using POSV.Entity;
using DevComponents.DotNetBar.Metro;
using DevComponents.DotNetBar;
using POSV.MessageEvent;
using POSV.Utils;
using OfficePickers.ColorPicker;
using DevComponents.DotNetBar.Controls;
using System.ComponentModel;
using System.Threading;
using POSV.Bean;
using POS.Language.Language;
namespace POSV.Component
{
[ToolboxItem(true)]
public partial class MenuControlDesigner : BaseUserControl
{
/// <summary>
/// 子菜单最大可显示的数量
/// </summary>
private int SubMenuMaxCount = 12;
/// <summary>
/// 数据库的模块数据
/// </summary>
private List<ModuleMenu> _dataSource = null;
/// <summary>
/// 当前选中的功能块
/// </summary>
private MetroTileItem _selectedItem = null;
/// <summary>
/// 当前选中功能所在的操作区
/// </summary>
private ModuleArea _selectedArea = ModuleArea.;
/// <summary>
/// 区域字段,用来出来选择某一个区域后,其他区域的处理
/// </summary>
private Dictionary<ModuleArea, ItemPanel> _itemPanel = null;
/// <summary>
/// 资源分组字段,用来出来选择某一个分组
/// </summary>
private Dictionary<ResourcesGroup, ItemPanel> _resourceItemPanel = null;
/// <summary>
/// 数据库的资源数据
/// </summary>
private List<Resources> _resourceDataSource = null;
/// <summary>
/// 默认宽度
/// </summary>
private static int DefaultWidth = 55;
/// <summary>
/// 默认高度
/// </summary>
private static int DefaultHeight = 50;
/// <summary>
/// 默认大小
/// </summary>
private readonly Size DefaultTileItemSize = new Size(DefaultWidth, DefaultHeight);
public MenuControlDesigner()
{
InitializeComponent();
this._itemPanel = new Dictionary<ModuleArea, ItemPanel>();
this._itemPanel.Add(ModuleArea., this.menuItemPanel);
this._itemPanel.Add(ModuleArea., this.subMenuItemPanel);
this._itemPanel.Add(ModuleArea., this.billItemPanel);
this._itemPanel.Add(ModuleArea., this.keyboardItemPanel);
this._itemPanel.Add(ModuleArea., this.toolsItemPanel);
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (this.DesignMode) return;
//获取数据库的数据
using (var db = Global.Instance.OpenDataBase)
{
this._dataSource = db.Query<ModuleMenu>().ToList();
this._resourceDataSource = db.Query<Resources>().ToList();
}
//如果数据库数据为空
if (this._dataSource == null)
{
this._dataSource = new List<ModuleMenu>();
}
//如果数据库数据为空
if (this._resourceDataSource == null)
{
this._resourceDataSource = new List<Resources>();
}
this._resourceItemPanel = new Dictionary<ResourcesGroup, ItemPanel>();
//字体支持列表
this.comboBoxFontSize.DataSource = System.Enum.GetNames(typeof(ModuleFont));
this.comboBoxFontSize.SelectedIndex = 0;
//布局支持列表
this.comboBoxLayout.DataSource = System.Enum.GetNames(typeof(ModuleLayout));
this.comboBoxLayout.SelectedIndex = 2;
//显示样式
this.comboBoxCornerType.DataSource = System.Enum.GetNames(typeof(CornerType));
this.comboBoxCornerType.SelectedIndexChanged += this.OnCornerTypeSelectedChanged;
RefreshUi();
}
private void RefreshUi()
{
//构建资源区
this.BuilderResourceTabItem();
//初始化主菜单
BuilderMainMenuItemPanel(null);
//初始化结账区
BuilderBillItemPanel(null);
//初始化工具区
BuilderToolsItemPanel(null);
//初始化键盘区
BuilderKeyboardItemPanel(null);
//不显示工具区
this.checkBoxTools.Checked = Global.Instance.GlobalConfigBoolValue(ConfigConstant.SYSTEM_NOT_ALLOW_TOOLS_SHOW, false);
//不显示主菜单
this.checkBoxMenu.Checked = Global.Instance.GlobalConfigBoolValue(ConfigConstant.SYSTEM_NOT_ALLOW_MENUS_SHOW, false);
//不显示结账区
this.checkBoxBill.Checked = Global.Instance.GlobalConfigBoolValue(ConfigConstant.SYSTEM_NOT_ALLOW_BILLS_SHOW, false);
//显示样式
var cornerType = Global.Instance.GlobalConfigStringValue(ConfigConstant.SYSTEM_SHOW_MENU_STYLE, CornerType..ToString());
this.comboBoxCornerType.SelectedIndex = this.comboBoxCornerType.FindString(cornerType.ToString());
}
private void BuilderResourceTabItem()
{
this._resourceItemPanel.Clear();
this.superTabControl.Tabs.Clear();
foreach (ResourcesGroup item in Enum.GetValues(typeof(ResourcesGroup)))
{
//如果数据表中不包含资源,不显示
var lists = this._resourceDataSource.FindAll(x => x.Enable == 1 && x.Group == item.ToString());
if (lists.Count == 0 || item == ResourcesGroup.) continue;
SuperTabItem tab = this.superTabControl.CreateTab(LangProxy.ToLang(item.ToString()));
ItemPanel panel = new ItemPanel();
panel.BackgroundStyle.Class = "ItemPanel";
panel.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
panel.Dock = System.Windows.Forms.DockStyle.Fill;
panel.LicenseKey = "F962CEC7-CD8F-4911-A9E9-CAB39962FC1F";
panel.Location = new System.Drawing.Point(0, 0);
panel.MultiLine = true;
tab.AttachedControl.Controls.Add(panel);
this._resourceItemPanel.Add(item, panel);
this.BindResourceTabItem(panel, lists);
}
this.superTabControl.ControlBox.SubItems.Clear();
ButtonItem bi = null;
#if DEBUG
bi = new ButtonItem();
bi.Text = LangProxy.ToLang("注册资源");
bi.CustomColorName = "ControlBoxColorTable";
bi.ForeColor = Color.White;
bi.Click += AddResourceExClick;
this.superTabControl.ControlBox.SubItems.Add(bi);
#endif
bi = new ButtonItem();
bi.Text = LangProxy.ToLang("自定义优惠");
bi.CustomColorName = "ControlBoxColorTable";
bi.ForeColor = Color.White;
bi.Click += AddResourceClick;
this.superTabControl.ControlBox.SubItems.Add(bi);
bi = new ButtonItem();
bi.Text = LangProxy.ToLang("自定义支付");
bi.CustomColorName = "ControlBoxColorTable";
bi.ForeColor = Color.White;
bi.Click += AddPaymentClick;
this.superTabControl.ControlBox.SubItems.Add(bi);
}
void AddPaymentClick(object sender, System.EventArgs e)
{
AddPaymentForm form = new AddPaymentForm();
DialogResult result = form.ShowDialog();
if (result == DialogResult.OK)
{
RefreshBindResourceTabItem();
}
}
void AddResourceClick(object sender, System.EventArgs e)
{
AddResourceForm form = new AddResourceForm();
DialogResult result = form.ShowDialog();
if (result == DialogResult.OK)
{
RefreshBindResourceTabItem();
}
}
void AddResourceExClick(object sender, System.EventArgs e)
{
AddResourceFormEx form = new AddResourceFormEx();
DialogResult result = form.ShowDialog();
if (result == DialogResult.OK)
{
RefreshBindResourceTabItem();
}
}
private void RefreshBindResourceTabItem()
{
lock (Global.Instance.SyncLock)
{
//获取数据库的资源数据
using (var db = Global.Instance.OpenDataBase)
{
this._resourceDataSource = db.Query<Resources>().ToList();
}
}
//如果数据库数据为空
if (this._resourceDataSource == null)
{
this._resourceDataSource = new List<Resources>();
}
BuilderResourceTabItem();
this._selectedItem.Checked = false;
this._selectedItem.Checked = true;
}
private void BindResourceTabItem(ItemPanel panel, List<Resources> lists)
{
foreach (ResourcesGroup group in Enum.GetValues(typeof(ResourcesGroup)))
{
panel.Items.Clear();
ItemContainer ic = new ItemContainer();
ic.MultiLine = true;
foreach (Resources entity in lists)
{
MetroTileItem item = new MetroTileItem();
item.TileStyle.Padding = -2;
item.CheckBehavior = eMetroTileCheckBehavior.LeftMouseButtonClick;
item.Text = LangProxy.ToLang(entity.Name);
item.TileStyle.Font = Constant.NORMAL_FONT;
item.TileStyle.TextAlignment = eStyleTextAlignment.Center;
item.SymbolColor = Color.Empty;
item.TileColor = eMetroTileColor.Gray;
item.TileSize = new Size(81, 40);
item.Description = Convert.ToString(bool.FalseString);
item.Tag = entity;
item.MouseDown += ResourceItemPanelMouseDown;
ic.SubItems.Add(item);
}
panel.Items.Add(ic);
panel.Invalidate();
}
}
private void ResourceItemPanelMouseDown(object sender, MouseEventArgs e)
{
MetroTileItem item = (MetroTileItem)sender;
item.Checked = false;
var _checked = false;
bool.TryParse(item.Description, out _checked);
var result = !_checked;
switch (this._selectedArea)
{
case ModuleArea.:
{
var parent = this._selectedItem.Tag as ModuleMenu;
//当前模块下已经选择功能
var lists = this._dataSource.FindAll(x => x.ParentId == parent.Id);
if (lists.Count + 1 > this.SubMenuMaxCount)
{
result = false;
}
item.Description = Convert.ToString(result);
item.TileColor = result ? eMetroTileColor.Azure : eMetroTileColor.Gray;
if (result)
{
//资源功能添加到模块
ResourceSelectedNotify(ModuleAction.Add, item.Tag as Resources);
}
else
{
//资源功能刪除到模块
ResourceSelectedNotify(ModuleAction.Delete, item.Tag as Resources);
}
}
break;
case ModuleArea.:
{
var module = this._selectedItem.Tag as ModuleMenu;
//当前模块下已经选择功能
var lists = this._dataSource.FindAll(x => x.ParentId == module.ParentId);
if (lists.Count + 1 > this.SubMenuMaxCount)
{
result = false;
}
item.Description = Convert.ToString(result);
item.TileColor = result ? eMetroTileColor.Azure : eMetroTileColor.Gray;
if (result)
{
//资源功能添加到模块
ResourceSelectedNotify(ModuleAction.Add, item.Tag as Resources, module.ParentId);
}
else
{
//资源功能刪除到模块
ResourceSelectedNotify(ModuleAction.Delete, item.Tag as Resources, module.ParentId);
}
}
break;
case ModuleArea.:
case ModuleArea.:
{
if (result)
{
//资源功能替换到模块
ResourceSelectedNotify(ModuleAction.Replace, item.Tag as Resources);
}
}
break;
}
}
private Font GetFont(string fontSize)
{
Font result = Constant.DEFAULT_FONT;
ModuleFont font = ModuleFont.;
Enum.TryParse<ModuleFont>(fontSize, out font);
switch (font)
{
case ModuleFont.:
{
result = Constant.DEFAULT_FONT;
}
break;
case ModuleFont.:
{
result = Constant.NORMAL_FONT;
}
break;
case ModuleFont.:
{
result = Constant.SMALL_FONT;
}
break;
case ModuleFont.:
{
result = Constant.BIG_FONT;
}
break;
}
return result;
}
/// <summary>
/// 初始化主菜单
/// </summary>
private void BuilderMainMenuItemPanel(ModuleMenu module)
{
this.menuItemPanel.Items.Clear();
ItemContainer ic = new ItemContainer();
ic.MultiLine = false;
ic.ItemSpacing = 1;
//加载菜单显示区域为主菜单的数据
var lists = this._dataSource.FindAll(x => string.IsNullOrEmpty(x.ParentId) && ModuleArea..ToString().Equals(x.Area));
lists.Sort((x, y) => (x.OrderNo.CompareTo(y.OrderNo)));
int inx = 0;
MetroTileItem first = null;
foreach (ModuleMenu entity in lists)
{
MetroTileItem item = new MetroTileItem();
item.TileStyle.Padding = -2;
item.CheckBehavior = eMetroTileCheckBehavior.LeftMouseButtonClick;
item.Checked = false;
item.OptionGroup = "MainMenu";
item.TileStyle.Font = GetFont(entity.FontSize);
item.TileStyle.TextAlignment = eStyleTextAlignment.Center;
item.Text = LangProxy.ToLang(string.IsNullOrEmpty(entity.Alias) ? entity.Name : entity.Alias);
item.TileStyle.TextColor = ColorTranslator.FromHtml(entity.Color3);
item.TileStyle.BackColor = ColorTranslator.FromHtml(entity.Color1);
item.TileStyle.BackColor2 = ColorTranslator.FromHtml(entity.Color1);
item.TileStyle.BorderColor = Color.Transparent;
item.TileStyle.BorderColor2 = Color.Transparent;
this.ChangedCornerType(item, entity);
item.Tag = entity;
////微调控件宽度,避免对齐误差
//if (inx >= 3 && inx <= 5)
//{
// item.TileSize = new Size(DefaultWidth + 1, DefaultHeight);
//}
//else
//{
// item.TileSize = this.DefaultTileItemSize;
//}
item.TileSize = this.DefaultTileItemSize;
item.Tag = entity;
item.MouseDown += OnMainMenuMouseDown;
item.CheckedChanged += OnMainMenuCheckedChanged;
if (module != null && module.Id.Equals(entity.Id))
{
this._selectedItem = item;
}
//保留第一项的选择机会
if (first == null)
{
first = item;
}
ic.SubItems.Add(item);
inx++;
}
this.menuItemPanel.Items.Add(ic);
this.menuItemPanel.Invalidate();
//没有匹配到具体的模块,将第一个主菜单选中
if (this._selectedItem == null)
{
this._selectedItem = first;
}
//选中当前菜单
if (this._selectedItem != null)
{
this._selectedItem.Checked = true;
}
}
private void OnMainMenuMouseDown(object sender, MouseEventArgs e)
{
MetroTileItem item = (MetroTileItem)sender;
item.Checked = true;
}
/// <summary>
/// 主菜单选中事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnMainMenuCheckedChanged(object sender, EventArgs e)
{
MetroTileItem item = (MetroTileItem)sender;
//边框透明
item.TileStyle.BorderColor = Color.Transparent;
item.TileStyle.BorderColor2 = Color.Transparent;
//当前的主菜单对象
var entity = item.Tag as ModuleMenu;
if (item.Checked)
{
//设置当前选择的模块
this._selectedItem = item;
//设置当前操作的区域
this._selectedArea = (ModuleArea)Enum.Parse(typeof(ModuleArea), entity.Area.ToString());
//设置背景色
item.TileStyle.BackColor = ColorTranslator.FromHtml(entity.Color2);
item.TileStyle.BackColor2 = ColorTranslator.FromHtml(entity.Color2);
if (entity != null)
{
//当前选择的模块为父节点,构建二级菜单
BuilderSubMenuItemPanel(entity);
}
//绑定参数
BindModuleParameter(entity);
//通知资源控件更新
SendToResources(this.SubMenuMaxCount, entity);
}
else
{
item.TileStyle.BackColor = ColorTranslator.FromHtml(entity.Color1);
item.TileStyle.BackColor2 = ColorTranslator.FromHtml(entity.Color1);
}
//更新其他区域的选中状态
ChangedOtherItemPanel();
}
private void BindModuleParameter(ModuleMenu module)
{
if (module == null)
{
this.txtAlias.Text = string.Empty;
this.comboBoxColor1.Color = Color.Tan;
this.comboBoxColor2.Color = Color.Tan;
this.comboBoxColor3.Color = Color.Black;
ModuleFont defaultFontSize = ModuleFont.;
this.comboBoxFontSize.SelectedIndex = this.comboBoxFontSize.FindString(defaultFontSize.ToString());
ModuleLayout defaultLayout = ModuleLayout.;
this.comboBoxLayout.SelectedIndex = this.comboBoxLayout.FindString(defaultLayout.ToString());
return;
}
this.txtAlias.Enabled = false;
this.txtAlias.Text = LangProxy.ToLang(module.Alias);
this.comboBoxColor1.Color = ColorTranslator.FromHtml(module.Color1);
this.comboBoxColor2.Color = ColorTranslator.FromHtml(module.Color2);
this.comboBoxColor3.Color = ColorTranslator.FromHtml(module.Color3);
this.comboBoxFontSize.SelectedIndex = this.comboBoxFontSize.FindString(module.FontSize);
ModuleLayout layout = (ModuleLayout)module.Layout;
this.comboBoxLayout.SelectedIndex = this.comboBoxLayout.FindString(layout.ToString());
switch (this._selectedArea)
{
case ModuleArea.:
case ModuleArea.:
{
//运行修改别名
this.txtAlias.Enabled = true;
//允许修改布局
this.comboBoxLayout.Enabled = true;
}
break;
case ModuleArea.:
{
//键盘区禁止编辑别名
this.txtAlias.Text = LangProxy.ToLang("不支持修改");
//禁止修改布局
this.comboBoxLayout.Enabled = false;
}
break;
default:
{
//运行修改别名
this.txtAlias.Enabled = true;
//禁止修改布局
this.comboBoxLayout.Enabled = false;
}
break;
}
}
/// <summary>
/// 初始化结账区
/// </summary>
private void BuilderBillItemPanel(ModuleMenu module)
{
this.billItemPanel.Items.Clear();
ItemContainer ic = new ItemContainer();
ic.MultiLine = false;
//加载菜单显示区域为结账区的数据
var lists = this._dataSource.FindAll(x => !string.IsNullOrEmpty(x.ParentId) && ModuleArea..ToString().Equals(x.Area));
lists.Sort((x, y) => (x.OrderNo.CompareTo(y.OrderNo)));
foreach (ModuleMenu entity in lists)
{
MetroTileItem item = new MetroTileItem();
item.TileStyle.Padding = -2;
item.CheckBehavior = eMetroTileCheckBehavior.LeftMouseButtonClick;
item.Checked = false;
item.OptionGroup = "Bill";
item.TileStyle.Font = GetFont(entity.FontSize);
item.TileStyle.TextAlignment = eStyleTextAlignment.Center;
item.Text = LangProxy.ToLang(string.IsNullOrEmpty(entity.Alias) ? entity.Name : entity.Alias);
item.TileSize = this.DefaultTileItemSize;
item.TileStyle.TextColor = ColorTranslator.FromHtml(entity.Color3);
item.TileStyle.BackColor = ColorTranslator.FromHtml(entity.Color1);
item.TileStyle.BackColor2 = ColorTranslator.FromHtml(entity.Color1);
item.TileStyle.BorderColor = Color.Transparent;
item.TileStyle.BorderColor2 = Color.Transparent;
this.ChangedCornerType(item, entity);
item.Tag = entity;
item.MouseDown += OnBillMouseDown;
item.CheckedChanged += OnBillCheckedChanged;
ic.SubItems.Add(item);
if (module != null && module.Id.Equals(entity.Id))
{
item.Checked = true;
}
}
this.billItemPanel.Items.Add(ic);
this.billItemPanel.Invalidate();
}
/// <summary>
/// 初始化工具区
/// </summary>
private void BuilderToolsItemPanel(ModuleMenu module)
{
this.toolsItemPanel.Items.Clear();
ItemContainer ic = new ItemContainer();
ic.MultiLine = true;
//加载菜单显示区域为工具区的数据
var lists = this._dataSource.FindAll(x => !string.IsNullOrEmpty(x.ParentId) && ModuleArea..ToString().Equals(x.Area));
lists.Sort((x, y) => (x.OrderNo.CompareTo(y.OrderNo)));
foreach (ModuleMenu entity in lists)
{
MetroTileItem item = new MetroTileItem();
item.CheckBehavior = eMetroTileCheckBehavior.LeftMouseButtonClick;
item.Checked = false;
item.OptionGroup = "Tools";
item.TileStyle.Font = GetFont(entity.FontSize);
item.TileSize = new Size(36, DefaultHeight);
// 最后一个按钮
if (entity.OrderNo == 4)
{
item.ImageTextAlignment = ContentAlignment.MiddleCenter;
item.Symbol = StringUtils.DecodeUnicode("\uf00a");
item.SymbolSize = 18;
}
else
{
item.TileStyle.TextAlignment = eStyleTextAlignment.Center;
item.Text = LangProxy.ToLang(string.IsNullOrEmpty(entity.Alias) ? entity.Name : entity.Alias);
}
item.TileStyle.BorderColor = Color.Transparent;
item.TileStyle.BorderColor2 = Color.Transparent;
item.TileStyle.TextColor = ColorTranslator.FromHtml(entity.Color3);
item.TileStyle.BackColor = ColorTranslator.FromHtml(entity.Color1);
item.TileStyle.BackColor2 = ColorTranslator.FromHtml(entity.Color1);
this.ChangedCornerType(item, entity);
item.Tag = entity;
item.MouseDown += OnToolsMouseDown;
item.CheckedChanged += OnToolsCheckedChanged;
ic.SubItems.Add(item);
if (module != null && module.Id.Equals(entity.Id))
{
item.Checked = true;
}
}
this.toolsItemPanel.Items.Add(ic);
this.toolsItemPanel.Invalidate();
}
protected void ResourceSelectedNotify(ModuleAction action, Resources resources, string parentId = null)
{
//当前选择的模块菜单
var module = this._selectedItem.Tag as ModuleMenu;
//当前模块下已经选择功能
var lists = this._dataSource.FindAll(x => x.ParentId == (string.IsNullOrEmpty(parentId) ? module.Id : parentId));
lists.Sort((x, y) => (x.OrderNo.CompareTo(y.OrderNo)));
switch (action)
{
case ModuleAction.Add:
{
//不包含当前资源的就添加
if (!lists.Exists(x => x.ResourceId == resources.Id))
{
var entity = new ModuleMenu();
entity.Id = IdWorkerUtils.Instance.NextId();
entity.Area = ModuleArea..ToString();
entity.ParentId = (string.IsNullOrEmpty(parentId) ? module.Id : parentId);
entity.TenantId = module.TenantId;
entity.Name = resources.Name;
entity.KeyCode = resources.KeyCode;
entity.KeyData = resources.KeyData;
entity.Alias = resources.Name;
entity.Shortcut = "";
entity.OrderNo = lists.Count();
entity.Color1 = ColorTranslator.ToHtml(this.comboBoxColor1.Color);
entity.Color2 = ColorTranslator.ToHtml(this.comboBoxColor2.Color);
entity.Color3 = ColorTranslator.ToHtml(this.comboBoxColor3.Color);
entity.FontSize = ModuleFont..ToString();
entity.Enable = 1;
entity.Icon = @"\uf023";
entity.ResourceId = resources.Id;
var layout = (ModuleLayout)Enum.Parse(typeof(ModuleLayout), this.comboBoxLayout.SelectedItem.ToString(), false);
entity.Layout = (int)layout;
this._dataSource.Add(entity);
}
}
break;
case ModuleAction.Delete:
{
this._dataSource.RemoveAll(x => x.ParentId == module.Id && x.ResourceId == resources.Id);
}
break;
case ModuleAction.Replace:
{
//ResourceId不同视为更换操作
if (!resources.Id.Equals(module.Id))
{
module.Name = resources.Name;
module.KeyCode = resources.KeyCode;
module.ResourceId = resources.Id;
module.KeyData = resources.KeyData;
module.Alias = resources.Name;
}
}
break;
}
RefreshOrderNo();
switch (this._selectedArea)
{
case ModuleArea.:
{
BuilderSubMenuItemPanel(module);
}
break;
case ModuleArea.:
{
BuilderToolsItemPanel(module);
}
break;
case ModuleArea.:
{
BuilderBillItemPanel(module);
}
break;
}
}
/// <summary>
/// 构建自定义布局
/// </summary>
/// <param name="parent"></param>
private void DefaultLayoutSubMenuItemPanel(ModuleMenu parent)
{
this.subMenuItemPanel.Items.Clear();
ItemContainer ic = new ItemContainer();
ic.MultiLine = true;
//当前模块下已经选择功能
var lists = this._dataSource.FindAll(x => x.ParentId == parent.Id);
lists.Sort((x, y) => (x.OrderNo.CompareTo(y.OrderNo)));
var current = this._selectedItem.Tag as ModuleMenu;
int inx = 0;
foreach (ModuleMenu entity in lists)
{
//超出最大子菜单数量
if ((inx + 1) > this.SubMenuMaxCount) break;
entity.Layout = (int)ModuleLayout.;
MetroTileItem item = new MetroTileItem();
item.OptionGroup = "SubMenu";
item.TileStyle.Font = GetFont(entity.FontSize);
item.TileStyle.TextAlignment = eStyleTextAlignment.Center;
item.Text = string.IsNullOrEmpty(entity.Alias) ? entity.Name : entity.Alias;
item.TileSize = this.DefaultTileItemSize;
item.TileStyle.TextColor = ColorTranslator.FromHtml(entity.Color3);
item.TileStyle.BackColor = ColorTranslator.FromHtml(entity.Color1);
item.TileStyle.BackColor2 = ColorTranslator.FromHtml(entity.Color1);
item.TileStyle.BorderColor = Color.Transparent;
item.TileStyle.BorderColor2 = Color.Transparent;
this.ChangedCornerType(item, entity);
item.Tag = entity;
entity.OrderNo = inx++;
if (current != null && ModuleArea..ToString().Equals(current.Area))
{
item.Checked = current.Id == entity.Id;
}
item.MouseDown += OnSubMenuMouseDown;
item.CheckedChanged += OnSubMenuCheckedChanged;
ic.SubItems.Add(item);
}
this.subMenuItemPanel.Items.Add(ic);
this.subMenuItemPanel.Invalidate();
}
private void ClassicLayoutSubMenuItemPanel(ModuleMenu parent)
{
this.subMenuItemPanel.Items.Clear();
//当前模块下已经选择功能
var lists = this._dataSource.FindAll(x => x.ParentId == parent.Id);
lists.Sort((x, y) => (x.OrderNo.CompareTo(y.OrderNo)));
var current = this._selectedItem.Tag as ModuleMenu;
ItemContainer container = new ItemContainer();
container.BackgroundStyle.Class = "MetroTileGroupTitle";
container.MultiLine = true;
container.ItemSpacing = 1;
int inx = 0;
var items = new List<BaseItem>();
foreach (ModuleMenu entity in lists)
{
//超出最大子菜单数量
if ((inx + 1) > this.SubMenuMaxCount) break;
entity.Layout = (int)ModuleLayout.;
MetroTileItem item = new MetroTileItem();
item.OptionGroup = "SubMenu";
item.TileStyle.Font = GetFont(entity.FontSize);
item.TileStyle.TextAlignment = eStyleTextAlignment.Center;
item.Text = LangProxy.ToLang(string.IsNullOrEmpty(entity.Alias) ? entity.Name : entity.Alias);
item.TileStyle.TextColor = ColorTranslator.FromHtml(entity.Color3);
item.TileStyle.BackColor = ColorTranslator.FromHtml(entity.Color1);
item.TileStyle.BackColor2 = ColorTranslator.FromHtml(entity.Color1);
item.TileStyle.BorderColor = Color.Transparent;
item.TileStyle.BorderColor2 = Color.Transparent;
this.ChangedCornerType(item, entity);
item.Tag = entity;
switch (inx++)
{
case 0:
{
item.TileSize = new System.Drawing.Size(DefaultWidth * 2 + 1, DefaultHeight * 2 + 1);
items.Add(item);
}
break;
case 1:
case 2:
{
item.TileSize = new System.Drawing.Size(DefaultWidth, DefaultHeight);
container.SubItems.Add(item);
if (container.SubItems.Count == 1)
{
container.FixedSize = new System.Drawing.Size(DefaultWidth * 2 + 1, DefaultHeight * 2);
items.Add(container);
}
}
break;
case 3:
case 4:
{
item.TileSize = new System.Drawing.Size(DefaultWidth, DefaultHeight);
container.SubItems.Add(item);
//if (container.SubItems.Count == 1)
//{
// container.FixedSize = new System.Drawing.Size(DefaultWidth * 2 , DefaultHeight * 2 + 1);
// items.Add(container);
//}
}
break;
case 5:
{
item.TileSize = new System.Drawing.Size(DefaultWidth * 2 + 1, DefaultHeight);
items.Add(item);
}
break;
default:
{
item.TileSize = this.DefaultTileItemSize;
items.Add(item);
}
break;
}
if (current != null && ModuleArea..ToString().Equals(current.Area))
{
item.Checked = current.Id == entity.Id;
}
item.MouseDown += OnSubMenuMouseDown;
item.CheckedChanged += OnSubMenuCheckedChanged;
}
if (items.Count > 0)
{
this.subMenuItemPanel.Items.AddRange(items.ToArray());
}
this.subMenuItemPanel.Invalidate();
}
private void FreshLayoutSubMenuItemPanel(ModuleMenu parent)
{
this.subMenuItemPanel.Items.Clear();
//当前模块下已经选择功能
var lists = this._dataSource.FindAll(x => x.ParentId == parent.Id);
lists.Sort((x, y) => (x.OrderNo.CompareTo(y.OrderNo)));
var current = this._selectedItem.Tag as ModuleMenu;
ItemContainer container = new ItemContainer();
container.BackgroundStyle.Class = "MetroTileGroupTitle";
container.MultiLine = true;
container.ItemSpacing = 0;
int inx = 0;
var items = new List<BaseItem>();
foreach (ModuleMenu entity in lists)
{
//超出最大子菜单数量
if ((inx + 1) > this.SubMenuMaxCount) break;
entity.Layout = (int)ModuleLayout.;
MetroTileItem item = new MetroTileItem();
item.OptionGroup = "SubMenu";
item.TileStyle.Font = GetFont(entity.FontSize);
item.TileStyle.TextAlignment = eStyleTextAlignment.Center;
item.Text = LangProxy.ToLang(string.IsNullOrEmpty(entity.Alias) ? entity.Name : entity.Alias);
item.TileStyle.TextColor = ColorTranslator.FromHtml(entity.Color3);
item.TileStyle.BackColor = ColorTranslator.FromHtml(entity.Color1);
item.TileStyle.BackColor2 = ColorTranslator.FromHtml(entity.Color1);
item.TileStyle.BorderColor = Color.Transparent;
item.TileStyle.BorderColor2 = Color.Transparent;
this.ChangedCornerType(item, entity);
item.Tag = entity;
switch (inx++)
{
case 0:
{
item.TileSize = new System.Drawing.Size(DefaultWidth * 2, DefaultHeight * 2);
items.Add(item);
}
break;
case 1:
case 2:
{
item.TileSize = new System.Drawing.Size(DefaultWidth * 2, DefaultHeight);
container.SubItems.Add(item);
if (container.SubItems.Count == 1)
{
container.FixedSize = new System.Drawing.Size(DefaultWidth * 2 + 1, DefaultHeight * 2);
items.Add(container);
}
}
break;
case 3:
default:
{
item.TileSize = new System.Drawing.Size(DefaultWidth * 2, DefaultHeight);
items.Add(item);
}
break;
}
if (current != null && ModuleArea..ToString().Equals(current.Area))
{
item.Checked = current.Id == entity.Id;
}
item.MouseDown += OnSubMenuMouseDown;
item.CheckedChanged += OnSubMenuCheckedChanged;
}
if (items.Count > 0)
{
this.subMenuItemPanel.Items.AddRange(items.ToArray());
}
this.subMenuItemPanel.Invalidate();
}
/// <summary>
/// 更具当前选择的模块,构建二级菜单
/// </summary>
/// <param name="module"></param>
private void BuilderSubMenuItemPanel(ModuleMenu parent)
{
var layout = (ModuleLayout)parent.Layout;
var hideBills = Global.Instance.GlobalConfigBoolValue(ConfigConstant.SYSTEM_NOT_ALLOW_BILLS_SHOW, true);
switch (layout)
{
case ModuleLayout.:
{
this.SubMenuMaxCount = hideBills ? 7 : 5;
FreshLayoutSubMenuItemPanel(parent);
}
break;
case ModuleLayout.:
{
this.SubMenuMaxCount = hideBills ? 12 : 8;
ClassicLayoutSubMenuItemPanel(parent);
}
break;
case ModuleLayout.:
default:
{
this.SubMenuMaxCount = hideBills ? 16 : 12;
DefaultLayoutSubMenuItemPanel(parent);
}
break;
}
}
private void OnSubMenuMouseDown(object sender, MouseEventArgs e)
{
MetroTileItem item = (MetroTileItem)sender;
var subItems = this.subMenuItemPanel.Items;
for (int i = 0; i < subItems.Count; i++)
{
var obj = subItems[i];
if (obj.SubItems.Count == 0)
{
var o = obj as MetroTileItem;
o.Checked = false;
}
else
{
var items = obj.SubItems;
foreach (MetroTileItem o in items)
{
o.Checked = false;
}
}
}
item.Checked = true;
}
private void OnSubMenuCheckedChanged(object sender, EventArgs e)
{
MetroTileItem item = (MetroTileItem)sender;
item.TileStyle.BorderColor = Color.Transparent;
item.TileStyle.BorderColor2 = Color.Transparent;
var entity = item.Tag as ModuleMenu;
if (item.Checked)
{
//设置当前选择的模块
this._selectedItem = item;
//设置当前操作的区域
this._selectedArea = (ModuleArea)Enum.Parse(typeof(ModuleArea), this.subMenuItemPanel.Tag.ToString());
item.TileStyle.TextColor = ColorTranslator.FromHtml(entity.Color3);
item.TileStyle.BackColor = ColorTranslator.FromHtml(entity.Color2);
item.TileStyle.BackColor2 = ColorTranslator.FromHtml(entity.Color2);
//绑定参数
BindModuleParameter(entity);
}
else
{
item.TileStyle.TextColor = ColorTranslator.FromHtml(entity.Color3);
item.TileStyle.BackColor = ColorTranslator.FromHtml(entity.Color1);
item.TileStyle.BackColor2 = ColorTranslator.FromHtml(entity.Color1);
}
ChangedOtherItemPanel();
}
private void SendToResources(int maxCount, ModuleMenu module)
{
//当前模块下已经选择功能
var selected = this._dataSource.FindAll(x => x.ParentId == module.Id);
selected.Sort((x, y) => (x.OrderNo.CompareTo(y.OrderNo)));
switch (this._selectedArea)
{
case ModuleArea.:
{
//主菜单允许多选,选中状态为多个
foreach (var panel in this._resourceItemPanel)
{
var items = panel.Value.Items[0].SubItems;
foreach (MetroTileItem o in items)
{
var resource = o.Tag as Resources;
o.OptionGroup = string.Empty;
var _checked = selected.Exists(x => x.ResourceId == resource.Id);
o.Description = Convert.ToString(_checked);
o.TileColor = _checked ? eMetroTileColor.Azure : eMetroTileColor.Gray;
}
}
}
break;
case ModuleArea.:
case ModuleArea.:
{
foreach (var panel in this._resourceItemPanel)
{
var items = panel.Value.Items[0].SubItems;
foreach (MetroTileItem o in items)
{
var resource = o.Tag as Resources;
o.OptionGroup = "Resources";
var _checked = resource.Id.Equals(module.ResourceId);
o.Description = Convert.ToString(_checked);
o.TileColor = _checked ? eMetroTileColor.Azure : eMetroTileColor.Gray;
}
}
}
break;
}
}
/// <summary>
/// 选择操作某一个区域的情况下,其他区域的选中状态改变
/// </summary>
private void ChangedOtherItemPanel()
{
foreach (var panel in this._itemPanel)
{
//忽略当前的
if (panel.Key == this._selectedArea)
{
continue;
}
var itemPanel = panel.Value;
switch (panel.Key)
{
case ModuleArea.:
{
if (itemPanel.Items.Count > 0)
{
var items = itemPanel.Items[0].SubItems;
foreach (MetroTileItem o in items)
{
o.Checked = false;
}
}
}
break;
case ModuleArea.:
{
var subItems = itemPanel.Items;
for (int i = 0; i < subItems.Count; i++)
{
var obj = subItems[i];
if (obj.SubItems.Count == 0)
{
var o = obj as MetroTileItem;
if (o != null)
{
o.Checked = false;
}
}
else
{
var items = obj.SubItems;
foreach (MetroTileItem o in items)
{
o.Checked = false;
}
}
}
}
break;
default:
{
//取消选中状态
if (itemPanel.Items.Count > 0)
{
var items = itemPanel.Items[0].SubItems;
foreach (MetroTileItem o in items)
{
o.Checked = false;
}
}
}
break;
}
}
}
/// <summary>
/// 初始化键盘区
/// </summary>
private void BuilderKeyboardItemPanel(ModuleMenu module)
{
this.keyboardItemPanel.Items.Clear();
ItemContainer ic = new ItemContainer();
ic.MultiLine = true;
//加载菜单显示区域为结账区的数据
var lists = this._dataSource.FindAll(x => !string.IsNullOrEmpty(x.ParentId) && ModuleArea..ToString().Equals(x.Area));
lists.Sort((x, y) => (x.OrderNo.CompareTo(y.OrderNo)));
foreach (ModuleMenu entity in lists)
{
MetroTileItem item = new MetroTileItem();
item.CheckBehavior = eMetroTileCheckBehavior.LeftMouseButtonClick;
item.Checked = false;
item.TileStyle.Font = GetFont(entity.FontSize);
item.TileStyle.TextAlignment = eStyleTextAlignment.Center;
item.Text = LangProxy.ToLang(string.IsNullOrEmpty(entity.Alias) ? entity.Name : entity.Alias);
item.TileSize = this.DefaultTileItemSize;
item.TileStyle.TextColor = ColorTranslator.FromHtml(entity.Color3);
item.TileStyle.BackColor = ColorTranslator.FromHtml(entity.Color1);
item.TileStyle.BackColor2 = ColorTranslator.FromHtml(entity.Color1);
item.TileStyle.BorderColor = Color.Transparent;
item.TileStyle.BorderColor2 = Color.Transparent;
this.ChangedCornerType(item, entity);
item.Tag = entity;
item.MouseDown += OnKeyboardMouseDown;
item.CheckedChanged += OnKeyboardCheckedChanged;
ic.SubItems.Add(item);
if (module != null && module.Id.Equals(entity.Id))
{
item.Checked = true;
}
}
this.keyboardItemPanel.Items.Add(ic);
this.keyboardItemPanel.Invalidate();
}
private void OnKeyboardMouseDown(object sender, MouseEventArgs e)
{
}
private void ChangedCornerType(MetroTileItem item, ModuleMenu entity)
{
item.TileStyle.BorderWidth = 1;
item.TileStyle.CornerDiameter = 6;
//显示样式
var value = Global.Instance.GlobalConfigStringValue(ConfigConstant.SYSTEM_SHOW_MENU_STYLE, CornerType..ToString());
CornerType cornerType = CornerType.;
Enum.TryParse(value, out cornerType);
switch (cornerType)
{
case CornerType.:
{
item.TileStyle.CornerType = eCornerType.Square;
}
break;
case CornerType.:
{
item.TileStyle.CornerType = eCornerType.Rounded;
item.TileStyle.BorderColor = ColorTranslator.FromHtml(entity.Color1);
item.TileStyle.BorderColor2 = ColorTranslator.FromHtml(entity.Color1);
}
break;
case CornerType.:
{
item.TileStyle.CornerType = eCornerType.Diagonal;
item.TileStyle.BorderColor = Color.Transparent;// Translator.FromHtml(entity.Color1);
item.TileStyle.BorderColor2 = Color.Transparent; //Translator.FromHtml(entity.Color1);
}
break;
}
}
private void OnKeyboardCheckedChanged(object sender, EventArgs e)
{
MetroTileItem item = (MetroTileItem)sender;
item.TileStyle.BorderColor = Color.Transparent;
item.TileStyle.BorderColor2 = Color.Transparent;
var entity = item.Tag as ModuleMenu;
if (item.Checked)
{
//设置当前选择的模块
this._selectedItem = item;
//设置当前操作的区域
this._selectedArea = (ModuleArea)Enum.Parse(typeof(ModuleArea), this.keyboardItemPanel.Tag.ToString());
item.TileStyle.TextColor = ColorTranslator.FromHtml(entity.Color3);
item.TileStyle.BackColor = ColorTranslator.FromHtml(entity.Color2);
item.TileStyle.BackColor2 = ColorTranslator.FromHtml(entity.Color2);
//绑定参数
BindModuleParameter(entity);
}
else
{
item.TileStyle.TextColor = ColorTranslator.FromHtml(entity.Color3);
item.TileStyle.BackColor = ColorTranslator.FromHtml(entity.Color1);
item.TileStyle.BackColor2 = ColorTranslator.FromHtml(entity.Color1);
}
ChangedOtherItemPanel();
}
private void OnBillMouseDown(object sender, MouseEventArgs e)
{
MetroTileItem item = (MetroTileItem)sender;
item.Checked = true;
}
private void OnBillCheckedChanged(object sender, EventArgs e)
{
MetroTileItem item = (MetroTileItem)sender;
var entity = item.Tag as ModuleMenu;
//边框透明
item.TileStyle.BorderColor = Color.Transparent;
item.TileStyle.BorderColor2 = Color.Transparent;
if (item.Checked)
{
//设置当前选择的模块
this._selectedItem = item;
//设置当前操作的区域
this._selectedArea = (ModuleArea)Enum.Parse(typeof(ModuleArea), this.billItemPanel.Tag.ToString());
item.Text = LangProxy.ToLang(string.IsNullOrEmpty(entity.Alias) ? entity.Name : entity.Alias);
item.TileStyle.TextColor = ColorTranslator.FromHtml(entity.Color3);
item.TileStyle.BackColor = ColorTranslator.FromHtml(entity.Color2);
item.TileStyle.BackColor2 = ColorTranslator.FromHtml(entity.Color2);
//绑定参数
BindModuleParameter(item.Tag as ModuleMenu);
//通知资源控件更新
SendToResources(1, item.Tag as ModuleMenu);
}
else
{
item.TileStyle.TextColor = ColorTranslator.FromHtml(entity.Color3);
item.TileStyle.BackColor = ColorTranslator.FromHtml(entity.Color1);
item.TileStyle.BackColor2 = ColorTranslator.FromHtml(entity.Color1);
}
ChangedOtherItemPanel();
}
private void OnToolsMouseDown(object sender, MouseEventArgs e)
{
//MetroTileItem item = (MetroTileItem)sender;
//var module = item.Tag as Module;
//item.Checked = module.OrderNo == 4 ? false : true;
}
private void OnToolsCheckedChanged(object sender, EventArgs e)
{
MetroTileItem item = (MetroTileItem)sender;
var entity = item.Tag as ModuleMenu;
//边框透明
item.TileStyle.BorderColor = Color.Transparent;
item.TileStyle.BorderColor2 = Color.Transparent;
if (item.Checked)
{
//设置当前选择的模块
this._selectedItem = item;
//设置当前操作的区域
this._selectedArea = (ModuleArea)Enum.Parse(typeof(ModuleArea), this.toolsItemPanel.Tag.ToString());
item.Text = LangProxy.ToLang(string.IsNullOrEmpty(entity.Alias) ? entity.Name : entity.Alias);
item.TileStyle.TextColor = ColorTranslator.FromHtml(entity.Color3);
item.TileStyle.BackColor = ColorTranslator.FromHtml(entity.Color2);
item.TileStyle.BackColor2 = ColorTranslator.FromHtml(entity.Color2);
//绑定参数
BindModuleParameter(entity);
//通知资源控件更新
SendToResources(1, entity);
}
else
{
item.TileStyle.TextColor = ColorTranslator.FromHtml(entity.Color3);
item.TileStyle.BackColor = ColorTranslator.FromHtml(entity.Color1);
item.TileStyle.BackColor2 = ColorTranslator.FromHtml(entity.Color1);
}
ChangedOtherItemPanel();
}
private void RefreshOrderNo()
{
foreach (var panel in this._itemPanel)
{
var subItems = panel.Value.Items;
if (subItems.Count > 0)
{
int orderNo = 0;
//var items = subItems[0].SubItems;
//foreach (MetroTileItem item in items)
//{
// var module = item.Tag as ModuleMenu;
// module.OrderNo = (orderNo++);
//}
for (int i = 0; i < subItems.Count; i++)
{
var obj = subItems[i];
if (obj.SubItems.Count == 0)
{
var o = obj as MetroTileItem;
if (o != null)
{
var module = o.Tag as ModuleMenu;
module.OrderNo = (orderNo++);
}
}
else
{
var items = obj.SubItems;
foreach (MetroTileItem o in items)
{
var module = o.Tag as ModuleMenu;
module.OrderNo = (orderNo++);
}
}
}
panel.Value.InvalidateLayout();
panel.Value.Invalidate();
}
}
}
public Tuple<bool, string> SaveChanged()
{
lock (Global.Instance.SyncLock)
{
using (var db = Global.Instance.OpenDataBase)
{
using (var transaction = db.GetTransaction())
{
db.Execute("delete from [pos_module];");
db.InsertBatch(this._dataSource);
transaction.Complete();
}
}
}
//发送通知,修改界面呈现
MsgEvent.Send(Constant.MENU_CHANGED_NOTIFY, this._dataSource);
return new Tuple<bool, string>(true, LangProxy.ToLang( "更新成功"));
}
private void OnButtonForward(object sender, EventArgs e)
{
if (this._selectedItem == null) return;
switch (this._selectedArea)
{
case ModuleArea.:
{
//当前要前移的对象
var current = this._selectedItem.Tag as ModuleMenu;
//当前主菜单记录集
var lists = this._dataSource.FindAll(x => string.IsNullOrEmpty(x.ParentId) && ModuleArea..ToString().Equals(x.Area));
lists.Sort((x, y) => x.OrderNo.CompareTo(y.OrderNo));
if (current.OrderNo > 0)
{
//当前对象前的对象,需要后移
var item = lists[current.OrderNo - 1];
//对象序号+1,后移
item.OrderNo += 1;
//对象序号-1,前移
current.OrderNo -= 1;
//交换两个对象
lists[item.OrderNo] = item;
lists[current.OrderNo] = current;
}
//重新构建主菜单
this.BuilderMainMenuItemPanel(current);
}
break;
case ModuleArea.:
{
//当前要前移的对象
var current = this._selectedItem.Tag as ModuleMenu;
//当前结账区记录集
var lists = this._dataSource.FindAll(x => !string.IsNullOrEmpty(x.ParentId) && ModuleArea..ToString().Equals(x.Area));
lists.Sort((x, y) => x.OrderNo.CompareTo(y.OrderNo));
if (current.OrderNo > 0)
{
//当前对象前的对象,需要后移
var item = lists[current.OrderNo - 1];
//对象序号+1,后移
item.OrderNo += 1;
//对象序号-1,前移
current.OrderNo -= 1;
//交换两个对象
lists[item.OrderNo] = item;
lists[current.OrderNo] = current;
}
//重新构建结账区
this.BuilderBillItemPanel(current);
}
break;
case ModuleArea.:
{
//当前要前移的对象
var current = this._selectedItem.Tag as ModuleMenu;
//当前结账区记录集
var lists = this._dataSource.FindAll(x => !string.IsNullOrEmpty(x.ParentId) && ModuleArea..ToString().Equals(x.Area));
lists.Sort((x, y) => x.OrderNo.CompareTo(y.OrderNo));
if (current.OrderNo > 0)
{
//当前对象前的对象,需要后移
var item = lists[current.OrderNo - 1];
//对象序号+1,后移
item.OrderNo += 1;
//对象序号-1,前移
current.OrderNo -= 1;
//交换两个对象
lists[item.OrderNo] = item;
lists[current.OrderNo] = current;
}
//重新构建结账区
this.BuilderToolsItemPanel(current);
}
break;
case ModuleArea.:
{
//当前要前移的对象
var current = this._selectedItem.Tag as ModuleMenu;
//当前明细区记录集
var lists = this._dataSource.FindAll(x => x.ParentId == current.ParentId && ModuleArea..ToString().Equals(x.Area));
lists.Sort((x, y) => x.OrderNo.CompareTo(y.OrderNo));
if (current.OrderNo > 0)
{
//当前对象前的对象,需要后移
var item = lists[current.OrderNo - 1];
//对象序号+1,后移
item.OrderNo += 1;
//对象序号-1,前移
current.OrderNo -= 1;
//交换两个对象
lists[item.OrderNo] = item;
lists[current.OrderNo] = current;
}
//重新构建明细区
var parent = this._dataSource.Find(x => x.Id == current.ParentId);
this.BuilderSubMenuItemPanel(parent);
}
break;
}
RefreshOrderNo();
}
private void OnButtonBackward(object sender, EventArgs e)
{
if (this._selectedItem == null) return;
switch (this._selectedArea)
{
case ModuleArea.:
{
//当前要前移的对象
var current = this._selectedItem.Tag as ModuleMenu;
//当前主菜单记录集
var lists = this._dataSource.FindAll(x => string.IsNullOrEmpty(x.ParentId) && ModuleArea..ToString().Equals(x.Area));
lists.Sort((x, y) => x.OrderNo.CompareTo(y.OrderNo));
if (current.OrderNo + 1 < lists.Count())
{
//当前对象后面的对象,需要后移
var item = lists[current.OrderNo + 1];
//对象序号+1,后移
item.OrderNo -= 1;
//对象序号-1,前移
current.OrderNo += 1;
//交换两个对象
lists[item.OrderNo] = item;
lists[current.OrderNo] = current;
}
//重新构建主菜单
this.BuilderMainMenuItemPanel(current);
}
break;
case ModuleArea.:
{
//当前要前移的对象
var current = this._selectedItem.Tag as ModuleMenu;
//当前结账区记录集
var lists = this._dataSource.FindAll(x => !string.IsNullOrEmpty(x.ParentId) && ModuleArea..ToString().Equals(x.Area));
lists.Sort((x, y) => x.OrderNo.CompareTo(y.OrderNo));
if (current.OrderNo + 1 < lists.Count())
{
//当前对象后面的对象,需要后移
var item = lists[current.OrderNo + 1];
//对象序号+1,后移
item.OrderNo -= 1;
//对象序号-1,前移
current.OrderNo += 1;
//交换两个对象
lists[item.OrderNo] = item;
lists[current.OrderNo] = current;
}
//重新构建主菜单
this.BuilderBillItemPanel(current);
}
break;
case ModuleArea.:
{
//当前要前移的对象
var current = this._selectedItem.Tag as ModuleMenu;
//当前结账区记录集
var lists = this._dataSource.FindAll(x => !string.IsNullOrEmpty(x.ParentId) && ModuleArea..ToString().Equals(x.Area));
lists.Sort((x, y) => x.OrderNo.CompareTo(y.OrderNo));
if (current.OrderNo + 1 < lists.Count() - 1)
{
//当前对象后面的对象,需要后移
var item = lists[current.OrderNo + 1];
//对象序号+1,后移
item.OrderNo -= 1;
//对象序号-1,前移
current.OrderNo += 1;
//交换两个对象
lists[item.OrderNo] = item;
lists[current.OrderNo] = current;
}
//重新构建主菜单
this.BuilderToolsItemPanel(current);
}
break;
case ModuleArea.:
{
//当前要前移的对象
var current = this._selectedItem.Tag as ModuleMenu;
//当前结账区记录集
var lists = this._dataSource.FindAll(x => x.ParentId == current.ParentId && ModuleArea..ToString().Equals(x.Area));
lists.Sort((x, y) => x.OrderNo.CompareTo(y.OrderNo));
if (current.OrderNo + 1 < lists.Count())
{
//当前对象后面的对象,需要后移
var item = lists[current.OrderNo + 1];
//对象序号+1,后移
item.OrderNo -= 1;
//对象序号-1,前移
current.OrderNo += 1;
//交换两个对象
lists[item.OrderNo] = item;
lists[current.OrderNo] = current;
}
//重新构建明细区
var parent = this._dataSource.Find(x => x.Id == current.ParentId);
this.BuilderSubMenuItemPanel(parent);
}
break;
}
RefreshOrderNo();
}
/// <summary>
/// 颜色修改事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnSelectedColorChanged(object sender, EventArgs e)
{
var item = sender as ComboBoxColorPicker;
if (this._selectedItem == null) return;
var selected = this._selectedItem.Tag as ModuleMenu;
var area = (ModuleArea)Enum.Parse(typeof(ModuleArea), selected.Area);
var subItems = this._itemPanel[area].Items;
if (subItems.Count < 1) return;
for (int i = 0; i < subItems.Count; i++)
{
var obj = subItems[i];
if (obj.SubItems.Count == 0)
{
var o = obj as MetroTileItem;
//当前选择的或者当前区域全部
if (o.Checked || checkBoxFontAndColor.Checked)
{
var module = o.Tag as ModuleMenu;
switch (item.Name)
{
case "comboBoxColor1":
{
module.Color1 = ColorTranslator.ToHtml(item.Color);
o.TileStyle.BackColor = item.Color;
o.TileStyle.BackColor2 = item.Color;
}
break;
case "comboBoxColor2":
{
module.Color2 = ColorTranslator.ToHtml(item.Color);
}
break;
case "comboBoxColor3":
{
module.Color3 = ColorTranslator.ToHtml(item.Color);
o.TileStyle.TextColor = item.Color;
}
break;
}
}
}
else
{
var items = obj.SubItems;
foreach (MetroTileItem o in items)
{
//当前选择的或者当前区域全部
if (o.Checked || checkBoxFontAndColor.Checked)
{
var module = o.Tag as ModuleMenu;
switch (item.Name)
{
case "comboBoxColor1":
{
module.Color1 = ColorTranslator.ToHtml(item.Color);
o.TileStyle.BackColor = item.Color;
o.TileStyle.BackColor2 = item.Color;
}
break;
case "comboBoxColor2":
{
module.Color2 = ColorTranslator.ToHtml(item.Color);
}
break;
case "comboBoxColor3":
{
module.Color3 = ColorTranslator.ToHtml(item.Color);
o.TileStyle.TextColor = item.Color;
}
break;
}
}
}
}
Thread.Sleep(5);
}
}
private void OnFontSelectedIndexChanged(object sender, EventArgs e)
{
var item = sender as ComboBoxEx;
if (this._selectedItem == null) return;
var selected = this._selectedItem.Tag as ModuleMenu;
var area = (ModuleArea)Enum.Parse(typeof(ModuleArea), selected.Area);
var subItems = this._itemPanel[area].Items;
if (subItems.Count < 1) return;
var font = (ModuleFont)Enum.Parse(typeof(ModuleFont), item.SelectedItem.ToString(), false);
for (int i = 0; i < subItems.Count; i++)
{
var obj = subItems[i];
if (obj.SubItems.Count == 0)
{
var o = obj as MetroTileItem;
//当前选择的或者当前区域全部
if (o.Checked || checkBoxFontAndColor.Checked)
{
var module = o.Tag as ModuleMenu;
module.FontSize = font.ToString();
o.TileStyle.Font = GetFont(module.FontSize);
}
}
else
{
var items = obj.SubItems;
foreach (MetroTileItem o in items)
{
//当前选择的或者当前区域全部
if (o.Checked || checkBoxFontAndColor.Checked)
{
var module = o.Tag as ModuleMenu;
module.FontSize = font.ToString();
o.TileStyle.Font = GetFont(module.FontSize);
}
}
}
Thread.Sleep(5);
}
}
private void OnAliasTextChanged(object sender, EventArgs e)
{
var item = sender as TextBoxX;
switch (this._selectedArea)
{
case ModuleArea.:
case ModuleArea.:
case ModuleArea.:
case ModuleArea.:
{
var module = this._selectedItem.Tag as ModuleMenu;
var alias = item.Text.Trim();
this._selectedItem.Text = string.IsNullOrEmpty(alias) ? module.Name : alias;
module.Alias = alias;
}
break;
}
}
private void OnLayoutSelectedChanged(object sender, EventArgs e)
{
var item = sender as ComboBoxEx;
if (this._selectedItem == null) return;
switch (this._selectedArea)
{
case ModuleArea.:
{
var parent = this._selectedItem.Tag as ModuleMenu;
var layout = (ModuleLayout)Enum.Parse(typeof(ModuleLayout), item.SelectedItem.ToString(), false);
//当前模块下已经选择功能
var lists = this._dataSource.FindAll(x => x.ParentId == parent.Id || x.Id == parent.Id);
foreach (var entity in lists)
{
entity.Layout = (int)layout;
}
parent.Layout = (int)layout;
BuilderSubMenuItemPanel(parent);
}
break;
case ModuleArea.:
{
var module = this._selectedItem.Tag as ModuleMenu;
var layout = (ModuleLayout)Enum.Parse(typeof(ModuleLayout), item.SelectedItem.ToString(), false);
//当前模块下已经选择功能
var parent = this._dataSource.Find(x => x.Id == module.ParentId);
parent.Layout = (int)layout;
//当前模块下已经选择功能
var lists = this._dataSource.FindAll(x => x.ParentId == parent.Id || x.Id == parent.Id);
foreach (var entity in lists)
{
entity.Layout = (int)layout;
}
BuilderSubMenuItemPanel(parent);
}
break;
}
}
private void OnToolsVisibleCheckedChanged(object sender, EventArgs e)
{
try
{
var item = sender as CheckBoxX;
this.toolsItemPanel.Visible = !item.Checked;
this.UpdateConfig(ConfigConstant.SYSTEM_NOT_ALLOW_TOOLS_SHOW, this.toolsItemPanel.Visible ? "0" : "1");
}
finally
{
}
}
private void UpdateConfig(string key, string value)
{
try
{
var config = new Config();
config.Id = IdWorkerUtils.Instance.NextId();
config.Group = ConfigConstant.SYSTEM_GROUP;
config.TenantId = Global.Instance.Authc.TenantId;
config.Keys = key;
config.Values = value;
lock (Global.Instance.SyncLock)
{
using (var db = Global.Instance.OpenDataBase)
{
using (var transaction = db.GetTransaction())
{
db.Save(config);
transaction.Complete();
}
}
}
}
catch (Exception ex)
{
LOGGER.Info(ex, "更新菜单控制参数异常");
}
finally
{
Global.Instance.ReloadConfig(ConfigConstant.SYSTEM_GROUP);
}
}
private void OnMenuVisibleCheckedChanged(object sender, EventArgs e)
{
try
{
var item = sender as CheckBoxX;
//主菜单
this.menuItemPanel.Visible = !item.Checked;
//结账固定菜单
//this.billItemPanel.Visible = this.menuItemPanel.Visible;
//折叠菜单的按钮
this.toolsItemPanel.Items[0].SubItems[4].Visible = this.menuItemPanel.Visible;
this.toolsItemPanel.InvalidateLayout();
this.toolsItemPanel.Invalidate();
//子菜单Dock设置
//this.subMenuItemPanel.Dock = this.menuItemPanel.Visible ? DockStyle.Top : DockStyle.Fill;
//this.subMenuItemPanel.InvalidateLayout();
//this.subMenuItemPanel.Invalidate();
//更新数据表参数
this.UpdateConfig(ConfigConstant.SYSTEM_NOT_ALLOW_MENUS_SHOW, this.menuItemPanel.Visible ? "0" : "1");
}
finally
{
//隐藏主菜单,默认选中第一项
if (!this.menuItemPanel.Visible)
{
if (this.menuItemPanel.Items.Count > 0 && this.menuItemPanel.Items[0].SubItems.Count > 0)
{
this._selectedArea = ModuleArea.;
this._selectedItem = this.menuItemPanel.Items[0].SubItems[0] as MetroTileItem;
this._selectedItem.Checked = true;
var parent = this._selectedItem.Tag as ModuleMenu;
BuilderSubMenuItemPanel(parent);
}
}
}
}
private void OnCornerTypeSelectedChanged(object sender, EventArgs e)
{
//显示样式
CornerType cornerType = CornerType.;
Enum.TryParse(this.comboBoxCornerType.SelectedItem.ToString(), out cornerType);
try
{
this.UpdateConfig(ConfigConstant.SYSTEM_SHOW_MENU_STYLE, cornerType.ToString());
}
finally
{
ChangedAllStyle();
}
}
private void ChangedAllStyle()
{
foreach (var panel in this._itemPanel)
{
var itemPanel = panel.Value;
if (itemPanel.Items.Count > 0)
{
var items = itemPanel.Items;
for (int i = 0; i < items.Count; i++)
{
var obj = items[i];
if (obj.SubItems.Count == 0)
{
var o = obj as MetroTileItem;
var module = o.Tag as ModuleMenu;
this.ChangedCornerType(o, module);
}
else
{
var subItems = obj.SubItems;
foreach (MetroTileItem o in subItems)
{
var module = o.Tag as ModuleMenu;
this.ChangedCornerType(o, module);
}
}
}
}
}
}
private void OnBillVisibleCheckedChanged(object sender, EventArgs e)
{
try
{
var item = sender as CheckBoxX;
//结账固定菜单
this.billItemPanel.Visible = !item.Checked;
//子菜单Dock设置
this.subMenuItemPanel.Dock = this.billItemPanel.Visible ? DockStyle.Top : DockStyle.Fill;
this.subMenuItemPanel.InvalidateLayout();
this.subMenuItemPanel.Invalidate();
//更新数据表参数
this.UpdateConfig(ConfigConstant.SYSTEM_NOT_ALLOW_BILLS_SHOW, this.billItemPanel.Visible ? "0" : "1");
}
finally
{
//隐藏主菜单,默认选中第一项
if (this.menuItemPanel.SelectedItem != null)
{
this._selectedArea = ModuleArea.;
this._selectedItem = this.menuItemPanel.SelectedItem as MetroTileItem;
this._selectedItem.Checked = true;
var parent = this._selectedItem.Tag as ModuleMenu;
BuilderSubMenuItemPanel(parent);
}
}
}
private void metroTileItem1_Click(object sender, EventArgs e)
{
}
}
}