private void AddStringCore(FingerboardSide side) { var newString = new SIString() { Index = side == FingerboardSide.Treble ? 0 : _Strings.Count }; if (side == FingerboardSide.Treble) { newString.NumberOfFrets = FirstString.NumberOfFrets; _Strings.Insert(0, newString); } else { newString.NumberOfFrets = LastString.NumberOfFrets; _Strings.Add(newString); } IsAssigningProperties = true; if (NumberOfStrings <= 10) { StringHelper.EstimateStringGauge(newString); } StringHelper.EstimateStringAction(newString); IsAssigningProperties = false; }
public void ChangeNumberOfString(int numberOfStrings, FingerboardSide sideToChange = FingerboardSide.Bass) { if (numberOfStrings > _NumberOfStrings) { AddString(sideToChange, numberOfStrings - _NumberOfStrings); } else if (numberOfStrings < _NumberOfStrings) { RemoveString(sideToChange, _NumberOfStrings - numberOfStrings); } }
public SIString GetString(int index, FingerboardSide side) { if (index < 0 || index >= _Strings.Count) { return(null); } if (side == FingerboardSide.Treble) { return(_Strings[index]); } else { return(_Strings[_Strings.Count - index - 1]); } }
internal LayoutLine GetStringBoundaryLine(SIString str, FingerboardSide dir) { LayoutLine boundary = null; if (dir == FingerboardSide.Bass) { boundary = VisualElements.OfType <StringCenter>().FirstOrDefault(c => c.Right.Index == str.Index); } else { boundary = VisualElements.OfType <StringCenter>().FirstOrDefault(c => c.Left.Index == str.Index); } if (boundary == null) { return(VisualElements.OfType <FingerboardSideEdge>().First(e => e.Side == dir)); } return(boundary); }
public void AddString(FingerboardSide side, int numberToAdd = 1) { if (numberToAdd <= 0) { return; } PreventStringChange = true; StartBatchChanges("AddStrings"); NotifyStringsChanging(); for (int i = 0; i < numberToAdd; i++) { AddStringCore(side); } _NumberOfStrings = _Strings.Count; //re-index strings for (int i = 0; i < _Strings.Count; i++) { _Strings[i].Index = i; } if (_NumberOfStrings > 10) { StringHelper.EstimateStringsGauges(this); } RebuildComponentStringData(); CheckCanCompensateFretPositions(); FinishBatchChanges(); OnNumberOfStringsChanged(); PreventStringChange = false; }
public void RemoveString(FingerboardSide side, int numberToRemove = 1) { if (numberToRemove <= 0) { return; } PreventStringChange = true; StartBatchChanges("RemoveStrings"); NotifyStringsChanging(); numberToRemove = Math.Min(numberToRemove, _Strings.Count - 1); if (side == FingerboardSide.Treble) { var stringsToRemove = _Strings.Take(numberToRemove).ToList(); _Strings.Remove(stringsToRemove); } else { var stringsToRemove = _Strings.Reverse().Take(numberToRemove).ToList(); _Strings.Remove(stringsToRemove); } _NumberOfStrings = _Strings.Count; RebuildComponentStringData(); CheckCanCompensateFretPositions(); FinishBatchChanges(); OnNumberOfStringsChanged(); PreventStringChange = false; }
public FingerboardSideEdge(PointM p1, PointM p2, FingerboardSide side) : base(p1, p2) { _Side = side; RealEnd = PointM.Empty; }