<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>webview2 &#8211; TruckleSoft</title>
	<atom:link href="https://trucklesoft.org.uk/tag/webview2/feed/" rel="self" type="application/rss+xml" />
	<link>https://trucklesoft.org.uk</link>
	<description>Solutions that Work, Support that Lasts</description>
	<lastBuildDate>Fri, 09 May 2025 12:13:51 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>The Journey Behind Meeting Schedule Assistant</title>
		<link>https://trucklesoft.org.uk/2025/04/25/the-journey-behind-meeting-schedule-assistant/</link>
					<comments>https://trucklesoft.org.uk/2025/04/25/the-journey-behind-meeting-schedule-assistant/#respond</comments>
		
		<dc:creator><![CDATA[trucklesoft]]></dc:creator>
		<pubDate>Fri, 25 Apr 2025 19:48:25 +0000</pubDate>
				<category><![CDATA[Showcase]]></category>
		<category><![CDATA[Meeting Schedule Assistant]]></category>
		<category><![CDATA[google calendar]]></category>
		<category><![CDATA[localization]]></category>
		<category><![CDATA[mfc]]></category>
		<category><![CDATA[outlook calendar]]></category>
		<category><![CDATA[webview2]]></category>
		<category><![CDATA[xslt1]]></category>
		<guid isPermaLink="false">https://trucklesoft.org.uk/?p=184</guid>

					<description><![CDATA[Discover the 20-year journey behind Meeting Schedule Assistant—an evolving software project focused on multilingual support, auto assignment features, XSLT transformations, WebView2 integration, and dark mode design. Learn how collaboration and continuous improvement have shaped this powerful scheduling tool.]]></description>
										<content:encoded><![CDATA[
<p>Developing <em>Meeting Schedule Assistant</em> (MSA) has been a deeply rewarding journey—one that’s been unfolding for over 20 years. What began as a small project to simplify scheduling has grown into a powerful, feature-rich tool used by many around the world.</p>


<div role="navigation" aria-label="Table of Contents" class="simpletoc scrollpointscontainer wp-block-simpletoc-toc"><h2 class="simpletoc-title">Table of Contents</h2>
<ul class="simpletoc-list">
<li><a href="#tackling-the-toughest-challenge-auto-assign">Tackling the Toughest Challenge: Auto Assign</a>

</li>
<li><a href="#a-global-collaboration">A Global Collaboration</a>

</li>
<li><a href="#discovering-the-power-of-xslt">Discovering the Power of XSLT</a>

</li>
<li><a href="#modernizing-with-webview2">Modernizing with WebView2</a>

</li>
<li><a href="#embracing-calendar-synchronisation">Embracing Calendar Synchronisation</a>

</li>
<li><a href="#enhancing-the-editing-experience-with-scintilla">Enhancing the Editing Experience with Scintilla</a>

</li>
<li><a href="#embracing-the-dark-side">Embracing the Dark Side</a>

</li>
<li><a href="#a-project-that-keeps-giving">A Project That Keeps Giving</a>

</li>
</ul>
</li></ul></div>

<h2 class="wp-block-heading" id="tackling-the-toughest-challenge-auto-assign">Tackling the Toughest Challenge: Auto Assign</h2>


<p>One of the most challenging features to implement was the <strong>automatic assignment</strong><sup data-fn="fc742565-0c8f-41a3-ab76-f1ede50c0391" class="fn"><a id="fc742565-0c8f-41a3-ab76-f1ede50c0391-link" href="#fc742565-0c8f-41a3-ab76-f1ede50c0391">1</a></sup> functionality within the assignments editor. It needed to feel natural, intelligent, and flexible—all while respecting the diverse needs of congregations. Balancing those expectations with technical feasibility pushed me to think creatively and improve the way the software handles data and logic.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><a href="https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-auto-assign.webp" data-wpel-link="internal"><img fetchpriority="high" decoding="async" width="752" height="469" src="https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-auto-assign.webp" alt="Auto Assign Single Column window in the Assignments Editor" class="wp-image-221" srcset="https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-auto-assign.webp 752w, https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-auto-assign-300x187.webp 300w, https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-auto-assign-465x290.webp 465w, https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-auto-assign-695x433.webp 695w" sizes="(max-width: 752px) 100vw, 752px" /></a></figure>
</div>

<h2 class="wp-block-heading" id="a-global-collaboration">A Global Collaboration</h2>

<div class="wp-block-image">
<figure class="alignleft size-full"><a href="https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-translations.webp" data-wpel-link="internal"><img decoding="async" width="300" height="195" src="https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-translations.webp" alt="Computer keyboard with multicoloured keys, each labeled 'Hello' in a different language." class="wp-image-216"/></a></figure>
</div>


<p>As MSA evolved, supporting multiple languages became increasingly important. Today, the app is translated—fully or partially—into more than <strong>50 languages</strong>. This wouldn’t have been possible without the help of a wonderful group of volunteers. Collaborating with them has been a highlight of this journey.</p>



<p>Some languages were particularly tricky—<strong>Arabic</strong>, for example, brought unique challenges due to its <strong>right-to-left</strong> layout. But solving those problems helped the application become more inclusive and accessible for users everywhere.</p>


<h2 class="wp-block-heading" id="discovering-the-power-of-xslt">Discovering the Power of XSLT</h2>


<p class="footnote-ref scrollpointscontainer">Another major turning point came when a fellow translator introduced me to <strong>XSLT transformations</strong><sup data-fn="3cfe410a-7057-493c-bb6c-c693e0255cb7" class="fn"><a id="3cfe410a-7057-493c-bb6c-c693e0255cb7-link" href="#3cfe410a-7057-493c-bb6c-c693e0255cb7">2</a></sup>. That opened up a whole new level of flexibility, allowing users to customize how their schedules are rendered and exported. Even now, I’m still discovering new ways to leverage XSLT to make MSA more powerful and adaptable.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><a href="https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-xsl-transformations.webp" data-wpel-link="internal"><img decoding="async" width="1024" height="572" src="https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-xsl-transformations-1024x572.webp" alt="Using XSLT transformations to display schedules in the Meeting Editor" class="wp-image-193" srcset="https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-xsl-transformations-1024x572.webp 1024w, https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-xsl-transformations-300x168.webp 300w, https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-xsl-transformations-768x429.webp 768w, https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-xsl-transformations-1536x859.webp 1536w, https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-xsl-transformations-465x260.webp 465w, https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-xsl-transformations-695x389.webp 695w, https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-xsl-transformations.webp 1846w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Using XSLT transformations to display schedules</figcaption></figure>
</div>

<h2 class="wp-block-heading" id="modernizing-with-webview2">Modernizing with WebView2</h2>


<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p class="footnote-ref scrollpointscontainer">Bringing MSA into the modern era also meant finding ways to blend traditional technologies like <strong>MFC</strong> with modern web capabilities. Learning to work with <strong>WebView2</strong><sup data-fn="a4b3afa6-fac0-410c-94a8-943ccabbb3e9" class="fn"><a id="a4b3afa6-fac0-410c-94a8-943ccabbb3e9-link" href="#a4b3afa6-fac0-410c-94a8-943ccabbb3e9">3</a></sup> was both fascinating and rewarding.</p>



<p>It enabled the integration of sleek, interactive elements right within the app—something that would’ve been difficult, if not impossible, using MFC alone.</p>



<p>One task that became significantly easier with WebView2 was saving schedules to <strong>PDF</strong>. Now, it’s possible to <strong>print</strong> and <strong>save directly to PDF</strong>, making the process far simpler and more reliable than with <strong>MFC </strong>alone.</p>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow"><div class="wp-block-image">
<figure class="aligncenter size-large"><a href="https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-webview2.webp" data-wpel-link="internal"><img loading="lazy" decoding="async" width="1024" height="786" src="https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-webview2-1024x786.webp" alt="Using WebView2 to display and print schedules in the Report Viewer." class="wp-image-197" srcset="https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-webview2-1024x786.webp 1024w, https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-webview2-300x230.webp 300w, https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-webview2-768x590.webp 768w, https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-webview2-465x357.webp 465w, https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-webview2-651x500.webp 651w, https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-webview2.webp 1095w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Using WebView2 to display and print schedules</figcaption></figure>
</div></div>
</div>


<h2 class="wp-block-heading" id="embracing-calendar-synchronisation">Embracing Calendar Synchronisation</h2>


<p class="scrollpointscontainer">One of the more transformative additions to <strong>Meeting Schedule Assistant</strong> was support for <strong>calendar synchronisation</strong>. This journey began with a <strong>VB.NET</strong> console application that integrated with <strong><strong>Google Calendar</strong><sup data-fn="45035ef1-6da0-42aa-a135-c108a1a4fe03" class="fn"><a id="45035ef1-6da0-42aa-a135-c108a1a4fe03-link" href="#45035ef1-6da0-42aa-a135-c108a1a4fe03">4</a></sup></strong>. Encouraged by its usefulness, I later added support for <strong><strong>Outlook Calendar</strong><sup data-fn="292ad1a3-5ee1-4db1-bfae-56e6b7e2fed1" class="fn"><a id="292ad1a3-5ee1-4db1-bfae-56e6b7e2fed1-link" href="#292ad1a3-5ee1-4db1-bfae-56e6b7e2fed1">5</a></sup></strong>. </p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><a href="https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-calendar-options-preview.webp" data-wpel-link="internal"><img loading="lazy" decoding="async" width="1007" height="590" src="https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-calendar-options-preview.webp" alt="Screenshot of the Meeting Schedule Assistant Calendar Options window displaying synchronized calendar data on the right side." class="wp-image-517" srcset="https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-calendar-options-preview.webp 1007w, https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-calendar-options-preview-300x176.webp 300w, https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-calendar-options-preview-768x450.webp 768w, https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-calendar-options-preview-460x270.webp 460w, https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-calendar-options-preview-465x272.webp 465w, https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-calendar-options-preview-695x407.webp 695w" sizes="auto, (max-width: 1007px) 100vw, 1007px" /></a><figcaption class="wp-element-caption">Configuring calendar synchronisation</figcaption></figure>
</div>


<p>More recently, the Outlook synchronization tool was completely <strong>rewritten</strong> from the ground up using <strong>C#</strong> and <strong>.NET 8.0</strong>, providing a more <strong>robust</strong>, <strong>maintainable</strong>, and <strong>modern</strong> solution. The original VB.NET-based Google Calendar tool remains in place for now.</p>


<h2 class="wp-block-heading" id="enhancing-the-editing-experience-with-scintilla">Enhancing the Editing Experience with Scintilla</h2>


<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow"><div class="wp-block-image">
<figure class="aligncenter size-full"><a href="https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-scintilla-autocomplete.webp" data-wpel-link="internal"><img loading="lazy" decoding="async" width="486" height="341" src="https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-scintilla-autocomplete.webp" alt="Snapshot of the Scintilla's autocomplete feature in action" class="wp-image-320" srcset="https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-scintilla-autocomplete.webp 486w, https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-scintilla-autocomplete-300x210.webp 300w, https://trucklesoft.org.uk/wp-content/uploads/2025/04/msa-scintilla-autocomplete-465x326.webp 465w" sizes="auto, (max-width: 486px) 100vw, 486px" /></a><figcaption class="wp-element-caption">Scintilla&#8217;s autocomplete feature in action</figcaption></figure>
</div></div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p class="scrollpointscontainer">As the application matured, I found it increasingly important to improve the <strong>text editing experience</strong>—especially for advanced users managing <strong>custom scripts</strong> or <strong>templates</strong>. That’s when I turned to the <strong>Scintilla control</strong><sup data-fn="c176e362-3f76-45cc-9519-c6024acd63a0" class="fn"><a id="c176e362-3f76-45cc-9519-c6024acd63a0-link" href="#c176e362-3f76-45cc-9519-c6024acd63a0">6</a></sup>. Learning how to <strong>integrate</strong> and <strong>customize Scintilla</strong> was a turning point.</p>



<p class="scrollpointscontainer">It allowed me to offer powerful features like <strong>syntax highlighting</strong>, <strong>line numbers</strong>, and <strong>code folding</strong>, all of which made the <strong>Script Editor</strong><sup data-fn="55752ad3-5c83-40f8-b027-30b44f024ff9" class="fn"><a id="55752ad3-5c83-40f8-b027-30b44f024ff9-link" href="#55752ad3-5c83-40f8-b027-30b44f024ff9">7</a></sup> much more intuitive and productive. Rather than building an editor from scratch, Scintilla provided a <strong>flexible foundation</strong> that could be <strong>styled</strong> and <strong>extended</strong> to suit the application’s needs.</p>
</div>
</div>


<h2 class="wp-block-heading" id="embracing-the-dark-side">Embracing the Dark Side</h2>


<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:50%">
<p class="footnote-ref scrollpointscontainer">Most recently, I was thrilled to finally add <strong>dark mode</strong><sup data-fn="354b8384-a604-4641-958c-bdd827b29d57" class="fn"><a id="354b8384-a604-4641-958c-bdd827b29d57-link" href="#354b8384-a604-4641-958c-bdd827b29d57">8</a></sup> support. That might sound simple, but it was no small feat given that <strong>MFC doesn’t natively support dark themes</strong>. Getting it to work across the application required creative workarounds and careful design, but the results have made the app much easier on the eyes—especially during long hours of use.</p>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:50%">
<figure class="wp-block-image size-large"><a href="https://www.publictalksoftware.co.uk/wp-content/uploads/2025/03/Appearance_Sub_Menu.jpg" rel="noopener" data-wpel-link="exclude"><img decoding="async" src="https://www.publictalksoftware.co.uk/wp-content/uploads/2025/03/Appearance_Sub_Menu.jpg" alt="Screenshot showing how to change the dark mode by using the Appearance sub-menu."/></a><figcaption class="wp-element-caption">Setting the dark mode</figcaption></figure>
</div>
</div>


<h2 class="wp-block-heading" id="a-project-that-keeps-giving">A Project That Keeps Giving</h2>


<p>Looking back, it’s been an incredible experience—one filled with constant learning, collaboration, and the joy of creating something that helps others. <em>Meeting Schedule Assistant</em> has come a long way, and the journey is far from over. I’m excited to keep building, improving, and supporting this project for as long as it’s needed.</p>


<h3 class="wp-block-heading" id="citations">Citations</h3>

<ol class="wp-block-footnotes"><li id="fc742565-0c8f-41a3-ab76-f1ede50c0391"><a href="https://www.publictalksoftware.co.uk/help-msa/srr-editor-auto-assign-menu.html" data-type="link" data-id="https://www.publictalksoftware.co.uk/help-msa/srr-editor-auto-assign-menu.html" target="_blank" rel="noreferrer noopener" data-wpel-link="exclude">Meeting Schedule Assistant — Automatic Assigning</a> <a href="#fc742565-0c8f-41a3-ab76-f1ede50c0391-link" aria-label="Jump to footnote reference 1">↩︎</a></li><li id="3cfe410a-7057-493c-bb6c-c693e0255cb7"><a href="https://www.w3schools.com/xml/xsl_intro.asp" rel="noopener nofollow external noreferrer" data-wpel-link="external" target="_blank">W3 Schools — XSLT Introduction</a> <a href="#3cfe410a-7057-493c-bb6c-c693e0255cb7-link" aria-label="Jump to footnote reference 2">↩︎</a></li><li id="a4b3afa6-fac0-410c-94a8-943ccabbb3e9"><a href="https://developer.microsoft.com/en-us/microsoft-edge/webview2/?form=MA13LH" rel="noopener nofollow external noreferrer" data-wpel-link="external" target="_blank">Microsoft Edge — WebView2</a> <a href="#a4b3afa6-fac0-410c-94a8-943ccabbb3e9-link" aria-label="Jump to footnote reference 3">↩︎</a></li><li id="45035ef1-6da0-42aa-a135-c108a1a4fe03"><a href="https://developers.google.com/workspace/calendar/api/guides/overview" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external">Google Calendar API overview</a> <a href="#45035ef1-6da0-42aa-a135-c108a1a4fe03-link" aria-label="Jump to footnote reference 4">↩︎</a></li><li id="292ad1a3-5ee1-4db1-bfae-56e6b7e2fed1"><a href="https://learn.microsoft.com/en-us/graph/overview" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external">Overview of Microsoft Graph</a> <a href="#292ad1a3-5ee1-4db1-bfae-56e6b7e2fed1-link" aria-label="Jump to footnote reference 5">↩︎</a></li><li id="c176e362-3f76-45cc-9519-c6024acd63a0"><a href="https://www.scintilla.org/" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external">Scintilla Control</a> <a href="#c176e362-3f76-45cc-9519-c6024acd63a0-link" aria-label="Jump to footnote reference 6">↩︎</a></li><li id="55752ad3-5c83-40f8-b027-30b44f024ff9"><a href="https://www.publictalksoftware.co.uk/help-msa/msa-advanced-editor.html" target="_blank" rel="noreferrer noopener" data-wpel-link="exclude">Meeting Schedule Assistant — Script Editor</a> <a href="#55752ad3-5c83-40f8-b027-30b44f024ff9-link" aria-label="Jump to footnote reference 7">↩︎</a></li><li id="354b8384-a604-4641-958c-bdd827b29d57"><a href="https://www.publictalksoftware.co.uk/help-msa/msa-options-menu.html#APPEARANCE" target="_blank" rel="noreferrer noopener" data-wpel-link="exclude">Meeting Schedule Assistant — Appearance</a> <a href="#354b8384-a604-4641-958c-bdd827b29d57-link" aria-label="Jump to footnote reference 8">↩︎</a></li></ol>


<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://trucklesoft.org.uk/2025/04/25/the-journey-behind-meeting-schedule-assistant/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
