Finally i was able to finish another release of the SteelSeries component library and again there's lot's of new stuff in here.
First of all i have made many many many changes in the code where i did not add features but only replace all full classified class descriptions by their related import statements. That tooks a lot of time and i'm sure that there are still some in there.
In addition i have also changed the placments of the braces to more common format that the open braces are placed on the same row and not in a new one. But that's only for those of you who read the code...
In addition i moved from trident animation library 6.2 to version 6.3 that you could get here.
No 3.9.4 and 3.9.5 release ?
You might ask yourself where are the 3.9.4 and 3.9.5 releases? Well the 3.9.4 was ready to go and when i took all the screenshot for this post i figured out that i missed something that i would like to add to this release so i added the feature (which was really small) and created another release which was 3.9.5. But that's not enough, again two bugs appear in the last minute and so it came finally to 3.9.6
So let's start with the news...
I removed the FrameDesign NO_FRAME from the library because it was not really needed anymore. One should use setFrameVisible(false) instead.
NEW LCD COLORS:
On the image you could see the new LcdColors in 3.9.6 which are named DARKBLUE_LCD, LILA_LCD, BLACKRED_LCD and DARKGREEN_LCD.
Because i gave some love to the DisplaySingle component i have more to show here...
LCD THRESHOLD INDICATOR:
All components that contain an LCD now supports the minValue, maxValue and threshold property. And if the current value exceeds the maxValue, a little indicator on the lower left corner of the lcd display will appear and visualize that the current value is out of range.
During a talk with my future colleagues i figured out that it might make sense to use an lcd itself to indicate the current value. In a gauge i could display sections but in an lcd what could i change to visualize the current value ???
Right the complete color of the lcd...
This means one could define now an array of Section objects and pass it to the DisplaySingle component. If the current value is in the range of a section the complete display will change it's color related to the color that is defined in the active section. Please keep in mind that this feature works best on the LcdColors BLUE2 (image above), GREEN etc. which means all monocolored LcdColors (without a glass reflection effect).
Another nice feature of the DisplaySingle that is new in this release is the QualityOverlay feature. In principle it's similar to the Sections feature that i mentioned before but in this case i use some kind of a progressbar to visualize the quality of the current value. But let's have a look...
LCD QUALITY OVERLAY:
You could imagine that this feature is only useful in special usecases but if you need it it's now available... :-)
When i was in Basel at Canoo, Dierk König mentioned that the threshold led might be to small to be recognized when not in front of the monitor and we discussed ideas on how to improve...
If you take a closer look at the gauges above you will figure out that there is an additional frame on the inside of the gauges. This frame could be made visible by using setGlowVisible(true). And if you use setGlowing(true), it will use the current glowcolor and visualize it like this...
This might be useful to visualize a certain value or threshold or whatever...
By the way...to come back to the LCD one more time...it supports the glow too... :-)
On the radial gauges you will find a new PointerType which is TYPE10. This type of pointer was created to be used on very small gauges, where the standard pointers are simply too small, so it looks like this...
POINTER TYPE 10:
On the image above you could see the new pointer type and to show you the difference i created a small gauge with the new and with a standard pointer.
Well the next new things are related to the BackgroundColor of the gauges and i have to say that the first of the following new BackgroundColors does not really fit to a gauge but someone asked for it and here we go...
The idea for the NOISY_PLASTIC came from Wolfgang Zitzelsberger of Jyloo Software (creator of the Synthetica LAF) and i saw it on their blog. I tried to get mine as good as theirs but i think their texture looks still better.
As you can see you could define the color of the texture and this is another new feature in this release, called TextureColor. The TextureColor is a standard Color that could be set and will be used to colorize the LINEN, BRUSHED_METAL and PUNCHED_SHEET texture.
Here are some examples of BRUSHED_METAL...
Well with the PUNCHED_SHEET texture it's a little bit different because in the current version of the library the texture will be created in an enum and will be used on every gauge. This means changing the texture color e.g. to red will change the texture in all gauges that are using the PUNCHED_SHEET texture.
The next thing that is available now is an additional LED which could be configured by the user, so it's called userLed. This LED will not be used by the library so you could set it visible, set on or off and let it blink. Of course one could define the color of the userLed.
So if you are in the need to have an additional indicator for whatever value, you could now use the userLed feature to visualize it.
Another new thing is the highlighting of Sections and Areas in the gauges. This means if the pointer is over a section/area that contains the current gauge value, the section/area will be highlighted.
HIGHLIGHT SECTIONS / AREAS:
In the left column on the above image you see the behaviour that you might know already, it simply shows the sections/areas that you have defined.
In the middle column you see that the green section/area is brighter than the other sections/areas because i switched on the hightlightSection/highlightArea feature of the gauges.
There is also the possibility to show only the highlighted section/area which you could see on the right column. To achieve this behaviour you just have to call setSectionsVisible(false) and setHighlightSections(true). The same will work for the areas too.
Now we are coming to an end...
The last new feature is the possibility to define so called DesignSets (2 for each gauge) and toggle between those DesignSets. So you might ask yourself for what this might be useful and here is the answer to it...
If you use a dashboard with gauges on a notebook to visualize data and you have to use the notebook outside you will define the colors of the gauges in the way that it is good readable. If you now go back inside a dark house the colors of the gauges might not fit anymore to the new surrounding brightness.
Or if you would like to use the dashboard by day and night you might need different colors for your gauges.
For reasons like that i have added the DesignSet which mainly contains the colors/designs of the frame, background, pointer, knobs, lcd and led. You could either toggle between design1 and design2 or you could call setActiveDesign() with the gauge and the design you would like to set.
Here is the code to define a DesignSet:
DesignSet night = new DesignSet.Builder().frameDesign(FrameDesign.BLACK_METAL) .backgroundColor(BackgroundColor.BLACK) .lcdColor(LcdColor.BLACK_LCD) .knobStyle(KnobStyle.BLACK) .color(ColorDef.RED) .build(); DesignSet day = new DesignSet.Builder().frameDesign(FrameDesign.SHINY_METAL) .backgroundColor(BackgroundColor.WHITE) .lcdColor(LcdColor.STANDARD_GREEN_LCD) .knobStyle(KnobStyle.SILVER) .color(ColorDef.BLUE) .ledColor(LedColor.BLUE) .build(); radial1.setDesign1(day); radial1.setDesign2(night); radial1.setActiveDesign(radial1, night); radial2.setDesign1(day); radial2.setDesign2(night); radial2.setActiveDesign(radial2, day);
I used the builder pattern to create the DesignSet so you can decide which kind of parameters you would like to store in your DesignSet.
And that's would it would look like...
Well that's it for 3.9.6, so i hope you find one or two useful new things for you in this release, which is available as binary here on the page or you could get the source from project Kenai. You also find the SteelSeries lib on Maven Central, if you search for "SteelSeries"
So keep coding...