Open Source & Free  

New Preferences, Command State, Localization & Locking

New Preferences, Command State, Localization & Locking

Header Image

Starting with the new version of the NetBeans plugin we will have the new settings/preferences UI which we
introduced in the IntelliJ/IDEA plugin. Currently this will be in addition to the main
preferences but as we move forward we will only add features to the new settings UI.

You will be able to open the new project preferences UI by right clicking the project and selecting it in the
Codename One section:

Launching the new preferences UI
Figure 1. Launching the new preferences UI

Notice that the UX while similar has some distinct differences:

  • We use the mobile style of scrolling as it was built with Codename One

  • You can see global settings by clicking the “Globe” button on the top left

  • You can save/cancel using the X or save buttons on the top right.

We will probably make quite a few changes to this UI in the coming months to refine it further based on feedback
from you guys.

The main motivation for doing this change is the new Windows UWP port which needed changes to the windows
section of the preferences. Doing this 3 times over is silly, changing one single global preferences tool is always
the right thing to do.

This isn’t yet implemented in the Eclipse plugin but it might be done before the next update

Command Icon States

In a previous post we mentioned the ability to handle states
in buttons and how that fits well with icon fonts.

A question in the post raised the issue of commands which support such states but the API isn’t there.

To solve this we added a version of setMaterialIcon to FontImage
that accepts a Command as
its argument. This effectively makes commands work with such icon fonts.

To support that further we also added to Toolbar
the methods: addMaterialCommandToSideMenu, addMaterialCommandToRightBar, addMaterialCommandToLeftBar &

These accept one of the MATERIAL_* char constants from the FontImage class to create the icon for a command
relatively easily.

Suppress Localization

By default strings in Codename One are implicitly localized which is unique. Most frameworks require some
level of intervention to implement localization but since Codename One was developed by people whose
native language isn’t English we felt compelled to fix that…​

Localization should be the default and Codename One does the right thing here, however sometimes you want to
turn it off e.g. if you have a user submitted string that might be identical to an application resource bundle value.

In Label we have the
method which works great for disabling the implicit localization. However, as
issue 1744 pointed out this needs to be done for
other components too…​

So we added the same method to SpanLabel, SpanButton & MultiButton. You can now control localization
specifically in all of those components.

Better Locking

Image locking is an esoteric performance implementation detail that most of you can and should be unaware of.

If you don’t care about the nitty gritty skip this section, for those of you who care and don’t know what I’m talking
about you can
read this section and sidebar in the developer guide.

In the coming update we fixed issue #1746 to
also lock other button states (this was very visible with things like toggle buttons). But the main change was
also changing the locking behavior to act more like a smartpointer and less as a boolean flag which should reduce
the cases of memory thrashing when using the same encoded image, over and over…​


  • Chibuike Mba says:

    Hi Shai,

    addMaterialCommandToLeftBar of the Toolbar adds the command to the right instead of left.

    Secondly, FontImage passed to any of these methods does not show addMaterialCommandToRightBar and addMaterialCommandToLeftBar.


  • Shai Almog says:

    thanks for noticing 😉
    We fixed that in git.

    We also fixed the issue and added an additional version of the method that accepts font size. Should be in this Friday release.

  • Chibuike Mba says:

    Nice one Shai. Waiting for Friday release.

    I also noticed that FontImage added to addMaterialCommandToSideMenu does not change color based on the command state Pressed/Unselected. Has that been taken care of already and pending Friday release?


  • Shai Almog says:

    I hope it does. If it doesn’t after this Friday release please file an issue.

  • Chibuike Mba says:


Leave a Reply