using ComponentFactory.Krypton.Navigator;
using ComponentFactory.Krypton.Toolkit;
using NXWMS.Client.Model.AppModels.Condition.SysSettings;
using NXWMS.Commons;
using NXWMS.Services;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace NXWMS
{
public partial class MainFormNew : KryptonForm
{
public MainFormNew()
{
InitializeComponent();
InitCirclePicBox();
InitData();
LoadMainMenuData();
BasDictionaryUtil.GetAndSetBasDictionary();
}
private int _widthLeftRight;
private void buttonSpecHeaderGroup1_Click(object sender, EventArgs e)
{
#region 20210222 孙亚龙新增布局控制
kryptonSplitContainer1.SuspendLayout();
if (kryptonHeaderGroup1.HeaderPositionPrimary == VisualOrientation.Top)
{
// Make the left panel of the splitter fixed in size
kryptonSplitContainer1.FixedPanel = FixedPanel.Panel1;
kryptonSplitContainer1.IsSplitterFixed = true;
// Remember the current height of the header group
_widthLeftRight = kryptonHeaderGroup1.Width;
// We have not changed the orientation of the header yet, so the width of
// the splitter panel is going to be the height of the collapsed header group
int newWidth = kryptonHeaderGroup1.PreferredSize.Height;
// Make the header group fixed just as the new height
kryptonSplitContainer1.Panel1MinSize = newWidth;
kryptonSplitContainer1.SplitterDistance = newWidth;
// Change header to be vertical and button to near edge
kryptonHeaderGroup1.HeaderPositionPrimary = VisualOrientation.Right;
buttonSpecHeaderGroup1.Edge = PaletteRelativeEdgeAlign.Near;
}
else
{
// Make the left panel of the splitter fixed in size
kryptonSplitContainer1.FixedPanel = FixedPanel.Panel1;
kryptonSplitContainer1.IsSplitterFixed = true;
// Put back the minimise size to the original
kryptonSplitContainer1.Panel1MinSize = _widthLeftRight;
// Calculate the correct splitter we want to put back
kryptonSplitContainer1.SplitterDistance = _widthLeftRight;
// Change header to be horizontal and button to far edge
kryptonHeaderGroup1.HeaderPositionPrimary = VisualOrientation.Top;
buttonSpecHeaderGroup1.Edge = PaletteRelativeEdgeAlign.Far;
}
kryptonSplitContainer1.ResumeLayout();
#endregion
}
private void InitCirclePicBox()
{
System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath();
path.AddEllipse(this.picb_UserPhoto.ClientRectangle);
Region reg = new Region(path);
this.picb_UserPhoto.Region = reg;
}
private void MainFormNew_Load(object sender, EventArgs e)
{
this.Text = "WMS";
}
///
/// 初始化数据
///
private void InitData()
{
//TODO暂时放所有
AppConfig.MenuUserGroupList = SysSettingsServices.menuService.GetLevelList(new MenuLevelCondition { }).Data;
}
///
/// 树节点双击事件
///
///
///
private void TreeMenuNodeDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
{
try
{
var menuView = sender as KryptonTreeView;
var selectedNode = menuView.SelectedNode;
if (selectedNode == null)
{
return;
}
//限定打开个数
if (knavg_MainTabControl.Pages.Count >= AppConfig._MaxFormCount)
{
KryptonMessageBox.Show($"当前打开窗体过多,影响系统运行速度\r\n\r\n请关闭其它窗体,在进行打开新菜单窗体!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
var currMenu = AppConfig.MenuUserGroupList.Where(m => m.MenuCode == selectedNode.Name).ToList();
var objectHandle = Activator.CreateInstance(null, currMenu.FirstOrDefault().MenuURL);
var frm = (Form)objectHandle.Unwrap();
AddFrmMenuPage(frm, selectedNode);
}
catch (Exception ex)
{
KryptonMessageBox.Show($"加载窗体错误!\r\n" + ex.Message, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void AddFrmMenuPage(Form frm, TreeNode treeNode)
{
KryptonPage tmpPage = knavg_MainTabControl.Pages.FirstOrDefault(x => x.Name == treeNode.Name);
if (tmpPage != null)
{
knavg_MainTabControl.SelectedPage = tmpPage;
knavg_MainTabControl.Refresh();
}
else
{
KryptonPage tmpPage1 = new KryptonPage { Text = treeNode.Text, Name = treeNode.Name };
ButtonSpecAny bsa = new ButtonSpecAny
{
Style = PaletteButtonStyle.FormClose,
Type = PaletteButtonSpecStyle.FormClose,
Tag = tmpPage1
};
bsa.Click += BtnClose_Click;
knavg_MainTabControl.Pages.Add(tmpPage1);
knavg_MainTabControl.SelectedPage = tmpPage1;
knavg_MainTabControl.SelectedPage.ButtonSpecs.Add(bsa);
frm.TopLevel = false;
//frm.WindowState = FormWindowState.Maximized;
//frm.MinimizeBox = false;
frm.FormBorderStyle = FormBorderStyle.None;
frm.Dock = DockStyle.Fill;
frm.Parent = tmpPage1;
frm.Show();
}
}
private void BtnClose_Click(object sender, EventArgs e)
{
ButtonSpecAny bsa = sender as ButtonSpecAny;
knavg_MainTabControl.Pages.Remove(bsa.Tag);
knavg_MainTabControl.SelectedPage = knavg_MainTabControl.Pages[knavg_MainTabControl.Pages.Count - 1];
}
private void LoadMainMenuData()
{
var mainMenuResult1 = (from x in AppConfig.MenuUserGroupList.Where(x => x.MainMenuPid == -1 && x.MainMenuUsedFlag == 1)
select new
{ x.MainMenuId, x.MainMenuName, x.MainMenuCode, x.MainMenuOrder, x.MainMenuURL }).Distinct().OrderBy(x => x.MainMenuOrder);
if (mainMenuResult1.Count() > 0)
{
foreach (var item in mainMenuResult1)
{
KryptonPage tmpPage1 = new KryptonPage { Text = item.MainMenuName, Name = item.MainMenuCode };
KryptonTreeView treeMenu = new KryptonTreeView();
foreach (var itemDetail in (from x in AppConfig.MenuUserGroupList.Where(m => m.MainMenuCode == item.MainMenuCode && m.MenuUsedFlag == 1)
select new
{ x.MenuCode, x.MenuName, x.MenuId, x.MenuOrder, x.MenuURL }).Distinct().OrderBy(x => x.MenuId))
{
treeMenu.Nodes.Add(itemDetail.MenuCode, itemDetail.MenuName);
}
treeMenu.ItemStyle = ButtonStyle.Custom2;
treeMenu.StateCommon.Node.Border.Color1 = Color.Black;
treeMenu.StateCommon.Node.Border.Color2 = Color.Black;
treeMenu.OverrideFocus.Node.Back.Color1 = Color.FromArgb(132, 0, 255);
treeMenu.OverrideFocus.Node.Back.Color2 = Color.FromArgb(132, 0, 255);
treeMenu.Palette = kryptonPalette2;
treeMenu.NodeMouseDoubleClick += new TreeNodeMouseClickEventHandler(TreeMenuNodeDoubleClick);
tmpPage1.Controls.Add(treeMenu);
treeMenu.Dock = DockStyle.Fill;
knavg_MainMenu.Pages.Add(tmpPage1);
}
KryptonPage tmpPage2 = new KryptonPage(Text = " ", Name = "DefaultPage");
knavg_MainMenu.Pages.Add(tmpPage2);
knavg_MainMenu.SelectedPage = tmpPage2;
}
}
private void MainFormNew_FormClosing(object sender, FormClosingEventArgs e)
{
Application.Exit();
}
}
}