public void AddScorePartwise(ScorePartwiseMusicXML scorePartXML)
        {
            if (scorePartXML == null)
            {
                throw new NullReferenceException("null scorePart object"); //! temp
            }
            IsBlank         = false;
            partwise        = scorePartXML;
            PagesCollection = new ObservableCollection <UIElement>();
            PartProperties pp = ViewModelLocator.Instance.Main.PartsProperties[scorePartXML.Part[0].Id];
            bool           autoLayoutSupport = ViewModelLocator.Instance.Main.CurrentScoreProperties.AutoLayoutSupportByScore;

            //autoLayoutSupport = false;
            if (autoLayoutSupport)
            {
                foreach (var pages in pp.PartSysemsInPages)
                {
                    AddPageToCollection(scorePartXML);
                }
            }
            else
            {
                advancedLayout  = new AdvancedMeasureLayout(partwise);
                PagesCollection = advancedLayout.PagesCollection;
            }
        }
예제 #2
0
        private void SetDefaultDistances(ScorePartwiseMusicXML score)
        {
            var layout = ViewModel.ViewModelLocator.Instance.Main.CurrentLayout;

            _defaultSystemDistance    = 2.5 * layout.PageProperties.StaffHeight.MMToTenths();
            _defaultTopSystemDistance = 3 * layout.PageProperties.StaffHeight.MMToTenths();
            _defaultStaffDistance     = 1.7 * layout.PageProperties.StaffHeight.MMToTenths();
            if (score.Defaults != null)
            {
                if (score.Defaults.StaffLayout != null)
                {
                    if (score.Defaults.StaffLayout.Count != 0)
                    {
                        _defaultStaffDistance = score.Defaults.StaffLayout[0].StaffDistance;
                    }
                }
                if (score.Defaults.SystemLayout != null)
                {
                    if (score.Defaults.SystemLayout.SystemDistanceSpecified)
                    {
                        _defaultSystemDistance = score.Defaults.SystemLayout.SystemDistance;
                    }
                    if (score.Defaults.SystemLayout.TopSystemDistanceSpecified)
                    {
                        _defaultTopSystemDistance = score.Defaults.SystemLayout.TopSystemDistance;
                    }
                }
            }
        }
예제 #3
0
        internal void GenerateMeasureSegments(ScorePartwiseMusicXML scoreFile, bool allParts = true, List <string> partIDs = null)
        {
            if (!allParts)
            {
                if (partIDs != null)
                {
                    InitPartIDs(partIDs);
                }
                else
                {
                    Log.LoggIt.Log("List of part ID's was empty. Generated Measure Segments for all parts instead");
                    InitPartIDs(scoreFile.Part.Select(x => x.Id).ToList());
                }
            }
            else
            {
                InitPartIDs(scoreFile.Part.Select(x => x.Id).ToList());
            }

            foreach (var part in scoreFile.Part)
            {
                int stavesCount = part.GetStavesCount();
                foreach (var measure in part.Measure)
                {
                    MeasureSegmentController measureSegmentController = new MeasureSegmentController(measure, part.Id, stavesCount);
                    AddMeasureSegmentController(measureSegmentController, part.Id);
                }
            }
        }
예제 #4
0
 private void SetMainFields(ScorePartwiseMusicXML score, string partIdValue)
 {
     _partId      = partIdValue;
     _currentPart = score.Part.FirstOrDefault(i => i.Id == _partId);
     _partIndex   = score.Part.FindIndex(i => i.Id == _partId);
     FindPartSystems(score);
     _numberOfStaves = score.Part[_partIndex].GetStavesCount();
 }
 public ScoreProperties(ScorePartwiseMusicXML score)
 {
     _score = score;
     AutoLayoutSupportByScore = _score.LayoutInsideScore;
     Id = _score.ID;
     if (score != null)
     {
         InitScoreProperties();
     }
 }
 public ScorePartwiseBuilder()
 {
     score = new ScorePartwiseMusicXML
     {
         Partlist = new PartListMusicXML {
             ScoreParts = new List <ScorePartMusicXML>()
         },
         Part = new List <ScorePartwisePartMusicXML>()
     };
 }
        private void AddPageToCollection(ScorePartwiseMusicXML sp) //default page
        {
            id = sp.ID;
            int           index = pageCollection.Count;
            PageViewModel pvm   = new PageViewModel(sp, index);

            PagesCollection.Add(new PageView {
                DataContext = pvm
            });
        }
예제 #8
0
        public PageViewModel(ScorePartwiseMusicXML scorePartwise, int index)
        {
            pageIndex = index;
            newPage   = new PageDrawingSystem(scorePartwise, pageIndex);
            Point dimensions = ViewModelLocator.Instance.Main.CurrentPageLayout.PageDimensions.GetPageDimensionsInPx();

            PageWidth  = dimensions.X;
            PageHeight = dimensions.Y;
            PageCanvas.Add(newPage.PageCanvas);
        }
