コード例 #1
0
        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 });
        }
コード例 #2
0
        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);
            }
        }