Example usage for com.jgoodies.binding.adapter ToggleButtonAdapter ToggleButtonAdapter

List of usage examples for com.jgoodies.binding.adapter ToggleButtonAdapter ToggleButtonAdapter

Introduction

In this page you can find the example usage for com.jgoodies.binding.adapter ToggleButtonAdapter ToggleButtonAdapter.

Prototype

public ToggleButtonAdapter(ValueModel subject) 

Source Link

Document

Constructs a ToggleButtonAdapter on the given subject ValueModel.

Usage

From source file:com.salas.bb.dialogs.AdvancedPreferencesPanel.java

License:Open Source License

private void initComponents(ValueModel triggerChannel) {
    chShowTipsBox = ComponentsFactory.createCheckBox(
            Strings.message("userprefs.tab.general.show.tip.of.the.day"), new ToggleButtonAdapter(
                    new BufferedValueModel(TipOfTheDayDialog.showingTipsModel(), triggerChannel)));

    String msg = Strings.message("userprefs.tab.general.check.for.new.versions");
    if (ApplicationLauncher.isAutoUpdatesEnabled()) {
        chDoUpdatesCheck = ComponentsFactory.createCheckBox(msg,
                new ToggleButtonAdapter(new BufferedValueModel(
                        new PropertyAdapter(userPrefs, UserPreferences.PROP_CHECKING_FOR_UPDATES_ON_STARTUP),
                        triggerChannel)));
    } else {/*from  w ww  . j  av  a2 s  .  c  om*/
        msg = msg.replaceAll("&", "");
        chDoUpdatesCheck = new JCheckBox(msg);
        chDoUpdatesCheck.setSelected(true);
        chDoUpdatesCheck.setEnabled(false);
    }

    chAlwaysUseEnglish = ComponentsFactory
            .createCheckBox(Strings.message("userprefs.tab.advanced.always.use.english"),
                    new ToggleButtonAdapter(new BufferedValueModel(
                            new PropertyAdapter(userPrefs, UserPreferences.PROP_ALWAYS_USE_ENGLISH),
                            triggerChannel)));

    tfInternetBrowser = new JTextField();
    tfInternetBrowser.setDocument(new DocumentAdapter(new BufferedValueModel(
            new PropertyAdapter(userPrefs, UserPreferences.PROP_INTERNET_BROWSER), triggerChannel)));

    if (BrowserLauncher.isUsingJWSBrowser()) {
        tfInternetBrowser.setEnabled(false);
        tfInternetBrowser.setToolTipText(Strings.message("userprefs.tab.advanced.browser.tooltip.disabled"));
    } else {
        tfInternetBrowser.setEnabled(true);
        tfInternetBrowser.setToolTipText(Strings.message("userprefs.tab.advanced.browser.tooltip.enabled"));
    }

    initProxyComponents(triggerChannel);

    SpinnerModelAdapter spinModelFeedSelectionDelay = new SpinnerModelAdapter(new BoundedRangeAdapter(
            new BufferedValueModel(new PropertyAdapter(userPrefs, UserPreferences.PROP_FEED_SELECTION_DELAY),
                    triggerChannel),
            0, 0, 1000));
    spinModelFeedSelectionDelay.setStepSize(100);

    chAAText = createCheckBox(userPrefs, Strings.message("userprefs.tab.advanced.antialiased.fonts"),
            UserPreferences.PROP_AA_TEXT);

    // The following code registers listener on Apply/Accept actions to track down
    // changes in BlogStarz limits. If changes are detected then channel list is
    // repainted.

    saveInitialLimits();
    triggerChannel.addValueChangeListener(new PropertyChangeListener() {
        public void propertyChange(PropertyChangeEvent evt) {
            if (Boolean.TRUE.equals(evt.getNewValue()))
                doRepaintChannelList();
        }
    });

    chShowUnreadButtonMenu = createCheckBox(userPrefs,
            Strings.message("userprefs.tab.advanced.show.the.unread.buttons.menu"),
            UserPreferences.PROP_SHOW_UNREAD_BUTTON_MENU);

    SpinnerModelAdapter spinModelFeedImportLimit = new SpinnerModelAdapter(new BoundedRangeAdapter(
            new BufferedValueModel(new PropertyAdapter(userPrefs, UserPreferences.PROP_FEED_IMPORT_LIMIT),
                    triggerChannel),
            1, 1, UserPreferences.MAX_FEED_IMPORT_LIMITATION));
    spinModelFeedImportLimit.setStepSize(100);
    spinFeedImportLimit = new JSpinner(spinModelFeedImportLimit);

    initGuideComponents(triggerChannel);

    chHideOldArticles = createCheckBox(feedRS,
            Strings.message("userprefs.tab.articles.hide.articles.older.than"), "suppressingOlderThan");
    chDisplayFullTitles = createCheckBox(feedRS, Strings.message("userprefs.tab.articles.display.full.titles"),
            "displayingFullTitles");
    chSortingAscending = createCheckBox(feedRS,
            Strings.message("userprefs.tab.articles.sort.earlier.articles.first"), "sortingAscending");

    tfSuppressOlderThan = new JTextField();
    tfSuppressOlderThan.setDocument(new DocumentAdapter(
            new BufferedValueModel(new PropertyAdapter(feedRS, "suppressOlderThanString"), triggerChannel)));

    chCopyLinksInHREFFormat = createCheckBox(userPrefs,
            Strings.message("userprefs.tab.articles.use.href.format.for.links.copied.to.clipboard"),
            UserPreferences.PROP_COPY_LINKS_IN_HREF_FORMAT);
    chBrowseOnTitleDblClick = createCheckBox(userPrefs,
            Strings.message("userprefs.tab.articles.browse.on.double.click.over.the.title"),
            UserPreferences.PROP_BROWSE_ON_DBL_CLICK);

    chShowAppIconInSystray = createCheckBox(userPrefs,
            Strings.message("userprefs.tab.advanced.show.appicon.in.systray"),
            UserPreferences.PROP_SHOW_APPICON_IN_SYSTRAY);
    chMinimizeToSystray = createCheckBox(userPrefs,
            Strings.message("userprefs.tab.advanced.minimize.to.systray"),
            UserPreferences.PROP_MINIMIZE_TO_SYSTRAY);

    // Dock icon
    ValueModel modeModel = new BufferedValueModel(
            new BIDModeToStringConverter(new PropertyAdapter(userPrefs, UserPreferences.PROP_DIB_MODE)),
            triggerChannel);

    cbBIDMode = new JComboBox(new ComboBoxAdapter(BIDModeToStringConverter.MODES, modeModel));
}

