ÿþ#region using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; using CSFrameworkV5.Common; using CSFrameworkV5.Core; using DevExpress.Utils; using DevExpress.XtraEditors.Controls; using DevExpress.XtraNavBar; using DevExpress.XtraTreeList; using DevExpress.XtraTreeList.Columns; using DevExpress.XtraTreeList.Nodes; #endregion ///*************************************************************************/ ///* ///* ‡eöN T ÿNavigatorLoader.cs ///* z^ô‹f : ü[*‚Ä~öNubhV,1uû|ß~܃USꁨRubü[*‚Ä~öN ///* ŸSR\O€ ÿwww.csframework.com ///* ///* Copyright 2006-2021 C/SFh¶gQ www.csframework.com ///* ///**************************************************************************/ namespace CSFrameworkV5.Library.CommonClass { /// <summary> /// ü[*‚Ä~öN7h_ /// </summary> public enum NavigatorStyle { /// <summary> /// y˜îvRhˆ /// </summary> BarItem, /// <summary> /// hb_>f:y /// </summary> BarContainer } /// <summary> /// ü[*‚Ä~öNubhVúW{| /// </summary> public class NavigatorBase { protected const int PARENT_IMAGE_INDEX = 0; protected const int CHILD_IMAGE_INDEX = 1; /// <summary> /// !jWW¡{thV, ;N‰(uŽN·ƒÖS@b gò] R}„v!jWWRhˆ /// </summary> protected ModuleManager _ModuleManager; /// <summary> /// „g hV /// </summary> /// <param name="moduleManager">!jWW¡{thV</param> public NavigatorBase(ModuleManager moduleManager) { _ModuleManager = moduleManager; } /// <summary> /// !jg¹eÕl /// </summary> /// <param name="navBar">NavBarControl</param> /// <param name="moduleMenu">!jWW„v;N܃US</param> /// <param name="moduleDisplayName">!jWW„v Tðy</param> protected virtual void CreateNavBarButton(NavBarControl navBar, ToolStripMenuItem moduleMenu, string moduleDisplayName) { } /// <summary> /// ž[°s¥cãS, Rú^NavBarControlÄ~öN /// </summary> /// <param name="mainMenu">û|ß~;N܃US</param> /// <param name="navBar">NavBarControlÄ~öN</param> public virtual void CreateNavigator(MenuStrip mainMenu, NavBarControl navBar) { try { navBar.BeginUpdate(); navBar.Groups.Clear(); navBar.Items.Clear(); //šg>Nû|ß~;N܃US„v!jWW܃US foreach (ToolStripMenuItem moduleMenu in mainMenu.Items) //ÖS0R܃US,6qTR_@b gP[܃USy˜Rú^NavBarControl if (moduleMenu != null && moduleMenu.Enabled) //Rú^å‹!jWW„vNavBarButton. CreateNavBarButton(navBar, moduleMenu, moduleMenu.Text); //¡l gûNUO!jWW(Groupspeîv:N0)RRú^N*Nzz„vGroup, èl:Ïk*NGroupù[”^N*N!jWW. if (navBar.Groups.Count == 0) navBar.Groups.Add(new NavBarGroup("")); navBar.EndUpdate(); } catch (Exception ex) { Msg.ShowException(ex); } } public virtual void RemoveFunction(string menuName) { } } /// <summary> /// uby˜îvRhˆ7h_„vü[*‚Ä~öN. ù[”^{|‹WÿNavigatorStyle.BarItem /// </summary> public class NavigatorBarList : NavigatorBase { public NavigatorBarList(ModuleManager moduleManager) : base( moduleManager) { } /// <summary> /// ߍnc܃USy˜Rú^NavBarItem /// </summary> /// <param name="navBar">NavBarControl</param> /// <param name="group">NavBarGroup</param> /// <param name="menuItem">ToolStripItem,S_MR܃USy˜</param> /// <param name="imageIndex">þVGrID</param> /// <param name="isSubItem">/f&TP[ c®”(h°‹)</param> private void CreateLinkByMenu(NavBarControl navBar, NavBarGroup group, ToolStripItem menuItem, int imageIndex, bool isSubItem) { if (menuItem.Enabled) { var item = CreateNavBarItem(navBar, menuItem, isSubItem); item.SmallImageIndex = imageIndex; //Sub Function group.ItemLinks.Add(item); } } /// <summary> /// Rú^P[ c®” /// </summary> /// <param name="navBar">NavBarControl</param> /// <param name="group">NavBarGroup</param> /// <param name="menuItem">ToolStripItem,S_MR܃USy˜</param> private void CreateLinkSubItem(NavBarControl navBar, NavBarGroup group, ToolStripItem menuItem) { if (menuItem is ToolStripMenuItem) { var item = menuItem as ToolStripMenuItem; foreach (ToolStripItem subItem in item.DropDownItems) CreateLinkByMenu(navBar, group, subItem, -1, true); } } /// <summary> /// Rú^ü[*‚Ä~öN„vÄ~ c®”(NavBarControl.NavBarGroup) /// </summary> /// <param name="navBar">NavBarControlù[aŒ</param> /// <param name="moduleMenu">!jWW;N܃US</param> /// <param name="moduleDisplayName">!jWW Tðy</param> protected override void CreateNavBarButton(NavBarControl navBar, ToolStripMenuItem moduleMenu, string moduleDisplayName) { var tag = moduleMenu.Tag as MenuItemTag; var group = CreateNavBarGroup(navBar, moduleDisplayName); //9hnc!jWW TRú^NavBarGroup(Ä~ c®”) group.Tag = moduleMenu; group.LargeImageIndex = tag.ModuleID; //Rú^Ä~„vP[ c®” foreach (ToolStripItem menuItem in moduleMenu.DropDownItems) { if (menuItem is ToolStripSeparator) continue; if (MenuStripUtils.IsSubMenuOwner(menuItem)) // gP[܃US { CreateLinkByMenu(navBar, group, menuItem, PARENT_IMAGE_INDEX, true); CreateLinkSubItem(navBar, group, menuItem); } else { CreateLinkByMenu(navBar, group, menuItem, CHILD_IMAGE_INDEX, false); } } } /// <summary> /// Rú^ü[*‚§cöN„v c®”Ä~NavBarGroup /// </summary> private NavBarGroup CreateNavBarGroup(NavBarControl navBar, string caption) { var group = navBar.Groups.Add(); //žX RN*NButtonÄ~. group.Caption = caption; //!jWW„v>f:y Tðy group.LargeImageIndex = PARENT_IMAGE_INDEX; if (group.Caption.Equals(string.Empty)) group.Caption = "Unknown Name"; return group; } /// <summary> /// 1u܃USRú^ü[*‚§cöN c®”NavBarItem /// </summary> private NavBarItem CreateNavBarItem(NavBarControl navBar, ToolStripItem item, bool isSubItem) { var newItem = new NavBarItem(); if (isSubItem) newItem.Caption = " Ï% " + item.Text; else newItem.Caption = item.Text; newItem.Tag = item; //Ñ~š[N*N܃USy˜,newItem.Click‹NöNOO(uُ*N܃USy˜ newItem.LinkClicked += OnNavBarLinkClick; newItem.SmallImageIndex = CHILD_IMAGE_INDEX; navBar.Items.Add(newItem); return newItem; } /// <summary> /// ü[*‚Ä~öN„v c®”‹NöN. /// </summary> private void OnNavBarLinkClick(object sender, NavBarLinkEventArgs e) { if (e.Link.Item.Tag is ToolStripItem) { var item = (ToolStripItem)e.Link.Item.Tag; if (null != item) item.PerformClick(); //gbLˆÜƒUS‹NöN. } } public override void RemoveFunction(string menuName) { foreach (NavBarGroup G in _ModuleManager.NavBarControl.Groups) //_ModuleManager.NavBarControl.Items foreach (NavBarItemLink link in G.ItemLinks) if (link.Item.Tag is ToolStripItem) if ((link.Item.Tag as ToolStripItem).Name == menuName) { G.ItemLinks.Remove(link); // Rd–þ”¥c _ModuleManager.NavBarControl.Items .Remove(link.Item); // Rd–ž[SOù[aŒ break; } } } /// <summary> /// ubh7h_„vü[*‚Ä~öN. ù[”^{|‹WÿNavigatorStyle.BarContainer /// </summary> public class NavigatorTreeView : NavigatorBase { private List<TreeList> _TreeList = new List<TreeList>(); public NavigatorTreeView(ModuleManager moduleManager) : base( moduleManager) { } /// <summary> /// \!jWW;N܃USlbc:NhƉþV,N*N c®”Ä~ù[”^N*N!jWW /// </summary> /// <param name="group"> c®”Ä~</param> /// <param name="menuItem">!jWW;N܃US</param> private void CreateGroupTreeView(NavBarGroup group, ToolStripMenuItem menuItem) { var tv = new TreeList(); tv.Cursor = Cursors.Hand; _TreeList.Add(tv); //·ƒÖSNavbar„vSmallImages var il = group.NavBar.SmallImages as ImageCollection; tv.StateImageList = il; //TreeListÄ~öN„vþVhù[”^ Navbar„vSmallImages tv.BeginUnboundLoad(); InitTreeList(tv); var col = tv.Columns.Add(); col.Visible = true; col.Fixed = FixedStyle.Left; foreach (ToolStripItem item in menuItem.DropDownItems) { if (item is ToolStripSeparator) continue; if (item.Enabled == false) continue; var node = tv.AppendNode(new object[] { item.Text }, null); node.StateImageIndex = CHILD_IMAGE_INDEX; //P[§~ ,ù[”^frmMain.ilSmall16„vþVh^÷S node.Tag = item; if (item is ToolStripMenuItem && (item as ToolStripMenuItem).DropDownItems.Count > 0) { node.StateImageIndex = PARENT_IMAGE_INDEX; //6r§~ ,ù[”^frmMain.ilSmall16„vþVh^÷S CreateGroupTreeViewChild(tv, item as ToolStripMenuItem, node); } } tv.ExpandAll(); //ibU\@b gÓ~¹p tv.EndUnboundLoad(); group.ControlContainer.Controls.Add(tv); } /// <summary> /// R_ z^„vP[ z^ /// </summary> /// <param name="tv"></param> /// <param name="parent"></param> /// <param name="parentNode"></param> private void CreateGroupTreeViewChild(TreeList tv, ToolStripMenuItem parent, TreeListNode parentNode) { foreach (ToolStripItem item in parent.DropDownItems) { if (item is ToolStripSeparator) continue; if (item.Enabled == false) continue; var node = tv.AppendNode(new object[] { item.Text }, parentNode); node.StateImageIndex = CHILD_IMAGE_INDEX; //P[§~ node.Tag = item; if (item is ToolStripMenuItem && (item as ToolStripMenuItem).DropDownItems.Count > 0) CreateGroupTreeViewChild(tv, item as ToolStripMenuItem, node); } } /// <summary> /// Rú^ü[*‚Ä~öN c®”(SìbRú^ c®”Ä~(NavBarGroup)ŒT c®”(BarItem) /// </summary> /// <param name="navBar">NavBarControlù[aŒ</param> /// <param name="moduleMenu">!jWW;N܃US</param> /// <param name="moduleDisplayName">!jWW Tðy</param> protected override void CreateNavBarButton(NavBarControl navBar, ToolStripMenuItem moduleMenu, string moduleDisplayName) { var tag = moduleMenu.Tag as MenuItemTag; var group = CreateNavBarGroup(navBar, tag.ModuleID, moduleDisplayName); //9hnc!jWW TðyRú^Group group.Tag = moduleMenu; CreateGroupTreeView(group, moduleMenu); } /// <summary> /// Rú^ü[*‚§cöN c®”Ä~NavBarGroup /// </summary> private NavBarGroup CreateNavBarGroup(NavBarControl navBar, int moduleID, string caption) { var group = navBar.Groups.Add(); //žX RN*NButtonÄ~. group.Caption = caption; //!jWW„v>f:y Tðy group.LargeImageIndex = moduleID; //'YþVh group.GroupStyle = NavBarGroupStyle.ControlContainer; if (group.Caption.Equals(string.Empty)) group.Caption = "Unknown Name"; return group; } public override void CreateNavigator(MenuStrip mainMenu, NavBarControl navBar) { _TreeList.Clear(); base.CreateNavigator(mainMenu, navBar); } /// <summary> /// RËYSh„v>f:y7h_ /// </summary> /// <param name="treeList">hÄ~öN</param> private void InitTreeList(TreeList treeList) { treeList.Font = new Font("®_oÅ–Ñž", 9, FontStyle.Regular); treeList.BackColor = Color.Transparent; treeList.BorderStyle = BorderStyles.NoBorder; treeList.Dock = DockStyle.Fill; treeList.MouseClick += tv_MouseClick; treeList.RowHeight = 25; treeList.Appearance.Empty.BackColor = Color.Transparent; treeList.Appearance.Row.BackColor = Color.Transparent; //hƉþVvQƒ[¾‹n treeList.OptionsView.ShowCheckBoxes = false; treeList.OptionsView.ShowColumns = false; treeList.OptionsView.ShowIndicator = false; treeList.OptionsView.ShowHorzLines = false; treeList.OptionsView.ShowVertLines = false; treeList.OptionsView.ShowRoot = false; // N>f:y܃US treeList.OptionsMenu.EnableColumnMenu = false; treeList.OptionsMenu.EnableFooterMenu = false; //Íd\OLˆ:N^\'`¾‹n treeList.OptionsBehavior.Editable = false; treeList.OptionsBehavior.AllowExpandOnDblClick = false; treeList.OptionsBehavior.AutoChangeParent = false; treeList.OptionsBehavior.AutoNodeHeight = false; treeList.OptionsBehavior.Editable = false; treeList.OptionsBehavior.KeepSelectedOnClick = true; treeList.OptionsBehavior.PopulateServiceColumns = false; treeList.OptionsBehavior.ResizeNodes = true; treeList.OptionsBehavior.ShowEditorOnMouseUp = false; treeList.OptionsBehavior.ShowToolTips = false; treeList.OptionsBehavior.SmartMouseHover = true; //>f:y7h_ treeList.Appearance.FocusedCell.BackColor = Color.FromArgb(239, 235, 156); treeList.Appearance.FocusedCell.Options.UseBackColor = true; treeList.Appearance.FocusedRow.BackColor = Color.FromArgb(230, 230, 250); treeList.Appearance.FocusedRow.Options.UseBackColor = true; treeList.Appearance.HideSelectionRow.BackColor = Color.FromArgb(212, 212, 223); treeList.Appearance.HideSelectionRow.Options.UseBackColor = true; treeList.Appearance.HorzLine.BackColor = Color.Silver; treeList.Appearance.HorzLine.Options.UseBackColor = true; treeList.Appearance.VertLine.BackColor = Color.Silver; treeList.Appearance.VertLine.Options.UseBackColor = true; treeList.OptionsBehavior.AllowExpandOnDblClick = true; } /// <summary> /// S_(u7b¹pûQhÓ~¹p /// </summary> private void OnNodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { if (e.Node.Tag != null && e.Node.Tag is ToolStripItem) (e.Node.Tag as ToolStripItem).PerformClick(); } public override void RemoveFunction(string menuName) { foreach (var tv in _TreeList) { var node = tv.FindNode(n => n.Tag is ToolStripItem && (n.Tag as ToolStripItem).Name == menuName); if (node != null) tv.Nodes.Remove(node); } //StringBuilder sb = new StringBuilder(); //foreach (TreeListNode n in tv.Nodes) //{ // if (n.Tag is ToolStripItem) // { // sb.AppendLine((n.Tag as ToolStripItem).Name); // if ((n.Tag as ToolStripItem).Name == menuName) // { // tv.Nodes.Remove(n); // break; // } // } //} //string s = sb.ToStringEx(); ////TreeListNode node = tv.FindNode(n => (n.Tag is ToolStripItem) && (n.Tag as ToolStripItem).Name == menuName); ////if (node != null) tv.Nodes.Remove(node); } /// <summary> /// S_(u7b¹pûQ N T„vhÓ~¹p /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void tv_FocusedNodeChanged(object sender, FocusedNodeChangedEventArgs e) { if (e.Node.Tag != null && e.Node.Tag is ToolStripItem) (e.Node.Tag as ToolStripItem).PerformClick(); } /// <summary> /// TreeNode.Click‹NöN /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void tv_MouseClick(object sender, MouseEventArgs e) { if ((sender as TreeList).FocusedNode != null && e.Button == MouseButtons.Left) { var node = (sender as TreeList).FocusedNode; if (node.Tag != null && node.Tag is ToolStripItem) { node.Selected = true; (node.Tag as ToolStripItem).PerformClick(); } } } } }