private void buttonAdd_Click(object sender, RoutedEventArgs e)
        {
            var t = new Tempered(); // default values

            _temperamentControls.AddRow(t, focus: true);

            // just mark grid as incomplete
            UpdateTemperamentFromGrid();
            UpdateTemperamentRowsAfterValidation();
        }
Beispiel #2
0
        public Tempered[] GetTemperament()
        {
            int count = _grid.RowDefinitions.Count;
            var ts    = new Tempered[count];

            for (int i = 0; i < ts.Length; ++i)
            {
                RowControls cs = GetRowControls(i);
                ts[i] = new Tempered {
                    rational = GetRowRational(cs),
                    cents    = GetRowCents(cs),
                };
            }
            return(ts);
        }
Beispiel #3
0
        public void AddRow(Tempered t, bool focus = false)
        {
            int rowIndex = _grid.RowDefinitions.Count;

            var cs = new RowControls {
                row      = new Rectangle {
                },
                rect     = new Rectangle {
                },
                rational = new TextBox {
                },
                cents    = new UpDown {
                },
            };

            Grid.SetRow(cs.row, rowIndex);  Grid.SetColumn(cs.row, 0);  Grid.SetColumnSpan(cs.row, 3);
            Grid.SetRow(cs.rect, rowIndex);  Grid.SetColumn(cs.rect, 0);
            Grid.SetRow(cs.rational, rowIndex);  Grid.SetColumn(cs.rational, 1);
            Grid.SetRow(cs.cents, rowIndex);  Grid.SetColumn(cs.cents, 2);

            cs.row.Classes.Add("row");
            cs.rect.Classes.Add("rect");
            cs.rational.Classes.Add("rational");
            cs.cents.Classes.Add("cents");

            _settingInternally = true;

            AddRowHandlers(cs);

            _grid.RowDefinitions.Add(new RowDefinition {
            });
            _grid.Children.AddRange(new Control[] { cs.row, cs.rect, cs.rational, cs.cents });

            cs.rational.Text = t.rational.FormatFraction();
            cs.cents.Value   = t.cents;

            if (focus)
            {
                cs.rational.Focus();
            }

            _settingInternally = false;
        }
Beispiel #4
0
        public static DrawerSettings Load(XmlReader r)
        {
            var s  = new DrawerSettings {
            };
            var ts = new List <Tempered>();

            while (r.Read())
            {
                if (r.NodeType == XmlNodeType.Element)
                {
                    switch (r.Name)
                    {
                    case "limitPrime": {
                        Rational limitPrime = Rational.Parse(r.ReadElementContentAsString());     // allow to be a rational
                        if (!limitPrime.IsDefault())
                        {
                            s.limitPrimeIndex = limitPrime.GetHighPrimeIndex();
                        }
                        break;
                    }

                    case "subgroup": {
                        s.subgroup = Rational.ParseRationals(r.ReadElementContentAsString());
                        break;
                    }

                    case "narrows": {
                        s.narrows = Rational.ParseRationals(r.ReadElementContentAsString());
                        s.narrows = NarrowUtils.ValidateNarrows(s.narrows);
                        break;
                    }

                    //
                    case "harmonicityName":     s.harmonicityName = r.ReadElementContentAsString();   break;

                    case "rationalCountLimit":  s.rationalCountLimit = r.ReadElementContentAsInt();      break;

                    //
                    case "slopeOrigin":         s.slopeOrigin = Rational.Parse(r.ReadElementContentAsString()); break;

                    case "slopeChainTurns":     s.slopeChainTurns = r.ReadElementContentAsFloat();    break;

                    //
                    //case "degreeCount":         s.degreeCount        = r.ReadElementContentAsInt();      break;
                    case "degreeThreshold":     s.degreeThreshold = r.ReadElementContentAsFloat();    break;

                    //
                    case "selection":           s.selection = ParseIntervals(r.ReadElementContentAsString()); break;

                    case "temper": {
                        var t = new Tempered {
                        };
                        t.rational = Rational.Parse(r.GetAttribute("rational"));
                        float.TryParse(r.GetAttribute("cents"), out t.cents);
                        ts.Add(t);
                        break;
                    }

                    case "temperamentMeasure":  s.temperamentMeasure = r.ReadElementContentAsFloat();    break;

                    case "edGrids":             s.edGrids = GridDrawer.EDGrid.Parse(r.ReadElementContentAsString()); break;

                    case "pointRadius":         s.pointRadiusLinear = r.ReadElementContentAsFloat();    break;
                    }
                }
            }
            if (ts.Count > 0)
            {
                s.temperament = ts.ToArray();
            }
            return(s);
        }