示例#1
0
        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;
        }
示例#2
0
 public void ChangeNumberOfString(int numberOfStrings, FingerboardSide sideToChange = FingerboardSide.Bass)
 {
     if (numberOfStrings > _NumberOfStrings)
     {
         AddString(sideToChange, numberOfStrings - _NumberOfStrings);
     }
     else if (numberOfStrings < _NumberOfStrings)
     {
         RemoveString(sideToChange, _NumberOfStrings - numberOfStrings);
     }
 }
示例#3
0
        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]);
            }
        }
示例#4
0
        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);
        }
示例#5
0
        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;
        }
示例#6
0
        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;
        }
示例#7
0
 public FingerboardSideEdge(PointM p1, PointM p2, FingerboardSide side) : base(p1, p2)
 {
     _Side   = side;
     RealEnd = PointM.Empty;
 }