From source file:com.salas.bb.dialogs.AdvancedPreferencesPanel.java

License:Open Source License

/**
 * Helper function to create a checkbox.
 * @param obj Object holding property./*w w w. j  a v a 2 s  .c  om*/
 * @param label Label for checkbox.
 * @param propertyName Property to save on object.
 * @return new JCheckbox.
 */
private JCheckBox createCheckBox(Object obj, String label, String propertyName) {
    return ComponentsFactory.createCheckBox(label, new ToggleButtonAdapter(
            new BufferedValueModel(new PropertyAdapter(obj, propertyName), triggerChannel)));
}

From source file:com.salas.bb.dialogs.GeneralPreferencesPanel.java

License:Open Source License

private void initComponents(UserPreferences settings, FeedRenderingSettings frs, ValueModel triggerChannel) {
    chReadOnChanChange = ComponentsFactory.createCheckBox(
            Strings.message("userprefs.tab.general.when.changing.feeds.mark.all.articles.read"),
            new ToggleButtonAdapter(new BufferedValueModel(
                    new PropertyAdapter(settings, UserPreferences.PROP_MARK_READ_WHEN_CHANGING_CHANNELS),
                    triggerChannel)));//from w  w w  .j  ava2  s.  c o m

    chReadOnGuideChange = ComponentsFactory.createCheckBox(
            Strings.message("userprefs.tab.general.when.changing.guides.mark.all.articles.read"),
            new ToggleButtonAdapter(new BufferedValueModel(
                    new PropertyAdapter(settings, UserPreferences.PROP_MARK_READ_WHEN_CHANGING_GUIDES),
                    triggerChannel)));

    chReadOnDelay = ComponentsFactory.createCheckBox(
            Strings.message("userprefs.tab.general.mark.article.as.read.on.delay"),
            new ToggleButtonAdapter(new BufferedValueModel(
                    new PropertyAdapter(settings, UserPreferences.PROP_MARK_READ_AFTER_DELAY),
                    triggerChannel)));

    tfReadOnDelaySeconds = new JTextField();
    tfReadOnDelaySeconds.setDocument(new DocumentAdapter(new BufferedValueModel(
            new PropertyAdapter(settings, "markReadAfterSecondsString"), triggerChannel)));

    configurePurgeControls(settings, triggerChannel);

    rssPollInterval = new JTextField();
    rssPollInterval.setDocument(new DocumentAdapter(
            new BufferedValueModel(new PropertyAdapter(settings, "rssPollIntervalString"), triggerChannel)));

    cbTheme = new JComboBox();
    ValueModel valueModel = new BufferedValueModel(new PropertyAdapter(frs, RenderingSettingsNames.THEME),
            triggerChannel);
    cbTheme.setModel(new ThemeListModel(valueModel));

    cbFontFamilies = new JComboBox();
    final BufferedValueModel vmMainFont = new BufferedValueModel(new MainFontFamilyValueModel(frs),
            triggerChannel);
    cbFontFamilies.setModel(new FontFamiliesListModel(vmMainFont));

    valueModel.addValueChangeListener(new PropertyChangeListener() {
        public void propertyChange(PropertyChangeEvent evt) {
            Theme theme = (Theme) evt.getNewValue();
            Font newFont = theme.getMainFontDirect();
            vmMainFont.setValue(newFont.getFamily());
        }
    });

    chShowToolbar = ComponentsFactory.createCheckBox(Strings.message("userprefs.tab.general.show.toolbar"),
            new ToggleButtonAdapter(new BufferedValueModel(
                    new PropertyAdapter(settings, UserPreferences.PROP_SHOW_TOOLBAR), triggerChannel)));
    chShowToolbarLabels = ComponentsFactory
            .createCheckBox(Strings.message("userprefs.tab.general.show.toolbar.labels"),
                    new ToggleButtonAdapter(new BufferedValueModel(
                            new PropertyAdapter(settings, UserPreferences.PROP_SHOW_TOOLBAR_LABELS),
                            triggerChannel)));

    chShowToolbar.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            onShowToolbar();
        }
    });
    onShowToolbar();
}

