📄 settingswizard.java
字号:
/** * 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 java.awt.event.ActionEvent;import javax.swing.Action;import javax.swing.Icon;import javax.swing.JComponent;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPasswordField;import javax.swing.JSpinner;import javax.swing.JTextField;import javax.swing.SpinnerNumberModel;import org.xnap.commons.gui.Builder;import org.xnap.commons.gui.action.AbstractXNapAction;import org.xnap.commons.gui.util.GUIHelper;import org.xnap.commons.gui.util.IconHelper;import org.xnap.commons.gui.wizard.WizardDialog;import org.xnap.commons.gui.wizard.WizardPage;import org.xnap.commons.util.PortRange;import org.xnap.commons.util.SystemHelper;import com.jgoodies.forms.builder.DefaultFormBuilder;import com.jgoodies.forms.layout.FormLayout;/** * A dialog for editing of global settings. * * @author Steffen Pingel */public class SettingsWizard extends WizardDialog implements LocaleChangeListener { private static final int WIDTH = 500; private GeneralPage generalPage; private NotifyPage notifyPage; private ProgramsPage programsPage; private IntroductionPage introPage; public SettingsWizard(JFrame owner) { super(owner); introPage = new IntroductionPage(); addPage(introPage, "intro"); generalPage = new GeneralPage(); addPage(generalPage, "general"); notifyPage = new NotifyPage(); addPage(notifyPage, "notify"); programsPage = new ProgramsPage(); addPage(programsPage, "programs"); updateLabels(); revert(); pack(); } private DefaultFormBuilder createForm() { FormLayout layout = new FormLayout("left:max(20dlu;pref), 3dlu, pref, pref:grow(0.5), pref:grow(0.5)", ""); DefaultFormBuilder builder = new DefaultFormBuilder(layout); builder.setDefaultDialogBorder(); return builder; } public void revert() { generalPage.revert(); notifyPage.revert(); programsPage.revert(); } public void updateLabels() { setTitle(i18n.tr("JHylaFAX Setup Wizard")); introPage.updateLabels(); generalPage.updateLabels(); notifyPage.updateLabels(); programsPage.updateLabels(); } private class IntroductionPage implements WizardPage { private DefaultFormBuilder builder; private JLabel introLabel; public IntroductionPage() { builder = createForm(); introLabel = builder.append(""); builder.nextLine(); } public boolean apply() { if (!Settings.HAS_SEEN_WIZARD.getValue()) { JHylaFAX.getInstance().resetAllTables(); Settings.HAS_SEEN_WIZARD.setValue(true); } return true; } public String getDescription() { return i18n.tr("Easily setup JHylaFAX in 3 steps."); } public Icon getIcon() { return null; } public JComponent getPanel() { return builder.getPanel(); } public String getTitle() { return i18n.tr("JHylaFAX Setup Wizard"); } public void updateLabels() { introLabel.setText(GUIHelper.tt(i18n.tr( "JHylaFAX is a Java client for the HylaFAX fax server. " + "It is licensed under the " + "<b>General Public License (GPL)</b>, see about for details." + "<p>" + "<p>Setup requires three simple steps:" + "<ol>" + "<li>Server connection and authentication" + "<li>Sender and notifcation" + "<li>External viewer programs" + "</ol>" + "<p>Thank you for using JHylaFAX. "), WIDTH)); } } private class GeneralPage implements WizardPage { private DefaultFormBuilder builder; private JLabel hostnameLabel; private JTextField hostnameTextField; private JLabel passwordLabel; private JPasswordField passwordTextField; private JLabel portLabel; private JSpinner portSpinner; private SpinnerNumberModel portSpinnerModel; private JLabel usernameLabel; private JTextField usernameTextField; private JLabel hostnameDescriptionLabel; private JLabel usernameDescriptionLabel; public GeneralPage() { builder = createForm(); hostnameDescriptionLabel = new JLabel(); builder.append(hostnameDescriptionLabel, 5); builder.nextLine(); hostnameTextField = new JTextField(Constants.DEFAULT_COLUMNS); hostnameLabel = builder.append("", hostnameTextField, 3); builder.nextLine(); portSpinnerModel = new SpinnerNumberModel(); portSpinnerModel.setMinimum(PortRange.MIN_PORT); portSpinnerModel.setMaximum(PortRange.MAX_PORT); portSpinner = new JSpinner(portSpinnerModel); portSpinner.setEditor(new JSpinner.NumberEditor(portSpinner, "#")); portLabel = builder.append("", portSpinner); builder.nextLine(); usernameDescriptionLabel = new JLabel(); builder.append(usernameDescriptionLabel, 5); builder.nextLine(); usernameTextField = new JTextField(Constants.DEFAULT_COLUMNS); usernameLabel = builder.append("", usernameTextField, 3); builder.nextLine(); } public boolean apply() { Settings.HOSTNAME.setValue(hostnameTextField.getText()); Settings.PORT.setValue(portSpinnerModel.getNumber().intValue()); Settings.USERNAME.setValue(usernameTextField.getText()); return true; } public String getDescription() { return i18n.tr("The connection to the fax server is configured here."); } public Icon getIcon() { return IconHelper.getTitleIcon("connect_established.png"); } public JComponent getPanel() { return builder.getPanel(); } public String getTitle() { return i18n.tr("HylaFAX Server Connection"); } public void revert() { hostnameTextField.setText(Settings.HOSTNAME.getValue()); portSpinnerModel.setValue(Settings.PORT.getValue()); usernameTextField.setText(Settings.USERNAME.getValue()); } public void updateLabels() { hostnameDescriptionLabel.setText(GUIHelper.tt(i18n.tr("Enter the host and port of your HylaFAX server:"), WIDTH)); hostnameLabel.setText(i18n.tr("Host")); portLabel.setText(i18n.tr("Port")); usernameDescriptionLabel.setText(GUIHelper.tt(i18n.tr("Enter a username that is used to login to the server:"), WIDTH)); usernameLabel.setText(i18n.tr("Username")); } } private class NotifyPage implements WizardPage { private JTextField fullnameTextField; private DefaultFormBuilder builder; private JTextField emailTextField; private JLabel emailLabel; private JLabel fullnameLabel; private JLabel fullnameDescriptionLabel; private JLabel emailDescriptionLabel; public NotifyPage() { builder = createForm(); fullnameDescriptionLabel = new JLabel(); builder.append(fullnameDescriptionLabel, 5); builder.nextLine(); fullnameTextField = new JTextField(Constants.DEFAULT_COLUMNS); fullnameLabel = builder.append("", fullnameTextField, 3); builder.nextLine(); emailDescriptionLabel = new JLabel(); builder.append(emailDescriptionLabel, 5); builder.nextLine(); emailTextField = new JTextField(Constants.DEFAULT_COLUMNS); emailLabel = builder.append("", emailTextField, 3); builder.nextLine(); } public void updateLabels() { fullnameDescriptionLabel.setText(GUIHelper.tt(i18n.tr("Enter a name that is used to identify the sender:"), WIDTH)); fullnameLabel.setText(i18n.tr("Name")); emailDescriptionLabel.setText(GUIHelper.tt(i18n.tr("Enter an email address to receive notification when a fax has been sent or cancelled:"), WIDTH)); emailLabel.setText(i18n.tr("Email")); } public boolean apply() { Settings.FULLNAME.setValue(fullnameTextField.getText()); Settings.EMAIL.setValue(emailTextField.getText()); return true; } public String getDescription() { return i18n.tr("The sender's name and an email address for notifications are configured here."); } public Icon getIcon() { return IconHelper.getTitleIcon("kontact_mail.png"); } public JComponent getPanel() { return builder.getPanel(); } public String getTitle() { return i18n.tr("Sender and Notification"); } public void revert() { fullnameTextField.setText(Settings.FULLNAME.getValue()); emailTextField.setText(Settings.EMAIL.getValue()); } } private class ProgramsPage implements WizardPage { private DefaultFormBuilder builder; private ExecutableChooserPanel viewerPathFileChooserPanel; private JLabel viewerPathLabel; private ExecutableChooserPanel docViewerPathFileChooserPanel; private JLabel docViewerPathLabel; private String docViewer; private String viewer; private SearchProgramsAction searchProgramsAction; private JLabel viewerDescriptionLabel; private JLabel searchDescriptionLabel; private JLabel docViewerDescriptionLabel; private JLabel descriptionLabel; public ProgramsPage() { builder = createForm(); descriptionLabel = new JLabel(); builder.append(descriptionLabel, 5); builder.nextLine(); viewerDescriptionLabel = new JLabel(); builder.append(viewerDescriptionLabel, 5); builder.nextLine(); viewerPathFileChooserPanel = new ExecutableChooserPanel(Constants.DEFAULT_COLUMNS); viewerPathFileChooserPanel.setDialogParent(SettingsWizard.this); viewerPathLabel = builder.append("", viewerPathFileChooserPanel, 3); builder.nextLine(); docViewerDescriptionLabel = new JLabel(); builder.append(docViewerDescriptionLabel, 5); builder.nextLine(); docViewerPathFileChooserPanel = new ExecutableChooserPanel(Constants.DEFAULT_COLUMNS); docViewerPathFileChooserPanel.setDialogParent(SettingsWizard.this); docViewerPathLabel = builder.append("", docViewerPathFileChooserPanel, 3); builder.nextLine(); searchDescriptionLabel = new JLabel(); builder.append(searchDescriptionLabel, 5); builder.nextLine(); builder.append(""); builder.nextLine(); searchProgramsAction = new SearchProgramsAction(); builder.append(Builder.createButton(searchProgramsAction)); builder.nextLine(); } public void revert() { searchForPrograms(); if (!"".equals(Settings.VIEWER_PATH.getValue())) { viewerPathFileChooserPanel.getTextField().setText(Settings.VIEWER_PATH.getValue()); } else { viewerPathFileChooserPanel.getTextField().setText(viewer); } if (!"".equals(Settings.DOC_VIEWER_PATH.getValue())) { docViewerPathFileChooserPanel.getTextField().setText(Settings.DOC_VIEWER_PATH.getValue()); } else { docViewerPathFileChooserPanel.getTextField().setText(docViewer); } } private void searchForPrograms() { if (SystemHelper.IS_WINDOWS) { if (SystemHelper.IS_WINDOWS_XP) { viewer= "rundll32.exe shimgvw.dll,ImageView_Fullscreen $f"; } else { String path = System.getenv("ProgramFiles"); viewer = searchExecutable(new String[][] { { path + "\\Windows NT\\Accessories\\ImageVue", "kodakimg.exe", "$f" }, }); } docViewer = searchExecutable(new String[][] { { null, "gsview32.exe", "$f" }, }); } else if (SystemHelper.IS_MACOSX) { viewer = "open -a Preview.app $f"; docViewer = "open -a Preview.app $f"; } else { viewer = searchExecutable(new String[][] { { "/usr/bin", "kfax", "$f" }, }); docViewer = searchExecutable(new String[][] { { "/usr/bin", "gv", "$f" }, { "/usr/bin", "kghostview", "$f" }, }); } } private String searchExecutable(String[][] programs) { return programs[0][1] + " " + programs[0][2]; /* for (int programIndex = 0; programIndex < programs.length; programIndex++) { String[] program = programs[programIndex]; if (program[0] != null && new File(program[0], program[1]).exists()) { return program[0] + File.pathSeparator + program[1] + " " + program[2]; } } */ } public void updateLabels() { descriptionLabel.setText(GUIHelper.tt(i18n.tr("JHylaFAX depends on external programs to display received and sent faxes. " + "You can either enter the path of a program or use Search to let JHylaFAX suggest a program." + "You may use $f as a placeholder for the filename that is passed as a parameter."), WIDTH)); viewerDescriptionLabel.setText(GUIHelper.tt(i18n.tr("Enter the path of a programm that can handle TIFF G3 files:"), WIDTH)); viewerPathLabel.setText(i18n.tr("Fax Viewer")); docViewerDescriptionLabel.setText(GUIHelper.tt(i18n.tr("Enter the path of a programm that can handle PostScript files:"), WIDTH)); docViewerPathLabel.setText(i18n.tr("Document Viewer")); searchProgramsAction.putValue(Action.NAME, i18n.tr("Search")); } public boolean apply() { Settings.VIEWER_PATH.setValue(viewerPathFileChooserPanel.getTextField().getText()); Settings.DOC_VIEWER_PATH.setValue(docViewerPathFileChooserPanel.getTextField().getText()); return true; } public String getDescription() { return i18n.tr("Viewer programs are configured here."); } public Icon getIcon() { return IconHelper.getTitleIcon("misc.png"); } public JComponent getPanel() { return builder.getPanel(); } public String getTitle() { return i18n.tr("External Programs"); } private class SearchProgramsAction extends AbstractXNapAction { public SearchProgramsAction() { putValue(ICON_FILENAME, "find.png"); } public void actionPerformed(ActionEvent e) { searchForPrograms(); viewerPathFileChooserPanel.getTextField().setText(viewer); docViewerPathFileChooserPanel.getTextField().setText(docViewer); } } } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -