/*
* 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.binding.value.ValueModel;
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.dal33t.powerfolder.Controller;
import de.dal33t.powerfolder.Member;
import de.dal33t.powerfolder.ui.friends.FindComputersDialog;
import de.dal33t.powerfolder.ui.model.NodesSelectTableModel;
import de.dal33t.powerfolder.ui.dialog.BaseDialog;
import de.dal33t.powerfolder.util.Translation;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.InputEvent;
import java.util.Collection;
/**
* Dialog for selecting a number of users.
*/
public class NodesSelectDialog extends BaseDialog {
private ValueModel viaPowerFolderModel;
private Collection<Member> viaPowerFolderMembers;
private NodesSelectTable nodesSelectTable;
private NodesSelectTableModel nodesSelectTableModel;
private JCheckBox hideOffline;
private JButton okButton;
/**
* Initialize
*
* @param controller
* @param viaPowerFolderModel
* @param viaPowerFolderMembers
*/
public NodesSelectDialog(Controller controller,
ValueModel viaPowerFolderModel,
Collection<Member> viaPowerFolderMembers) {
super(Senior.NONE, controller, true);
this.viaPowerFolderModel = viaPowerFolderModel;
this.viaPowerFolderMembers = viaPowerFolderMembers;
}
public String getTitle() {
return Translation.getTranslation("dialog.node_select.title");
}
protected Icon getIcon() {
return null;
}
protected JComponent getContent() {
// Layout
FormLayout layout = new FormLayout(
"pref:grow",
"pref, 3dlu, pref, 3dlu, pref, 6dlu, pref");
PanelBuilder builder = new PanelBuilder(layout);
CellConstraints cc = new CellConstraints();
// Add components
builder.addLabel(Translation.getTranslation("dialog.node_select.text"),
cc.xy(1, 1));
hideOffline = new JCheckBox(Translation
.getTranslation("dialog.node_select.hide_offline.name"));
builder.add(hideOffline, cc.xy(1, 3));
hideOffline.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
doHide();
}
});
nodesSelectTableModel = new NodesSelectTableModel(getController());
nodesSelectTable = new NodesSelectTable(nodesSelectTableModel);
nodesSelectTable.registerKeyboardAction(new SelectAllAction(),
KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_MASK),
JComponent.WHEN_FOCUSED);
// Autoselect row if there is only one member.
if (nodesSelectTableModel.getRowCount() == 1) {
nodesSelectTable.setRowSelectionInterval(0, 0);
}
JScrollPane pane = new JScrollPane(nodesSelectTable);
pane.setPreferredSize(new Dimension(400, 200));
builder.add(pane, cc.xy(1, 5));
return builder.getPanel();
}
protected JButton getDefaultButton() {
return okButton;
}
protected Component getButtonBar() {
okButton = createOKButton(new ActionListener() {
public void actionPerformed(ActionEvent e) {
updateMembers();
close();
}
});
JButton cancelButton = createCancelButton(new ActionListener() {
public void actionPerformed(ActionEvent e) {
close();
}
});
JButton findFriendsButton = new JButton(Translation
.getTranslation("general.search"));
findFriendsButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
FindComputersDialog dialog = new FindComputersDialog(getController());
dialog.open();
}
});
return ButtonBarFactory.buildCenteredBar(okButton, findFriendsButton,
cancelButton);
}
private void updateMembers() {
Collection<Member> selectedMembers = nodesSelectTable.getSelectedMembers();
viaPowerFolderMembers.clear();
viaPowerFolderMembers.addAll(selectedMembers);
if (selectedMembers.isEmpty()) {
viaPowerFolderModel.setValue(Translation
.getTranslation("dialog.node_select.no_computers"));
} else if (selectedMembers.size() == 1) {
viaPowerFolderModel.setValue(selectedMembers.iterator().next().getNick());
} else {
viaPowerFolderModel.setValue(Translation
.getTranslation("dialog.node_select.multi_computers"));
}
}
/**
* Hide / show offline users.
*/
private void doHide() {
nodesSelectTableModel.setHideOffline(hideOffline.isSelected());
}
private class SelectAllAction extends AbstractAction {
public void actionPerformed(ActionEvent e) {
nodesSelectTable.selectAll();
}
}
}