/*
* RapidMiner
*
* Copyright (C) 2001-2014 by RapidMiner and the contributors
*
* Complete list of developers available at our web site:
*
* http://rapidminer.com
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see http://www.gnu.org/licenses/.
*/
package com.rapidminer.gui.new_plotter.gui;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import com.rapidminer.gui.new_plotter.configuration.DataTableColumn;
import com.rapidminer.gui.tools.ExtendedJScrollPane;
import com.rapidminer.gui.tools.FilterTextField;
import com.rapidminer.gui.tools.FilterableListModel;
import com.rapidminer.gui.tools.ResourceAction;
import com.rapidminer.gui.tools.dialogs.ButtonDialog;
import com.rapidminer.tools.I18N;
/**
* A dialog to select a subset of attributes.
*
* @author Tobias Malbrecht, Nils Woehler
*/
public class AttributeSelectionDialog extends ButtonDialog {
private static final long serialVersionUID = 5396725165122306231L;
private final ArrayList<String> items;
private final ArrayList<String> selectedItems;
private final FilterTextField itemSearchField;
private final FilterTextField selectedItemSearchField;
private final FilterableListModel itemListModel;
private final FilterableListModel selectedItemListModel;
private final JList itemList;
private final JList selectedItemList;
private final Action selectAttributesAction = new ResourceAction(true, "plotter.attributes.select") {
private static final long serialVersionUID = -3046621278306353077L;
public void actionPerformed(ActionEvent e) {
int[] indices = itemList.getSelectedIndices();
itemList.setSelectedIndices(new int[] {});
for (int i = indices.length - 1; i >= 0; i--) {
String item = itemListModel.getElementAt(indices[i]).toString();
selectedItemListModel.addElement(item);
itemListModel.removeElementAt(indices[i]);
selectedItems.add(item);
items.remove(item);
}
}
};
private final Action deselectAttributesAction = new ResourceAction(true, "plotter.attributes.deselect") {
private static final long serialVersionUID = -3046621278306353077L;
public void actionPerformed(ActionEvent e) {
int[] indices = selectedItemList.getSelectedIndices();
selectedItemList.setSelectedIndices(new int[] {});
for (int i = indices.length - 1; i >= 0; i--) {
String item = selectedItemListModel.getElementAt(indices[i]).toString();
itemListModel.addElement(item);
selectedItemListModel.removeElementAt(indices[i]);
items.add(item);
selectedItems.remove(item);
}
}
};
public AttributeSelectionDialog(final List<DataTableColumn> columns) { //List<DataTableColumn preselectedColumns) {
super("plotter.attribute_selection", true,new Object[]{});
JPanel panel = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
items = new ArrayList<String>();
selectedItems = new ArrayList<String>();
itemListModel = new FilterableListModel();
selectedItemListModel = new FilterableListModel();
for (DataTableColumn item : columns) {
// if (!preselectedItems.contains(item)) {
items.add(item.getName());
itemListModel.addElement(item);
// } else {
// selectedItems.add(item);
// selectedItemListModel.addElement(item);
// }
}
// for (String item : preselectedItems) {
// if (!type.getAttributeNames().contains(item)) {
// selectedItems.add(item);
// selectedItemListModel.addElement(item);
// }
// }
itemSearchField = new FilterTextField();
itemSearchField.addFilterListener(itemListModel);
JButton itemSearchFieldClearButton = new JButton(new ResourceAction(true, "plotter.attributes.clear") {
private static final long serialVersionUID = -3046621278306353077L;
@Override
public void actionPerformed(ActionEvent e) {
itemSearchField.clearFilter();
}
});
JPanel itemSearchFieldPanel = new JPanel(new GridBagLayout());
c.insets = new Insets(0, 0, 0, 0);
c.gridx = 0;
c.gridy = 0;
c.weightx = 1;
c.weighty = 0;
c.fill = GridBagConstraints.BOTH;
itemSearchFieldPanel.add(itemSearchField, c);
c.gridx = 1;
c.weightx = 0;
itemSearchFieldPanel.add(itemSearchFieldClearButton, c);
itemList = new JList(itemListModel);
itemList.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
selectAttributesAction.actionPerformed(null);
}
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
});
JScrollPane itemListPane = new ExtendedJScrollPane(itemList);
itemListPane.setBorder(createBorder());
JPanel itemListPanel = new JPanel(new GridBagLayout());
c.insets = new Insets(4, 4, 4, 4);
c.gridx = 0;
c.gridy = 0;
c.weightx = 1;
c.weighty = 0;
c.fill = GridBagConstraints.BOTH;
itemListPanel.add(itemSearchFieldPanel, c);
c.gridy = 1;
c.weighty = 1;
itemListPanel.add(itemListPane, c);
itemListPanel.setBorder(createTitledBorder(I18N.getMessage(I18N.getGUIBundle(), getKey() + ".border")));
selectedItemSearchField = new FilterTextField();
selectedItemSearchField.addFilterListener(selectedItemListModel);
JButton selectedItemSearchFieldClearButton = new JButton(new ResourceAction(true, "plotter.attributes.clear") {
private static final long serialVersionUID = -3046621278306353032L;
@Override
public void actionPerformed(ActionEvent e) {
selectedItemSearchField.clearFilter();
}
});
JPanel selectedItemSearchFieldPanel = new JPanel(new GridBagLayout());
c.insets = new Insets(0, 0, 0, 0);
c.gridx = 0;
c.gridy = 0;
c.weightx = 1;
c.weighty = 0;
c.fill = GridBagConstraints.BOTH;
selectedItemSearchFieldPanel.add(selectedItemSearchField, c);
// JButton addValueButton = new JButton(new ResourceAction(true, "plotter.attributes.add") {
//
// private static final long serialVersionUID = 41667438431831572L;
//
// @Override
// public void actionPerformed(ActionEvent e) {
// String item = selectedItemSearchField.getText();
// if (selectedItems.contains(item)) {
// selectedItemSearchField.clearFilter();
// return;
// }
// if (items.contains(item)) {
// selectedItemListModel.addElement(item);
// itemListModel.removeElement(item);
// selectedItems.add(item);
// items.remove(item);
// selectedItemSearchField.clearFilter();
// return;
// }
// selectedItems.add(item);
// selectedItemListModel.addElement(item);
// selectedItemSearchField.clearFilter();
// }
// });
//
// c.gridx = 1;
// c.weightx = 0;
// selectedItemSearchFieldPanel.add(addValueButton, c);
c.gridx = 2;
c.weightx = 0;
selectedItemSearchFieldPanel.add(selectedItemSearchFieldClearButton, c);
selectedItemList = new JList(selectedItemListModel);
selectedItemList.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
deselectAttributesAction.actionPerformed(null);
}
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
});
JScrollPane selectedItemListPane = new ExtendedJScrollPane(selectedItemList);
selectedItemListPane.setBorder(createBorder());
JPanel selectedItemListPanel = new JPanel(new GridBagLayout());
c.insets = new Insets(4, 4, 4, 4);
c.gridx = 0;
c.gridy = 0;
c.weightx = 1;
c.weighty = 0;
c.fill = GridBagConstraints.BOTH;
selectedItemListPanel.add(selectedItemSearchFieldPanel, c);
c.gridy = 1;
c.weighty = 1;
selectedItemListPanel.add(selectedItemListPane, c);
selectedItemListPanel.setBorder(createTitledBorder(I18N.getMessage(I18N.getGUIBundle(), getKey() + ".selected_attributes.border")));
c.insets = new Insets(0, 0, 0, 0);
c.gridx = 0;
c.gridy = 0;
c.weightx = 0.5;
c.weighty = 1;
c.fill = GridBagConstraints.BOTH;
panel.add(itemListPanel, c);
JPanel midButtonPanel = new JPanel(new GridLayout(2, 1));
JButton selectButton = new JButton(selectAttributesAction);
JButton deselectButton = new JButton(deselectAttributesAction);
midButtonPanel.add(deselectButton, 0, 0);
midButtonPanel.add(selectButton, 1, 0);
c.insets = new Insets(4, 4, 4, 4);
c.gridx = 1;
c.weightx = 0;
c.weighty = 1;
c.fill = GridBagConstraints.NONE;
panel.add(midButtonPanel, c);
c.insets = new Insets(0, 0, 0, 0);
c.gridx = 2;
c.gridy = 0;
c.weightx = 0.5;
c.fill = GridBagConstraints.BOTH;
panel.add(selectedItemListPanel, c);
Dimension d = panel.getPreferredSize();
d.setSize(d.getWidth() / 2, d.getHeight());
itemListPanel.setPreferredSize(d);
selectedItemListPanel.setPreferredSize(d);
layoutDefault(panel, NORMAL, makeOkButton(), makeCancelButton());
}
public Collection<String> getSelectedAttributeNames() {
return selectedItems;
}
}