UI Screenshots and Descriptions

The UI is pretty functional now although I would not call it complete - but then it's designed to be extensible with plug-in panels so in a way it never will be complete.

This is the new UI implementation and is in line with the objectives of  easy customisation and extension. It is a Java implementation which will be obvious to anyone familiar with the native Java look and feel. Although using the Java Swing GUI  classes it is actually built with Jython which again is in line with the rapid construction and flexibility I want to achieve.

Several things make this design a flexible container for any radio UI.
  1. Everything is sizable and the contained controls size appropriately to their type. The right panel contains graphics and will stretch out without affecting the other panels. The centre split pane bar can be moved to give the centre pane more horizontal space. The menu will stretch a little but only take as much space as it needs.
  2. The menu to the left is where initial selections are made of what to display. The menu itself is built dynamically driven by the profile of the type of radio being used. Only those options relevent to the radio will be available - even if they have the same name for different profiles they might have completely different content.
  3. The centre panel is the content panel. This itself is a tabbed panel and is built dynamically as each option is selected from the menu. There are no real- estate issues on the number of controls or space that each panel takes as they will size appropriately or show scroll bars if the space is insufficient. Creating new panels in straight forward as all the patterns are established and most of the needed events are also probably supported.
  4. All panels can be floated and sized independently. Thus a content pane could be anything with no limit on size, just drag it out and size it separately.
The following shots show various aspects of the displays together with the main radio panel.  The graphic displays are the latest addition and I'm pretty pleased with them for several reasons. I actually managed to stick with it  and got them to a good state rather than fly off onto something more interesting. Second I didn't have to break the architecture in any way.  The display , including the meter is written entirely in Jython and gets its data via JNI from shared memory. Particularly pleasing is that the UI takes only 15-20% of my CPU and the whole distributed system still runs perfectly well co-located on my laptop. The display and meter are not calibrated by the way. There is a calibration page that is generated automatically (see the discussion in Design Notes, which is now extended to internal options). The meter has all the RX  metering functions but there is no TX metering yet. I'm not saying this is the last word in the displays area, but it's a good functional start  and I've made sure all the implemented features work correctly. The only interaction feature is click-tune. I expect to do a lot more in this area later on.

Most shots show the general radio panel with main receiver and 3 sub-receivers. I will eventually write different main panels for different function or look and feel, for example I might want just a main receiver with everthing accessible by buttons. Panels can be put together very quickly and they will all play together, that is they will all receive relevent updates.  

The main receiver which is the middle area of the center panel is always on. The botton area is a sub-receiver which is selected by the check boxes in the table. The labels are truncated unless they are dragged out a little. The three checks are Display, Active and Listen. I think they are self explanitory. Display is the one you can see and play with in the bottom area. Active means the DSP will be processing this sub-receiver and Listen means it is istening for commands from this sub-receiver. All the fields in the table are animated by playing with the radio controls and can also be set in the table and will be reflected in the radio.

This shot obviously shows the panadapter.



Same again listening to a 40M AM broadcast station.  The cursor is a cross-hair  and shows the frequency and power (the cursor does not pick up on a screen dump).




Zoom and pan work  well, with a small indicator bottom right that shows the zoom factor. I think I will probably add a pan indicator to show where  the current display area falls .



Right, this is not meant to look like this. The UI supports dual display so the upper is a spectrum and the lower a panadapter.  There seems to be an issue in the version of DttSp I am using (or maybe it's designed this way) in that  you can't alternately ask for panadapter and spectrum, otherwise you seem to get a mixture of the two. It's a not a stable picture, this is just one of its states. Hopefully when I complete my Java DSP it will support multiple concurrent displays.



Of course , as with all the panels the  display can be floated and resized to suit.. The resolution is much better with a wider display but it takes a few more % CPU.



Finally, the spectrum display. Not very exciting is it. I haven't done any others yet because they are lower down the priority list than many other things I need to get done.



This final shot shows the other  implemented panel which is additional to the main radio.

I have always been bothered by the similarity between VFO's, Band Selector, Band Stack and Memories.  All these things do no more than store operational parameters.  This little panel combines them all and this is how it works at the moment. At the top are the VFO's, under that the bands and under that a couple of general purpose memories. These are all just static data which I have put into the model. The idea is that the VFO's and bands cannot be edited in this panel. However, one of the 4 VFO's can be selected by clicking the active column (they behave like radio buttons so only one can be selected as the others get deselected). When a VFO is clicked it's operational parameters are loaded into the radio. At the bottom the selected VFO is shown and a second VFO can be selected with the 3 radio buttons (obviously these change captions appropriately). The RIT and XIT are loaded with the offsets for the selected VFO. Down at the bottom the 4 buttons at the right allow the VFO data to be swapped around and again these captions change appropriately. 

This panel can be used therefore just as a VFO manager. However, selecting a band will load the operational parameters for the band into the current VFO and the radio. The tuning range of the radio is limited to whatever the limits are set to on the selected band.

Finally the add and delete buttons to the left are for adding and deleting editable rows. Pressing add will create a new row using the current  operating parameters from the radio. The new row will be coloured gray, indicating it is editable and it will be sorted into the correct position. Thus, if within a band it will appear under the pink band row and becomes one of an arbitrary number of band stack registers. All the fields in these rows can be edited in situ by clicking the cell.  Drop-downs being used for the value ranges.






Look And Feel

The Java Swing toolkit is a lot better than most people give it credit for. I guess that's a hang-over from the early days of Java. One of the good things about a toolkit that draws it's own widgets is that it's easy to change them. Swing has pluggable look and feels and with the latest releases is skinable. For want of something else to occupy my time I've had a play with a few of the LAFs (Look And Feels)...


The screenshots above are all with the default  'Metal' which looks the same on all platforms. It's not very good and there are much better ones around.

This is the Windows LAF, still not too exciting.


How about  the Motif LAF. It's an improvement, but then that's not hard.


What about the Liquid LAF. Not bad. Sorry the colours are a bit washed out, it looks a lot better on-screen.


There are a lot of these on the Web and I only picked one (Liquid), the others are standard with the distribution. These are changed simply by putting the LAF on the class path and setting the default in the swing.properties file. I am very tempted to roll my own. One day when I have some time...

More playing, but this time I actually like what I'm seeing. The Substance LAF's at  https://substance.dev.java.net/ are just superb. Here are a few. I've taken out nearly all my color settings and just let the LAF do it's stuff. The only colors I am setting are those in the graphics areas (display and meters) as they are not affected by the LAF at all.

Along with the actual basib LAF there are loads and loads of themes (color themes that is) and also a load of skins which I haven't played with yet. I'm going with this set and will make the themes and skins avalable through the UI, so choose your own.

This is the default theme.

I prefer one of the darker themes, This is ebony.

Or, this one,  charcoal. A different view just for a change of the frequency stack.