From source file:com.salas.bb.dialogs.GeneralPreferencesPanel.java

License:Open Source License

/**
 * Configures the purge controls./*  w  w  w  .  j a  v  a 2  s.com*/
 *
 * @param settings          settings.
 * @param triggerChannel    trigger.
 */
private void configurePurgeControls(UserPreferences settings, ValueModel triggerChannel) {
    PropertyAdapter propCheck, propCount;
    propCheck = new PropertyAdapter(settings, UserPreferences.PROP_PRESERVE_UNREAD);
    propCount = new PropertyAdapter(settings, "purgeCountString");

    BufferedValueModel modelCheck = null, modelCount;

    // The order of initialization dictates the order of events upon change.
    // We need checkbox event to be fired before the count when it wasn't selected initially,
    // and vice versa when it was.
    if (!settings.isPreserveUnread())
        modelCheck = new BufferedValueModel(propCheck, triggerChannel);
    modelCount = new BufferedValueModel(propCount, triggerChannel);
    if (settings.isPreserveUnread())
        modelCheck = new BufferedValueModel(propCheck, triggerChannel);

    chDoNotRemoveUnread = ComponentsFactory.createCheckBox(
            Strings.message("userprefs.tab.general.do.not.purge.unread.articles"),
            new ToggleButtonAdapter(modelCheck));

    purgeCount = new JTextField();
    purgeCount.setDocument(new DocumentAdapter(modelCount));
}

From source file:com.salas.bb.dialogs.ReadingListsPanel.java

License:Open Source License

