private void populateFixedCharWidthFontsAsync()
    {
        FontData fontData = getNextFontData();
        if (!fontsRejected.contains(fontData.getName())) {
            boolean isScalable = fontsListCurrent == fontsScalable;
            if (isMonospacedFont(fontData, isScalable)) {
                if (isScalable) {
                    fontsSorted.put(fontData.getName(), scalableSizes);
                } else {
                    Set<Integer> heights = fontsSorted.get(fontData.getName());
                    if (heights == null) {
                        heights = new TreeSet<>();
                        fontsSorted.put(fontData.getName(), heights);
                    }
                    heights.add(fontData.getHeight());
                }
                if (!listFont.isDisposed())
                    listFont.setItems(fontsSorted.keySet().toArray(new String[fontsSorted.keySet().size()]));
                refreshWidgets();
            } else {
                fontsRejected.add(fontData.getName());
            }
        }
        if (fontsNonScalable.size() == 0 && fontsScalable.size() == 0) {
            if (!parent.isDisposed()) fontsGc.dispose();
            fontsGc = null;
            fontsNonScalable = fontsScalable = fontsListCurrent = null;
            fontsRejected = null;
        } else {
            UIUtils.asyncExec(this::populateFixedCharWidthFontsAsync);
        }
    }
Get the preferred font data

@return a copy of the preferred font data
plugins/org.jkiss.dbeaver.ui.editors.hex/src/org/jkiss/dbeaver/ui/editors/binary/pref/HexPreferencesManager.java