Beispiel #1
0
        public override void Apply(Staff staff, PrintSuggestion newElement)
        {
            if (!newElement.IsSystemBreak)
            {
                return;
            }

            var lastMeasure = staff.Measures.LastOrDefault();

            if (lastMeasure == null)
            {
                return;
            }

            var system = GetSystem(staff);

            if (system != staff.Score.Systems.LastOrDefault())
            {
                return;
            }

            system = new StaffSystem(staff.Score);
            staff.Score.Pages.Last().Systems.Add(system);
            lastMeasure.System = system;
        }
Beispiel #2
0
        public void MoveLayout(StaffSystem system, Point delta)
        {
            foreach (var staffFragment in system.Staves)
            {
                var systemElements = OwnershipDictionary.Where(d => d.Value == staffFragment).Select(d => d.Key).ToList();
                foreach (var frameworkElement in systemElements)
                {
                    Move(frameworkElement, delta);
                }
            }

            var alreadyMovedElements = new List <FrameworkElement>();

            foreach (var element in system.Score.Staves.SelectMany(s => s.Elements).Where(e => e.Measure != null && e.Measure.System == system).Distinct())
            {
                var frameworkElements = OwnershipDictionary.Where(d => d.Value == element).Select(d => d.Key).ToList();
                foreach (var frameworkElement in frameworkElements)
                {
                    if (alreadyMovedElements.Contains(frameworkElement))
                    {
                        continue;
                    }
                    Move(frameworkElement, delta);
                    alreadyMovedElements.Add(frameworkElement);
                }
            }
        }
Beispiel #3
0
 public void MoveLayout(StaffSystem system, Point delta)
 {
     if (Renderer == null)
     {
         return;
     }
     Renderer.MoveLayout(system, delta);
 }
Beispiel #4
0
 private static StaffSystem NewSystem(MusicXmlParserState state, Staff staff)
 {
     if (staff == staff.Score.Staves.First())
     {
         var system = new StaffSystem(staff.Score);
         staff.Score.Pages.Last().Systems.Add(system);
         return(system);
     }
     return(staff.Score.Systems[state.CurrentSystemNo - 1]);
 }
        private void DrawBracket(StaffSystem system, Part part, ScoreRendererBase renderer)
        {
            if (system.LinePositions == null)
            {
                return;
            }
            var location = new Point(-30, system.LinePositions[1][0]);
            var size     = new Size(25, system.LinePositions[part.Staves.Count][4] - system.LinePositions[1][0]);

            renderer.DrawStringInBounds(renderer.Settings.CurrentFont.LeftBracket, Model.Fonts.MusicFontStyles.MusicFont, location, size,
                                        renderer.Settings.DefaultColor, part.Staves.First());
        }
Beispiel #6
0
        public ActionResult NewPlanApproveStep()
        {
            string strErrText;

            //读取计划审批步骤数据
            FlowSystem             flow     = new FlowSystem();
            List <ApproveFlowStep> listStep = flow.LoadApproveFlowStepsByFlowType(InnoSoft.LS.Resources.Options.PlanApproveFlow, LoginAccountId, LoginStaffName, out strErrText);

            if (listStep == null)
            {
                throw new Exception(strErrText);
            }

            //生成新步骤序号
            int nStepNum = 1;

            if (listStep.Count > 0)
            {
                nStepNum = listStep[listStep.Count - 1].StepNum + 1;
            }

            //创建空的Model
            ApproveFlowStepViewModel model = new ApproveFlowStepViewModel();

            model.StepNum = nStepNum;

            model.Conditions = new List <ApproveFlowStepConditionViewModel>();
            model.Conditions.Add(new ApproveFlowStepConditionViewModel());

            //生成处理人下拉列表项
            StaffSystem  staff     = new StaffSystem();
            List <Staff> listStaff = staff.LoadStaffs(LoginAccountId, LoginStaffName, out strErrText);

            if (listStaff == null)
            {
                throw new Exception(strErrText);
            }
            List <SelectListItem> selectListStaff = new List <SelectListItem>();

            selectListStaff.Add(new SelectListItem {
                Text = string.Empty, Value = string.Empty
            });
            selectListStaff.AddRange(from s in listStaff
                                     select new SelectListItem
            {
                Text  = s.FullName,
                Value = s.Id.ToString()
            });
            ViewData["Disposers"] = new SelectList(selectListStaff, "Value", "Text");

            return(View(model));
        }
        /// <summary>
        /// Begins a new system.
        /// </summary>
        public void BeginNewSystem()
        {
            var currentSystemIndex = Systems.ToList().IndexOf(CurrentSystem);

            if (currentSystemIndex == Systems.Count - 1)
            {
                var newSystem = new StaffSystem(CurrentScore);
                CurrentScore.Pages.Last().Systems.Add(newSystem);
                CurrentSystem = newSystem;
                return;
            }
            CurrentSystem = Systems[currentSystemIndex + 1];
        }
