MQTT.fx 1.3.1 is here!

MQTTfx_icon_256

Here’s the latest MQTT.fx (minor/bugfix) release: MQTT.fx 1.3.1!
Coming with a fixed styling of detaching panes and also some dark theme improvements.

As always you can download latest binaries/installers at mqttfx.org.

Please Report bugs and feature requests  via the issue tracker.

MQTT.fx 1.3.0 is released!

MQTTfx_icon_256

Here’s the latest MQTT.fx release: MQTT.fx 1.3.0!
I continued to spend some effort on stability and performance along with some UI additions.

As always you can download latest binaries/installers at mqttfx.org.

Please Report bugs and feature requests  via the issue tracker.

Release Notes

  • [New] Settings: Option to set buffer sizes (per topic & received messages)
  • [New] Settings: Option to set max characters of logging output console and scripting output console
  • [New] Settings: Support for dark,light and custom themes
  • [New] Bundled with JRE 1.8.0_112
  • [Fixed] memory leak in logging output console and scripting output console
  • [Fixed] Issue: autoscroll enable/disable

Performance and memory saving improvements

You can now set the size (max. characters) for the scripting output console as well as for the logging output:
mqttfx130_max_characters

And you can now set the buffer sizes for received messages and the messages history per topic:
mqttfx130_buffer_settings

Support for Color Themes

I have added an option to change the color theme of MQTT.fx.
The choice is: Light, Dark (experimental) and Custom:

mqttfx130_light_theme

mqttfx130_dark_theme

mqttfx130_custom_theme

You can start a new custom theme by choosing “Create custom CSS template” which will create a (light) color theme css template. You will be prompted with a dialog showing the actual location of the created template. A click on “Edit” opens the selected CSS file in your preferred Editor.

FontAwesomeFX 8.13 released

Just released FontAwesomeFX 8.13 to Bintray.

Revisited and updated Icon Fonts:

Font Version What's new?
FontAwesome 4.7.0 7 new icons (many thanks to Steffen for his pull-request)
525Icons 3.0 Font updated on 30-10-2016
Material Design Font 1.7.22 73 new icons
FontAwesomeFX 8.13
compile 'de.jensd:fontawesomefx-fontawesome:4.7.0'
compile 'de.jensd:fontawesomefx-icons525:3.0.0'
compile 'de.jensd:fontawesomefx-materialdesignfont:1.7.22'
compile 'de.jensd:fontawesomefx-materialicons:2.2.0-1'
compile 'de.jensd:fontawesomefx-octicons:4.3.0-1'
compile 'de.jensd:fontawesomefx-weathericons:2.0.10-1'
they all depend on:
compile 'de.jensd:fontawesomefx-commons:8.13'
optional:
compile 'de.jensd:fontawesomefx-controls:8.13'
Demo apps
de.jensd.fx.glyphs.fontawesome.demo.FontAwesomeIconsDemoApp
de.jensd.fx.glyphs.materialdesignicons.demo.MaterialDesignIconsDemoApp
de.jensd.fx.glyphs.materialicons.demo.MaterialIconsDemoApp
de.jensd.fx.glyphs.octicons.demo.OctIconsDemoApp
de.jensd.fx.glyphs.weathericons.demo.WeatherIconsDemoApp
de.jensd.fx.glyphs.icons525.demo.Icons525DemoApp

You can find the FontAwesomeFX bintray package here.

Source code available at Bitbucket

Please report issues here

fafx813

MQTT.fx 1.2.0 is here!

It’s time for the next MQTT.fx release: MQTT.fx 1.2.0!
Most of the changes are under the hood, but in fact there also some new usability improvements.

MQTTfx_icon_256

As always you can download latest binaries/installers at mqttfx.org.

Please Report bugs and feature requests  via the issue tracker.

Release Notes

  • [New] Payload can now be decoded and exported in JSON format
  • [New] Topic of received messages can now be copied (and pasted)
  • [New] Eclipse Paho 1.1.0 included
  • [New] Bundled with JRE 1.8.0_102
  • [Fixed] Memory leak in terms of received and published messages
  • [Fixed] Issue when clearing the received messages buffer
  • [Fixed] Issue when last choosen import/export location is no longer valid

Display payload as JSON

Introcuding a new payload decoding option:
decodings

