/*
* 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.preferences;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.ParseException;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;
import com.jgoodies.forms.builder.PanelBuilder;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import de.dal33t.powerfolder.ConfigurationEntry;
import de.dal33t.powerfolder.Controller;
import de.dal33t.powerfolder.PFComponent;
import de.dal33t.powerfolder.ui.util.Icons;
import de.dal33t.powerfolder.ui.dialog.AddressEditor;
import de.dal33t.powerfolder.ui.widget.JButtonMini;
import de.dal33t.powerfolder.util.StringUtils;
import de.dal33t.powerfolder.util.Translation;
import de.dal33t.powerfolder.util.net.AddressRange;
import de.dal33t.powerfolder.ui.dialog.AddressEditor.EditorResult;
public class LANList extends PFComponent {
private JPanel panel;
private JList networklist;
private JButton addButton;
private JButton removeButton;
private JButton editButton;
private boolean modified;
public LANList(Controller c) {
super(c);
modified = false;
initComponents();
}
private void initComponents() {
networklist = new JList(new DefaultListModel());
networklist
.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
addButton = new JButtonMini(Icons.getIconById(Icons.ADD), Translation
.getTranslation("folder_panel.settings_tab.addbutton.name"));
// addButton.setText();
removeButton = new JButtonMini(Icons.getIconById(Icons.DELETE),
Translation
.getTranslation("folder_panel.settings_tab.removebutton.name"));
// removeButton.setText();
editButton = new JButtonMini(Icons.getIconById(Icons.EDIT), Translation
.getTranslation("folder_panel.settings_tab.editbutton.name"));
// editButton.setText();
addButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
AddressEditor editor = new AddressEditor(getController());
editor.open();
if (editor.getResult() == EditorResult.OK) {
modified = true;
((DefaultListModel) networklist.getModel())
.addElement(editor.getAddressRange());
}
}
});
editButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (networklist.isSelectionEmpty()) {
return;
}
AddressEditor editor = new AddressEditor(getController(),
networklist.getSelectedValue().toString());
editor.open();
if (editor.getResult() == EditorResult.OK) {
((DefaultListModel) networklist.getModel()).set(networklist
.getSelectedIndex(), editor.getAddressRange());
modified = true;
}
}
});
removeButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
for (Object o : networklist.getSelectedValues()) {
((DefaultListModel) networklist.getModel())
.removeElement(o);
modified = true;
}
}
});
}
/**
* @return
*/
public JPanel getUIPanel() {
if (panel == null) {
FormLayout layout = new FormLayout("pref, pref, pref, pref:grow",
"40dlu, 3dlu, pref");
PanelBuilder builder = new PanelBuilder(layout);
CellConstraints cc = new CellConstraints();
builder.add(new JScrollPane(networklist), cc.xyw(1, 1, 4));
builder.add(addButton, cc.xy(1, 3));
builder.add(editButton, cc.xy(2, 3));
builder.add(removeButton, cc.xy(3, 3));
panel = builder.getPanel();
}
return panel;
}
public boolean save() {
Object[] ips = ((DefaultListModel) networklist.getModel()).toArray();
StringBuilder list = new StringBuilder();
for (Object o : ips) {
if (list.length() > 0) {
list.append(", ");
}
list.append((String) o);
}
ConfigurationEntry.LANLIST.setValue(getController(), list.toString());
return modified;
}
public void load() {
String lanListValue = ConfigurationEntry.LANLIST
.getValue(getController());
if (StringUtils.isBlank(lanListValue)) {
return;
}
String[] lanlist = lanListValue.split(",");
for (String ip : lanlist) {
AddressRange ar;
try {
ar = AddressRange.parseRange(ip);
} catch (ParseException e) {
logWarning("Invalid lanlist entry in configuration file!");
continue;
}
((DefaultListModel) networklist.getModel()).addElement(ar
.toString());
}
}
}