private void GenerateClefPerStaffDictionary() { if (_clefPerStaff == null) { _clefPerStaff = new Dictionary <string, ClefChangesDictionary>(); } else { _clefPerStaff.Clear(); } for (int i = 1; i <= _numberOfStaves; i++) { var clefs = _clefChanges.Select( (x, z) => new { x = x.Key, z = x.Value.AttributeChanges.Where(c => c.StaffNumber == i.ToString()) }) .Where(x => x.z.FirstOrDefault() != null); ClefChangesDictionary ccdict = new ClefChangesDictionary(); foreach (var item in clefs) { ClefChanges cc = new ClefChanges(); foreach (var c in item.z) { cc.Add(c.StaffNumber, c.TimeFraction, c.AttributeEntity); } ccdict.Add(item.x, cc); } _clefPerStaff.Add(i.ToString(), ccdict); } }
/// <summary> /// Adds clef to each new System if not specified inside score /// </summary> public void AddAttributesToEachSystem() { if (_systemAttributes) { List <string> systems = _measuresPerSystem.Select(x => x[0]).ToList(); foreach (var item in systems) { if (!ClefChanges.ContainsKey(item)) { ClefChanges clefs = new ClefChanges(); for (int i = 1; i <= _numberOfStaves; i++) { var clef = ViewModel.ViewModelLocator.Instance.Main.CurrentScoreProperties.GetClef(item, _partId, i, 0); clefs.Add(i.ToString(), 0, clef); } ClefChanges.Add(item, clefs); } if (ClefChanges.ContainsKey(item)) { ClefChanges clefs = ClefChanges[item]; if (clefs.AttributeChanges.All(x => x.TimeFraction != 0)) { for (int i = 1; i <= _numberOfStaves; i++) { var clef = ViewModel.ViewModelLocator.Instance.Main.CurrentScoreProperties.GetClef(item, _partId, i, 0); clefs.Add(i.ToString(), 0, clef); } } } if (!KeyChanges.ContainsKey(item)) { KeyChanges keys = new KeyChanges(); for (int i = 1; i <= _numberOfStaves; i++) { var key = ViewModel.ViewModelLocator.Instance.Main.CurrentScoreProperties.GetKeySignature(item, _partId); keys.Add(i.ToString(), 0, key); } KeyChanges.Add(item, keys); } if (KeyChanges.ContainsKey(item)) { KeyChanges keys = KeyChanges[item]; if (keys.AttributeChanges.All(x => x.TimeFraction != 0)) { for (int i = 1; i <= _numberOfStaves; i++) { var key = ViewModel.ViewModelLocator.Instance.Main.CurrentScoreProperties.GetKeySignature(item, _partId); keys.Add(i.ToString(), 0, key); } } } } } }
private void AttributesChanged(AttributesMusicXML attributes, int cursorPosition, string measureNumber, bool firstMeasure = false) { ClefChanges clefs = new ClefChanges(); KeyChanges keys = new KeyChanges(); TimeChanges times = new TimeChanges(); //! search for clefs if (attributes.Clef.Count == 0 && firstMeasure) { for (var i = 1; i <= _numberOfStaves; i++) { clefs.Add(i.ToString(), cursorPosition, new ClefMusicXML() { Sign = ClefSignMusicXML.G, Line = 2.ToString() }); } } else { for (var i = 0; i < attributes.Clef.Count; i++) { clefs.Add(attributes.Clef[i].Number, cursorPosition, attributes.Clef[i]); } } //! search for key signatures if (attributes.Key.Count == 0 && firstMeasure) { for (int i = 1; i <= _numberOfStaves; i++) { keys.Add(i.ToString(), cursorPosition, new KeyMusicXML { Items = new object[] { 0.ToString() }, ItemsElementName = new[] { KeyChoiceTypes.fifths } }); } } else { for (int i = 0; i < attributes.Key.Count; i++) { keys.Add(attributes.Key[i].Number, cursorPosition, attributes.Key[i]); } } //! search for time signatures if (attributes.Time.Count == 0 && firstMeasure) { for (int i = 1; i <= _numberOfStaves; i++) { times.Add(i.ToString(), cursorPosition, new TimeMusicXML { Items = new object[] { "4", "4" }, ItemsElementName = new[] { TimeChoiceTypeMusicXML.beats, TimeChoiceTypeMusicXML.beattype } }); } } else { for (int i = 0; i < attributes.Time.Count; i++) { times.Add(attributes.Time[i].Number, cursorPosition, attributes.Time[i]); } } if (clefs.AttributeChanges.Count != 0) { _clefChanges.Add(measureNumber, clefs); } if (keys.AttributeChanges.Count != 0) { _keyChanges.Add(measureNumber, keys); } if (times.AttributeChanges.Count != 0) { _timeChanges.Add(measureNumber, times); } }