예제 #9
0
        public PartProperties(ScorePartwiseMusicXML score, string partId)
        {
            SetMainFields(score, partId);
            SetDefaultDistances(score);
            List <ScorePartwisePartMeasureMusicXML> measuresInPart = score.Part[_partIndex].Measure;

            GetLayoutInfo(measuresInPart);
            SetSystemMeasureRanges();
            SetPartHeight();
            GenerateDivisionChanges();
        }
 private void InitParts(ScorePartwiseMusicXML score)
 {
     if (score.Part != null)
     {
         _partProperties = new Dictionary <string, PartProperties>();
         foreach (var part in score.Part)
         {
             _partProperties.Add(part.Id, new PartProperties(score, part.Id));
         }
     }
 }
예제 #11
0
        //! --------------------- !test -------------------

        public PageDrawingSystem(ScorePartwiseMusicXML score, int pageIndex)
        {
            _pageIndex  = pageIndex;
            _score      = score;
            _pageLayout = ViewModelLocator.Instance.Main.CurrentLayout;

            _pageDimensions = _pageLayout.PageProperties.PageDimensions.Dimensions;
            PageCanvas      = new Canvas {
                Width = _pageDimensions.Width, Height = _pageDimensions.Height
            };
            GenerateAndDraw();
        }
        /// <summary>
        /// Finds Largest measure width of passed measureNumber among all parts of Score
        /// </summary>
        /// <param name="score"></param>
        /// <param name="measureNumber"></param>
        /// <returns>Largest Measure width among all parts</returns>
        public static double GetLargestWidth(this ScorePartwiseMusicXML score, string measureNumber)
        {
            double result = score.Part[0].GetMeasureUsingId(measureNumber).Width;

            foreach (var part in score.Part)
            {
                double width = part.GetMeasureUsingId(measureNumber).Width;
                if (width > result)
                {
                    result = width;
                }
            }
            return(result);
        }
        public PagesControllerViewModel(ScorePartwiseMusicXML score)
        {
            partwise        = score;
            PagesCollection = new ObservableCollection <UIElement>();
            AddPageCommand  = new RelayCommand(AddAdvancedEmptyPage);
            var cMenu = new ContextMenu();
            var item  = new MenuItem()
            {
                Header = "Add New Page", Command = AddPageCommand
            };

            cMenu.Items.Add(item);
            ContextMenu             = cMenu;
            measureSegmentContainer = new MeasureSegmentContainer();
            measureSegmentContainer.GenerateMeasureSegments(score);
        }
 /// <summary>
 /// Find and set largest measure width among all parts
 /// </summary>
 /// <param name="score"></param>
 public static void SetLargestMeasureWidth(this ScorePartwiseMusicXML score)
 {
     foreach (var measure in score.Part[0].Measure)
     {
         string id       = measure.Number;
         var    maxWidth = score.GetLargestWidth(id);
         if (maxWidth.Equals4DigitPrecision(0.0))
         {
             maxWidth = 120;
         }
         foreach (var part in score.Part)
         {
             var m = part.GetMeasureUsingId(id);
             m.CalculatedWidth = maxWidth;
         }
     }
 }
예제 #15
0
        public void AddScore(ScorePartwiseMusicXML score)
        {
            //! Layout init before scoreProperties
            LayoutGeneral layout = new LayoutGeneral(score);

            CurrentLayoutProperties = layout;
            _scoreLayoutContainer.Add(score.ID, layout);

            ScoreProperties scoreProperties = new ScoreProperties(score);

            _scorePropertiesContainer.Add(score.ID, scoreProperties);
            SelectScore(score.ID);
            if (AutoLayoutSupported)
            {
                CurrentScoreProperties.AddAttributes();
            }
        }
 public AdvancedMeasureLayout(ScorePartwiseMusicXML score)
 {
     _scoreFile = score;
     GenerateMeasureSegments();
     FindOptimalMeasureWidths();
 }
예제 #17
0
 public LayoutGeneral(ScorePartwiseMusicXML score)
 {
     pageProperties = score != null?  new PageProperties(score.Defaults): null;
     layoutStyle    = new Layout(score);
 }
예제 #18
0
 public Layout(ScorePartwiseMusicXML score) : this()
 {
 }
예제 #19
0
 private void FindPartSystems(ScorePartwiseMusicXML score)
 {
     _partSysemsInPages = score.Part[_partIndex].TryGetLinesPerPage();
 }
 private void InitTimeSignatures(ScorePartwiseMusicXML score)
 {
     _timeSignatures = new TimeSignatures(score);
 }