com.pavelfatin.sleeparchiver.gui.preferences.PreferencesDialog.java Source code

Java tutorial

Introduction

Here is the source code for com.pavelfatin.sleeparchiver.gui.preferences.PreferencesDialog.java

Source

/*
 * SleepArchiver - cross-platform data manager for Sleeptracker-series watches.
 * Copyright (C) 2009-2011 Pavel Fatin <http://pavelfatin.com>
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package com.pavelfatin.sleeparchiver.gui.preferences;

import com.jgoodies.forms.layout.CellConstraints;
import com.pavelfatin.sleeparchiver.model.Language;
import com.pavelfatin.sleeparchiver.model.Preferences;
import com.pavelfatin.sleeparchiver.swing.Builder;
import com.pavelfatin.sleeparchiver.swing.MyDialog;
import com.pavelfatin.sleeparchiver.swing.NamedRenderer;
import com.pavelfatin.sleeparchiver.swing.NamedValue;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;

public class PreferencesDialog extends MyDialog {
    private Preferences _preferences;
    private JComboBox _language;
    private JCheckBox _backups;
    private JCheckBox _prefill;
    private JCheckBox _historyEnabled;
    private JSpinner _historyLimit;
    private JCheckBox _openRecent;
    private JLabel _labelHistoryLimit;

    public PreferencesDialog(JFrame frame, Preferences preferences) {
        super(frame, "dialogPreferences", true);

        _preferences = preferences;

        setContent(createControls());

        updateUI(_preferences);
        updateHistoryEnablement();
    }

    private void updateHistoryEnablement() {
        boolean b = _historyEnabled.isSelected();
        _historyLimit.setEnabled(b);
        _labelHistoryLimit.setEnabled(b);
        _openRecent.setEnabled(b);
    }

    private void updateUI(Preferences preferences) {
        _language.setSelectedItem(toNamed(preferences.getLanguage()));
        _backups.setSelected(preferences.isBackupsEnabled());
        _prefill.setSelected(preferences.isPrefillEnabled());
        _historyEnabled.setSelected(preferences.isHistoryEnabled());
        _historyLimit.setValue(preferences.getHistoryLimit());
        _openRecent.setSelected(preferences.isOpenRecentEnabled());
    }

    private void update(Preferences preferences) {
        Language language = ((NamedValue<Language>) _language.getSelectedItem()).getValue();
        preferences.setLanguage(language);
        preferences.setBackupsEnabled(_backups.isSelected());
        preferences.setPrefillEnabled(_prefill.isSelected());
        preferences.setHistoryEnabled(_historyEnabled.isSelected());
        preferences.setHistoryLimit((Integer) _historyLimit.getValue());
        preferences.setOpenRecentEnabled(_openRecent.isSelected());
    }

    private JPanel createControls() {
        Builder b = new Builder("default:grow", "default, 6dlu, default");

        b.add(createSection("separatorGeneral", createGeneral()), 1, 1);
        b.add(createSection("separatorHistory", createHistory()), 1, 3);

        return b.getPanel();
    }

    private JPanel createSection(String name, JPanel content) {
        Builder b = new Builder("6dlu, default:grow, 6dlu", "default, $lgap, default");

        b.add(b.createSeparator(name), 1, 1, 3);
        b.add(content, 2, 3);

        return b.getPanel();
    }

    private JPanel createGeneral() {
        Builder b = new Builder("default:grow", "default, 3 * ($lgap, default)");

        _language = b.createComboBox("comboboxLanguage");
        _language.setRenderer(new NamedRenderer());
        DefaultComboBoxModel model = new DefaultComboBoxModel();
        for (Language each : Language.values()) {
            model.addElement(toNamed(each));
        }
        _language.setModel(model);

        _backups = b.createCheckBox("checkboxBackups");
        _prefill = b.createCheckBox("checkboxPrefill");

        JLabel asterisk = b.createLabel("labelAsterisk");
        asterisk.setVerticalAlignment(SwingConstants.TOP);

        b.add(b.createLine(b.createLabel("labelLanguage", _language), _language, asterisk), 1, 1);
        b.add(b.createLabel("labelFootnote"), 1, 3, 1, 1, CellConstraints.RIGHT, CellConstraints.DEFAULT);
        b.add(_backups, 1, 5);
        b.add(_prefill, 1, 7);

        return b.getPanel();
    }

    private JPanel createHistory() {
        Builder b = new Builder("default:grow", "default, 2 * ($lgap, default)");

        _historyEnabled = b.createCheckBox("checkboxHistoryEnabled");
        _historyEnabled.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                updateHistoryEnablement();
            }
        });

        _openRecent = b.createCheckBox("checkboxOpenRecent");

        _historyLimit = b.createSpinner("spinnerHistoryLimit");
        _historyLimit.setModel(new SpinnerNumberModel(1, 1, 15, 1));

        _labelHistoryLimit = b.createLabel("labelHistoryLimit", _historyLimit);

        b.add(_historyEnabled, 1, 1);
        b.add(b.createLine("6dlu", _openRecent), 1, 3);
        b.add(b.createLine("6dlu", _labelHistoryLimit, _historyLimit), 1, 5);

        return b.getPanel();
    }

    private NamedValue<Language> toNamed(Language language) {
        return new NamedValue<Language>(language, language.getName());
    }

    @Override
    protected void onAccept() {
        update(_preferences);
        try {
            _preferences.save();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}