using PaintDotNet.SystemLayer; using System; using System.Linq; using System.Windows.Forms; namespace PaintDotNet.Menus { /// /// 主菜单容器 /// 包含所有菜单 /// internal sealed class PdnMainMenu : MenuStripEx { private FileMenu fileMenu; private EditMenu editMenu; private HardwareControlMenu hardwareControlMenu; public ImageCollectionMenu imageCollectionMenu; private ImageMenu imageMenu; public LabelActionMenu labelActionMenu; public MeasureActionMenu measureActionMenu; private ViewSettingMenu viewSettingMenu; private BinaryActionMenu binaryActionMenu; private GeneralAnalysisMenu generalAnalysisMenu; private AutoAnalysisMenu autoAnalysisMenu; private DedicatedAnalysisMenu dedicatedAnalysisMenu; private ToolsMenu toolsMenu; private SettingMenu settingMenu; private HelpMenu helpMenu; private AppWorkspace appWorkspace; private string[] menuIdArr; public AppWorkspace AppWorkspace { get { return this.appWorkspace; } set { this.appWorkspace = value; this.fileMenu.AppWorkspace = value; this.editMenu.AppWorkspace = value; this.hardwareControlMenu.AppWorkspace = value; this.imageCollectionMenu.AppWorkspace = value; this.imageMenu.AppWorkspace = value; this.labelActionMenu.AppWorkspace = value; this.measureActionMenu.AppWorkspace = value; this.viewSettingMenu.AppWorkspace = value; this.binaryActionMenu.AppWorkspace = value; this.generalAnalysisMenu.AppWorkspace = value; this.autoAnalysisMenu.AppWorkspace = value; this.dedicatedAnalysisMenu.AppWorkspace = value; this.toolsMenu.AppWorkspace = value; this.settingMenu.AppWorkspace = value; this.helpMenu.AppWorkspace = value; } } public PdnMainMenu() { InitializeComponent(); //模块管理,暂时先注释掉 InitializeModule(); } private void InitializeComponent() { this.fileMenu = new FileMenu(100); this.editMenu = new EditMenu(200); this.hardwareControlMenu = new HardwareControlMenu(300); this.imageCollectionMenu = new ImageCollectionMenu(400); this.imageMenu = new ImageMenu(500); this.labelActionMenu = new LabelActionMenu(600); this.measureActionMenu = new MeasureActionMenu(700); this.viewSettingMenu = new ViewSettingMenu(800); this.binaryActionMenu = new BinaryActionMenu(900); this.generalAnalysisMenu = new GeneralAnalysisMenu(1000); this.dedicatedAnalysisMenu = new DedicatedAnalysisMenu(1100); this.toolsMenu = new ToolsMenu(1200); this.settingMenu = new SettingMenu(1300); this.helpMenu = new HelpMenu(1400); this.autoAnalysisMenu = new AutoAnalysisMenu(1500); SuspendLayout(); // // PdnMainMenu // this.Name = "PdnMainMenu"; this.LayoutStyle = ToolStripLayoutStyle.HorizontalStackWithOverflow; this.Items.AddRange( new ToolStripItem[] { this.fileMenu, this.editMenu, this.hardwareControlMenu, this.imageCollectionMenu, this.imageMenu, this.labelActionMenu, this.measureActionMenu, this.viewSettingMenu, this.binaryActionMenu, this.generalAnalysisMenu, this.autoAnalysisMenu, this.dedicatedAnalysisMenu, this.toolsMenu, this.settingMenu, this.helpMenu }); ResumeLayout(); } /// /// 模块管理 /// 需要先从加密锁过滤一遍 /// 然后再模块管理的配置过滤一遍 /// private void InitializeModule() { /*if (Startup.instance.moduleConfigModel != null) { for (int i = 0; i < this.Items.Count; i++) { this.Items[i].Visible = false; if (Startup.instance.moduleConfigModel.items.Find(a => a.ParentId == ((PdnMenuItem)this.Items[i]).MenuId) != null) { this.Items[i].Visible = true; } } }*/ //以下为新的模块管理代码 string filePath = Application.StartupPath + "\\Config\\" + Startup.instance.SettingPrefix + "\\ModuleConfig.txt"; if (System.IO.File.Exists(filePath)) { string str = System.IO.File.ReadAllText(filePath); if (str.IndexOf(',') != -1) { menuIdArr = str.Split(','); } else { if (!string.IsNullOrEmpty(str)) { menuIdArr = new string[] { str }; } } if (menuIdArr != null && menuIdArr.Count() > 0) { RecursionMenuId(this.Items, 0); } else { ////模块管理永远显示(已取消的业务注释) //for (int i = 0; i < this.Items.Count; i++) //{ // this.Items[i].Visible = false; // if (this.Items[i].Name == "Menu.Setting") // { // this.Items[i].Visible = true; // if (((PdnMenuItem)this.Items[i]).DropDownItems.Count > 0) // { // ToolStripItemCollection collection = ((PdnMenuItem)this.Items[i]).DropDownItems; // for (int j = 0; j < collection.Count; j++) // { // collection[j].Visible = false; // if (collection[j].Name == "ModuleSetting") // { // //collection[j].Visible = true; // } // } // } // } //} } } } /// /// /// /// /// /// 返回父菜单是否显示 private bool RecursionMenuId(ToolStripItemCollection toolStripItemCollection, int parentLevel) { bool showParentMenu = false; if (toolStripItemCollection != null && toolStripItemCollection.Count > 0) { bool toShowSeparator = false; if (parentLevel > 1) toShowSeparator = true; for (int i = 0; i < toolStripItemCollection.Count; i++) { if (toolStripItemCollection[i] is PdnMenuItem) { bool showToolStripItemI = false; //toolStripItemCollection[i].Visible = false; if (/* (toolStripItemCollection[i].Name.Equals("ModuleSetting") || toolStripItemCollection[i].Name.Equals("Menu.Setting")) || 模块管理永远显示(已取消的业务注释) */ Array.IndexOf(menuIdArr, ((PdnMenuItem)toolStripItemCollection[i]).MenuId.ToString()) != -1 && Startup.getMenuIdVisible(((PdnMenuItem)toolStripItemCollection[i]).MenuId)) { showToolStripItemI = true; ////toolStripItemCollection[i].Visible = true; //if (parentLevel == 1) // toShowSeparator = true; } //控制最后一条分割线不显示 else if (parentLevel == 1 && i == toolStripItemCollection.Count - 1) { for (int last_i = toolStripItemCollection.Count - 2; last_i > 0; last_i--) { if (toolStripItemCollection[last_i]is PdnMenuItem) { if (Array.IndexOf(menuIdArr, ((PdnMenuItem)toolStripItemCollection[last_i]).MenuId.ToString()) != -1) break; } else toolStripItemCollection[last_i].Visible = false; } } ////模块管理永远显示(已取消的业务注释) //if (toolStripItemCollection[i].Name.Equals("ModuleSetting") || toolStripItemCollection[i].Name.Equals("Menu.Setting")) //{ // //toolStripItemCollection[i].Visible = true; // showParentMenu = true; //} //控制所有子菜单都没有授权的父菜单也不显示 if (showToolStripItemI && (RecursionMenuId(((PdnMenuItem)toolStripItemCollection[i]).DropDownItems, parentLevel + 1) || toolStripItemCollection[i].Name.Equals("OpenRecent"))) { if (!toolStripItemCollection[i].Name.Equals("NsetExtraction")) toolStripItemCollection[i].Visible = true; toShowSeparator = true; showParentMenu = true; } else toolStripItemCollection[i].Visible = false; } else if (parentLevel == 1 && toShowSeparator) toShowSeparator = false; else if (parentLevel == 1 && !toShowSeparator) toolStripItemCollection[i].Visible = false; } } else showParentMenu = true; return showParentMenu; } } }