Beispiel #1
0
        private void AddPluginMenu(ref int seq, ref int index, string pluginName)
        {
            PluginData pd = PluginUtils.Plugins[pluginName];

            if (pd.PluginType != PluginTypes.Main)
            {
                return;
            }
            IMainPlugin plugin = pd.PluginBase as IMainPlugin;

            if (plugin == null)
            {
                return;
            }
            MainPluginInfo pi = plugin.PluginInfo;

            string dynName = GetDynPluginName(pi.Title);

            if (cmAssembly.Items.ContainsKey(dynName))
            {
                return;
            }
            if (cmMore.DropDownItems.ContainsKey(dynName))
            {
                return;
            }

            ToolStripMenuItem mi = new ToolStripMenuItem();

            mi.Name   = dynName;
            mi.Text   = pi.Title;
            mi.Tag    = plugin;
            mi.Click += new EventHandler(pluginMenu_Click);
            Bitmap bmp = pd.Icon;

            if (bmp != null)
            {
                //mi.ImageTransparentColor = Color.Fuchsia;
                mi.ImageScaling = ToolStripItemImageScaling.SizeToFit;
                mi.Image        = bmp;
            }

            if (seq >= Config.RecentPluginList)
            {
                cmMore.DropDownItems.Add(mi);
            }
            else
            {
                cmAssembly.Items.Insert(index, mi);
                seq++;
                index++;
            }
        }
        private void cmAssembly_Opening(object sender, CancelEventArgs e)
        {
            ContextMenuStrip cms = sender as ContextMenuStrip;

            //nothing selected
            if (dgvData.SelectedRows.Count < 1)
            {
                for (int i = 0; i < cms.Items.Count; i++)
                {
                    cms.Items[i].Enabled = false;
                }
                return;
            }

            //common menus
            cms.Items["cmCopyInfo"].Enabled   = true;
            cms.Items["cmOpenFolder"].Enabled = true;
            cms.Items["cmDeleteFile"].Enabled = true;

            //checking selected rows
            bool oneSelected   = dgvData.SelectedRows.Count == 1;
            bool isAllExe      = true;
            bool isAllAssembly = true;
            bool hasNetModule  = false;

            for (int i = 0; i < dgvData.SelectedRows.Count; i++)
            {
                string fileName = PathUtils.GetFileName(dgvData.SelectedRows[i]);
                isAllExe      = isAllExe && PathUtils.IsExe(fileName);
                isAllAssembly = isAllAssembly && PathUtils.IsAssembly(fileName);
                hasNetModule  = hasNetModule || PathUtils.IsNetModule(fileName);
            }
            bool isAllIL = !isAllAssembly;

            //standard menus
            if (isAllAssembly)
            {
                cms.Items["cmDasm"].Enabled = true;
                if (hasNetModule)
                {
                    cms.Items["cmDeobf"].Enabled      = false;
                    cms.Items["cmVerify"].Enabled     = false;
                    cms.Items["cmStrongName"].Enabled = false;
                }
                else
                {
                    cms.Items["cmDeobf"].Enabled      = true;
                    cms.Items["cmVerify"].Enabled     = true;
                    cms.Items["cmStrongName"].Enabled = true;
                }
                cms.Items["cmClassEditor"].Enabled = true;  //disable this just because Reflector cannot load *same* assembly files
                if (oneSelected && !hasNetModule)
                {
                    cms.Items["cmRunMethod"].Enabled = true;
                }
                else
                {
                    cms.Items["cmRunMethod"].Enabled = false;
                }
            }
            else
            {
                cms.Items["cmDasm"].Enabled        = false;
                cms.Items["cmDeobf"].Enabled       = false;
                cms.Items["cmVerify"].Enabled      = false;
                cms.Items["cmStrongName"].Enabled  = false;
                cms.Items["cmClassEditor"].Enabled = false;
                cms.Items["cmRunMethod"].Enabled   = false;
            }

            if (isAllIL)
            {
                cms.Items["cmAsm"].Enabled = true;
            }
            else
            {
                cms.Items["cmAsm"].Enabled = false;
            }

            if (isAllExe && oneSelected)
            {
                cms.Items["cmProfiler"].Enabled = true;
            }
            else
            {
                cms.Items["cmProfiler"].Enabled = false;
            }

            foreach (ToolStripItem item in cms.Items)
            {
                ToolStripMenuItem mi = item as ToolStripMenuItem;
                if (mi == null || mi.Tag == null)
                {
                    continue;
                }
                IMainPlugin plugin = mi.Tag as IMainPlugin;
                if (plugin == null)
                {
                    continue;
                }

                MainPluginInfo pi = plugin.PluginInfo;
                if (pi.RowType == RowTypes.One && !oneSelected)
                {
                    mi.Enabled = false;
                }
                else
                {
                    if (pi.SourceType == SourceTypes.Any)
                    {
                        mi.Enabled = true;
                    }
                    else if (pi.SourceType == SourceTypes.Assembly && isAllAssembly)
                    {
                        mi.Enabled = true;
                    }
                    else if (pi.SourceType == SourceTypes.Executable && isAllExe)
                    {
                        mi.Enabled = true;
                    }
                    else if (pi.SourceType == SourceTypes.ILFile && isAllIL)
                    {
                        mi.Enabled = true;
                    }
                    else
                    {
                        mi.Enabled = false;
                    }
                }
            }

            e.Cancel = false;
        }