|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.ComponentModel;
|
|
|
|
|
using System.Drawing;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Windows.Forms;
|
|
|
|
|
using POSV.Entity;
|
|
|
|
|
using DevComponents.DotNetBar;
|
|
|
|
|
using DevComponents.DotNetBar.Metro;
|
|
|
|
|
using POSV.Utils;
|
|
|
|
|
using DevComponents.DotNetBar.Controls;
|
|
|
|
|
using OfficePickers.ColorPicker;
|
|
|
|
|
using POSV.MessageEvent;
|
|
|
|
|
using POS.Language.Language;
|
|
|
|
|
|
|
|
|
|
namespace POSV.Component
|
|
|
|
|
{
|
|
|
|
|
[ToolboxItem(true)]
|
|
|
|
|
public partial class ShortcutControlDesigner : BaseUserControl
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 菜单最大可显示的数量
|
|
|
|
|
/// </summary>
|
|
|
|
|
private int MenuMaxCount = 24;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 数据库的模块数据
|
|
|
|
|
/// </summary>
|
|
|
|
|
private List<ShortcutMenu> _dataSource = null;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 数据库的资源数据
|
|
|
|
|
/// </summary>
|
|
|
|
|
private List<Resources> _resourceDataSource = null;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 资源分组字段,用来出来选择某一个分组
|
|
|
|
|
/// </summary>
|
|
|
|
|
private Dictionary<ResourcesGroup, ItemPanel> _resourceItemPanel = null;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 当前选中的功能块
|
|
|
|
|
/// </summary>
|
|
|
|
|
private MetroTileItem _selectedItem = null;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 当前选中功能所在的操作区
|
|
|
|
|
/// </summary>
|
|
|
|
|
private ModuleArea _selectedArea = ModuleArea.快捷区;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static int DefaultWidth = 55;
|
|
|
|
|
private static int DefaultHeight = 50;
|
|
|
|
|
private readonly Size DefaultTileItemSize = new Size(DefaultWidth, DefaultHeight);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 数据库的模块数据
|
|
|
|
|
/// </summary>
|
|
|
|
|
private List<ShortcutMenu> _oldValue = null;
|
|
|
|
|
|
|
|
|
|
public ShortcutControlDesigner()
|
|
|
|
|
{
|
|
|
|
|
InitializeComponent();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected override void OnLoad(EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
base.OnLoad(e);
|
|
|
|
|
|
|
|
|
|
if (this.DesignMode) return;
|
|
|
|
|
|
|
|
|
|
this.BackColor = Color.Transparent;
|
|
|
|
|
|
|
|
|
|
//获取数据库的数据
|
|
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
|
|
{
|
|
|
|
|
this._dataSource = db.Query<ShortcutMenu>("where area == @0", this._selectedArea.ToString()).ToList();
|
|
|
|
|
}
|
|
|
|
|
//如果数据库数据为空
|
|
|
|
|
if (this._dataSource == null)
|
|
|
|
|
{
|
|
|
|
|
this._dataSource = new List<ShortcutMenu>();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//复制数据源对象,用于比较变更
|
|
|
|
|
this._oldValue = ObjectUtils.Copy<List<ShortcutMenu>>(this._dataSource);
|
|
|
|
|
|
|
|
|
|
//获取数据库的资源数据
|
|
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
|
|
{
|
|
|
|
|
this._resourceDataSource = db.Query<Resources>("where [group] == @0", ResourcesGroup.快捷类.ToString()).ToList();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//如果数据库数据为空
|
|
|
|
|
if (this._resourceDataSource == null)
|
|
|
|
|
{
|
|
|
|
|
this._resourceDataSource = new List<Resources>();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
this._resourceItemPanel = new Dictionary<ResourcesGroup, ItemPanel>();
|
|
|
|
|
|
|
|
|
|
RefreshUi();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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) continue;
|
|
|
|
|
|
|
|
|
|
SuperTabItem tab = this.superTabControl.CreateTab(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);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void RefreshUi()
|
|
|
|
|
{
|
|
|
|
|
this.BuilderResourceTabItem();
|
|
|
|
|
|
|
|
|
|
//字体支持列表
|
|
|
|
|
this.comboBoxFontSize.DataSource = System.Enum.GetNames(typeof(ModuleFont));
|
|
|
|
|
ModuleFont defaultFontSize = ModuleFont.默认;
|
|
|
|
|
this.comboBoxFontSize.SelectedIndex = this.comboBoxFontSize.FindString(defaultFontSize.ToString());
|
|
|
|
|
|
|
|
|
|
//初始化菜单
|
|
|
|
|
BuilderItemPanel(null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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.Checked = false;
|
|
|
|
|
item.CheckBehavior = eMetroTileCheckBehavior.LeftMouseButtonClick;
|
|
|
|
|
|
|
|
|
|
switch (entity.KeyCode)
|
|
|
|
|
{
|
|
|
|
|
case "数量加":
|
|
|
|
|
{
|
|
|
|
|
//➕
|
|
|
|
|
item.Text = string.Empty;
|
|
|
|
|
item.Symbol = "\uf067";
|
|
|
|
|
item.SymbolSize = 0;
|
|
|
|
|
item.ImageIndent = new Point(0, 0);
|
|
|
|
|
|
|
|
|
|
item.ImageTextAlignment = ContentAlignment.MiddleCenter;
|
|
|
|
|
item.ItemAlignment = eItemAlignment.Center;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case "数量减":
|
|
|
|
|
{
|
|
|
|
|
//➖
|
|
|
|
|
item.Text = string.Empty;
|
|
|
|
|
item.Symbol = "\uf068";
|
|
|
|
|
item.SymbolSize = 0;
|
|
|
|
|
item.ImageIndent = new Point(0, 0);
|
|
|
|
|
|
|
|
|
|
item.ImageTextAlignment = ContentAlignment.MiddleCenter;
|
|
|
|
|
item.ItemAlignment = eItemAlignment.Center;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
{
|
|
|
|
|
item.Text = LangProxy.ToLang(entity.Name);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
item.TileStyle.Font = Constant.NORMAL_FONT;
|
|
|
|
|
item.TileStyle.TextAlignment = eStyleTextAlignment.Center;
|
|
|
|
|
item.SymbolColor = Color.Empty;
|
|
|
|
|
|
|
|
|
|
item.TileColor = eMetroTileColor.Gray;
|
|
|
|
|
item.TileSize = new Size(85, 40);
|
|
|
|
|
|
|
|
|
|
item.Tag = entity;
|
|
|
|
|
|
|
|
|
|
item.MouseDown += ResourceItemPanelMouseDown;
|
|
|
|
|
item.CheckedChanged += ResourceItemPanelCheckedChanged;
|
|
|
|
|
|
|
|
|
|
ic.SubItems.Add(item);
|
|
|
|
|
}
|
|
|
|
|
panel.Items.Add(ic);
|
|
|
|
|
panel.Invalidate();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void ResourceItemPanelMouseDown(object sender, MouseEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void ResourceItemPanelCheckedChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
MetroTileItem item = (MetroTileItem)sender;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
item.TileColor = item.Checked ? eMetroTileColor.Azure : eMetroTileColor.Gray;
|
|
|
|
|
|
|
|
|
|
//当前模块下已经选择功能
|
|
|
|
|
var lists = this._dataSource.FindAll(x => !string.IsNullOrEmpty(x.ParentId));
|
|
|
|
|
if (lists.Count + 1 > this.MenuMaxCount)
|
|
|
|
|
{
|
|
|
|
|
item.Checked = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (item.Checked)
|
|
|
|
|
{
|
|
|
|
|
//资源功能添加到模块
|
|
|
|
|
ResourceSelectedNotify(ModuleAction.Add, item.Tag as Resources);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//资源功能刪除到模块
|
|
|
|
|
ResourceSelectedNotify(ModuleAction.Delete, item.Tag as Resources);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void RefreshOrderNo()
|
|
|
|
|
{
|
|
|
|
|
var subItems = this.menuItemPanel.Items;
|
|
|
|
|
if (subItems.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
int orderNo = 0;
|
|
|
|
|
var items = subItems[0].SubItems;
|
|
|
|
|
foreach (MetroTileItem item in items)
|
|
|
|
|
{
|
|
|
|
|
var module = item.Tag as ShortcutMenu;
|
|
|
|
|
|
|
|
|
|
module.OrderNo = (orderNo++);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
this.menuItemPanel.Invalidate();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected void ResourceSelectedNotify(ModuleAction action, Resources resources)
|
|
|
|
|
{
|
|
|
|
|
//当前选择的模块菜单
|
|
|
|
|
var parent = this._dataSource.SingleOrDefault(x => string.IsNullOrEmpty(x.ParentId));
|
|
|
|
|
|
|
|
|
|
//当前选择的模块
|
|
|
|
|
ShortcutMenu entity = null;
|
|
|
|
|
|
|
|
|
|
//当前模块下已经选择功能
|
|
|
|
|
var lists = this._dataSource.FindAll(x => !string.IsNullOrEmpty(x.ParentId));
|
|
|
|
|
lists.Sort((x, y) => (x.OrderNo.CompareTo(y.OrderNo)));
|
|
|
|
|
switch (action)
|
|
|
|
|
{
|
|
|
|
|
case ModuleAction.Add:
|
|
|
|
|
{
|
|
|
|
|
//不包含当前资源的就添加
|
|
|
|
|
if (!lists.Exists(x => x.ResourceId == resources.Id))
|
|
|
|
|
{
|
|
|
|
|
entity = new ShortcutMenu();
|
|
|
|
|
entity.Id = IdWorkerUtils.Instance.NextId();
|
|
|
|
|
entity.Area = this._selectedArea.ToString();
|
|
|
|
|
entity.ParentId = parent.Id;
|
|
|
|
|
entity.TenantId = parent.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.comboBoxColor1.Color);
|
|
|
|
|
entity.Color3 = ColorTranslator.ToHtml(this.comboBoxColor3.Color);
|
|
|
|
|
entity.FontSize = ModuleFont.默认.ToString();
|
|
|
|
|
entity.Enable = 1;
|
|
|
|
|
entity.Icon = "\uf023";
|
|
|
|
|
entity.ResourceId = resources.Id;
|
|
|
|
|
|
|
|
|
|
this._dataSource.Add(entity);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case ModuleAction.Delete:
|
|
|
|
|
{
|
|
|
|
|
this._dataSource.RemoveAll(x => x.ParentId == parent.Id && x.ResourceId == resources.Id);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
RefreshOrderNo();
|
|
|
|
|
|
|
|
|
|
this.BuilderItemPanel(entity);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 初始化主菜单
|
|
|
|
|
/// </summary>
|
|
|
|
|
private void BuilderItemPanel(ShortcutMenu module)
|
|
|
|
|
{
|
|
|
|
|
this.menuItemPanel.Items.Clear();
|
|
|
|
|
|
|
|
|
|
ItemContainer ic = new ItemContainer();
|
|
|
|
|
ic.MultiLine = true;
|
|
|
|
|
ic.ItemSpacing = 1;
|
|
|
|
|
|
|
|
|
|
//加载菜单显示区域为主菜单的数据
|
|
|
|
|
var lists = this._dataSource.FindAll(x => !string.IsNullOrEmpty(x.ParentId));
|
|
|
|
|
lists.Sort((x, y) => (x.OrderNo.CompareTo(y.OrderNo)));
|
|
|
|
|
|
|
|
|
|
int inx = 0;
|
|
|
|
|
MetroTileItem last = null;
|
|
|
|
|
|
|
|
|
|
foreach (ShortcutMenu entity in lists)
|
|
|
|
|
{
|
|
|
|
|
MetroTileItem item = new MetroTileItem();
|
|
|
|
|
|
|
|
|
|
item.TileStyle.Padding = -2;
|
|
|
|
|
|
|
|
|
|
item.CheckBehavior = eMetroTileCheckBehavior.LeftMouseButtonClick;
|
|
|
|
|
item.Checked = false;
|
|
|
|
|
|
|
|
|
|
item.OptionGroup = "Menu";
|
|
|
|
|
item.TileStyle.Font = GetFont(entity.FontSize);
|
|
|
|
|
item.TileStyle.TextAlignment = eStyleTextAlignment.Center;
|
|
|
|
|
|
|
|
|
|
switch (entity.KeyCode)
|
|
|
|
|
{
|
|
|
|
|
case "数量加":
|
|
|
|
|
{
|
|
|
|
|
//➕
|
|
|
|
|
if (string.IsNullOrEmpty(entity.Alias) || "➕".Equals(entity.Alias))
|
|
|
|
|
{
|
|
|
|
|
item.Text = string.Empty;
|
|
|
|
|
item.Symbol = "\uf067";
|
|
|
|
|
item.SymbolSize = 0;
|
|
|
|
|
item.ImageIndent = new Point(0, 0);
|
|
|
|
|
|
|
|
|
|
item.ImageTextAlignment = ContentAlignment.MiddleCenter;
|
|
|
|
|
item.ItemAlignment = eItemAlignment.Center;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
item.Text = LangProxy.ToLang(entity.Alias);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case "数量减":
|
|
|
|
|
{
|
|
|
|
|
//➖
|
|
|
|
|
if (string.IsNullOrEmpty(entity.Alias) || "➖".Equals(entity.Alias))
|
|
|
|
|
{
|
|
|
|
|
item.Text = string.Empty;
|
|
|
|
|
item.Symbol = "\uf068";
|
|
|
|
|
item.SymbolSize = 0;
|
|
|
|
|
item.ImageIndent = new Point(0, 0);
|
|
|
|
|
|
|
|
|
|
item.ImageTextAlignment = ContentAlignment.MiddleCenter;
|
|
|
|
|
item.ItemAlignment = eItemAlignment.Center;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
item.Text = LangProxy.ToLang(entity.Alias);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
{
|
|
|
|
|
item.Text = LangProxy.ToLang(string.IsNullOrEmpty(entity.Alias) ? entity.Name : entity.Alias);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
|
|
|
|
|
item.Tag = entity;
|
|
|
|
|
|
|
|
|
|
item.TileSize = this.DefaultTileItemSize;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
item.Tag = entity;
|
|
|
|
|
|
|
|
|
|
item.MouseDown += OnMenuMouseDown;
|
|
|
|
|
item.CheckedChanged += OnMenuCheckedChanged;
|
|
|
|
|
|
|
|
|
|
if (module != null && module.Id.Equals(entity.Id))
|
|
|
|
|
{
|
|
|
|
|
this._selectedItem = item;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//保留最后一项的选择机会
|
|
|
|
|
last = item;
|
|
|
|
|
|
|
|
|
|
ic.SubItems.Add(item);
|
|
|
|
|
|
|
|
|
|
inx++;
|
|
|
|
|
}
|
|
|
|
|
this.menuItemPanel.Items.Add(ic);
|
|
|
|
|
this.menuItemPanel.Invalidate();
|
|
|
|
|
|
|
|
|
|
//没有匹配到具体的模块,将第一个主菜单选中
|
|
|
|
|
if (module == null || this._selectedItem == null)
|
|
|
|
|
{
|
|
|
|
|
this._selectedItem = last;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//选中当前菜单
|
|
|
|
|
if (this._selectedItem != null)
|
|
|
|
|
{
|
|
|
|
|
this._selectedItem.Checked = true;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
this.BindModuleParameter(null);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnMenuMouseDown(object sender, MouseEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
MetroTileItem item = (MetroTileItem)sender;
|
|
|
|
|
item.Checked = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnMenuCheckedChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
MetroTileItem item = (MetroTileItem)sender;
|
|
|
|
|
item.TileStyle.BorderColor = Color.Transparent;
|
|
|
|
|
item.TileStyle.BorderColor2 = Color.Transparent;
|
|
|
|
|
|
|
|
|
|
var entity = item.Tag as ShortcutMenu;
|
|
|
|
|
|
|
|
|
|
if (item.Checked)
|
|
|
|
|
{
|
|
|
|
|
//设置当前选择的模块
|
|
|
|
|
this._selectedItem = item;
|
|
|
|
|
|
|
|
|
|
item.TileStyle.TextColor = ColorTranslator.FromHtml(entity.Color3);
|
|
|
|
|
item.TileStyle.BackColor = ColorTranslator.FromHtml(entity.Color2);
|
|
|
|
|
item.TileStyle.BackColor2 = ColorTranslator.FromHtml(entity.Color2);
|
|
|
|
|
|
|
|
|
|
//绑定参数
|
|
|
|
|
BindModuleParameter(entity);
|
|
|
|
|
|
|
|
|
|
SendToResources();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
item.TileStyle.TextColor = ColorTranslator.FromHtml(entity.Color3);
|
|
|
|
|
item.TileStyle.BackColor = ColorTranslator.FromHtml(entity.Color1);
|
|
|
|
|
item.TileStyle.BackColor2 = ColorTranslator.FromHtml(entity.Color1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void BindModuleParameter(ShortcutMenu 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());
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
this.txtAlias.Text = 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);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void SendToResources()
|
|
|
|
|
{
|
|
|
|
|
if (this._selectedItem == null) return;
|
|
|
|
|
|
|
|
|
|
var module = this._selectedItem.Tag as ShortcutMenu;
|
|
|
|
|
//当前模块下已经选择功能
|
|
|
|
|
var selected = this._dataSource.FindAll(x => !string.IsNullOrEmpty(x.ParentId));
|
|
|
|
|
selected.Sort((x, y) => (x.OrderNo.CompareTo(y.OrderNo)));
|
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
|
|
|
|
|
o.Checked = selected.Exists(x => x.ResourceId == resource.Id);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnFontSelectedIndexChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
var item = sender as ComboBoxEx;
|
|
|
|
|
|
|
|
|
|
var subItems = this.menuItemPanel.Items;
|
|
|
|
|
if (subItems.Count < 1) return;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var items = subItems[0].SubItems;
|
|
|
|
|
var font = (ModuleFont)Enum.Parse(typeof(ModuleFont), item.SelectedItem.ToString(), false);
|
|
|
|
|
|
|
|
|
|
foreach (MetroTileItem o in items)
|
|
|
|
|
{
|
|
|
|
|
//当前选择的或者当前区域全部
|
|
|
|
|
if (o.Checked || checkBoxFontAndColor.Checked)
|
|
|
|
|
{
|
|
|
|
|
var module = o.Tag as ShortcutMenu;
|
|
|
|
|
module.FontSize = font.ToString();
|
|
|
|
|
o.TileStyle.Font = GetFont(module.FontSize);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 颜色修改事件
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
private void OnSelectedColorChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
var item = sender as ComboBoxColorPicker;
|
|
|
|
|
|
|
|
|
|
var subItems = this.menuItemPanel.Items;
|
|
|
|
|
if (subItems.Count < 1) return;
|
|
|
|
|
|
|
|
|
|
var items = subItems[0].SubItems;
|
|
|
|
|
foreach (MetroTileItem o in items)
|
|
|
|
|
{
|
|
|
|
|
//当前选择的或者当前区域全部
|
|
|
|
|
if (o.Checked || checkBoxFontAndColor.Checked)
|
|
|
|
|
{
|
|
|
|
|
var module = o.Tag as ShortcutMenu;
|
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnAliasTextChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (this._selectedItem == null) return;
|
|
|
|
|
|
|
|
|
|
var item = sender as TextBoxX;
|
|
|
|
|
switch (this._selectedArea)
|
|
|
|
|
{
|
|
|
|
|
case ModuleArea.快捷区:
|
|
|
|
|
{
|
|
|
|
|
var module = this._selectedItem.Tag as ShortcutMenu;
|
|
|
|
|
var alias = item.Text.Trim();
|
|
|
|
|
|
|
|
|
|
switch (module.KeyCode)
|
|
|
|
|
{
|
|
|
|
|
case "数量加":
|
|
|
|
|
{
|
|
|
|
|
//➕
|
|
|
|
|
if (string.IsNullOrEmpty(alias) || "➕".Equals(alias))
|
|
|
|
|
{
|
|
|
|
|
this._selectedItem.Text = string.Empty;
|
|
|
|
|
this._selectedItem.Symbol = "\uf067";
|
|
|
|
|
this._selectedItem.SymbolSize = 0;
|
|
|
|
|
this._selectedItem.ImageIndent = new Point(0, 0);
|
|
|
|
|
|
|
|
|
|
this._selectedItem.ImageTextAlignment = ContentAlignment.MiddleCenter;
|
|
|
|
|
this._selectedItem.ItemAlignment = eItemAlignment.Center;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
this._selectedItem.Text = LangProxy.ToLang(alias);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case "数量减":
|
|
|
|
|
{
|
|
|
|
|
//➖
|
|
|
|
|
if (string.IsNullOrEmpty(alias) || "➖".Equals(alias))
|
|
|
|
|
{
|
|
|
|
|
this._selectedItem.Text = string.Empty;
|
|
|
|
|
this._selectedItem.Symbol = "\uf068";
|
|
|
|
|
this._selectedItem.SymbolSize = 0;
|
|
|
|
|
this._selectedItem.ImageIndent = new Point(0, 0);
|
|
|
|
|
|
|
|
|
|
this._selectedItem.ImageTextAlignment = ContentAlignment.MiddleCenter;
|
|
|
|
|
this._selectedItem.ItemAlignment = eItemAlignment.Center;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
this._selectedItem.Text = LangProxy.ToLang(alias);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
{
|
|
|
|
|
this._selectedItem.Text = LangProxy.ToLang(string.IsNullOrEmpty(alias) ? module.Name : alias);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
module.Alias = alias;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnButtonForward(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (this._selectedItem == null) return;
|
|
|
|
|
|
|
|
|
|
switch (this._selectedArea)
|
|
|
|
|
{
|
|
|
|
|
case ModuleArea.快捷区:
|
|
|
|
|
{
|
|
|
|
|
//当前要前移的对象
|
|
|
|
|
var current = this._selectedItem.Tag as ShortcutMenu;
|
|
|
|
|
//当前明细区记录集
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
this.BuilderItemPanel(current);
|
|
|
|
|
}
|
|
|
|
|
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 ShortcutMenu;
|
|
|
|
|
//当前结账区记录集
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
this.BuilderItemPanel(current);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
RefreshOrderNo();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Tuple<bool, string> SaveChanged()
|
|
|
|
|
{
|
|
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
|
|
{
|
|
|
|
|
using (var transaction = db.GetTransaction())
|
|
|
|
|
{
|
|
|
|
|
db.Execute("delete from pos_shortcut;");
|
|
|
|
|
|
|
|
|
|
db.InsertBatch(this._dataSource);
|
|
|
|
|
|
|
|
|
|
transaction.Complete();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//发送通知,修改界面呈现
|
|
|
|
|
MsgEvent.Send(Constant.SHORTCUT_CHANGED_NOTIFY, this._dataSource);
|
|
|
|
|
|
|
|
|
|
return new Tuple<bool, string>(true, LangProxy.ToLang("更新成功"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|