/// Je kunt er voor kiezen dat een volgende item gewoon niet aangekondigd wordt. Dat gaat /// via 'TonenInVolgende'. public LiedFormatResult Volgende(ILiturgieRegel volgende) { // Alleen volgende tonen als volgende er is if (volgende != null && volgende.TonenInVolgende) return ToonWaarNodigMetVerzen(volgende); return null; }
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 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 IVerwerkResultaat Verwerk(ILiturgieRegel regel, ILiturgieRegel volgende) { // Per onderdeel in de regel moet een sheet komen foreach (var inhoud in regel.Content) { if (inhoud.InhoudType == InhoudType.Tekst) InvullenTekstOpTemplate(regel, inhoud, volgende); else ToevoegenSlides(regel, inhoud, volgende); } return new VerwerkResultaat() { SlidesGemist = _slidesGemist }; }
/// <summary> /// Uitzoeken wat de volgende is /// </summary> private static ILiturgieRegel Volgende(IEnumerable<ILiturgieRegel> volledigeLiturgie, ILiturgieRegel huidig) { var lijst = volledigeLiturgie.ToList(); var huidigeItemIndex = lijst.IndexOf(huidig); return lijst.Skip(huidigeItemIndex + 1).FirstOrDefault(); }
public LiedFormatResult Liturgie(ILiturgieRegel regel) { return ToonWaarNodigMetVerzen(regel); }
public LiedFormatResult Huidig(ILiturgieRegel regel, ILiturgieContent vanafDeel) { return ToonMetVerzenEnEersteLos(regel, vanafDeel); }
private static LiedFormatResult ToonWaarNodigMetVerzen(ILiturgieRegel regel) { var result = new LiedFormatResult() { Naam = regel.Display.NaamOverzicht }; if (!string.IsNullOrWhiteSpace(regel.Display.SubNaam)) result.SubNaam = regel.Display.SubNaam; result.Verzen = LiedVerzen(regel.Display, false, regel.Content); return result; }
private void InvullenTekstOpTemplate(ILiturgieRegel regel, ILiturgieRegel volgende) { var lengteBerekenaar = new LengteBerekenaar(34, "Verdana", 32); var tekstPerSlide = OpdelenPerSlide(TekstOpknippen(regel.Content), _buildDefaults.RegelsPerBijbeltekstSlide, lengteBerekenaar); //zolang er nog iets is in te voegen in sheets foreach (var tekst in tekstPerSlide) { //regel de template om de bijbeltekst op af te beelden var presentatie = OpenPps(_dependentFileList.FullTemplateBijbeltekst); 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, null).Display; //als de template de tekst bevat "Inhoud" moet daar de inhoud van het vers komen else if (text.Equals("<Inhoud>")) shape.Text = tekst.ToString(); //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 = tekstPerSlide.Last() == tekst ? _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(); } }
public IVerwerkResultaat Verwerk(ILiturgieRegel regel, ILiturgieRegel volgende) { InvullenTekstOpTemplate(regel, volgende); return new VerwerkResultaat() { SlidesGemist = _slidesGemist }; }