Publish unformatted JSON demo message:

publish_json

Display plain JSON message:

receive_json_plain

Display formatted JSON message:

receive_json_formatted

Speaking of decoding payload: next release is going to support custom payload decoder plugins!

Copy Topic

You now can copy (and paste) the topics of received messages:

copy_topic

Introducing fontawesomefx-examples project

Some people asked me about a FontAwesomeFX tutorial.
Now I started a new project: fontawesomefx-examples at GitHub!

basic_1

The examples will always reflect the latest version of FontAwesomeFX (currently 8.12 which can be loaded from Bintray) and I am going to extend it soon to show all stuff which provided by the lib.

FontAweseomFX 8.12 release informations

FontAwesomeFX 8.12 is released!

Just released FontAwesomeFX 8.12 to Bintray.

Revisited and updated all Icon Fonts:

Font Version What's new?
FontAwesome 4.6.3 7 new icons
Material Icons 2.2.0 81 new icons
Material Design Font 1.6.50 193 new icons
Octicons 4.3.0 Icons refined (cleanup/22 icons removed)
525Icons 2.6.0 Font updated on 24-06-2016
FontAwesomeFX 8.12
compile 'de.jensd:fontawesomefx-fontawesome:4.6.3'
compile 'de.jensd:fontawesomefx-materialdesignfont:1.6.50'
compile 'de.jensd:fontawesomefx-materialicons:2.2.0'
compile 'de.jensd:fontawesomefx-octicons:4.3.0'
compile 'de.jensd:fontawesomefx-icons525:2.6.0'
compile 'de.jensd:fontawesomefx-weathericons:2.0-3'
They all depend on
compile 'de.jensd:fontawesomefx-commons:8.12'
Optional
compile 'de.jensd:fontawesomefx-controls:8.12'
Demo apps
de.jensd.fx.glyphs.fontawesome.demo.FontAwesomeIconsDemoApp
de.jensd.fx.glyphs.materialdesignicons.demo.MaterialDesignIconsDemoApp
de.jensd.fx.glyphs.materialicons.demo.MaterialIconsDemoApp
de.jensd.fx.glyphs.octicons.demo.OctIconsDemoApp
de.jensd.fx.glyphs.weathericons.demo.WeatherIconsDemoApp
de.jensd.fx.glyphs.icons525.demo.Icons525DemoApp

fafx812

Here you can find the FontAwesomeFX bintray package.

Source code available at Bitbucket

Please report issues here

FontAwesomeFX 8.11 is here!

Just uploaded FontAwesomeFX 8.11 to Bintray.

Now included:
FontAweseme 4.6.1 with 23 additional icons

and a new kid on the block:

525icons

525icons Font coming with (…surprise!) 525 icons on board.
Due to naming conventions and restrictions 525icons related stuff is called “icons525” in FontAwesomeFX, e.g. de.jensd.fx.glyphs.icons525.Icons525.

FontAwesomeFX 8.11

compile ‘de.jensd:fontawesomefx-fontawesome:4.6.1-2’
compile ‘de.jensd:fontawesomefx-materialdesignfont:1.4.57-2’
compile ‘de.jensd:fontawesomefx-materialicons:2.1-2’
compile ‘de.jensd:fontawesomefx-octicons:3.3.0-2’
compile ‘de.jensd:fontawesomefx-weathericons:2.0-2’
compile ‘de.jensd:fontawesomefx-icons525:2.0-2’

They all depend on

compile ‘de.jensd:fontawesomefx-commons:8.11’

Optional

compile ‘de.jensd:fontawesomefx-controls:8.11’

Demo apps

Did you know there is a little test app included in each font artifact?

de.jensd.fx.glyphs.fontawesome.demo.FontAwesomeIconsDemoApp
de.jensd.fx.glyphs.materialdesignicons.demo.MaterialDesignIconsDemoApp
de.jensd.fx.glyphs.materialicons.demo.MaterialIconsDemoApp
de.jensd.fx.glyphs.octicons.demo.OctIconsDemoApp
de.jensd.fx.glyphs.weathericons.demo.WeatherIconsDemoApp
de.jensd.fx.glyphs.icons525.demo.Icons525DemoApp

525icons2

Here you can find the bintray package.

Sources are here at Bitbucket

