/*
* 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.dialog;
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 com.jgoodies.binding.adapter.BasicComponentFactory;
import com.jgoodies.binding.value.ValueModel;
import com.jgoodies.binding.value.ValueHolder;
import de.dal33t.powerfolder.Controller;
import de.dal33t.powerfolder.Member;
import de.dal33t.powerfolder.ui.util.Icons;
import de.dal33t.powerfolder.ui.widget.JButtonMini;
import de.dal33t.powerfolder.ui.action.BaseAction;
import de.dal33t.powerfolder.util.Translation;
import de.dal33t.powerfolder.ui.dialog.BaseDialog;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.File;
import java.util.Collection;
import java.util.ArrayList;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeEvent;
/**
* Dialog for offering a file to transfer to another computer..
*
* @author <a href="mailto:hglasgow@powerfolder.com">Harry Glasgow</a>
* @version $Revision: 2.01 $
*/
public class SingleFileTransferDialog extends BaseDialog {
private JButton transferButton;
private JButton cancelButton;
private File file;
private JTextField computersText;
private JButton computersSelectButton;
private ValueModel computersTextModel;
private final Collection<Member> computersMembers = new ArrayList<Member>();
private JTextArea messageTextArea;
/**
* Constructor.
*/
public SingleFileTransferDialog(Controller controller, File file,
Member node)
{
super(Senior.NONE, controller, true);
this.file = file;
if (node != null) {
computersMembers.add(node);
}
}
/**
* Gets the title of the dialog.
*
* @return
*/
public String getTitle() {
return Translation.getTranslation("dialog.single_file_transfer.title");
}
protected Component getButtonBar() {
return ButtonBarFactory.buildCenteredBar(transferButton, cancelButton);
}
/**
* Gets the icon for the dialog.
*
* @return
*/
protected Icon getIcon() {
return null;
}
protected JButton getDefaultButton() {
return transferButton;
}
/**
* Creates the visual component.
*
* @return
*/
protected JComponent getContent() {
initComponents();
FormLayout layout = new FormLayout("right:pref, 3dlu, pref",
"pref, 3dlu, pref, 3dlu, pref, pref");
PanelBuilder builder = new PanelBuilder(layout);
CellConstraints cc = new CellConstraints();
// Profile name
builder.add(new JLabel(Translation
.getTranslation("dialog.single_file_transfer.file_name")), cc.xy(1,
1));
JTextField fileNameTextField = new JTextField(file.getAbsolutePath());
fileNameTextField.setEnabled(false);
FormLayout layout2 = new FormLayout("140dlu", "pref");
PanelBuilder builder2 = new PanelBuilder(layout2);
builder2.add(fileNameTextField, cc.xy(1, 1));
JPanel panel2 = builder2.getPanel();
builder.add(panel2, cc.xy(3, 1));
builder.add(new JLabel(Translation
.getTranslation("dialog.single_file_transfer.computer")), cc.xy(1,
3));
if (computersMembers.isEmpty()) {
FormLayout layout4 = new FormLayout("122dlu, 3dlu, pref", "pref");
PanelBuilder builder4 = new PanelBuilder(layout4);
builder4.add(computersText, cc.xy(1, 1));
builder4.add(computersSelectButton, cc.xy(3, 1));
JPanel panel4 = builder4.getPanel();
builder.add(panel4, cc.xy(3, 3));
} else {
Member node = computersMembers.iterator().next();
JTextField nodeNameTextField = new JTextField(node.getInfo().nick);
nodeNameTextField.setEnabled(false);
FormLayout layout3 = new FormLayout("140dlu", "pref");
PanelBuilder builder3 = new PanelBuilder(layout3);
builder3.add(nodeNameTextField, cc.xy(1, 1));
JPanel panel3 = builder3.getPanel();
builder.add(panel3, cc.xy(3, 3));
}
builder
.add(
new JLabel(
Translation
.getTranslation("dialog.single_file_transfer.friend_message.text")),
cc.xyw(1, 5, 3));
JScrollPane scrollPane = new JScrollPane(messageTextArea);
scrollPane.setPreferredSize(new Dimension(400, 200));
builder.add(scrollPane, cc.xyw(1, 6, 3));
return builder.getPanel();
}
/**
* Initialize the dialog components.
*/
private void initComponents() {
cancelButton = createCancelButton(new ActionListener() {
public void actionPerformed(ActionEvent e) {
close();
}
});
// Buttons
createTransferButton();
computersTextModel = new ValueHolder();
computersTextModel.setValue(Translation
.getTranslation("dialog.node_select.no_computers"));
computersTextModel.addValueChangeListener(new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent evt) {
updateTransferButton();
}
});
computersText = BasicComponentFactory.createTextField(
computersTextModel, false);
computersText.setEnabled(false);
computersSelectButton = new JButtonMini(Icons
.getIconById(Icons.NODE_CONNECTED), Translation
.getTranslation("dialog.single_file_transfer.select_computer.tip"));
computersSelectButton.addActionListener(new MyActionListener());
updateTransferButton();
messageTextArea = new JTextArea();
}
private void updateTransferButton() {
transferButton.setEnabled(!computersMembers.isEmpty());
}
private void createTransferButton() {
SingleFileTransferAction action = new SingleFileTransferAction(
getController());
transferButton = new JButton(action);
}
private class SingleFileTransferAction extends BaseAction {
private SingleFileTransferAction(Controller controller) {
super("action_single_file_transfer", controller);
}
public void actionPerformed(ActionEvent e) {
// getController().getTransferManager().offerSingleFile(file,
// computersMembers, messageTextArea.getText());
close();
}
}
/**
* Listen for activation of the via powerfolder button.
*/
private class MyActionListener implements ActionListener {
/**
* Open a UserSelectDialog
*
* @param e
*/
public void actionPerformed(ActionEvent e) {
NodesSelectDialog dialog = new NodesSelectDialog(getController(),
computersTextModel, computersMembers);
dialog.open();
}
}
}