Java tutorial
/* * Copyright 2004 - 2008 Christian Sprajc. All rights reserved. * * This file is part of PowerFolder. * * PowerFolder 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. * * PowerFolder 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 PowerFolder. If not, see <http://www.gnu.org/licenses/>. * * $Id$ */ package de.dal33t.powerfolder.ui.wizard; import java.awt.Component; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.Locale; import javax.swing.DefaultListCellRenderer; import javax.swing.JComboBox; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JTextField; import jwf.WizardPanel; import com.jgoodies.binding.adapter.BasicComponentFactory; import com.jgoodies.binding.value.ValueHolder; import com.jgoodies.binding.value.ValueModel; import com.jgoodies.forms.builder.PanelBuilder; import com.jgoodies.forms.layout.CellConstraints; import com.jgoodies.forms.layout.FormLayout; import de.dal33t.powerfolder.ConfigurationEntry; import de.dal33t.powerfolder.Controller; import de.dal33t.powerfolder.NetworkingMode; import de.dal33t.powerfolder.transfer.TransferManager; import de.dal33t.powerfolder.ui.panel.LineSpeedSelectionPanel; import de.dal33t.powerfolder.ui.util.SimpleComponentFactory; import de.dal33t.powerfolder.ui.util.UIUtil; import de.dal33t.powerfolder.util.Reject; import de.dal33t.powerfolder.util.StringUtils; import de.dal33t.powerfolder.util.Translation; /** * Panel for basic setup like nick, networking mode, etc. * * @author <a href="mailto:totmacher@powerfolder.com">Christian Sprajc</a> * @version $Revision: 1.8 $ */ public class BasicSetupPanel extends PFWizardPanel { private ValueModel nameModel; private ValueModel networkingModeModel; private LineSpeedSelectionPanel wanLineSpeed; private JTextField nameField; private JComboBox<Locale> languageChooser; private DefaultFolderWizardHelper defaultFolderHelper; private WizardPanel nextPanel; public BasicSetupPanel(Controller controller, WizardPanel nextPanel) { super(controller); Reject.ifNull(nextPanel, "Nextpanel is null"); this.nextPanel = nextPanel; } public boolean hasNext() { return !StringUtils.isBlank((String) nameModel.getValue()); } protected JPanel buildContent() { FormLayout layout = new FormLayout("right:pref, 3dlu, 100dlu, pref:grow", "pref, 6dlu, pref, 6dlu, pref, 6dlu, top:pref"); PanelBuilder builder = new PanelBuilder(layout); builder.setBorder(createFewContentBorder()); CellConstraints cc = new CellConstraints(); builder.addLabel(Translation.getTranslation("exp.wizard.basic_setup.computer_name"), cc.xy(1, 1)); builder.add(nameField, cc.xy(3, 1)); builder.addLabel(Translation.getTranslation("preferences.network.line_settings"), cc.xywh(1, 3, 1, 1, "default, top")); builder.add(wanLineSpeed.getUiComponent(), cc.xy(3, 3)); builder.addLabel(Translation.getTranslation("exp.wizard.basic_setup.language_restart"), cc.xy(1, 5)); builder.add(languageChooser, cc.xy(3, 5)); builder.add(defaultFolderHelper.getUIComponent(), cc.xyw(3, 7, 2)); return builder.getPanel(); } public WizardPanel next() { // Set nick String nick = (String) nameModel.getValue(); if (!StringUtils.isBlank(nick)) { getController().changeNick(nick, true); } // Set networking mode boolean privateNetworking = networkingModeModel.getValue() instanceof PrivateNetworking; boolean lanOnlyNetworking = networkingModeModel.getValue() instanceof LanOnlyNetworking; if (privateNetworking) { getController().setNetworkingMode(NetworkingMode.PRIVATEMODE); } else if (lanOnlyNetworking) { getController().setNetworkingMode(NetworkingMode.LANONLYMODE); } else { throw new IllegalStateException("invalid net working mode"); } TransferManager tm = getController().getTransferManager(); tm.setUploadCPSForWAN(wanLineSpeed.getUploadSpeedKBPS()); tm.setDownloadCPSForWAN(wanLineSpeed.getDownloadSpeedKBPS()); // Set locale if (languageChooser.getSelectedItem() instanceof Locale) { Locale locale = (Locale) languageChooser.getSelectedItem(); // Save settings Translation.saveLocalSetting(locale); } else { // Remove setting Translation.saveLocalSetting(null); } if (getController().getOSClient().isLoggedIn() || getController().isLanOnly()) { // Setup default folder and go to what to do panel return defaultFolderHelper.next(nextPanel, getWizardContext()); } return nextPanel; } /** * Initalizes all nessesary components */ protected void initComponents() { nameModel = new ValueHolder(getController().getMySelf().getNick()); nameModel.addValueChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { updateButtons(); } }); // Language selector languageChooser = createLanguageChooser(); nameField = BasicComponentFactory.createTextField(nameModel, false); // Ensure minimum dimension UIUtil.ensureMinimumWidth(107, nameField); wanLineSpeed = new LineSpeedSelectionPanel(getController(), true, false); TransferManager tm = getController().getTransferManager(); wanLineSpeed.setSpeedKBPS(ConfigurationEntry.TRANSFER_LIMIT_AUTODETECT.getValueBoolean(getController()), tm.getUploadCPSForWAN() / 1024, tm.getDownloadCPSForWAN() / 1024); networkingModeModel = new ValueHolder(); // Network mode chooser JComboBox networkingModeChooser = SimpleComponentFactory.createComboBox(networkingModeModel); networkingModeChooser.addItem(new PrivateNetworking()); networkingModeChooser.addItem(new LanOnlyNetworking()); NetworkingMode mode = getController().getNetworkingMode(); switch (mode) { case PRIVATEMODE: networkingModeChooser.setSelectedIndex(0); break; case LANONLYMODE: networkingModeChooser.setSelectedIndex(1); break; } wanLineSpeed.setEnabled(networkingModeChooser.getSelectedItem() instanceof PrivateNetworking); networkingModeChooser.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { wanLineSpeed.setEnabled(e.getItem() instanceof PrivateNetworking); } }); defaultFolderHelper = new DefaultFolderWizardHelper(getController(), getController().getOSClient()); } protected String getTitle() { return Translation.getTranslation("exp.wizard.basic_setup.title"); } // Helper classes ********************************************************* private static class PrivateNetworking { public String toString() { return Translation.getTranslation("general.network_mode.private"); } } private static class LanOnlyNetworking { public String toString() { return Translation.getTranslation("general_network_mode.lan_only"); } } /** * Creates a language chooser, which contains the supported locales * * @return a language chooser, which contains the supported locales */ private static JComboBox<Locale> createLanguageChooser() { // Create combobox JComboBox<Locale> chooser = new JComboBox<>(); for (Locale locale1 : Translation.getSupportedLocales()) { chooser.addItem(locale1); } // Set current locale as selected chooser.setSelectedItem(Translation.getResourceBundle().getLocale()); // Add renderer chooser.setRenderer(new MyDefaultListCellRenderer()); // Initialize chooser with the active locale. chooser.setSelectedItem(Translation.getActiveLocale()); return chooser; } private static class MyDefaultListCellRenderer extends DefaultListCellRenderer { public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); if (value instanceof Locale) { Locale locale = (Locale) value; setText(locale.getDisplayName(locale)); } else { setText("- unknown -"); } return this; } } }