Beispiel #8
0
        // Temporary hack -- enforces four measures to a line
        // Not implemented for multiple staves
        internal void breakStaffIfNeeded()
        {
            var systems = new LinkedList <StaffSystem>();

            for (int i = 0; i < data.FirstStaff.Measures.Count / 4 + 1; i++)
            {
                StaffSystem sys = new StaffSystem(data);
                for (int j = 0; j < 4; j++)
                {
                    //sys.
                }
            }
        }
        private void DrawBracket(StaffSystem system, Part part, ScoreRendererBase renderer)
        {
            if (system.LinePositions == null)
            {
                return;
            }

            var locationXAndWidth = GetBraceLocationXAndWidth(renderer);

            var location = new Point(locationXAndWidth.Item1, system.LinePositions[1][0]);
            var size     = new Size(locationXAndWidth.Item2, system.LinePositions[part.Staves.Count][4] - system.LinePositions[1][0]);

            renderer.DrawCharacterInBounds(renderer.Settings.MusicFontProfile.MusicFont.BraceLeft, Model.Fonts.MusicFontStyles.MusicFont, location, size,
                                           renderer.Settings.DefaultColor, part.Staves.First());
        }
        protected static StaffSystem GetSystem(Staff staff)
        {
            StaffSystem system = null;

            if (staff.Score != null)
            {
                system = staff.Score.Systems.LastOrDefault();
                if (system == null)
                {
                    system = new StaffSystem(staff.Score);
                    staff.Score.Pages.Last().Systems.Add(system);
                }
            }
            return(system);
        }
Beispiel #11
0
        public ActionResult ModifyPriceApproveStep(string id)
        {
            string strErrText;

            //读取价格审批步骤数据
            FlowSystem      flow = new FlowSystem();
            ApproveFlowStep data = flow.LoadApproveFlowStep(long.Parse(id), LoginAccountId, LoginStaffName, out strErrText);

            if (data == null)
            {
                throw new Exception(strErrText);
            }

            //创建Model
            PriceApproveFlowStepViewModel model = new PriceApproveFlowStepViewModel();

            model.StepNum             = data.StepNum;
            model.StepName            = data.StepName;
            model.DisposerId          = data.DisposerId;
            model.ConditionExpression = data.ConditionExpression;

            model.Conditions = new List <PriceApproveFlowStepConditionViewModel>();
            model.Conditions.Add(new PriceApproveFlowStepConditionViewModel());

            //生成处理人下拉列表项
            StaffSystem  staff     = new StaffSystem();
            List <Staff> listStaff = staff.LoadStaffs(LoginAccountId, LoginStaffName, out strErrText);

            if (listStaff == null)
            {
                throw new Exception(strErrText);
            }
            List <SelectListItem> selectListStaff = new List <SelectListItem>();

            selectListStaff.Add(new SelectListItem {
                Text = string.Empty, Value = string.Empty
            });
            selectListStaff.AddRange(from s in listStaff
                                     select new SelectListItem
            {
                Text  = s.FullName,
                Value = s.Id.ToString()
            });
            ViewData["Disposers"] = new SelectList(selectListStaff, "Value", "Text", model.DisposerId);

            return(View(model));
        }
Beispiel #12
0
        private double CalculateStaffLineWidth(Staff staff, StaffSystem system, ScoreRendererSettings settings)
        {
            var lastMeasureInSystem = staff.Measures.LastOrDefault(m => m.System == system);
            var endPositionX        = lastMeasureInSystem?.BarlineLocationX ?? system.Width;

            if (endPositionX == 0)
            {
                endPositionX = system.Width;
            }

            if (settings.RenderingMode != ScoreRenderingModes.Panorama)
            {
                endPositionX = ExtendXPositionForMemoElements(endPositionX, lastMeasureInSystem, staff, system);
            }

            return(endPositionX);
        }
