Package de.kopis.jusenet.ui

Source Code of de.kopis.jusenet.ui.SelectServerWindow

package de.kopis.jusenet.ui;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.SpinnerNumberModel;

import com.jgoodies.forms.builder.PanelBuilder;
import com.jgoodies.forms.factories.ButtonBarFactory;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;

import de.kopis.jusenet.Application;

public class SelectServerWindow extends JDialog implements WindowListener, ActionListener {
   
    private static final String OK_COMMAND = "Ok";
    private static final String CANCEL_COMMAND = "Cancel";
    private static final String APPLY_COMMAND = "Apply";
    private JTextField tfHostname;
    private JSpinner tfPort;
    private JCheckBox cbNeedAuth;
    private JTextField tfUsername;
    private JPasswordField tfPassword;
    private boolean cancelled = false;
    private boolean saved = false;
   
    public SelectServerWindow(JFrame parent) {
        super(parent, "Edit server");
       
        createGUI();
       
        addWindowListener(this);
        setSize(400, 300);
    }
   
    private void createGUI() {
        setLayout(new BorderLayout());

        tfHostname = new JTextField(Application.getInstance().getProperty("nntp.hostname", "localhost"));
        tfHostname.setToolTipText("Enter full domain name of your NNTP server.");
        tfPort = new JSpinner(new SpinnerNumberModel());
        tfPort.setValue(Integer.parseInt(Application.getInstance().getProperty("nntp.port", "119")));
        tfPort.setToolTipText("Default port is 119. It is recommended to leave this setting alone.");
        cbNeedAuth = new JCheckBox("Requires authentication");
        cbNeedAuth.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                tfUsername.setEnabled(cbNeedAuth.isSelected());
                tfPassword.setEnabled(cbNeedAuth.isSelected());       
            }});
        cbNeedAuth.setSelected(!"".equals(Application.getInstance().getProperty("nntp.username")));
        tfUsername = new JTextField(Application.getInstance().getProperty("nntp.username"));
        tfPassword = new JPasswordField(Application.getInstance().getProperty("nntp.password"));
        tfUsername.setEnabled(cbNeedAuth.isSelected());
        tfPassword.setEnabled(cbNeedAuth.isSelected());
       
        FormLayout layout = new FormLayout(
                "right:pref, 3dlu, pref:grow",
                "pref, 3dlu, pref, 3dlu, pref, 3dlu, pref, 3dlu, pref, 3dlu, pref");
        PanelBuilder builder = new PanelBuilder(layout);
       
        CellConstraints c = new CellConstraints();
        builder.addSeparator("Server",      c.xyw(1, 1, 3));
        builder.addLabel("Hostname:",       c.xy (1, 3));
        builder.add(tfHostname,             c.xy (3, 3));
       
        builder.addLabel("Port:",           c.xy (1, 5));
        builder.add(tfPort,                 c.xy (3, 5));

        builder.add(cbNeedAuth,             c.xyw(1, 7, 3));
        builder.addLabel("Username:",       c.xy (1, 9));
        builder.add(tfUsername,              c.xy (3, 9));

        builder.addLabel("Password:",       c.xy (1, 11));
        builder.add(tfPassword,             c.xy (3, 11));

        builder.setDefaultDialogBorder();
        add(builder.getPanel(), BorderLayout.CENTER);
       
        JButton ok = new JButton(OK_COMMAND);
        ok.addActionListener(this);
        JButton cancel = new JButton(CANCEL_COMMAND);
        cancel.addActionListener(this);
        JButton apply = new JButton(APPLY_COMMAND);
        apply.addActionListener(this);
        add(ButtonBarFactory.buildOKCancelApplyBar(ok, cancel, apply),
                BorderLayout.SOUTH);
    }

    public void windowOpened(WindowEvent e) {
        // TODO Auto-generated method stub
       
    }

    public void windowClosing(WindowEvent e) {
        if(!saved && !cancelled) {
            int result = JOptionPane.showConfirmDialog(this, "Settings are not saved. Do you want to save now?", "Save settings?", JOptionPane.YES_NO_OPTION);
            switch(result) {
            case JOptionPane.YES_OPTION:
                // save before close
                save();
                break;
            case JOptionPane.NO_OPTION:
                // close
                break;
            }
        }
    }

    public void windowClosed(WindowEvent e) {}
    public void windowIconified(WindowEvent e) {}
    public void windowDeiconified(WindowEvent e) {}
    public void windowActivated(WindowEvent e) {}
    public void windowDeactivated(WindowEvent e) {}

    public void actionPerformed(ActionEvent e) {
        if(CANCEL_COMMAND.equals(e.getActionCommand())) {
            cancelled = true;
            dispose();
        } else if(APPLY_COMMAND.equals(e.getActionCommand())) {
            save();
        } else if(OK_COMMAND.equals(e.getActionCommand())) {
            save();
            dispose();
        }
    }

    /**
     * Saves current values to application properties.
     *
     */
    private void save() {
        Application.getInstance().setProperty("nntp.hostname", tfHostname.getText());
        Application.getInstance().setProperty("nntp.port", "" + tfPort.getValue());
        if(cbNeedAuth.isSelected()) {
            Application.getInstance().setProperty("nntp.username", tfUsername.getText());
            Application.getInstance().setProperty("nntp.password", new String(tfPassword.getPassword()));
        } else {
            Application.getInstance().setProperty("nntp.username", "");
            Application.getInstance().setProperty("nntp.password", "");
        }
        saved = true;
    }
}
TOP

Related Classes of de.kopis.jusenet.ui.SelectServerWindow

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.