Esempio n. 1
0
        private void recalculateIbu()
        {
            var Gravity = GravityAlgorithms.GetGravity(Volumes.PreBoilVolume, Grist.Where(x => x.Stage == FermentableStage.Mash).ToList(), GrainfatherCalculator.mashEfficiency);
            var ibu     = IbuAlgorithms.CalcIbu(BoilHops.Where(x => x.Stage == HopAdditionStage.Boil), Gravity, Volumes.PostBoilVolume);
            var highIbu = ibu + IbuAlgorithms.IBU_TOLERANCE * ibu;
            var lowIbu  = ibu - IbuAlgorithms.IBU_TOLERANCE * ibu;

            IbuLabel.Content = string.Format("IBU: {0:F0} - {1:F0} ({2:F0})", lowIbu, highIbu, ibu);
        }
Esempio n. 2
0
        private void PopulateGUI(Recepie aRecepie)
        {
            Grist.Clear();
            foreach (GristPart g in aRecepie.Fermentables)
            {
                Grist.Add(g);
            }

            BoilHops.Clear();
            foreach (HopAddition h in aRecepie.BoilHops)
            {
                BoilHops.Add(h);
            }

            MashProfileList.Clear();
            foreach (Domain.MashProfileStep mps in aRecepie.MashProfile)
            {
                MashProfileList.Add(mps);
            }

            OtherIngredientsList.Clear();
            foreach (OtherIngredient o in aRecepie.OtherIngredients)
            {
                OtherIngredientsList.Add(o);
            }


            Volumes.FinalBatchVolume    = aRecepie.BatchVolume;
            BatchSizeVolumeTextBox.Text = Volumes.FinalBatchVolume.ToString();

            Volumes.PreBoilTapOff     = aRecepie.PreBoilTapOffVolume;
            PreBoilVolumeTextBox.Text = Volumes.PreBoilTapOff.ToString();

            TopUpMashWater = aRecepie.TopUpMashWater;
            TopUpMashWaterVolumeTextBox.Text = TopUpMashWater.ToString();

            OriginalGravity = aRecepie.OriginalGravity;
            ExpectedOriginalGravityTextBox.Text = OriginalGravity.ToString();

            BoilTime             = aRecepie.BoilTime;
            BoilTimeTextBox.Text = BoilTime.ToString();

            NameTextBox.Text = aRecepie.Name;


            recalculateGrainBill();

            recalculateIbu();

            updateGuiText();
        }
Esempio n. 3
0
        private void HopsListView_KeyDown(object sender, KeyEventArgs e)
        {
            if (HopsListView.SelectedIndex >= BoilHops.Count() || HopsListView.SelectedIndex < 0)
            {
                return;
            }

            if (Key.Delete == e.Key)
            {
                HopAddition h = (HopAddition)HopsListView.SelectedItem;
                BoilHops.Remove(h);
                recalculateIbu();
            }
        }
Esempio n. 4
0
        private void hopsCompositionChanged(HopAddition addedHop)
        {
            if (addedHop != null)
            {
                var vol = Volumes.FinalBatchVolume;
                if (addedHop.Stage == HopAdditionStage.Boil)
                {
                    vol = Volumes.PostBoilVolume;
                }

                addedHop.AmountGrams = addedHop.Amount * vol;
                BoilHops.Add(addedHop);
            }
            recalculateIbu();
        }
Esempio n. 5
0
        private void AddHopsButton_Click(object sender, RoutedEventArgs e)
        {
            var w = new SelectHops(HopsRepo, BoilTime);

            w.ShowDialog();
            if (w.hop != null)
            {
                BoilHops.Add(w.hop);
                var ol = BoilHops.OrderBy(x => x).ToList();
                BoilHops.Clear();
                foreach (HopAddition h in ol)
                {
                    hopsCompositionChanged(h);
                }
            }
        }
Esempio n. 6
0
        private void HopsListView_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            if (HopsListView.SelectedIndex >= BoilHops.Count() || HopsListView.SelectedIndex < 0)
            {
                return;
            }

            var w = new SelectHops(HopsRepo, BoilHops.ToArray()[HopsListView.SelectedIndex]);

            w.ShowDialog();
            if (w.hop != null)
            {
                BoilHops.Remove((HopAddition)HopsListView.SelectedItem);
                hopsCompositionChanged(w.hop);
            }
        }
