private static LiedFormatResult ToonMetVerzenEnEersteLos(ILiturgieRegel regel, ILiturgieContent vanafDeelHint)
 {
     var result = new LiedFormatResult()
     {
         Naam = regel.Display.Naam
     };
     if (!string.IsNullOrWhiteSpace(regel.Display.SubNaam))
         result.SubNaam = regel.Display.SubNaam;
     if (regel.Content == null)
         result.Verzen = LiedVerzen(regel.Display, true);
     else
     {
         var vanafDeel = vanafDeelHint ?? regel.Content.FirstOrDefault();  // Bij een deel hint tonen we alleen nog de huidige en komende versen
         var gebruikDeelRegels = regel.Content.SkipWhile(r => r != vanafDeel);
         result.Verzen = LiedVerzen(regel.Display, true, gebruikDeelRegels);
     }
     return result;
 }
示例#2
0
        private static LiedFormatResult ToonMetVerzenEnEersteLos(ISlideInhoud regel, ILiturgieContent vanafDeelHint, bool verkortBijVolledigeContent)
        {
            var result = new LiedFormatResult()
            {
                Naam = regel.Display.Naam
            };

            if (!string.IsNullOrWhiteSpace(regel.Display.SubNaam))
            {
                result.SubNaam = regel.Display.SubNaam;
            }
            if (regel.Content == null)
            {
                result.Verzen = LiedVerzen(regel.Display, true, verkortBijVolledigeContent);
            }
            else
            {
                var vanafDeel         = vanafDeelHint ?? regel.Content.FirstOrDefault(); // Bij een deel hint tonen we alleen nog de huidige en komende versen
                var gebruikDeelRegels = regel.Content.SkipWhile(r => r != vanafDeel);
                result.Verzen = LiedVerzen(regel.Display, true, verkortBijVolledigeContent, gebruikDeelRegels);
            }
            return(result);
        }
            /// <summary>
            /// Lied in template plaatsen
            /// </summary>
            private void InvullenTekstOpTemplate(ISlideInhoud regel, ILiturgieContent inhoud, IEnumerable <ISlideOpbouw> volgenden, CancellationToken token)
            {
                var tekstOmTeRenderen      = inhoud.Inhoud;
                var tekstOmTeRenderenLijst = new List <string>();

                // knip de te renderen tekst in stukken (zodat we van tevoren het aantal weten)
                while (!string.IsNullOrWhiteSpace(tekstOmTeRenderen))
                {
                    if (token.IsCancellationRequested)
                    {
                        return;
                    }

                    // plaats zo veel mogelijk tekst op de slide totdat het niet meer past, krijg de restjes terug
                    var uitzoeken = TekstVerdelerLied.InvullenLiedTekst(tekstOmTeRenderen, _buildDefaults.RegelsPerLiedSlide, _buildDefaults.LiedtekstVisualiseerAfbreking);
                    tekstOmTeRenderenLijst.Add(uitzoeken.Invullen);
                    tekstOmTeRenderen = uitzoeken.Over;
                }

                ZetProgressieStatistieken(tekstOmTeRenderenLijst.Count);

                //zolang er nog iets is in te voegen in sheets
                var index = 0;

                foreach (var tekst in tekstOmTeRenderenLijst)
                {
                    if (token.IsCancellationRequested)
                    {
                        return;
                    }

                    //regel de template om het lied op af te beelden
                    var presentatie = OpenPps(_dependentFileList.FullTemplateLied);
                    var slide       = presentatie.EersteSlide(); //alleen eerste slide gebruiken we
                                                                 //voor elk object op de slides (we zoeken naar de tekst die vervangen moet worden in de template)
                    foreach (var shape in slide.Shapes().Where(s => s is IMppShapeTextbox).Cast <IMppShapeTextbox>())
                    {
                        var tagReplacementResult = ProcessForTagReplacement(shape.Text,
                                                                            additionalSearchForTagReplacement: (s) => {
                            switch (s)
                            {
                            case "liturgieregel":
                                return(new SearchForTagReplacementResult(_liedFormatter.Huidig(regel, inhoud, _buildDefaults.VerkortVerzenBijVolledigeContent).Display));

                            case "inhoud":
                                return(new SearchForTagReplacementResult(tekst));

                            case "volgende":
                                //we moeten dan wel al op de laatste slide zitten ('InvullenVolgende' is wel al intelligent maar in het geval van 1
                                //lange tekst over meerdere dia's kan 'InvullenVolgende' niet de juiste keuze maken)
                                var display = IsLaatsteSlide(tekstOmTeRenderenLijst, tekst, regel, inhoud) ? _liedFormatter.Volgende(volgenden, 0, _buildDefaults.VerkortVerzenBijVolledigeContent) : null;
                                return(new SearchForTagReplacementResult(display != null ? $"{_buildDefaults.LabelVolgende} {display.Display}" : string.Empty));
                            }
                            return(SearchForTagReplacementResult.Unresolved);
                        });
                        if (tagReplacementResult.TagsReplaced)
                        {
                            shape.Text = tagReplacementResult.NewValue;
                        }
                    }
                    //voeg slide in in het grote geheel
                    _slidesGemist += _presentatie.SlidesKopieNaarPresentatie(new List <IMppSlide> {
                        slide
                    });
                    //sluit de template weer af
                    presentatie.Dispose();

                    index++;
                    ZetProgressieBijPagina(index);
                }
            }
 /// Een 'volgende' tekst is alleen relevant om te tonen op de laatste pagina binnen een item voordat
 /// een nieuw item komt.
 /// Je kunt er echter ook voor kiezen dat een volgende item gewoon niet aangekondigd wordt. Dat gaat
 /// via 'TonenInVolgende'.
 protected static bool IsLaatsteSlide(IEnumerable <string> tekstOmTeRenderen, string huidigeTekst, ISlideInhoud regel, ILiturgieContent deel)
 {
     return(tekstOmTeRenderen.Last() == huidigeTekst && regel.Content.Last() == deel);
 }
            /// <summary>
            /// Algemene slide waarop we alleen template teksten moeten vervangen
            /// </summary>
            private void ToevoegenSlides(ILiturgieContent inhoud, IEnumerable <ISlideOpbouw> volgenden, CancellationToken token)
            {
                //open de presentatie met de sheets erin
                var presentatie = OpenPps(inhoud.Inhoud);
                //voor elke slide in de presentatie
                var slides = presentatie.AlleSlides().ToList();

                foreach (var shape in slides.SelectMany(s => s.Shapes()).ToList())
                {
                    if (token.IsCancellationRequested)
                    {
                        return;
                    }

                    var textbox = shape as IMppShapeTextbox;
                    var table   = shape as IMppShapeTable;

                    if (textbox != null)
                    {
                        var tagReplacementResult = ProcessForTagReplacement(textbox.Text,
                                                                            additionalSearchForTagReplacement: (s) => {
                            LiedFormatResult display;
                            switch (s)
                            {
                            case "volgende":
                                //als de template de tekst bevat "Volgende" moet daar de Liturgieregel van de volgende sheet komen
                                display = _liedFormatter.Volgende(volgenden, 0, _buildDefaults.VerkortVerzenBijVolledigeContent);
                                return(new SearchForTagReplacementResult(display != null ? $"{_buildDefaults.LabelVolgende} {display.Display}" : string.Empty));

                            case "volgende_kort":
                                //verkorte versie van "Volgende"
                                display = _liedFormatter.Volgende(volgenden, 0, _buildDefaults.VerkortVerzenBijVolledigeContent);
                                return(new SearchForTagReplacementResult(display != null ? display.Display : string.Empty));
                            }
                            if (s.StartsWith("volgende_over_"))
                            {
                                var aantalOverslaanStr = s.Substring("volgende_over_".Length, s.Length - "volgende_over_".Length);
                                int aantalOverslaan    = 0;
                                if (int.TryParse(aantalOverslaanStr, out aantalOverslaan))
                                {
                                    display = _liedFormatter.Volgende(volgenden, aantalOverslaan, _buildDefaults.VerkortVerzenBijVolledigeContent);
                                    return(new SearchForTagReplacementResult(display != null ? $"{_buildDefaults.LabelVolgende} {display.Display}" : string.Empty));
                                }
                                else
                                {
                                    return(new SearchForTagReplacementResult(string.Empty));
                                }
                            }
                            return(SearchForTagReplacementResult.Unresolved);
                        });
                        if (tagReplacementResult.TagsReplaced)
                        {
                            textbox.Text = tagReplacementResult.NewValue;
                        }
                    }
                    else if (table != null)
                    {
                        if (table.GetTitelFromFirstRowCell().Equals("<Liturgie>"))
                        {
                            VulLiturgieTabel(table, _mppFactory, _liedFormatter, _liturgie, _buildSettings.Lezen, _buildSettings.Tekst, _buildDefaults.LabelLiturgieLezen, _buildDefaults.LabelLiturgieTekst, _buildDefaults.LabelLiturgie, _buildDefaults.VerkortVerzenBijVolledigeContent);
                        }
                    }
                }
                //voeg de slides in in het grote geheel
                _slidesGemist += _presentatie.SlidesKopieNaarPresentatie(slides);
                //sluit de geopende presentatie weer af
                presentatie.Dispose();
            }
            private void ToevoegenSlides(ILiturgieRegel regel, ILiturgieContent inhoud, ILiturgieRegel volgende)
            {
                //open de presentatie met de sheets erin
                var presentatie = OpenPps(inhoud.Inhoud);
                //voor elke slide in de presentatie
                var slides = presentatie.AlleSlides().ToList();
                foreach (var shape in slides.SelectMany(s => s.Shapes()).ToList())
                {
                    var textbox = shape as IMppShapeTextbox;
                    var table = shape as IMppShapeTable;

                    if (textbox != null)
                    {
                        var text = textbox.Text;
                        //als de template de tekst bevat "Voorganger: " moet daar de Voorgangersnaam achter komen
                        if (text.Equals("<Voorganger:>"))
                            textbox.Text = _buildDefaults.LabelVoorganger + _buildSettings.Voorganger;
                        //als de template de tekst bevat "Collecte: " moet daar de collectedoel achter komen
                        else if (text.Equals("<Collecte:>"))
                            textbox.Text = _buildDefaults.LabelCollecte + _buildSettings.Collecte1;
                        //als de template de tekst bevat "1e Collecte: " moet daar de 1e collecte achter komen
                        else if (text.Equals("<1e Collecte:>"))
                            textbox.Text = _buildDefaults.LabelCollecte1 + _buildSettings.Collecte1;
                        //als de template de tekst bevat "2e Collecte: " moet daar de 2e collecte achter komen
                        else if (text.Equals("<2e Collecte:>"))
                            textbox.Text = _buildDefaults.LabelCollecte2 + _buildSettings.Collecte2;
                        //als de template de tekst bevat "Volgende" moet daar _altijd_ de Liturgieregel van de volgende sheet komen
                        //(omdat het hier handmatig bepaald wordt door degene die de slides gemaakt heeft)
                        else if (text.Equals("<Volgende>"))
                        {
                            var display = _liedFormatter.Volgende(volgende);
                            textbox.Text = display != null ? $"{_buildDefaults.LabelVolgende} {display.Display}" : string.Empty;
                        }
                        //als de template de tekst bevat "Volgende" moet daar de te lezen schriftgedeeltes komen
                        else if (text.Equals("<Lezen>"))
                            textbox.Text = _buildDefaults.LabelLezen + _buildSettings.Lezen;
                        else if (text.Equals("<Tekst>"))
                            textbox.Text = _buildDefaults.LabelTekst + _buildSettings.Tekst;
                        else if (text.Equals("<Tekst_Onder>"))
                            textbox.Text = _buildSettings.Tekst;
                    }
                    else if (table != null)
                    {
                        if (table.GetTitel().Equals("<Liturgie>"))
                            VulLiturgieTabel(table, _mppFactory, _liedFormatter, _liturgie, _buildSettings.Lezen, _buildSettings.Tekst, _buildDefaults.LabelLiturgieLezen, _buildDefaults.LabelLiturgieTekst, _buildDefaults.LabelLiturgie);
                    }
                }
                //voeg de slides in in het grote geheel
                _slidesGemist += _presentatie.SlidesKopieNaarPresentatie(slides);
                //sluit de geopende presentatie weer af
                presentatie.Dispose();
            }
            private void InvullenTekstOpTemplate(ILiturgieRegel regel, ILiturgieContent inhoud, ILiturgieRegel volgende)
            {
                var tekstOmTeRenderen = inhoud.Inhoud;
                var tekstOmTeRenderenLijst = new List<string>();
                // knip de te renderen tekst in stukken (zodat we van tevoren het aantal weten)
                while (!string.IsNullOrWhiteSpace(tekstOmTeRenderen))
                {
                    // plaats zo veel mogelijk tekst op de slide totdat het niet meer past, krijg de restjes terug
                    var uitzoeken = InvullenLiedTekst(tekstOmTeRenderen);
                    tekstOmTeRenderenLijst.Add(uitzoeken.Invullen);
                    tekstOmTeRenderen = uitzoeken.Over;
                }

                //zolang er nog iets is in te voegen in sheets
                foreach (var tekst in tekstOmTeRenderenLijst)
                {
                    //regel de template om het lied op af te beelden
                    var presentatie = OpenPps(_dependentFileList.FullTemplateLied);
                    var slide = presentatie.EersteSlide();  //alleen eerste slide gebruiken we
                                                            //voor elk object op de slides (we zoeken naar de tekst die vervangen moet worden in de template)
                    foreach (var shape in slide.Shapes().Where(s => s is IMppShapeTextbox).Cast<IMppShapeTextbox>())
                    {
                        var text = shape.Text;
                        //als de template de tekst bevat "Liturgieregel" moet daar de liturgieregel komen
                        if (text.Equals("<Liturgieregel>"))
                            shape.Text = _liedFormatter.Huidig(regel, inhoud).Display;
                        //als de template de tekst bevat "Inhoud" moet daar de inhoud van het vers komen
                        else if (text.Equals("<Inhoud>"))
                            shape.Text = tekst;
                        //als de template de tekst bevat "Volgende" moet daar de Liturgieregel van de volgende sheet komen
                        else if (text.Equals("<Volgende>"))
                        {
                            //we moeten dan wel al op de laatste slide zitten ('InvullenVolgende' is wel al intelligent maar in het geval van 1
                            //lange tekst over meerdere dia's kan 'InvullenVolgende' niet de juiste keuze maken)
                            var display = IsLaatsteSlide(tekstOmTeRenderenLijst, tekst, regel, inhoud) ? _liedFormatter.Volgende(volgende) : null;
                            shape.Text = display != null ? $"{_buildDefaults.LabelVolgende} {display.Display}" : string.Empty;
                        }
                    }
                    //voeg slide in in het grote geheel
                    _slidesGemist += _presentatie.SlidesKopieNaarPresentatie(new List<IMppSlide> { slide });
                    //sluit de template weer af
                    presentatie.Dispose();
                }
            }
 /// Een 'volgende' tekst is alleen relevant om te tonen op de laatste pagina binnen een item voordat 
 /// een nieuw item komt.
 /// Je kunt er echter ook voor kiezen dat een volgende item gewoon niet aangekondigd wordt. Dat gaat
 /// via 'TonenInVolgende'.
 protected static bool IsLaatsteSlide(IEnumerable<string> tekstOmTeRenderen, string huidigeTekst, ILiturgieRegel regel, ILiturgieContent deel)
 {
     return tekstOmTeRenderen.Last() == huidigeTekst && regel.Content.Last() == deel;
 }
 public LiedFormatResult Huidig(ILiturgieRegel regel, ILiturgieContent vanafDeel)
 {
     return ToonMetVerzenEnEersteLos(regel, vanafDeel);
 }
示例#10
0
 public LiedFormatResult Huidig(ISlideInhoud regel, ILiturgieContent vanafDeel, bool verkortBijVolledigeContent)
 {
     return(ToonMetVerzenEnEersteLos(regel, vanafDeel, verkortBijVolledigeContent));
 }