Beispiel #13
0
        private void SetElementPositions(Score score)
        {
            foreach (var staff in score.Staves)
            {
                StaffSystem lastSystem = null;
                foreach (var measure in staff.Measures)
                {
                    var marginLeft = lastSystem == null || score.Systems.ToList().IndexOf(measure.System) != score.Systems.ToList().IndexOf(lastSystem) ? 85 : 14;    //First symbol in system should have bigger margin
                    foreach (var group in measure.Elements.GroupBy(e => e is NoteOrRest ? ((NoteOrRest)e).Voice : 1))
                    {
                        double x = marginLeft;
                        foreach (var element in group)
                        {
                            if (!measure.Width.HasValue)
                            {
                                throw new Exception("Measure does not have width. Run SetMeasureWidths first.");
                            }

                            var durationElement = element as IHasDuration;
                            if (durationElement == null)
                            {
                                continue;
                            }
                            var defaultXElement = element as IHasCustomXPosition;
                            if (defaultXElement == null)
                            {
                                continue;
                            }

                            defaultXElement.DefaultXPosition = x;
                            var chordElement = element as ICanBeUpperMemberOfChord;
                            if (chordElement != null && chordElement.IsUpperMemberOfChord)
                            {
                                continue;
                            }

                            var time     = staff.Peek <TimeSignature>(element, Model.PeekStrategies.PeekType.PreviousElement);
                            var duration = durationElement.BaseDuration.AddDots(durationElement.NumberOfDots).ToDouble() * time.WholeNoteCapacity;    //TODO: Dots!
                            x += (measure.Width.Value - marginLeft) * duration;
                        }
                    }
                    lastSystem = measure.System;
                }
            }
        }
Beispiel #14
0
        public JsonResult LoadOrganizationAllStaffs(long nOrganId)
        {
            string       strErrText;
            StaffSystem  staff     = new StaffSystem();
            List <Staff> listStaff = staff.LoadAllStaffsByOrganId(nOrganId, LoginAccountId, LoginStaffName, out strErrText);

            if (listStaff == null)
            {
                throw new Exception(strErrText);
            }

            var ret = from s in listStaff
                      select new
            {
                s.Id,
                s.FullName
            };

            return(Json(ret, JsonRequestBehavior.AllowGet));
        }
Beispiel #15
0
 private void Draw(Staff staff, ScoreRendererBase renderer, StaffFragment staffFragment, StaffSystem system)
 {
     renderer.DrawLine(0, staffFragment.LinePositions[0], 0, staffFragment.LinePositions[4], staffFragment);
     foreach (double position in staffFragment.LinePositions)
     {
         Point startPoint = new Point(0, position);
         Point endPoint   = new Point(system.Width, position);
         renderer.DrawLine(startPoint, endPoint, new Pen(renderer.Settings.DefaultColor, 1, -1), staffFragment);
     }
 }
Beispiel #16
0
        /// <summary>
        /// Extends lines for clefs, keys and time signatures at the end of the system (which are actually members of the next measure)
        /// </summary>
        /// <param name="endPositionX"></param>
        /// <param name="lastMeasureInSystem"></param>
        /// <param name="staff"></param>
        /// <param name="system"></param>
        /// <returns></returns>
        private double ExtendXPositionForMemoElements(double endPositionX, Measure lastMeasureInSystem, Staff staff, StaffSystem system)
        {
            var nextMeasure = lastMeasureInSystem == null ? null : staff.Measures.ElementAtOrDefault(staff.Measures.IndexOf(lastMeasureInSystem) + 1);

            if (nextMeasure != null)    //Wydłuż linie, jeśli są na końcu taktu nowe znaki przykluczowe lub nowe metrum
            {
                var elementsWithPosition = nextMeasure.Elements.OfType <IRenderedAsTextBlock>().Where(e => e is Clef || e is TimeSignature || e is Key);
                var memoElement          = elementsWithPosition.OrderBy(e => e.TextBlockLocation.X).LastOrDefault();
                if (memoElement == null)
                {
                    return(endPositionX);
                }

                if (endPositionX < memoElement.TextBlockLocation.X + memoElement.RenderedWidth)
                {
                    endPositionX = memoElement.TextBlockLocation.X + memoElement.RenderedWidth;
                }
            }

            return(endPositionX);
        }
