public static string[] BuildCmdLine(PanelItemBase panelItem, AddonMenuItem menuItem) { var programFileName = menuItem.ProgramValue.ExpandedFileName; var programArgs = AddonProgram.ExpandCmdLine(menuItem.ProgramArgs); programArgs = MacroHelper.ExpandPublicProperties(programArgs, panelItem); return(ProtocolHelper.IsProtocol(menuItem.ProgramRef.Id) ? new[] { menuItem.ProgramRef.Id + programArgs } : new[] { programFileName, programArgs }); }
private void LoadAddon(string fileName) { // load addon from xml var addon = (AddOn)SerializeUtils.DeserializeObjectFromXmlFile(fileName, typeof(AddOn)); // process programs foreach (var item in addon.Programs) { if (!m_Programs.ContainsKey(item.Id)) { item.PrepareFileNameAndIcon(); m_Programs.Add(item.Id, item); } } // process protocols foreach (var item in addon.ItemTypes) { foreach (var menuItem in item.ContextMenu) { if (ProtocolHelper.IsProtocol(menuItem.ProgramRef.Id)) { var itemProgram = AddonProgram.CreateFromProtocol(menuItem.ProgramRef.Id); if (itemProgram != null) { m_Programs.Add(itemProgram.Id, itemProgram); } } } } // process menu items foreach (var item in addon.ItemTypes) { AddOnItemTypeRef found; if (m_PanelItems.ContainsKey(item.Id)) { found = m_PanelItems[item.Id]; m_PanelItems.Remove(item.Id); } else { found = new AddOnItemTypeRef(); } if (item.CountVisible == 0) { continue; } // add separator to split menuItem groups if (found.ContextMenu.Count > 0) { found.ContextMenu.Add(new AddonMenuItem()); } foreach (var menuItem in item.ContextMenu) { if (menuItem.Visible) { if (menuItem.IsSeparator) { found.ContextMenu.Add(menuItem); } else { if (m_Programs.ContainsKey(menuItem.ProgramRef.Id)) { menuItem.ProgramValue = m_Programs[menuItem.ProgramRef.Id]; } if (!found.ContextMenu.Contains(menuItem) && menuItem.ProgramRef != null && menuItem.ProgramValue != null) { found.ContextMenu.Add(menuItem); } } } } m_PanelItems.Add(item.Id, found); } }