package com.limegroup.gnutella.gui.init; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.IOException; import javax.swing.BoxLayout; import javax.swing.JPanel; import com.limegroup.gnutella.gui.BoxPanel; import com.limegroup.gnutella.gui.ButtonRow; import com.limegroup.gnutella.gui.FileChooserHandler; import com.limegroup.gnutella.gui.GUIMediator; import com.limegroup.gnutella.gui.LabeledTextField; import com.limegroup.gnutella.settings.SharingSettings; /** * This class displays a setup window for allowing the user to choose * the directory for saving their files. */ //2345678|012345678|012345678|012345678|012345678|012345678|012345678|012345678| class SaveWindow extends SetupWindow { /** * Constant handle to the <tt>LabeledTextField</tt> instance for the * save directory. */ private final LabeledTextField SAVE_FIELD = new LabeledTextField( GUIMediator.getStringResource("INIT_SAVE_DIRECTORY_FIELD_LABEL"), 20); /** * Variable for the default save directory to use. */ private String _defaultSaveDir; /** * Creates the window and its components */ SaveWindow(SetupManager manager) { super(manager, "SETUP_SAVE_TITLE", "SETUP_SAVE_LABEL"); } protected void createWindow() { super.createWindow(); File saveDir = SharingSettings.getSaveDirectory(); try { _defaultSaveDir = saveDir.getCanonicalPath(); } catch(IOException e) { _defaultSaveDir = saveDir.getAbsolutePath(); } JPanel mainPanel = new BoxPanel(BoxLayout.Y_AXIS); String[] labels = { "INIT_SAVE_BROWSE_BUTTON_LABEL", "INIT_SAVE_DEFAULT_BUTTON_LABEL" }; String[] toolTips = { "INIT_SAVE_BROWSE_BUTTON_TIP", "INIT_SAVE_DEFAULT_BUTTON_TIP" }; ActionListener[] listeners = { new SaveListener(), new DefaultListener() }; ButtonRow buttons = new ButtonRow(labels, toolTips, listeners, ButtonRow.X_AXIS, ButtonRow.LEFT_GLUE); try { SAVE_FIELD.setText(_defaultSaveDir); } catch(NullPointerException npe) { // internal swing error -- no biggie if it happens, // just means the user has to manually click 'Use Default'. } mainPanel.add(SAVE_FIELD); mainPanel.add(buttons); super.addSetupComponent(mainPanel); } /** * Overrides applySettings method in SetupWindow. * * This method applies any settings associated with this setup window. */ public void applySettings() throws ApplySettingsException { try { String saveDirString = SAVE_FIELD.getText(); File saveDir = new File(saveDirString); if (!saveDir.isDirectory()) if(!saveDir.mkdirs()) throw new IOException(); // updates Incomplete directory etc... SharingSettings.setSaveDirectory(saveDir); SharingSettings.DIRECTORIES_TO_SHARE.add(saveDir); } catch(IOException ioe) { String msgKey = "MESSAGE_INVALID_SAVE_DIRECTORY"; throw new ApplySettingsException(msgKey); } } private class DefaultListener implements ActionListener { public void actionPerformed(ActionEvent e) { SAVE_FIELD.setText(_defaultSaveDir); } } private class SaveListener implements ActionListener { public void actionPerformed(ActionEvent e) { File saveDir = FileChooserHandler.getInputDirectory(SaveWindow.this); if(saveDir == null || !saveDir.isDirectory()) return; SAVE_FIELD.setText(saveDir.getAbsolutePath()); } } }