/** Initializes components. */
private void initComponents() {
    // Updating/*from   w  ww .j  a  v a 2  s  .  c  om*/
    rbUpdateManually = ComponentsFactory
            .createRadioButton(Strings.message("userprefs.tab.readinglists.updates.manual"));
    rbUpdatePeriodically = ComponentsFactory
            .createRadioButton(Strings.message("userprefs.tab.readinglists.updates.periodical"));
    cbUpdatePeriod = new JComboBox(new Object[] { PERIOD_ONCE_PER_RUN, PERIOD_DAILY, PERIOD_HOURLY });

    ButtonGroup g1 = new ButtonGroup();
    g1.add(rbUpdateManually);
    g1.add(rbUpdatePeriodically);

    setUpdatePeriodState();

    PeriodMonitor monitor = new PeriodMonitor(new BufferedValueModel(
            new PropertyAdapter(prefs, UserPreferences.PROP_READING_LIST_UPDATE_PERIOD), triggerChannel));

    rbUpdateManually.addChangeListener(monitor);
    rbUpdatePeriodically.addChangeListener(monitor);
    cbUpdatePeriod.addItemListener(monitor);

    ValueModel updatesModel = new BufferedValueModel(
            new PropertyAdapter(prefs, UserPreferences.PROP_ON_READING_LIST_UPDATE_ACTIONS), triggerChannel);

    // Applying changes
    rbChangeSilently = ComponentsFactory.createRadioButton(
            Strings.message("userprefs.tab.readinglists.action.accept.silently"),
            new RadioButtonAdapter(updatesModel, new Integer(UserPreferences.RL_UPDATE_NONE)));
    rbChangeWithNotification = ComponentsFactory.createRadioButton(
            Strings.message("userprefs.tab.readinglists.action.notify"),
            new RadioButtonAdapter(updatesModel, new Integer(UserPreferences.RL_UPDATE_NOTIFY)));
    rbChangeWithConfirmation = ComponentsFactory.createRadioButton(
            Strings.message("userprefs.tab.readinglists.action.confirm"),
            new RadioButtonAdapter(updatesModel, new Integer(UserPreferences.RL_UPDATE_CONFIRM)));

    // Get Latest command actions
    chUpdateFeeds = ComponentsFactory.createCheckBox(
            Strings.message("userprefs.tab.readinglists.command.latest.articles"),
            new ToggleButtonAdapter(new BufferedValueModel(
                    new PropertyAdapter(prefs, UserPreferences.PROP_UPDATE_FEEDS), triggerChannel)));
    chUpdateReadingLists = ComponentsFactory
            .createCheckBox(Strings.message("userprefs.tab.readinglists.command.lists.changes"),
                    new ToggleButtonAdapter(new BufferedValueModel(
                            new PropertyAdapter(prefs, UserPreferences.PROP_UPDATE_READING_LISTS),
                            triggerChannel)));

    new MandatoryCheckBoxController(chUpdateFeeds, chUpdateReadingLists);
}

From source file:com.salas.bb.dialogs.TagsPreferencesPanel.java

License:Open Source License

/**
 * Initializes components./* ww  w .  j  a va2  s. co  m*/
 *
 * @param bbsAllowed        <code>TRUE</code> if BB Service selection is allowed.
 * @param triggerChannel    changes commit trigger channel.
 */
private void initComponents(boolean bbsAllowed, ValueModel triggerChannel) {
    initRadioButtons(bbsAllowed, triggerChannel);

    tfDeliciousUser = new JTextField();
    tfDeliciousUser.setDocument(new DocumentAdapter(new BufferedValueModel(
            new PropertyAdapter(this.userPrefs, UserPreferences.PROP_TAGS_DELICIOUS_USER), triggerChannel)));

    tfDeliciousPassword = new JPasswordField();
    tfDeliciousPassword.setDocument(new DocumentAdapter(new BufferedValueModel(
            new PropertyAdapter(this.userPrefs, UserPreferences.PROP_TAGS_DELICIOUS_PASSWORD),
            triggerChannel)));

    ValueModel autoFetchModel = new BufferedValueModel(
            new PropertyAdapter(userPrefs, UserPreferences.PROP_TAGS_AUTOFETCH), triggerChannel);

    chAutoFetch = ComponentsFactory.createCheckBox(Strings.message("userprefs.tab.tags.autofetch"),
            new ToggleButtonAdapter(autoFetchModel));

    lbBBSWording = ComponentsFactory
            .createWrappedMultilineLabel(Strings.message("userprefs.tab.tags.wording.bbservice"));

    lbDIUWording = ComponentsFactory
            .createWrappedMultilineLabel(Strings.message("userprefs.tab.tags.wording.delicious"));

    chPinTagging = ComponentsFactory.createCheckBox("Tag pins with",
            new ToggleButtonAdapter(new BufferedValueModel(
                    new PropertyAdapter(userPrefs, UserPreferences.PROP_PIN_TAGGING), triggerChannel)));

    tfPinTags = new JTextField();
    tfPinTags.setDocument(new DocumentAdapter(new BufferedValueModel(
            new PropertyAdapter(userPrefs, UserPreferences.PROP_PIN_TAGS), triggerChannel)));
}

From source file:com.salas.bb.service.SyncSettingsPanel.java

License:Open Source License

/**
 * Binds components to data in preferences object.
 *
 * @param triggerChannel value model./*from   w  ww . j a  va2  s .c o  m*/
 */