Report issues here

Button of Choice: Use ToggleButtons as RadioButtons

For MQTT.fx I wanted to use ToggleButtons to e.g. choose the de
coding of a MQTT Message or the QoS Level:

decode

qos

 

I found out that in context of a ToggleGroup ToggleButtons behave different than RadioButtons in terms of selection/deselection: unlike RadioButtons ToggleButtons can still be set to unselected state.

 

A RadioButton extends ToggleButton and overrides fire() (which is invoked when a user gesture indicates that an event for this ButtonBase should occur aka “Button was clicked”):
RadioButton:

@Override public void fire() {
  // we don't toggle from selected to not selected if part of a group
  if (getToggleGroup() == null || !isSelected()) {
    super.fire();
  }
}

ToggleButton:

@Override public void fire() {
  setSelected(!isSelected());
  fireEvent(new ActionEvent());
}

In a ToogleGroup ToggleButtons should behave like RadioButtons, so IMHO this is a bug worth a pull request for ToggleButton 😉

One way to handle this is for sure to create a custom extension of ToggleButton implementing fire() in respect to the RadioButton.
But I like more to add behavior to existing controls.
This is my tweak to modify default behavior by adding filters to all ToogleButtons of a ToggleGroup consuming unwanted MouseEvents:

public class JavaFXUtil {

    private static JavaFXUtil me;

    private JavaFXUtil() {
    }

    public static JavaFXUtil get() {
        if (me == null) {
            me = new JavaFXUtil();
        }
        return me;
    }

    public EventHandler<MouseEvent> consumeMouseEventfilter = (MouseEvent mouseEvent) -> {
        if (((Toggle) mouseEvent.getSource()).isSelected()) {
            mouseEvent.consume();
        }
    };

    public void addAlwaysOneSelectedSupport(final ToggleGroup toggleGroup) {
        toggleGroup.getToggles().addListener((Change<? extends Toggle> c) -> {
            while (c.next()) {
                for (final Toggle addedToggle : c.getAddedSubList()) {
                    addConsumeMouseEventfilter(addedToggle);
                }
            }
        });
        toggleGroup.getToggles().forEach(t -> {
            addConsumeMouseEventfilter(t);
        });
    }

    private void addConsumeMouseEventfilter(Toggle toggle) {
        ((ToggleButton) toggle).addEventFilter(MouseEvent.MOUSE_PRESSED, consumeMouseEventfilter);
        ((ToggleButton) toggle).addEventFilter(MouseEvent.MOUSE_RELEASED, consumeMouseEventfilter);
        ((ToggleButton) toggle).addEventFilter(MouseEvent.MOUSE_CLICKED, consumeMouseEventfilter);
    }

}
public class ButtonDemoController {
    @FXML
    private ToggleGroup g2;

    @FXML
    private ToggleGroup g3;

    public void initialize() {
        JavaFXUtil.get().addAlwaysOneSelectedSupport(g2);
        JavaFXUtil.get().addAlwaysOneSelectedSupport(g3);
    }

}

buttonofchoice

Example code at GitHub.

FontAwesomeFX 8.10: The artefacts act

Recently I created a demo an wanted to use just one FontAwesome icon and I notices that I need to add the whole ~600KB package for that. Clearly the package size is driven by the all the contained True Type Font files:

de.jensd:fontawesomefx-fontawesomefx:8.9 571 KB

So I thought about split the full package into separated artifacts per icon font: smaller footprint and easier to update (also the package versioning reflects the icon font version)

Coming with FontAwesomeFX 8.10

de.jensd:fontawesomefx-fontawesome:4.5.0 115.7 KB
de.jensd:fontawesomefx-materialdesignfont:1.4.57 246.4 KB
de.jensd:fontawesomefx-materialicons:2.1 92.2 KB
de.jensd:fontawesomefx-octicons:3.3.0 29.9 KB
de.jensd:fontawesomefx-weathericons:2.0 2.0 KB

PLUS:

de.jensd:fontawesomefx-common:8.10 13.4 KB

and optional:

de.jensd:fontawesomefx-controls:8.10 3.4 KB

Usage

E.g. to use WeatherIcons in your app you just have to add

repositories {
 jcenter()
}

dependencies {
 compile 'de.jensd:fontawesomefx-weathericons:2.0'
}

