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. This cycle we’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.
Improved Overall Speed
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.
One such area was in saving text projects. Now you wouldn’t think that there was much room for improvement here, since it’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.
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.
Improved Tab Management
Tabs have been broken in one way or another for a long time. They finally got some TLC this cycle and we think you’re going to be much happier with the way they work now. We’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’s a Go To Location request or a search or clicking on an error result. The rules are applied in the following order:
- If there is at least one locked tab which matches the Go To target, the first one will be used (left to right).
- If there is at least one unlocked tab which matches the Go To target, the first one will be replaced.
- If the current tab is unlocked, it will be replaced with the new location.
- If there are any unlocked tabs, the first one will be replaced.
- If none of the above conditions are met, a new tab will be created for the target location.
NOTE: Debugger Tabs are never eligible as a Go To target. This may seem obvious, but it wasn’t always true before. Now it is. Debugger tabs are also locked by default and cannot be unlocked.
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 “Double-click opens item in new tab” preference set, they will always open a new tab for you.
Once you start using the new logic, I think you’ll agree that it’s much more intuitive and you won’t feel like the IDE is constantly switching contexts on you. Personally I find that I’m using fewer tabs than in previous versions because I’m more confident that the objects I opened will still be there when I get back.
MacOS Dark Mode Layout Editor Toggling
On macOS 10.14 and above we’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.
Navigator Contextual Menu
We’ve done some cleanup work here to make it more obvious what you can and can’t do with objects in the Navigator. Gone are all of the disabled items that were not “in-context” for the currently selected item because, well duh, they’re not “in-context”. We’ve also enhanced the Edit Superclass and Edit Subclass menus. Edit Superclass now shows the entire superclass hierarchy, including things that you can’t edit (disabled of course) so you can track down common parentage. The Edit Subclass menu has been alphabetized so you don’t have to read the entire list just to find all of the items that begin with “c”.
Code Editor Contextual Menu
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’ve clicked on and the object where the code itself lives.
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’re a common thing for mouse oriented users and we don’t want to hurt that functionality.
Group 2: The next group is for things that are for accessing or modifying the object that you’re currently editing. This is where you’ll find the Switch To menu for directly accessing the other code items within the current item.
We’ve also added two new submenus to this section that are specifically for copying the event and delegate signatures of the thing you’ve clicked on. For example if your code refers to a URLConnection object, you can now right-click on URLConnection and select Add Method > From Event > ContentReceived 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’d end up with a method that looks like this:
URLConnection_ContentReceived(obj As URLConnection, URL As String, HTTPStatus As Integer, content As String)
Then you could type something like:
AddHandler h.ContentReceived, AddressOf URLConnection_ContentReceived
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!
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’ll see the “Find” and “Go To” menu items for finding other uses of or going to the definition of an item, respectively.
Group 4: This group is for selection and code-specific tools including the Insert Color command, Standardize Format and the Wrap In 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.
Group 5: From here you can toggle Breakpoints and Bookmarks
Group 6: Help and Language Reference access.
For more information about the changes in 2019r2, read the full Release Notes.