/**
* JHylaFax - A java client for HylaFAX.
*
* Copyright (C) 2005 by Steffen Pingel <steffenp@gmx.de>
*
* 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 2 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, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package net.sf.jhylafax;
import static net.sf.jhylafax.JHylaFAX.i18n;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.SpinnerNumberModel;
import net.sf.jhylafax.Settings.Notification;
import net.sf.jhylafax.Settings.Resolution;
import net.sf.jhylafax.fax.FaxJob;
import net.sf.jhylafax.fax.Paper;
import org.xnap.commons.gui.Dialogs;
import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.layout.FormLayout;
/**
* A panel for editing of fax job properties.
*
* @author Steffen Pingel
*/
public class JobPanel extends JPanel implements LocaleChangeListener {
private static final int DEFAULT_COLUMNS = 20;
private JLabel notificationLabel;
private JLabel resolutionLabel;
private JSpinner prioritySpinner;
private JLabel priorityLabel;
private JSpinner maxTriesSpinner;
private JLabel maxTriesLabel;
private JSpinner maxDialsSpinner;
private JLabel maxDialsLabel;
private JLabel paperLabel;
private DefaultComboBoxModel notificationModel;
private DefaultComboBoxModel resolutionModel;
private DefaultComboBoxModel paperModel;
private JTextField fullnameTextField;
private JTextField emailTextField;
private JLabel fullnameLabel;
private JLabel emailLabel;
private SpinnerNumberModel priorityModel;
public JobPanel(boolean border) {
FormLayout layout = new FormLayout("left:max(40dlu;pref), 3dlu, pref, pref:grow, min:grow", "");
DefaultFormBuilder builder = new DefaultFormBuilder(layout, this);
if (border) {
builder.setDefaultDialogBorder();
}
builder.appendSeparator(i18n.tr("Sender"));
fullnameTextField = new JTextField(DEFAULT_COLUMNS);
fullnameLabel = builder.append("", fullnameTextField, 3);
builder.nextLine();
emailTextField = new JTextField(DEFAULT_COLUMNS);
emailLabel = builder.append("", emailTextField, 3);
builder.nextLine();
builder.appendSeparator(i18n.tr("Parameter"));
notificationModel = new DefaultComboBoxModel();
JComboBox notificationComboBox = new JComboBox(notificationModel);
notificationLabel = builder.append("", notificationComboBox, 2);
builder.nextLine();
resolutionModel = new DefaultComboBoxModel();
JComboBox resolutionComboBox = new JComboBox(resolutionModel);
resolutionLabel = builder.append("", resolutionComboBox, 2);
builder.nextLine();
priorityModel = new SpinnerNumberModel(0, 0, 255, 1);
prioritySpinner = new JSpinner(priorityModel);
priorityLabel = builder.append("", prioritySpinner);
builder.nextLine();
maxTriesSpinner = new JSpinner(new SpinnerNumberModel(1, 1, 255, 1));
maxTriesLabel = builder.append("", maxTriesSpinner);
builder.nextLine();
maxDialsSpinner = new JSpinner(new SpinnerNumberModel(1, 1, 255, 1));
maxDialsLabel = builder.append("", maxDialsSpinner);
builder.nextLine();
paperModel = new DefaultComboBoxModel();
JComboBox paperComboBox = new JComboBox(paperModel);
paperLabel = builder.append("", paperComboBox, 2);
}
public void setSenderEditable(boolean editSender) {
fullnameTextField.setEditable(editSender);
emailTextField.setEditable(editSender);
}
public void updateLabels() {
fullnameLabel.setText(i18n.tr("Name"));
emailLabel.setText(i18n.tr("Email"));
notificationLabel.setText(i18n.tr("Notify"));
resolutionLabel.setText(i18n.tr("Resolution"));
priorityLabel.setText(i18n.tr("Priority"));
maxTriesLabel.setText(i18n.tr("Maximum Tries"));
maxDialsLabel.setText(i18n.tr("Maximum Dials"));
paperLabel.setText(i18n.tr("Paper Format"));
Object selectedItem = notificationModel.getSelectedItem();
notificationModel.removeAllElements();
for (Settings.Notification notification : Settings.Notification.values()) {
notificationModel.addElement(notification);
}
notificationModel.setSelectedItem(selectedItem);
selectedItem = resolutionModel.getSelectedItem();
resolutionModel.removeAllElements();
for (Settings.Resolution resolution : Settings.Resolution.values()) {
resolutionModel.addElement(resolution);
}
resolutionModel.setSelectedItem(selectedItem);
selectedItem = paperModel.getSelectedItem();
paperModel.removeAllElements();
for (Paper paper : Paper.values()) {
paperModel.addElement(paper);
}
paperModel.setSelectedItem(selectedItem);
}
public void applyTo(FaxJob job) {
job.setSender(fullnameTextField.getText());
job.setNotifyAdress(emailTextField.getText());
job.setNotify(((Notification)notificationModel.getSelectedItem()).getCommand());
job.setResolution((((Resolution)resolutionModel.getSelectedItem()).getLinesPerInch()));
job.setPriority(priorityModel.getNumber().intValue());
job.setMaxTries(((Integer)maxTriesSpinner.getValue()).intValue());
job.setMaxDials(((Integer)maxDialsSpinner.getValue()).intValue());
Paper paper = (Paper)paperModel.getSelectedItem();
job.setPageWidth(paper.getWidth());
job.setPageLength(paper.getHeight());
}
public void revertFrom(FaxJob job) {
fullnameTextField.setText(job.getSender());
emailTextField.setText(job.getNotifyAdress());
if (job.getNotify() == null) {
notificationModel.setSelectedItem(Settings.Notification.NEVER);
}
else {
try {
notificationModel.setSelectedItem(Settings.Notification.getEnum(job.getNotify()));
} catch (IllegalArgumentException e) {
Dialogs.showError(this, i18n.tr("Unknown notification type. Using default."));
notificationModel.setSelectedItem(Settings.NOTIFICATION.getValue());
}
}
try {
resolutionModel.setSelectedItem(Settings.Resolution.getEnum(job.getVerticalResolution()));
} catch (IllegalArgumentException e) {
Dialogs.showError(this, i18n.tr("Invalid resolution. Using default."));
resolutionModel.setSelectedItem(Settings.RESOLUTION.getValue());
}
prioritySpinner.setValue(job.getPriority());
maxTriesSpinner.setValue(job.getMaxTries());
maxDialsSpinner.setValue(job.getMaxDials());
try {
paperModel.setSelectedItem(Paper.getEnum(job.getPageWidth(), job.getPageLength()));
} catch (IllegalArgumentException e) {
Dialogs.showError(this, i18n.tr("Unknown paper type. Using default."));
paperModel.setSelectedItem(Settings.PAPER.getValue());
}
}
public void revertFromSettings() {
fullnameTextField.setText(Settings.FULLNAME.getValue());
emailTextField.setText(Settings.EMAIL.getValue());
notificationModel.setSelectedItem(Settings.NOTIFICATION.getValue());
resolutionModel.setSelectedItem(Settings.RESOLUTION.getValue());
prioritySpinner.setValue(Settings.PRIORITY.getValue());
maxTriesSpinner.setValue(Settings.MAXTRIES.getValue());
maxDialsSpinner.setValue(Settings.MAXDIALS.getValue());
paperModel.setSelectedItem(Settings.PAPER.getValue());
}
public void applyToSettings()
{
Settings.FULLNAME.setValue(fullnameTextField.getText());
Settings.EMAIL.setValue(emailTextField.getText());
Settings.NOTIFICATION.setValue((Notification)notificationModel.getSelectedItem());
Settings.RESOLUTION.setValue((Resolution)resolutionModel.getSelectedItem());
Settings.PRIORITY.setValue(priorityModel.getNumber().intValue());
Settings.MAXTRIES.setValue((Integer)maxTriesSpinner.getValue());
Settings.MAXDIALS.setValue((Integer)maxDialsSpinner.getValue());
Settings.PAPER.setValue((Paper)paperModel.getSelectedItem());
}
public void revertFromDefaultSettings()
{
fullnameTextField.setText(Settings.FULLNAME.getDefaultValue());
emailTextField.setText(Settings.EMAIL.getDefaultValue());
notificationModel.setSelectedItem(Settings.NOTIFICATION.getDefaultValue());
resolutionModel.setSelectedItem(Settings.RESOLUTION.getDefaultValue());
prioritySpinner.setValue(Settings.PRIORITY.getDefaultValue());
maxTriesSpinner.setValue(Settings.MAXTRIES.getDefaultValue());
maxDialsSpinner.setValue(Settings.MAXDIALS.getDefaultValue());
paperModel.setSelectedItem(Settings.PAPER.getDefaultValue());
}
}