private Image getImage(bool large)
 {
     if (IsPluginButton)
     {
         if (PluginInfo.PluginType == PluginType.BackgroundMultiple)
         {
             Plugin plugin;
             if (PluginManager.TryGetStaticPluginInstance(PluginInfo.PluginID, out plugin))
             {
                 try {
                     return(((IBarMultipleCustomItems)plugin.Instance).GetImage(large, Index));
                 }
                 catch { }
             }
         }
         return(large
                 ? PluginInfo.ImageLarge ?? Resources_Image.imgPlugin24
                 : PluginInfo.ImageSmall ?? Resources_Image.imgPlugin16);
     }
     else if (Index == 0 || Index >= QTButtonBar.BII_WINDOWOPACITY)
     {
         return(null);
     }
     else
     {
         return(large
                 ? parent.imageStripLarge[Index - 1]
                 : parent.imageStripSmall[Index - 1]);
     }
 }
        public override void InitializeConfig()
        {
            int[] keys = WorkingConfig.keys.Shortcuts;
            HotkeyEntries = new List <HotkeyEntry>();
            for (int i = 0; i < (int)BindAction.KEYBOARD_ACTION_COUNT; ++i)
            {
                HotkeyEntries.Add(new HotkeyEntry(keys, i));
            }

            var PluginShortcuts = new Dictionary <string, int[]>();

            foreach (var info in PluginManager.PluginInformations)
            {
                Plugin p;
                if (!PluginManager.TryGetStaticPluginInstance(info.PluginID, out p) || !p.PluginInformation.Enabled)
                {
                    continue;
                }
                string[] actions = null;
                try {
                    if (!p.Instance.QueryShortcutKeys(out actions))
                    {
                        actions = null;
                    }
                }
                catch {
                }
                if (actions == null)
                {
                    continue;
                }
                if (WorkingConfig.keys.PluginShortcuts.TryGetValue(info.PluginID, out keys))
                {
                    Array.Resize(ref keys, actions.Length);
                    PluginShortcuts[info.PluginID] = keys;
                }
                else
                {
                    PluginShortcuts[info.PluginID] = new int[actions.Length];
                }
                HotkeyEntries.AddRange(actions.Select((act, i) => new HotkeyEntry(keys, i, act, p.PluginInformation.Name)));
            }
            WorkingConfig.keys.PluginShortcuts = PluginShortcuts;

            ICollectionView          view             = CollectionViewSource.GetDefaultView(HotkeyEntries);
            PropertyGroupDescription groupDescription = new PropertyGroupDescription("PluginName");

            view.GroupDescriptions.Add(groupDescription);
            lvwHotkeys.ItemsSource = view;
        }
        public override void InitializeConfig()
        {
            // Initialize the button bar tab.
            imageStripLarge = new ImageStrip(new Size(24, 24));
            imageStripSmall = new ImageStrip(new Size(16, 16));
            if (null != WorkingConfig.bbar.ImageStripPath && WorkingConfig.bbar.ImageStripPath.Length > 0)
            {
                Bitmap bitmap;
                Bitmap bitmap2;
                if (LoadExternalImage(WorkingConfig.bbar.ImageStripPath, out bitmap, out bitmap2))
                {
                    imageStripLarge.AddStrip(bitmap);
                    imageStripSmall.AddStrip(bitmap2);
                    bitmap.Dispose();
                    bitmap2.Dispose();
                    if (Path.GetExtension(WorkingConfig.bbar.ImageStripPath).PathEquals(".bmp"))
                    {
                        imageStripLarge.TransparentColor = imageStripSmall.TransparentColor = Color.Magenta;
                    }
                    else
                    {
                        imageStripLarge.TransparentColor = imageStripSmall.TransparentColor = Color.Empty;
                    }
                }
            }
            else
            {
                using (Bitmap b = Resources_Image.ButtonStrip24)
                {
                    imageStripLarge.AddStrip(b);
                }
                imageStripSmall = new ImageStrip(new Size(16, 16));
                using (Bitmap b = Resources_Image.ButtonStrip16)
                {
                    imageStripSmall.AddStrip(b);
                }
            }

            ButtonPool     = new ObservableCollection <ButtonEntry>();
            CurrentButtons = new ObservableCollection <ButtonEntry>();

            // Create a list of all the plugin buttons.
            int order            = QTButtonBar.INTERNAL_BUTTON_COUNT;
            var lstPluginIDs     = new List <string>();
            var dicPluginButtons = new Dictionary <string, ButtonEntry[]>();

            foreach (PluginInformation pi in PluginManager.PluginInformations.Where(pi => pi.Enabled).OrderBy(pi => pi.Name))
            {
                if (pi.PluginType == PluginType.Interactive)
                {
                    lstPluginIDs.Add(pi.PluginID);
                    dicPluginButtons[pi.PluginID] = new ButtonEntry[] { new ButtonEntry(this, order++, 0, pi) };
                }
                else if (pi.PluginType == PluginType.BackgroundMultiple)
                {
                    Plugin plugin;
                    if (PluginManager.TryGetStaticPluginInstance(pi.PluginID, out plugin))
                    {
                        IBarMultipleCustomItems bmci = plugin.Instance as IBarMultipleCustomItems;
                        try {
                            if (bmci != null && bmci.Count > 0)
                            {
                                lstPluginIDs.Add(pi.PluginID);
                                dicPluginButtons[pi.PluginID] =
                                    bmci.Count.RangeSelect(i => new ButtonEntry(this, order++, i, pi)).ToArray();
                            }
                        }
                        catch { }
                    }
                }
            }

            // Add the current buttons (right pane)
            foreach (int i in WorkingConfig.bbar.ButtonIndexes)
            {
                int pluginIndex = i.HiWord() - 1;
                if (pluginIndex >= 0)
                {
                    string        id = WorkingConfig.bbar.ActivePluginIDs[pluginIndex];
                    ButtonEntry[] buttons;
                    if (dicPluginButtons.TryGetValue(id, out buttons) && i.LoWord() < buttons.Length)
                    {
                        CurrentButtons.Add(buttons[i.LoWord()]);
                    }
                }
                else
                {
                    CurrentButtons.Add(new ButtonEntry(this, i, i));
                }
            }

            // Add the rest of the buttons to the button pool (left pane)
            ButtonPool.Add(new ButtonEntry(this, 0, QTButtonBar.BII_SEPARATOR));
            for (int i = 1; i < QTButtonBar.INTERNAL_BUTTON_COUNT; i++)
            {
                if (!WorkingConfig.bbar.ButtonIndexes.Contains(i))
                {
                    ButtonPool.Add(new ButtonEntry(this, i, i));
                }
            }

            foreach (ButtonEntry entry in lstPluginIDs.SelectMany(pid => dicPluginButtons[pid]).Except(CurrentButtons))
            {
                ButtonPool.Add(entry);
            }
            lstButtonBarPool.ItemsSource    = ButtonPool;
            lstButtonBarCurrent.ItemsSource = CurrentButtons;
        }