private void ArrangeMeasureContent(bool advancedLayout) //TODO split on more methods
        {
            SetPartSystemDimensions(_size.Width, _size.Height);
            SetPartSegmentCanvasPositions(advancedLayout);
            List <List <MeasureSegmentController> > partMeasuresList = GetMeasuresList();

            if (!advancedLayout)
            {
                foreach (var partMeasureSegment in partMeasuresList)
                {
                    Dictionary <int, double> durationTable = new Dictionary <int, double>();
                    List <List <int> >       indexes       = GetAllMeasureIndexes(partMeasureSegment);
                    double measureWidth = partMeasureSegment.Select(x => x.Width).Max();

                    Tuple <double, double, double> attributesWidth = LayoutHelpers.GetAttributesWidth(partMeasureSegment);
                    double maxClef = attributesWidth.Item1;
                    double maxKey  = attributesWidth.Item2;
                    double maxTime = attributesWidth.Item3;
                    durationTable.Add(-3, 0);
                    durationTable.Add(-2, maxClef);
                    durationTable.Add(-1, maxKey + maxClef);
                    durationTable.Add(0, maxClef + maxKey + maxTime);

                    List <int> positionIndexes = indexes.SelectMany(x => x).Distinct().ToList();
                    positionIndexes.Sort();
                    double startingPosition = durationTable[0] + _attributesLayout.AttributesRightOffset.TenthsToWPFUnit();
                    Dictionary <int, Tuple <double, double> > positions = GeneratePositionsTable(partMeasureSegment, positionIndexes, startingPosition);

                    double targetWidth = measureWidth - durationTable[0];
                    LayoutHelpers.StretchPositionsToWidth(targetWidth, positions, positionIndexes);

                    AddPositionsToDurationTable(durationTable, positionIndexes, positions);
                    int lastDuration = durationTable.Keys.Max() + 1;
                    //! adds one more which is measure duration (rigth barline position / calculating center position)
                    durationTable.Add(lastDuration, measureWidth);

                    //! Update measure segments content with calculated duration position table
                    foreach (MeasureSegmentController measureSegment in partMeasureSegment)
                    {
                        measureSegment.ArrangeUsingDurationTable(durationTable);
                        RedrawBeams(measureSegment, durationTable);
                    }
                }
            }
        }