private void initComponents(ValueModel triggerChannel) {
    btnSyncNow = new JButton(new SyncWrapperAction(SyncFullAction.getInstance()));
    final JPopupMenu menu = new JPopupMenu();
    menu.add(new SyncWrapperAction(SyncInAction.getInstance()));
    menu.add(new SyncWrapperAction(SyncOutAction.getInstance()));
    btnMoreSyncOptions = new CustomPopupButton(btnSyncNow, Strings.message("service.sync.more"), menu);

    rbModePeriodical = ComponentsFactory.createRadioButton(Strings.message("service.sync.synchronize.every"));
    rbModeEachRun = ComponentsFactory
            .createRadioButton(Strings.message("service.sync.synchronize.each.application.run"));
    rbModeManual = ComponentsFactory
            .createRadioButton(Strings.message("service.sync.manual.synchronization.only"));

    ButtonGroup bg = new ButtonGroup();
    bg.add(rbModePeriodical);
    bg.add(rbModeEachRun);
    bg.add(rbModeManual);
    rbModePeriodical.addItemListener(new PeriodicalSelectionListener());

    tfSyncPeriod.setEnabled(false);

    chFeedList = ComponentsFactory
            .createCheckBox(Strings.message("service.sync.feed.list"),
                    new ToggleButtonAdapter(new BufferedValueModel(
                            new PropertyAdapter(servicePrefs, ServicePreferences.PROP_SYNC_FEEDS),
                            triggerChannel)));
    chFeedList.addActionListener(new FullSyncEnabled());

    chPreferences = ComponentsFactory.createCheckBox(Strings.message("service.sync.preferences"),
            new ToggleButtonAdapter(new BufferedValueModel(
                    new PropertyAdapter(servicePrefs, ServicePreferences.PROP_SYNC_PREFERENCES),
                    triggerChannel)));

    new MandatoryCheckBoxController(chFeedList, chPreferences);

    tfEmail.setDocument(new DocumentAdapter(
            new BufferedValueModel(new PropertyAdapter(servicePrefs, "email"), triggerChannel)));

    tfPassword.setDocument(new DocumentAdapter(
            new BufferedValueModel(new PropertyAdapter(servicePrefs, "password"), triggerChannel)));

    tfSyncPeriod.setDocument(new DocumentAdapter(new BufferedValueModel(
            new PropertyAdapter(new ServicePreferencesWrapper(servicePrefs), "syncPeriod"), triggerChannel)));

    updateFullSyncButton();
    updateSyncDatesView();
    selectMode();
}

From source file:com.salas.bb.twitter.TwitterPreferencesPanel.java

License:Open Source License

/**
 * Creates the panel./*from  w w w  .ja v  a  2 s  .c o  m*/
 *
 * @param parent        parent dialog.
 * @param trigger       trigger.
 * @param preferences   preferences object to manipulate.
 */
public TwitterPreferencesPanel(JDialog parent, ValueModel trigger, TwitterPreferences preferences) {
    prefs = preferences;

    Component tfWording = ComponentsFactory
            .createWrappedMultilineLabel(Strings.message("userprefs.tab.twitter.wording"));

    // Layout
    BBFormBuilder builder = new BBFormBuilder("7dlu, p, 4dlu, p:grow", this);
    builder.setDefaultDialogBorder();

    JCheckBox chEnabled = ComponentsFactory.createCheckBox(Strings.message("userprefs.tab.twitter.enable"),
            new ToggleButtonAdapter(new BufferedValueModel(
                    new PropertyAdapter(preferences, TwitterPreferences.PROP_ENABLED), trigger)));

    JCheckBox chProfilePics = ComponentsFactory.createCheckBox(
            Strings.message("userprefs.tab.twitter.profile.pics"),
            new ToggleButtonAdapter(new BufferedValueModel(
                    new PropertyAdapter(preferences, TwitterPreferences.PROP_PROFILE_PICS), trigger)));

    JCheckBox chPasteLink = ComponentsFactory.createCheckBox(
            Strings.message("userprefs.tab.twitter.paste.link"), new ToggleButtonAdapter(new BufferedValueModel(
                    new PropertyAdapter(preferences, TwitterPreferences.PROP_PASTE_LINK), trigger)));

    JLabel lbScreenName = new JLabel(Strings.message("userprefs.tab.twitter.screenname"));
    JLabel lbPassword = new JLabel(Strings.message("userprefs.tab.twitter.password"));

    JTextField tfScreenName = new JTextField();
    tfScreenName.setDocument(new DocumentAdapter(new BufferedValueModel(
            new PropertyAdapter(preferences, TwitterPreferences.PROP_SCREEN_NAME), trigger)));

    JPasswordField tfPassword = new JPasswordField();
    tfPassword.setDocument(new DocumentAdapter(new BufferedValueModel(
            new PropertyAdapter(preferences, TwitterPreferences.PROP_PASSWORD), trigger)));

    StateUpdatingToggleListener.install(chEnabled, lbScreenName, tfScreenName, lbPassword, tfPassword,
            chProfilePics);

    builder.append(tfWording, 4);
    builder.appendUnrelatedComponentsGapRow(2);
    builder.append(chEnabled, 4);

    builder.setLeadingColumnOffset(1);
    builder.nextLine();
    builder.append(lbScreenName, tfScreenName);
    builder.append(lbPassword, tfPassword);

    builder.setLeadingColumnOffset(3);
    builder.nextLine();
    builder.append(chProfilePics);
    builder.append(chPasteLink);
}