Esempio n. 7
0
        private void MenuItem_FileSave(object sender, RoutedEventArgs e)
        {
            var r = new Recepie();

            r.Fermentables     = Grist.ToList();
            r.BoilHops         = BoilHops.ToList();
            r.MashProfile      = MashProfileList.ToList();
            r.OtherIngredients = OtherIngredientsList.ToList();
            r.Name             = NameTextBox.Text;

            r.BatchVolume         = Volumes.FinalBatchVolume;
            r.PreBoilTapOffVolume = Volumes.PreBoilTapOff;
            r.TopUpMashWater      = 0;

            r.OriginalGravity = OriginalGravity;
            r.BoilTime        = BoilTime;


            // Create OpenFileDialog
            Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();



            // Set filter for file extension and default file extension
            dlg.DefaultExt       = ".gsrx";
            dlg.Filter           = "Grainfather recipe files (*.gsrx)|*.gsrx";
            dlg.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
            dlg.FileName         = NameTextBox.Text;

            // Display OpenFileDialog by calling ShowDialog method
            Nullable <bool> result = dlg.ShowDialog();


            if (result != true)
            {
                return;
            }

            XmlSerializer serializer = new XmlSerializer(typeof(Recepie));
            FileStream    saveStream = new FileStream(dlg.FileName, FileMode.OpenOrCreate, FileAccess.Write);

            serializer.Serialize(saveStream, r);
            saveStream.Close();
        }
Esempio n. 8
0
        private void recalculateGrainBill()
        {
            var sum = Grist.Sum(g => g.Amount);

            if (sum != 100)
            {
                sum           = -1;
                GrainBillSize = 0;
            }
            else
            {
                var preBoilTappOffLoss = (Volumes.PreBoilTapOff / (Volumes.PreBoilVolume + Volumes.PreBoilTapOff));

                var totalGravity = GravityAlgorithms.GetTotalGravity(Volumes.PostBoilVolume, OriginalGravity);


                Volumes.ColdSteepVolume = 0;

                var l = new List <GristPart>();
                foreach (var grain in Grist)
                {
                    grain.GU = totalGravity * ((double)grain.Amount / 100d);

                    if (grain.Stage == FermentableStage.ColdSteep)
                    {
                        grain.AmountGrams = GravityAlgorithms.GetGrainWeight(grain.GU, grain.FermentableAdjunct.Potential, ColdSteep.COLDSTEEP_EFFICIENCY);

                        Volumes.ColdSteepVolume += ColdSteep.GetColdSteepWaterContibution(grain.AmountGrams);
                    }

                    if (grain.Stage == FermentableStage.Mash)
                    {
                        grain.AmountGrams = GravityAlgorithms.GetGrainWeight(grain.GU, grain.FermentableAdjunct.Potential, gfc.MashEfficiency);

                        grain.AmountGrams += (int)Math.Round(grain.AmountGrams * preBoilTappOffLoss);
                    }

                    if (grain.Stage == FermentableStage.Fermentor)
                    {
                        grain.AmountGrams = GravityAlgorithms.GetGrainWeight(grain.GU, grain.FermentableAdjunct.Potential, 1);

                        var boilerLossPercent = GrainfatherCalculator.GRAINFATHER_BOILER_TO_FERMENTOR_LOSS / (Volumes.PostBoilVolume);

                        grain.AmountGrams -= (int)Math.Round(boilerLossPercent * grain.AmountGrams);
                    }
                    if (grain.Stage == FermentableStage.Boil)
                    {
                        grain.AmountGrams = GravityAlgorithms.GetGrainWeight(grain.GU, grain.FermentableAdjunct.Potential, 1);
                    }

                    l.Add(grain);
                }

                GrainBillSize = Grist.Where(x => x.Stage == FermentableStage.Mash).Sum(x => x.AmountGrams);

                foreach (var grain in l)
                {
                    Grist.Remove(grain);
                    Grist.Add(grain);
                }

                if (GrainBillSize > GrainfatherCalculator.SMALL_GRAINBILL || GrainBillSize == 0)
                {
                    TopUpMashWaterVolumeTextBox.Visibility = Visibility.Hidden;
                    TopUpMashWaterVolumeLabel.Visibility   = Visibility.Hidden;
                }
                else
                {
                    TopUpMashWaterVolumeTextBox.Visibility = Visibility.Visible;
                    TopUpMashWaterVolumeLabel.Visibility   = Visibility.Visible;
                }

                foreach (GridViewColumn c in MaltsGridView.Columns)
                {
                    c.Width = 0;          //set it to no width
                    c.Width = double.NaN; //resize it automatically
                }

                double ecb       = ColorAlgorithms.CalculateColor(Grist.ToList(), Volumes);
                string refString = ColorAlgorithms.GetReferenceBeer(ecb);
                ColorLabel.Content = String.Format("Color [ECB]: {0:F1} eqv. to {1}", ecb, refString);

                recalculateIbu();

                var ol = BoilHops.OrderBy(x => x).ToList();
                BoilHops.Clear();
                foreach (HopAddition h in ol)
                {
                    hopsCompositionChanged(h);
                }
            }
            updateGuiText();
        }