private void CraftButton_Click(object sender, RoutedEventArgs e)
        {
            BigBox.Text = "";
            object c = CurrencyBox.GetSelected();

            if (c == null)
            {
                BigBox.Text = "No currency selected";
                return;
            }
            string res;

            if (c is PoEEssenceData)
            {
                res = Bench.ApplyEssence(c as PoEEssenceData);
                if (res != null)
                {
                    BigBox.Text = res;
                }
            }
            else if (c is PoECurrencyData)
            {
                res = Bench.ApplyCurrency(c as PoECurrencyData);
                if (res != null)
                {
                    BigBox.Text = res;
                }
            }
            else
            {
                IEnumerable <PoEFossilData> collection = ((System.Collections.IList)c).Cast <PoEFossilData>();
                if (collection != null && collection.Count() > 0)
                {
                    res = Bench.ApplyFossils(collection.ToList());
                    if (res != null)
                    {
                        BigBox.Text = res;
                    }
                }
                else
                {
                    BigBox.Text = "No fossil selected";
                    return;
                }
            }
            if (res == null)
            {
                ItemSlot.UpdateData(Bench.BenchItem);
                CollectionViewSource.GetDefaultView(Bench.CurrencySpent).Refresh();
                ModPreview.UpdatePreviews();
            }
        }
        private void BenchMove_Click(object sender, EventArgs e)
        {
            ItemCraft item     = ((MenuItem)sender).Tag as ItemCraft;
            bool      samebase = item != null && Bench.BenchItem != null && item.SourceData == Bench.BenchItem.SourceData;

            Bench.BenchItem = item.Copy();
            ItemSlot.UpdateData(Bench.BenchItem);
            ModPreview.UpdatePreviews();
            if (!samebase)
            {
                ModPreview.UpdateCrafts();
                ModPreview.UpdateEnchantments();
                Bench.PostRoll = new PostRollOptions();
                PostCraftButton.ClearValue(Button.BackgroundProperty);
            }
        }
        private void ForceAddMod(object sender, ModsControl.AddModEventArgs e)
        {
            BigBox.Text = "";
            object o = e.SelectedMod;

            if (o == null)
            {
                return;
            }
            KeyValuePair <PoEModData, object> kv = (KeyValuePair <PoEModData, object>)o;
            string res = null;

            if (kv.Value is int || kv.Value is string)
            {
                if (kv.Key.generation_type == ModLogic.Enchantment)
                {
                    Bench.BenchItem.AddEnchantment(kv.Key);
                }
                else
                {
                    res = Bench.ForceAddMod(kv.Key);
                }
            }
            else if (kv.Value is IDictionary <string, int> dict)
            {
                res = Bench.ForceAddMod(kv.Key, costs: dict);
            }
            else
            {
                BigBox.Text = "Unrecognized key-value format for selected mod";
                return;
            }
            if (res != null)
            {
                BigBox.Text = res;
            }
            else
            {
                ItemSlot.UpdateData(Bench.BenchItem);
                ModPreview.UpdatePreviews();
                CollectionViewSource.GetDefaultView(Bench.CurrencySpent).Refresh();
            }
        }
        private void ItemBaseButton_Click(object sender, RoutedEventArgs e)
        {
            BigBox.Text = "";
            if (CraftingDatabase.CoreBaseItems == null)
            {
                return;
            }

            BaseItemDialog d = new BaseItemDialog(CraftingDatabase.CoreBaseItems)
            {
                Owner = this
            };
            bool?res = d.ShowDialog();

            if (!res.HasValue || !res.Value || d.ItemNameView.SelectedItem == null)
            {
                return;
            }

            if (int.TryParse(d.ILvlBox.Text, out int ilvl))
            {
                ilvl = (ilvl < 1) ? 1 : (ilvl > 100) ? 100 : ilvl;
            }
            else
            {
                ilvl = 100;
            }
            ISet <ItemInfluence> infs = new HashSet <ItemInfluence>();

            if (d.ShaperCheck.IsChecked ?? false)
            {
                infs.Add(ItemInfluence.Shaper);
            }
            if (d.ElderCheck.IsChecked ?? false)
            {
                infs.Add(ItemInfluence.Elder);
            }
            if (d.RedeemerCheck.IsChecked ?? false)
            {
                infs.Add(ItemInfluence.Redeemer);
            }
            if (d.HunterCheck.IsChecked ?? false)
            {
                infs.Add(ItemInfluence.Hunter);
            }
            if (d.WarlordCheck.IsChecked ?? false)
            {
                infs.Add(ItemInfluence.Warlord);
            }
            if (d.CrusaderCheck.IsChecked ?? false)
            {
                infs.Add(ItemInfluence.Crusader);
            }

            Bench.BenchItem = new ItemCraft(d.SelectedBase, ilvl, infs);
            ItemSlot.UpdateData(Bench.BenchItem);
            ModPreview.UpdatePreviews();
            ModPreview.UpdateCrafts();
            ModPreview.UpdateEnchantments();
            Bench.PostRoll = new PostRollOptions();
            PostCraftButton.ClearValue(Button.BackgroundProperty);
        }
 private void BenchItem_Edited(object sender, EventArgs e)
 {
     ModPreview.UpdatePreviews();
 }
 private void Currency_SelectionChanged(object sender, CurrencySelector.CurrencyEventArgs e)
 {
     ModPreview.UpdatePreviews();
 }