to your build.gradle and you are done with 16KB (font-pack + common) additional footprint.

wathericonsdemo

You can run contained demo by calling: de.jensd.fx.glyphs.weathericons.demo.WeatherIconsDemoApp

Please give it a try and feed me back if it works!

Next steps are:

  • rename it from FontAwesomeFX to e.g. IconsFX (in respect to the other supportet icon fonts) and
  • focus on Java9 and JigSaw….

Here you can find the new bintray package.

Sources are here at Bitbucket

Report issues here

New release: MQTT.fx 1.1.0

It is about 4 month since the last MQTT.fx release (1.0.0 in last December) as I was quite busy as of my current project. Anyway I found some (night-) time to work on bug fixes and new features and I am happy to release now MQTT.fx 1.1.0!

You can download latest binaries/installers at mqttfx.org.

[UPDATE]
I have updated the native/bundles installers for OSX & Windows now powered by install4j_large

Please Report bugs and feature requests  via the issue tracker.

Release Notes Version 1.1.0

  • [New] MQTT.fx now has a new fancy icon: Many thanks to Gerrit Grunwald (@hansolo_)!
  • [New] All new “Subscribe” tab:
    • New rendering of subscribed topics.
    • New rendering of receivied messages.
    • Support for “autoscroll”: Always scroll down to latest recevied message and show the details.
    • Message Payload can now be shown as plain text, hex (fomatted) and Base64.
    • Payload can now be saved as raw (binary), plain text, hex (fomatted) and Base64 encoded.
    • Issue #75: Added an option to ‘mute’ topics for temporary ‘no-show’ received messages (per topic)
    • Added experimental support for dumping messages payload.
  • [New] Issue #70: Support for import/export of ConnectionProfiles
  • [New] Issue #71: Support for import/export of Clipboard Messages (publish messages)
  • [New] Issue #76: Support for import/export of Topics (respectively for publish and subscribe)
  • [New] Extended Scripting API: publish() and subscribe() now also supports “QoS” and “Retained”
  • [New] Option to clear Messages Clipboard
  • [New] Option to clear/keep Messages Buffer on unsubscribe
  • [New] Several style and rendering improvements
  • [New] Bundled with JRE 1.8.0_74
  • [Fixed] Issues with global application logging

 

MQTT.fx now has a new fancy icon

MQTTfx_icon_256

Kudos and many thanks to Gerrit Grunwald (@hansolo_) for creating and sharing!

A lot of new stuff on the “Subscribe” tab

mqttfx110_subscribe_screen

mqttfx110_subscribe_tab

  • Support for “autoscroll“:
    Always scroll down to latest recevied message and show the details at the bottom.

mqttfx110_subscribe_autoscroll

  • New rendering of subscribed topics

mqttfx110_subscribe_topics

  • Added an option to ‘mute’ topics for temporary ‘no-show’ received messages (per topic)
  • Added *** experimental *** support for dumping messages payload.
    • Message payload is written in a file per message names by recevied time.
  • All new rendering of receivied messages view

mqttfx110_subscribe_message

  • Message Payload can now be shown as plain text, hex (fomatted) and base64

mqttfx110_subscribe_saveas

  • Payload can now be saved as raw (binary), plain text, hex (fomatted) and base64 encoded
  • Support for import/export of ConnectionProfiles

mqttfx110_import_connectionprofile

  • Support for import/export of Topics (respectively for publish and subscribe) and Clipboard Messages

mqttfx110_import_topics

  • Extended Scripting API: publish() and subscribe() now also supports “QoS” and “Retained”
public void publish(String topic, String messageBody) 
public void publish(String topic, String messageBody, int qos)
public void publish(String topic, String messageBody, int qos, boolean retained)
public void subscribe(String topicFilter)
public void subscribe(String topicFilter, int qos)
public void unsubscribe(String topicFilter)
  • Option to clear Messages Clipboard

mqttfx110_publish_clearclipboard

  • Option to clear/keep Messages Buffer on unsubscribe (by now buffer is cleared on unsubscribe)
  • mqttfx110_settings_clear_bufferSeveral style and rendering improvements
  • Fixed issues with global application logging
  • Now bundled with JRE 1.8.0_74

mqttfx110_about