<?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>2019r2 &#8211; Xojo Programming Blog</title>
	<atom:link href="https://blog.xojo.com/tag/2019r2/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.xojo.com</link>
	<description>Blog about the Xojo programming language and IDE</description>
	<lastBuildDate>Fri, 23 Apr 2021 15:58:37 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>Converting Code to API 2.0</title>
		<link>https://blog.xojo.com/2019/10/29/converting-code-to-api-2-0/</link>
		
		<dc:creator><![CDATA[Xojo]]></dc:creator>
		<pubDate>Tue, 29 Oct 2019 17:29:50 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[2019r2]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Xojo API 2.0]]></category>
		<category><![CDATA[Xojo IDE]]></category>
		<category><![CDATA[Xojo Programming Language]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=6175</guid>

					<description><![CDATA[2019r2 has many changes related to API 2.0. Most of your projects should open and run without any changes. You can then switch code to API 2.0 when you want (or not at all -- it's up to you). ]]></description>
										<content:encoded><![CDATA[
<p>Xojo 2019r2 has many changes related to API 2.0. Most of your projects should open and run without any changes. You can then switch code to API 2.0 when you want (or not at all &#8212; it&#8217;s up to you). </p>



<h3 class="wp-block-heading">General Tips</h3>



<p>With that said, here are a few things that you may have to update to be able to run your project using 2019r2 and later Xojo releases:</p>



<ul class="wp-block-list"><li>Some advanced properties on FolderItem have been removed.</li><li> You&#8217;ll have to use the Global prefix with the ToolTip class (or switch to new methods).</li><li> You&#8217;ll have to add the new EndOfFile method to anything that uses the Readable interface.</li></ul>



<h3 class="wp-block-heading">Converting Code to Use a New Class</h3>



<p>When converting code to use a new class that replaces a deprecated one, there are two different approaches that will help you do so efficiently.</p>



<h4 class="wp-block-heading">Method 1: <strong>Not Familiar with the New Class</strong></h4>



<p>When you’re not familiar with the new class, replace class members such as properties and methods first, before replacing the class declaration itself. This will allow you to use <a href="https://documentation.xojo.com/getting_started/using_the_ide/code_editor.html#Auto-Complete">auto-complete</a> to see which methods or properties replace the deprecated ones.</p>



<p>Consider the following code example:</p>



<pre class="wp-block-preformatted">Dim rs as RecordSet
rs =db.SQLSelect(“SELECT * FROM Customers”)
If rs &lt;&gt; nil then
While Not rs.EOF
//perform some data processing
&nbsp; rs.MoveNext
Wend
End If</pre>



<p>Deleting EOF and then pressing tab will display the auto-complete menu showing the replacement method, AfterLastRow:</p>



<figure class="wp-block-image"><img fetchpriority="high" decoding="async" width="964" height="702" src="https://blog.xojo.com/wp-content/uploads/2019/10/Screen-Shot-2019-10-25-at-3.06.08-PM.png" alt="" class="wp-image-6181" srcset="https://blog.xojo.com/wp-content/uploads/2019/10/Screen-Shot-2019-10-25-at-3.06.08-PM.png 964w, https://blog.xojo.com/wp-content/uploads/2019/10/Screen-Shot-2019-10-25-at-3.06.08-PM-300x218.png 300w, https://blog.xojo.com/wp-content/uploads/2019/10/Screen-Shot-2019-10-25-at-3.06.08-PM-768x559.png 768w" sizes="(max-width: 964px) 100vw, 964px" /></figure>



<p>Auto-complete will not replace EOF with AfterLastRow as the variable rs is still a RecordSet. However, you can manually make the change now. Once you have changed all class member references, you can then change the variable itself from RecordSet to RowSet.</p>



<h4 class="wp-block-heading">Method 2: <strong>Familiar with the New Class</strong></h4>



<p>If you are familiar with the new class, change the variable (rs in this case). Having done so, you can use auto-complete to change any class members references (properties, methods, etc.) to the new class.</p>



<p>In the beginning the changes in API 2.0 will be unfamiliar so Method 1 above will make sense. Over time you&#8217;ll be more familiar with API 2.0 and then Method 2 will work best. <em>The important thing is to remember that you can do this at your own pace. The APIs that have been replaced will continue to be available for a very long time.</em></p>



<h3 class="wp-block-heading">Summary</h3>



<p>These changes and more are described in detail in the <a href="https://documentation.xojo.com/UserGuide:API_2.0_Guidelines">API 2.0 Guidelines</a> topic in the docs. Be sure to give it a quick read to more easily get up and running with 2019r2. For other guidance on moving projects to API 2.0 to take advantage of newer features and improved naming (again, when you&#8217;re ready), be sure to read <a href="https://documentation.xojo.com/topics/api_design/moving_to_api_2.0.html">Moving to API 2.0</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Let’s talk DateTime</title>
		<link>https://blog.xojo.com/2019/10/14/lets-talk-datetime/</link>
		
		<dc:creator><![CDATA[Wayne Golding]]></dc:creator>
		<pubDate>Mon, 14 Oct 2019 19:56:38 +0000</pubDate>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[Guest Post]]></category>
		<category><![CDATA[2019r2]]></category>
		<category><![CDATA[DateTime]]></category>
		<category><![CDATA[Xojo API 2.0]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=6121</guid>

					<description><![CDATA[In Xojo Release 2019R2 a new DateTime class was introduced.  This is a Time zone aware Date Class and is immutable which is great compared to the deprecated Date class.  ]]></description>
										<content:encoded><![CDATA[
<p>In Xojo Release 2019R2 a new DateTime class was introduced.&nbsp; This is a Time zone aware Date Class and is immutable which is great compared to the deprecated Date class.&nbsp; How many of us have had issues working out why when we stepped through changing a Date it worked, but didn’t when not?&nbsp; I know I did in the early days.</p>



<p>DateTime is cool. You can create a variable that stores the date/time now with:</p>



<pre class="wp-block-preformatted">Var dt As DateTime = DateTime.Now</pre>



<p>Or:</p>



<pre class="wp-block-preformatted">Var dt As New DateTime(TimeZone.Current)</pre>



<p>The second variant allows you to simply find the date/time now in any time zone:</p>



<pre class="wp-block-preformatted">Var dt As New DateTime(New TimeZone("NZ")) ' Local time for me and Rocket Lab launch site 1</pre>



<p>Or:</p>



<pre class="wp-block-preformatted">Var dt As New DateTime(New TimeZone("UTC")) ' Local time in Greenwich</pre>



<p>Sometimes you need to calculate a date:</p>



<pre class="wp-block-preformatted">Var dt As DateTime = DateTime.Now.AddInterval(0, 1) ' today next month</pre>



<p>Or:</p>



<pre class="wp-block-preformatted">Var dt As DateTime = DateTime.Now.SubtractInterval(0, 1) ' today last month</pre>



<p>You can obviously use the components of a DateTime in your calculation, e.g. finding the 20<sup>th</sup> of next month:</p>



<pre class="wp-block-preformatted">Var dt As DateTime = DateTime.Now.AddInterval(0, 1, 20 – DateTime.Now.Day)</pre>



<p>DateTime is based on seconds from 1970 which allows for simple conversions between TimeZones and is daylight savings time aware.</p>



<p>How awesome is this?</p>



<p><em>Wayne Golding has been a Xojo developer since 2005. He operates the IT Company Axis Direct Ltd www.axisdirect.nz which primarily develops applications using Xojo that integrate with Xero www.xero.com.  Wayne’s hobby is robotics where he uses Xojo to build applications for his Raspberry Pi, often implementing IoT for remote control.</em></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Use Doc Categories to Find Information Fast</title>
		<link>https://blog.xojo.com/2019/10/09/use-doc-categories-to-find-information-fast/</link>
		
		<dc:creator><![CDATA[Paul Lefebvre]]></dc:creator>
		<pubDate>Wed, 09 Oct 2019 16:44:52 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[2019r2]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Documentation]]></category>
		<category><![CDATA[Xojo API 2.0]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=6110</guid>

					<description><![CDATA[The Xojo Doc site has several thousand pages of information. To make it easier to quickly find things in the online docs, topics are categorized. You can find categories that a topic belongs to at the bottom of its page. ]]></description>
										<content:encoded><![CDATA[
<p>The <a href="https://documentation.xojo.com">Xojo Doc site</a> has several thousand pages of information. To make it easier to quickly find things in the online docs, topics are categorized. You can find categories that a topic belongs to at the bottom of its page. Here are several useful categories to start with.</p>



<h3 class="wp-block-heading">API 2.0</h3>



<p>You can use this category to show all API 2.0 items across all releases, which is quite useful with the release of 2019r2:</p>



<p><a href="https://documentation.xojo.com/Category:API_2.0">https://documentation.xojo.com/Category:API_2.0</a></p>



<h3 class="wp-block-heading">All Deprecated</h3>



<p>Use this category to show all deprecated items across all releases:</p>



<p><a href="https://documentation.xojo.com/Category:Deprecated">https://documentation.xojo.com/Category:Deprecated</a></p>



<h3 class="wp-block-heading">All Deprecated for a single release</h3>



<p>This category to shows all deprecated items for a specific release:</p>



<p><a href="https://documentation.xojo.com/Category:Deprecated2019r2">https://documentation.xojo.com/Category:Deprecated2019r2</a></p>



<p>Change the release value to see other releases.</p>



<h3 class="wp-block-heading">All New for a single release</h3>



<p>Use this category to show all new items for a specific release:</p>



<p><a href="https://documentation.xojo.com/Category:New2019r2">https://documentation.xojo.com/Category:New2019r2</a></p>



<p>Change the release value to see other releases.</p>



<h3 class="wp-block-heading">Show All User Guide topics</h3>



<p>This category displays all pages that are part of the User Guide:</p>



<p><a href="https://documentation.xojo.com/Category:User_Guide">https://documentation.xojo.com/Category:User_Guide</a></p>



<h3 class="wp-block-heading">Show All Categories</h3>



<p>There are many more categories. You can use this link to see them all:</p>



<p><a href="https://documentation.xojo.com/Special:Categories">https://documentation.xojo.com/Special:Categories</a></p>



<p>Or as mentioned earlier, at the bottom of each topic page you can view the list of categories to which it belongs. Jumping to other categories can help you find other related information for quickly.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Improved Layout Position Locking</title>
		<link>https://blog.xojo.com/2019/10/09/improved-layout-position-locking/</link>
		
		<dc:creator><![CDATA[Greg O'Lone]]></dc:creator>
		<pubDate>Wed, 09 Oct 2019 11:30:56 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[2019r2]]></category>
		<category><![CDATA[Layout Editor]]></category>
		<category><![CDATA[Xojo API 2.0]]></category>
		<category><![CDATA[Xojo Programming Language]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=6051</guid>

					<description><![CDATA[Among the many IDE improvements in 2019r2 we've made some improvements in how the Control Layout Locks work so even if a control is locked, it'll still obey the left/top/right/bottom alignment locks. We are taking some hints from the way many graphic design programs approach this and we think it'll be a big improvement to the way controls are organized on Windows and Containers. ]]></description>
										<content:encoded><![CDATA[<p>Among the many IDE improvements in 2019r2 we&#8217;ve made some improvements in how the Control Layout Locks work so even if a control is locked, it&#8217;ll still obey the left/top/right/bottom alignment locks. We are taking some hints from the way many graphic design programs approach this and we think it&#8217;ll be a big improvement to the way controls are organized on Windows and Containers.&nbsp;</p>
<h3>Positioning</h3>
<p>First of all, the primary function of Position Locking in the IDE is to prevent accidentally moving controls that you&#8217;ve already placed on a Window or Container. For users with very complex layouts and layers of overlapping controls, this feature is a must.</p>
<p>In previous versions of the IDE when you lock a control&#8217;s layout position, it stays in that position no matter what, and while that <em>sounds</em> like the desired result, it does have some not-so-desirable side effects, the least of which is that the control no longer obeys runtime control locking. If you follow these steps in 2019r1.1, you get a very strange result:</p>
<ol>
<li>Create a new Desktop Project.</li>
<li>In Window1, drag a Canvas control to the lower-right corner of the window.</li>
<li>Set the control locking in the inspector so that only the right and bottom sides are locked.</li>
<li>Right-click the control and select &#8220;Lock Position&#8221;</li>
<li>Resize the Window by dragging the lower-right handle</li>
</ol>
<p>In 2019r1.1 and below, the Canvas acts like it&#8217;s locked on the top-left corner and stays at the same x and y position as when you locked it. If you do these same steps in 2019r2, the control now follows it&#8217;s runtime locking rules and stays with the lower-right corner of the Window.&nbsp;</p>
<h3>Alignment</h3>
<p>The second issue we had was that Position Locking did not affect the alignment tools. Previously, if you selected one or more controls whose positions were locked, the alignment toolbar buttons were always enabled, but clicking them didn&#8217;t affect all locked controls. Instead, the IDE would figure out the outer bounds of all selected controls and move the unlocked controls to align with this boundary. This leads to unexpected results if one or more locked controls are selected because they don&#8217;t move.&nbsp;</p>
<p>Starting in 2019r2, the rules for alignment have changed somewhat.</p>
<ul>
<li>The alignment controls are now only enabled if you have <em>at most</em> one locked control selected.&nbsp;</li>
<li>If no locked controls are selected, the IDE will align controls using the outer boundary of all selected controls as a guide, just like it did before.</li>
<li>If a locked control <em>is</em> selected, the controls will be aligned <em>to that control</em>.</li>
</ul>


<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>2019r2 Debugger Improvements</title>
		<link>https://blog.xojo.com/2019/10/09/2019r2-debugger-improvements/</link>
		
		<dc:creator><![CDATA[Paul Lefebvre]]></dc:creator>
		<pubDate>Wed, 09 Oct 2019 11:30:05 +0000</pubDate>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[2019r2]]></category>
		<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Remote Debugging]]></category>
		<category><![CDATA[Xojo API 2.0]]></category>
		<category><![CDATA[Xojo IDE]]></category>
		<category><![CDATA[Xojo Programming Language]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=6057</guid>

					<description><![CDATA[At XDC 2019, I did a session called Avoiding Troubleshooting Troubles, which was essentially about ways to take advantage of the Xojo debugger. During the&#8230;]]></description>
										<content:encoded><![CDATA[
<p>At XDC 2019, I did a session called <em>Avoiding Troubleshooting Troubles</em>, which was essentially about ways to take advantage of the Xojo debugger. During the session, someone (I apologize, but I&#8217;ve forgotten who it was) asked if the debugger had a way to temporarily disable breakpoints to make it easier to test. The reasoning was that sometimes you want to test a fix without the debugger stopping all the time and don&#8217;t want to clear all of your carefully placed breakpoints.</p>



<div class="wp-block-image"><figure class="alignright is-resized"><img decoding="async" src="https://blog.xojo.com/wp-content/uploads/2019/09/image.png" alt="" class="wp-image-6058" width="192" height="215" srcset="https://blog.xojo.com/wp-content/uploads/2019/09/image.png 766w, https://blog.xojo.com/wp-content/uploads/2019/09/image-267x300.png 267w" sizes="(max-width: 192px) 100vw, 192px" /><figcaption>Ignore All Breakpoints</figcaption></figure></div>



<p>At that time, Xojo did not have this feature, but I did say that I thought it sounded pretty useful.</p>



<p>I&#8217;m happy to let you know that as of 2019r2, Xojo now has this feature. We call it <strong>Ignore All Breakpoints</strong> and you can turn it on or off from the Project -&gt; Breakpoint -&gt; Ignore All menu. A checkmark appears next to this menu when Ignore breakpoints is active. And when active, Xojo will not stop at any of your breakpoints. You can turn it on or off during the debug run as needed.</p>



<p>2019r2 also has a couple other improvements to the debugger as well:</p>



<ul class="wp-block-list"><li>The debugger no longer stops at breakpoints within encrypted classes. This was not helpful and actually rather confusing since you couldn&#8217;t see the code.</li><li>Breakpoints set within a Module Class Method during a debugging session now properly break in the debugger.</li></ul>



<p>Xojo 2019 Release 2 has lots of new features and improvements, so be sure to <a href="https://www.xojo.com/download/">download</a> it today and review the full <a href="http://documentation.xojo.com/Resources:2019r2_Release_Notes">Release Notes</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>New DateTime Class</title>
		<link>https://blog.xojo.com/2019/10/09/new-datetime-class/</link>
		
		<dc:creator><![CDATA[William Yu]]></dc:creator>
		<pubDate>Wed, 09 Oct 2019 11:00:57 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[2019r2]]></category>
		<category><![CDATA[DateTime]]></category>
		<category><![CDATA[TimeZone]]></category>
		<category><![CDATA[Xojo API 2.0]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=6075</guid>

					<description><![CDATA[The New DateTime class introduced in Xojo 2019r2 is meant as a replacement for the now deprecated Date class. Let&#8217;s take a look at how&#8230;]]></description>
										<content:encoded><![CDATA[
<p>The New DateTime class introduced in Xojo 2019r2 is meant as a replacement for the now deprecated Date class.  Let&#8217;s take a look at how these two classes compare:</p>



<h3 class="wp-block-heading"><strong>Date</strong></h3>



<ul class="wp-block-list"><li>Mutable (you can change any of its properties without having to create a new Date)</li></ul>



<p>On the surface this sounds great, but you can get into some ambiguous Dates depending on the order of operation, for example:<br><pre>Dim d As New Date(2019, 2, 28)    // February 28, 2019<br>d.Day = 31   // February 31, 2019?<br>d.Month = 3</pre></p>



<p>In reality since February 31 is not a valid date we have to coerce it into one, in this case we roll over as 3 days into March, so after the Day has been set to 31 the actual date is now March 3, 2019, probably not what the user intended.</p>



<ul class="wp-block-list"><li>Uses local TimeZone (no way to use a different TimeZone)</li></ul>



<p>Consider living in California and trying to determine the time in New York.  With the Date class you&#8217;d have to calculate the time offset yourself.</p>



<ul class="wp-block-list"><li>Uses current locale for date string formatting (no way to use a different locale)</li></ul>



<p>If you&#8217;re trying to display something for your French or Spanish speaking compadre and you&#8217;re on a English speaking region, you&#8217;d have to format the date yourself.</p>



<ul class="wp-block-list"><li>Fixed GMTOffset (no understanding of daylight savings rollover)</li></ul>



<p>The GMTOffset is always the current TimeZone offset, unless its has been specifically set in one of the Date constructors.</p>



<h3 class="wp-block-heading"><strong>DateTime</strong></h3>



<ul class="wp-block-list"><li>Immutable (none of its properties can be modified, you&#8217;d have to create a new DateTime)</li></ul>



<p>While this may seem more restrictive, this provides protection against setting ambiguous dates.  You can use DateInterval and/or DateTime.AddInterval to manipulate the date which is returned as a new DateTime object.</p>



<ul class="wp-block-list"><li>TimeZone savvy</li></ul>



<p>Each DateTime object can be associated with a different TimeZone.  For a list of all the supported TimeZone names, see:<br> <a href="https://docs.oracle.com/cd/E41183_01/DR/ICU_Time_Zones.html">https://docs.oracle.com/cd/E41183_01/DR/ICU_Time_Zones.html</a></p>



<ul class="wp-block-list"><li>Date formats are locale savvy</li></ul>



<p>Instead of being tied to presenting a date string in the current locale, you can specify a different locale in which to display your formatted date string.</p>



<ul class="wp-block-list"><li>Daylight savings aware</li></ul>



<p>A TimeZone is always associated with a DateTime object (if none is specified then the current TimeZone is used), you can use the TimeZone.SecondsFromGMTOffset to determine if the Date is in daylight savings.</p>



<p><strong>Daylight savings boundary behavior</strong></p>



<p>When daylight savings end on November 3, 2019 at 2:00am the date will fall back one hour so we really are on November 3, 2019 at 1:00am.  So how does Xojo handle the case where a user sets the date to be November 3, 2019 at 1:00am?  Is it just before daylight savings or after?  The answer is, after, with the TimeZone GMTOffset adjusted accordingly.</p>



<p>For more information about the new DateTime class, make sure to check out the documentation page on it:  <a href="http://documentation.xojo.com/api/deprecated/date.htmlTime">http://documentation.xojo.com/api/deprecated/date.htmlTime</a> </p>


]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Xojo IDE Improvements: Speed, Tab Management, Menus &#038; More</title>
		<link>https://blog.xojo.com/2019/10/09/xojo-ide-improvements-speed-tab-management-menus-more/</link>
		
		<dc:creator><![CDATA[Greg O'Lone]]></dc:creator>
		<pubDate>Wed, 09 Oct 2019 10:25:41 +0000</pubDate>
				<category><![CDATA[Cross-Platform]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Learning]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[2019r2]]></category>
		<category><![CDATA[DarkMode]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[Xojo API 2.0]]></category>
		<category><![CDATA[Xojo IDE]]></category>
		<category><![CDATA[Xojo Programming Language]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=5837</guid>

					<description><![CDATA[Keeping the IDE simple to use for new users is one of our core tenets, but that doesn't mean that we can't add some much needed capabilities for our long-term users. ]]></description>
										<content:encoded><![CDATA[
<p>Keeping the IDE simple to use for new users is one of our core tenets, but that doesn&#8217;t mean that we can&#8217;t add some much needed capabilities for our long-term users. This cycle we&#8217;ve added some new exciting capabilities for managing medium to large-size projects and made some overall improvements that make the Xojo IDE a lot more satisfying to use. To be honest, the more of these things we added the less I wanted to go back to using older versions of the IDE.</p>



<p><strong>Improved Overall Speed</strong><br>One of the most obvious areas that hurt people with large projects is the speed of the IDE itself. We worked on a number of pain points to improve the overall IDE experience.  Specifically, we were looking for things which by themselves were not too bad, but in a cumulative effect they could take large chunks out of your day.</p>



<p>One such area was in saving text projects. Now you wouldn&#8217;t think that there was much room for improvement here, since it&#8217;s just File I/O right? We found an optimization point in the way we save Bookmarks and Breakpoints, which in the IDE project represents a huge savings when making lots of changes. In our case, we went from 30 seconds down to 1, and for someone who insists on saving before every run, it makes a huge difference.</p>



<p>We also optimized drawing in the Navigator, and that change resulted in huge overall speed increases in many parts of the IDE, from selecting large number of items in the Navigator itself, making changes to multiple items, to even just typing code in the code editor.</p>



<p><strong>Improved Tab Management</strong><br>Tabs have been broken in one way or another for a long time. They finally got some TLC this cycle and we think you&#8217;re going to be much happier with the way they work now. We&#8217;ve rewritten the logic surrounding how tabs are chosen when you take an action which results in a new location request and made the behavior consistent, no matter where that request comes from. Whether that&#8217;s a Go To Location request or a search or clicking on an error result. The rules are applied in the following order:</p>



<ol class="wp-block-list"><li>If there is at least one <em>locked</em> <em>tab</em> which matches the Go To target, the first one will be used (left to right).</li><li>If there is at least one <em>unlocked</em> <em>tab</em> which matches the Go To target, the first one will be replaced.</li><li>If the <em>current</em> tab is unlocked, it will be replaced with the new location.</li><li>If there are <em>any</em> unlocked tabs, the first one will be replaced.</li><li>If none of the above conditions are met, a new tab will be created for the target location.</li></ol>



<p class="has-text-color has-regular-font-size has-vivid-red-color">NOTE: Debugger Tabs are <em>never</em> eligible as a Go To target. This may seem obvious, but it wasn&#8217;t always true before. Now it is. Debugger tabs are also locked by default and cannot be unlocked.</p>



<p>The only exceptions to these rules are the Open In New Tab rules. That is, if you right-click on an item and select Open In New Tab or you double-click on an item with the &#8220;Double-click opens item in new tab&#8221; preference set, they will always open a new tab for you.</p>



<p>Once you start using the new logic, I think you&#8217;ll agree that it&#8217;s much more intuitive and you won&#8217;t feel like the IDE is constantly switching contexts on you. Personally I find that I&#8217;m using <em>fewer</em> tabs than in previous versions because I&#8217;m more confident that the objects I opened will still be there when I get back.</p>



<p><strong>MacOS Dark Mode Layout Editor Toggling</strong><br>On macOS 10.14 and above we&#8217;ve added a new toolbar button which allows you to quickly switch the Window you are editing between light and dark mode. No more switching your entire OS just to see how your app will look in the other mode.</p>



<p><strong>Navigator Contextual Menu</strong><br>We&#8217;ve done some cleanup work here to make it more obvious what you can and can&#8217;t do with objects in the Navigator. Gone are all of the disabled items that were not &#8220;in-context&#8221; for the currently selected item because, well duh, they&#8217;re not &#8220;in-context&#8221;. We&#8217;ve also enhanced the Edit Superclass and Edit Subclass menus. Edit Superclass now shows the entire superclass hierarchy, including things that you can&#8217;t edit (disabled of course) so you can track down common parentage. The Edit Subclass menu has been alphabetized so you don&#8217;t have to read the entire list just to find all of the items that begin with &#8220;c&#8221;.</p>



<p><strong>Code Editor Contextual Menu</strong><br>This menu has also gotten some love and attention. First of all, the menu has been reorganized so that the menu groups are based on the context of the thing that you&#8217;ve clicked on and the object where the code itself lives.</p>



<p>Group 1: Just like previous versions of the IDE, Cut, Copy, Paste, Delete and Select All are still at the top of the menu. They&#8217;re a common thing for mouse oriented users and we don&#8217;t want to hurt that functionality.</p>



<p>Group 2: The next group is for things that are for accessing or modifying the object that you&#8217;re currently editing. This is where you&#8217;ll find the Switch To menu for directly accessing the other code items within the current item. </p>



<p>We&#8217;ve also added two new submenus to this section that are specifically for copying the event and delegate signatures of <em>the thing you&#8217;ve clicked</em> <em>on</em>. For example if your code refers to a <strong>URLConnection</strong> object, you can now right-click on URLConnection and select <strong>Add Method</strong> &gt; <strong>From Event</strong> &gt; <strong>ContentReceived</strong> and the IDE will automatically add a method to the current object with the same signature including the object itself for use with AddHandler! In this case, you&#8217;d end up with a method that looks like this:</p>



<p><br><code>URLConnection_ContentReceived(obj As URLConnection, URL As String, HTTPStatus As Integer, content As String)</code></p>



<p>Then you could type something like:</p>



<p><br><code>AddHandler h.ContentReceived, AddressOf URLConnection_ContentReceived</code></p>



<p>Delegates work the same way, albeit without including the object reference in the method signature. No more flipping back and forth between your current code and the target object or Language Reference to copy the signatures!</p>



<p>Group 3: If it exists, this group is for things that are specific to the object or instance of the object that you clicked on in the code editor. This is where you&#8217;ll see the &#8220;Find&#8221; and &#8220;Go To&#8221; menu items for finding other uses of or going to the definition of an item, respectively. </p>



<p>Group 4: This group is for selection and code-specific tools including the <strong>Insert Color</strong> command, <strong>Standardize Format</strong> and the <strong>Wrap In</strong> menus for wrapping the current selection if an #If #EndIf or While/Wend block. This section also sports the menu for converting the current selection to a Constant or a Method.</p>



<p>Group 5: From here you can toggle Breakpoints and Bookmarks</p>



<p>Group 6: Help and Language Reference access.</p>



<p>For more information about the changes in 2019r2, read the full <a href="http://documentation.xojo.com/Resources:2019r2_Release_Notes">Release Notes</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
