I’ve been using Xojo since it was first released to Alpha testers in early 2013. There are many things I like about Xojo but the Navigator isn’t one of them. In fact, the more I use it the more I despise it. The reasons are many and varied and in talking with other long-term users they have their own hot button list.
Lets give a little history of what the Navigator replaced. In REALbasic and Real Studio there was always one tab that could not be closed – ever. This was the Project Tab and it only contained the project items in your project. This included windows, menubars, the application class, any classes or subclasses you created, interfaces, Build Automation steps, etc. You can then organize however you wanted by recording them and adding folders for organization.
The interface was simple. You double-clicked on an object and it opened in a new tab into whatever editor was required. Very simple but many developers, myself included, commented on what a pain it was to manage the resulting tabs. You’d open objects and eventually you’d run out of tab space or the tabs were so tiny you couldn’t read the names of them.
But there were built-in ways to help manage tabs. Contextual menus let you close other tabs, or all tabs (except the Project Tab) and, in general, it wasn’t difficult to deal with. It was simple and there was a very clear division. The Project tab always had objects and once you double-clicked into it you were taken to an editor. That might be the Layout, Code, or Menu editor where you got into the details of that object.
In Xojo they introduced the Navigator and it was supposed to make our lives easier and eliminate those pesky tabs. It contained every item in your project. Not only all the objects, but you can expand the object to see every control, method, event, constant and property. As you double-click the object tree it exposed more level of detail. Click on a control on a Window or Page and it opens the Layout Editor. Expand the control to show an Event and click on it and it opens the Code Editor.
All-in-all it *sounds* like an improvement, right? In my not so humble opinion, absolutely not. Any project of any size will contains hundreds of objects. Each of those objects could have dozens or more other objects and depending upon what the object is (like say a module) it could conceivably contain thousands of additional objects.
Meanwhile, this simple hierarchical list keeps getting larger and larger as you keep expanding objects. The scrollbar thumb keeps getting smaller and smaller until it’s as small as it can get. This means your list is freaking huge! Conceivably you have all your widows in a single folder but now the listbox subclass you’ve been working on is somewhere in this huge list. Good luck finding it by scrolling through the list.
Despite the fact that tab management was a factor in designing the Navigator, Xojo still lets you put objects in tabs. There are two ways to do this. The first is to contextual click on the object and say open in new tab. The other way is to set it in Preferences to open double-clicks into a new tab.
Currently, double clicking on headers (like Events, Methods, Properties, etc) also opens into a new tab rather than just expanding that section (in the same tab). Tab locks are supposed to keep you from navigating away from the object but this doesn’t work in R1 and R2. Presumably this will get fixed at some point but these two bugs make tabs less than ideal and difficult to use.
After months of working with Xojo I find myself getting lost a lot and trying to ‘find’ where I am. In the effort to make this easier they added filter field so we can easily find our objects in the list. It works but there’s a caveat. If you’re trying to find that lisbox subclass buried in the list searching for ‘list’ will bring up every object, method, property, etc., that contains ‘list’ in the name – and you’ve lost the hierarchy so you’ve lost context even though the name is fully resolved.
Because the Library doesn’t hold your control subclasses (like the old Real Studio control palette) you have go hunt them down in the Navigator. If anything, this is the one spot where the filter works well…assuming you know the name of your control. For us this isn’t a big deal because we (mostly) adhere to fairly strict naming conventions but I know plenty of people don’t and if you’re using 3rd party controls who knows what their naming conventions are.
One of the nice things about the Navigator that the old Project tab couldn’t do was cut, copy, and paste multiple items. The Project tab only let you manipulate one object at a time where the Navigator theoretically lets you do multiple objects at once. I say theoretically because it doesn’t always work. Practically the only way I can get it to work (consistently) is if I use the contextual menu to manipulate the items. Use the keyboard shortcuts (helpfully listed in the contextual menu) and you might be duplicating an event (thus causing it to become a method and thus a compiler error later on).
The old Project tab showed you the super of all of your subclasses and showed you the interface if it had any. These were shown in columns to the right of the object name. Sadly, this was left out of the Navigator and the only way to see what the super and interface of an object is to hover the mouse over the object until the tooltip shows or select the item and view it in the Inspector (assuming its open). Even then, interfaces require yet another click to get that information in a separate dialog.
The Navigator is broken down in to three distinct groups: Contents, Build Settings, and Run. Run is only shown when the user is attempting to debug an application. You’d think this wasn’t a big deal but unfortunately finding that Run section in a big list can be challenging. One quick hint is to click the Resume button so it switches to the proper tab and highlights the Run section.
The Contents section is mainly what we’ve been talking about. You can collapse this section but I have to wonder what the point of allowing the user to collapse and expand the entire contents of the project really is. I can think of no legitimate reason other than to say that it’s possible.
The section that really burns me is Build Settings. When you click on an item in this section it forces the Inspector to open displaying the settings for that item. The Shared Settings used to be in the Application object. While one could argue that the application object wasn’t the right place to put them, they were only slightly obnoxious there. Putting them in a list that gets outrageously hard to deal with make it an odd choice.
The pseudo looking checkboxes are indeed checkboxes (no where else in all of Xojo is this control used) to control which platforms you build for. If you’ll remember this used to be in a separate dialog called Build Settings. You typically used it sparingly because how often do you need to change your app name? Again, putting this in the Navigator seems like a choice that started with the sentence, “Wouldn’t it be cool if we put dialog type information IN the Navigator?” The answer should have been a resounding no!
In Real Studio the Build Automation settings had their own object. In Xojo, they are now in the Build Settings section. This sort of makes sense as the platform choices are already there. However, when you add a Build Step to you project it’s placed in the Contents section and to use it you have to drag it into the target of your choice. This is not an immediately obvious choice. Presumably if you don’t drag it to the target of choice it performs those Build Steps for each platform (I have not tested this).
Add on top of all this is the animation in Mac OS X. Change a selection and the highlight bar gracefully transitions from the old selection to the new one. Expand an object and you can see it populate. Eye candy pure and simple and completely superfluous to me as a developer. I highly encourage you to turn Animation off. All it does is slow it down.
I remain unconvinced after half a years worth of use that, in its current form, the Navigator is worth the time and effort Xojo Inc put into it. A lot of effort went into the animation effects when basic functionality is either missing or currently broken. All-in-all the Navigator is a good concept that falls far short of expectations in the rigors of all day use on medium to large projects.
Am I wrong or do you agree? What do you love or hate about the Navigator?