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; }
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); }
public LiedFormatResult Huidig(ISlideInhoud regel, ILiturgieContent vanafDeel, bool verkortBijVolledigeContent) { return(ToonMetVerzenEnEersteLos(regel, vanafDeel, verkortBijVolledigeContent)); }