|
|
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)
|
|
|
{
|
|
|
|
|
|
}
|
|
|
}
|
|
|
}
|