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 { /// /// 子菜单最大可显示的数量 /// private int SubMenuMaxCount = 12; /// /// 数据库的模块数据 /// private List _dataSource = null; /// /// 当前选中的功能块 /// private MetroTileItem _selectedItem = null; /// /// 当前选中功能所在的操作区 /// private ModuleArea _selectedArea = ModuleArea.主菜单; /// /// 区域字段,用来出来选择某一个区域后,其他区域的处理 /// private Dictionary _itemPanel = null; /// /// 资源分组字段,用来出来选择某一个分组 /// private Dictionary _resourceItemPanel = null; /// /// 数据库的资源数据 /// private List _resourceDataSource = null; /// /// 默认宽度 /// private static int DefaultWidth = 55; /// /// 默认高度 /// private static int DefaultHeight = 50; /// /// 默认大小 /// private readonly Size DefaultTileItemSize = new Size(DefaultWidth, DefaultHeight); public MenuControlDesigner() { InitializeComponent(); this._itemPanel = new Dictionary(); 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().ToList(); this._resourceDataSource = db.Query().ToList(); } //如果数据库数据为空 if (this._dataSource == null) { this._dataSource = new List(); } //如果数据库数据为空 if (this._resourceDataSource == null) { this._resourceDataSource = new List(); } this._resourceItemPanel = new Dictionary(); //字体支持列表 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().ToList(); } } //如果数据库数据为空 if (this._resourceDataSource == null) { this._resourceDataSource = new List(); } BuilderResourceTabItem(); this._selectedItem.Checked = false; this._selectedItem.Checked = true; } private void BindResourceTabItem(ItemPanel panel, List 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(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; } /// /// 初始化主菜单 /// 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; } /// /// 主菜单选中事件 /// /// /// 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; } } /// /// 初始化结账区 /// 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(); } /// /// 初始化工具区 /// 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; } } /// /// 构建自定义布局 /// /// 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(); 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(); 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(); } /// /// 更具当前选择的模块,构建二级菜单 /// /// 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; } } /// /// 选择操作某一个区域的情况下,其他区域的选中状态改变 /// 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; } } } /// /// 初始化键盘区 /// 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 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(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(); } /// /// 颜色修改事件 /// /// /// 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) { } } }