Ejemplo n.º 1
0
        /// <summary>
        /// Stretch positions table to fill targetWidth.
        /// </summary>
        /// <param name="targetWidth"></param>
        /// <param name="positions">Measure segment items indexes positions</param>
        /// <param name="positionIndex">All unique indexes inside current measure</param>
        public static void StretchPositionsToWidth(double targetWidth, Dictionary <int, Tuple <double, double> > positions, List <int> positionIndex)
        {
            LayoutStyle.MeasureLayoutStyle attributesLayout = ViewModel.ViewModelLocator.Instance.Main.CurrentLayout.LayoutStyle.MeasureStyle;
            double currentFullWidth = positions.Sum(x => x.Value.Item2);
            double difference       = (targetWidth - attributesLayout.AttributesRightOffset.TenthsToWPFUnit()) - currentFullWidth;

            for (int i = 0; i < positionIndex.Count; i++)
            {
                Tuple <double, double> currentPositionPair = positions[positionIndex[i]];
                double currentPosition  = currentPositionPair.Item1;
                double correctedSpacing = (currentPositionPair.Item2 / currentFullWidth) * difference;

                if (i == 0)
                {
                    Tuple <double, double> t = Tuple.Create(currentPosition, correctedSpacing + currentPositionPair.Item2);
                    positions[positionIndex[i]] = t;
                }
                else
                {
                    currentPosition = positions[positionIndex[i - 1]].Item1 + positions[positionIndex[i - 1]].Item2;
                    Tuple <double, double> t = Tuple.Create(currentPosition, correctedSpacing + currentPositionPair.Item2);
                    positions[positionIndex[i]] = t;
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Gets max width of all beginning attributes from measure segment of all parts
        /// </summary>
        /// <param name="measureSegments">List of measures with the same Number from all parts</param>
        /// <returns>Max width of each attribute(clef,key,time) of all parts</returns>
        public static Tuple <double, double, double> GetAttributesWidth(List <MeasureSegmentController> measureSegments)
        {
            List <Tuple <double, double, double> > attributesWidths = new List <Tuple <double, double, double> >();

            LayoutStyle.MeasureLayoutStyle attributesLayout = ViewModel.ViewModelLocator.Instance.Main.CurrentLayout.LayoutStyle.MeasureStyle;
            foreach (var measureSegment in measureSegments)
            {
                attributesWidths.Add(measureSegment.GetAttributesWidths());
            }
            double maxClef = 0.0;
            double maxKey  = 0.0;
            double maxTime = 0.0;

            if (attributesWidths.Count != 0)
            {
                maxClef = attributesWidths.Select(x => x.Item1).Max();
                maxKey  = attributesWidths.Select(x => x.Item2).Max();
                maxTime = attributesWidths.Select(x => x.Item3).Max();
            }
            if (!maxClef.Equals4DigitPrecision(0.0))
            {
                maxClef += attributesLayout.ClefLeftOffset.TenthsToWPFUnit() + attributesLayout.ClefRightOffset.TenthsToWPFUnit();
            }
            if (!maxKey.Equals4DigitPrecision(0.0))
            {
                maxKey += attributesLayout.KeySigLeftOffset.TenthsToWPFUnit() + attributesLayout.KeySigRightOffset.TenthsToWPFUnit();
            }
            if (!maxTime.Equals4DigitPrecision(0.0))
            {
                maxTime += attributesLayout.TimeSigLeftOffset.TenthsToWPFUnit() + attributesLayout.TimeSigRightOffset.TenthsToWPFUnit();
            }

            return(Tuple.Create(maxClef, maxKey, maxTime));
        }
Ejemplo n.º 3
0
        public double ArrangeAttributes(IAttributeItemVisual attributeVisual, Dictionary <string, double> staffPositions, double currentPosition = 0.0)
        {
            double width = currentPosition;

            LayoutStyle.MeasureLayoutStyle attributesLayout = ViewModel.ViewModelLocator.Instance.Main.CurrentLayout.LayoutStyle.MeasureStyle;

            switch (attributeVisual.AttributeType)
            {
            case AttributeType.clef:
                ClefContainerItem clef = attributeVisual as ClefContainerItem;
                width += clef.ItemLeftMargin;
                SetLeft(clef.ItemCanvas, width);
                width += clef.ItemWidth + clef.ItemRightMargin;
                break;

            case AttributeType.key:
                KeyContainerItem key = attributeVisual as KeyContainerItem;
                width += key.ItemLeftMargin;
                SetLeft(key.ItemCanvas, width);
                width += key.ItemWidth + (key.ItemWidth != 0 ? key.ItemRightMargin: 0);
                break;

            case AttributeType.time:
                TimeSignatureContainerItem timeSig = attributeVisual as TimeSignatureContainerItem;
                width += timeSig.ItemLeftMargin;
                SetLeft(timeSig.ItemCanvas, width);
                width += timeSig.ItemWidth + timeSig.ItemRightMargin;
                break;

            default:
                throw new ArgumentException("invalid argument value ", attributeVisual.AttributeType.ToString());
            }

            return(width);
        }