From source file:com.salas.bb.utils.uif.ComponentsFactory.java

License:Open Source License

/**
 * Creates check-box with mnemonized text.
 *
 * @param textWithMnemonic  text with mnemonic mark.
 * @param bean              bean to bind this check box to.
 * @param propertyName      name of the bean property.
 * @param trigger           channel to trigger the commit operation.
 *
 * @return created check-box./*from w ww  .ja v a 2  s .c om*/
 */
public static JCheckBox createCheckBox(String textWithMnemonic, Object bean, String propertyName,
        ValueModel trigger) {
    return createCheckBox(textWithMnemonic,
            new ToggleButtonAdapter(new BufferedValueModel(new PropertyAdapter(bean, propertyName), trigger)));
}

From source file:com.salas.bb.whatshot.Dialog.java

License:Open Source License

/**
 * Creates search dialog.//from   w ww .j  a  v  a2s .c  om
 *
 * @param owner     dialog's parent frame.
 * @param engine    engine to use.
 * @param set       guides set to pick the guides from.
 * @param listener  selection listener.
 */
public Dialog(Frame owner, Engine engine, final GuidesSet set, ActionListener listener) {
    super(owner, Strings.message("whatshot.dialog.title"));
    guidesSet = set;

    pnlProgress = new ProgressPanel(Strings.message("whatshot.inprogress"));
    scrollPanel = buildResultsPanel();

    setModal(false);

    // Only unread selector
    Preferences prefs = Application.getUserPreferences();
    ValueModel mdlOnlyUnread = new PreferencesAdapter(prefs, PROP_WH_UNREAD_ONLY, false);
    chOnlyUnread = ComponentsFactory.createCheckBox(Strings.message("whatshot.unreadonly"),
            new ToggleButtonAdapter(mdlOnlyUnread));

    // Time options
    ValueModel mdlTimeOption = new AbstractConverter(
            new PreferencesAdapter(prefs, PROP_WH_TIME_OPTION, TimeOption.THIS_WEEK.getCode())) {
        public Object convertFromSubject(Object o) {
            return TimeOption.fromCode((Integer) o);
        }

        public void setValue(Object o) {
            TimeOption to = (TimeOption) o;
            subject.setValue(to.getCode());
        }
    };
    cbTimeOptions = new JComboBox(new ComboBoxAdapter(TimeOption.OPTIONS, mdlTimeOption));

    // Starz selector
    ValueModel mdlStarz = new PreferencesAdapter(prefs, PROP_WH_STARZ, 1);
    starz = new StarsSelectionComponent(new BoundedRangeAdapter(mdlStarz, 0, 1, 5));

    // Make toolbar fonts smaller
    UifUtilities.smallerFont(chOnlyUnread);
    UifUtilities.smallerFont(cbTimeOptions);

    // Setup button
    btnSetup = new JButton(Strings.message("whatshot.setup"));
    btnSetup.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            SetupDialog sd = new SetupDialog(GlobalModel.SINGLETON.getUserPreferences());
            sd.open();
        }
    });

    UifUtilities.smallerFont(btnSetup);

    // Results model and list
    model = new ListModel(engine, mdlStarz, mdlOnlyUnread, mdlTimeOption);
    onSetupChange();

    itemsList = new ResultsList(model) {
        @Override
        protected ResultGroupPanel createGroupPanel(ResultGroup group) {
            return new ResultGroupPanel(group.getName(), group.getName(), GROUP_COLOR_1, GROUP_COLOR_2);
        }
    };
    itemsList.addActionListener(listener);

    // Start populating
    SwingWorker scanner = model.scan();
    scanner.addPropertyChangeListener(new ScannerListener());
    scanner.execute();
}