Beispiel #17
0
        private void Draw(Staff staff, ScoreRendererBase renderer, StaffFragment staffFragment, StaffSystem system, Pen staffLinePen, double?staffLineWidth)
        {
            renderer.DrawLine(0, staffFragment.LinePositions[0], 0, staffFragment.LinePositions[4], staffLinePen, staffFragment);
            var endPositionX = staffLineWidth ?? CalculateStaffLineWidth(staff, system, renderer.Settings);

            foreach (double linePositionY in staffFragment.LinePositions)
            {
                Point startPoint = new Point(0, linePositionY);
                Point endPoint   = new Point(endPositionX, linePositionY);
                renderer.DrawLine(startPoint, endPoint, staffLinePen, staffFragment);
            }
        }
        public override Score Parse(XDocument xmlDocument)          //TODO: Exception handling!
        {
            Score score       = new Score();
            var   firstSystem = new StaffSystem(score);

            score.Pages.Last().Systems.Add(firstSystem);
            MusicXmlParserState state = new MusicXmlParserState();

            foreach (XElement defaultSettingsNode in xmlDocument.Descendants().Where(d => d.Name == "defaults" || d.Name == "identification"))
            {
                foreach (XElement settingNode in defaultSettingsNode.Elements())
                {
                    var dummyStaff = new Staff {
                        Score = score
                    };                                                                  //Nasty workaround
                    MusicXmlParsingStrategy parsingStrategy = MusicXmlParsingStrategy.GetProperStrategy(settingNode);
                    if (parsingStrategy != null)
                    {
                        parsingStrategy.ParseElement(state, dummyStaff, settingNode);
                    }
                }
            }

            foreach (XElement partNode in xmlDocument.Descendants(XName.Get("part")))
            {
                state.CurrentSystemNo = 1;

                var partId = partNode.ParseAttribute("id");
                state.FirstLoop = true;
                Staff staff = new Staff()
                {
                    MeasureAddingRule = Staff.MeasureAddingRuleEnum.AddMeasuresManually
                };
                score.Staves.Add(staff);
                var part = score.Parts.FirstOrDefault(p => p.PartId == partId) ?? new Part(staff)
                {
                    PartId = partId
                };
                staff.Part = part;
                score.Parts.Add(part);
                foreach (XElement node in partNode.Elements())
                {
                    MusicXmlParsingStrategy parsingStrategy = MusicXmlParsingStrategy.GetProperStrategy(node);
                    if (parsingStrategy != null)
                    {
                        parsingStrategy.ParseElement(state, staff, node);
                    }
                }
            }

            var       partListNode     = xmlDocument.Descendants(XName.Get("part-list"));
            PartGroup currentPartGroup = null;

            foreach (var partListElementNode in partListNode.Elements())
            {
                if (partListElementNode.Name == "part-group")
                {
                    partListElementNode.IfAttribute("type").HasValue("start").Then(() =>
                    {
                        currentPartGroup = new PartGroup()
                        {
                            Number = score.PartGroups.Count + 1
                        };
                        score.PartGroups.Add(currentPartGroup);
                    });

                    partListElementNode.IfAttribute("type").HasValue("stop").Then(() => currentPartGroup = null);
                    if (currentPartGroup != null)
                    {
                        partListElementNode.IfElement("group-barline").HasValue <GroupBarlineType>(d =>
                        {
                            d.Add("Yes", GroupBarlineType.Enabled);
                            d.Add("No", GroupBarlineType.Disabled);
                            d.Add("Mensurstrich", GroupBarlineType.Mensurstrich);
                            return(d);
                        }).Then(r => currentPartGroup.GroupBarline = r);
                    }
                }
                if (partListElementNode.Name == "score-part" && currentPartGroup != null)
                {
                    var scorePartId       = partListElementNode.IfAttribute("id").HasAnyValue().ThenReturnResult();
                    var matchingScorePart = score.Parts.FirstOrDefault(p => p.PartId == scorePartId);
                    if (matchingScorePart != null)
                    {
                        matchingScorePart.Group = currentPartGroup;
                    }
                }
            }

            //Sibelius hack:
            if (score.Encoding?.Software?.Any(s => s.Contains("Sibelius")) ?? false)
            {
                new DefaultScoreFormatter().Format(score);
            }

            foreach (var staff in score.Staves)
            {
                staff.MeasureAddingRule = Staff.MeasureAddingRuleEnum.AddMeasureOnInsertingBarline;
            }
            return(score);
        }