/*
* Copyright (C) 2010 Markus Echterhoff <tam@edu.uni-klu.ac.at>
*
* This file is part of EvoPaint.
*
* EvoPaint 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, 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with EvoPaint. If not, see <http://www.gnu.org/licenses/>.
*/
package evopaint.gui.rulesetmanager;
import evopaint.Configuration;
import evopaint.pixel.rulebased.targeting.Qualifier;
import evopaint.pixel.rulebased.targeting.qualifiers.ExistenceQualifier;
import evopaint.pixel.rulebased.util.ObjectComparisonOperator;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
/**
*
* @author Markus Echterhoff <tam@edu.uni-klu.ac.at>
*/
public class JQualifierList extends JPanel {
private List<JQualifierButton> jQualifiers;
private JPanel panelForQualifierWrappers;
private JButton andButton;
private JLabel whichLabel;
public List<Qualifier> createQualifiers() {
List<Qualifier> qualifiers = new ArrayList<Qualifier>();
for (int i = 0; i < jQualifiers.size(); i++) {
Qualifier q = jQualifiers.get(i).createQualifier();
qualifiers.add(q);
}
return qualifiers;
}
public JQualifierList(List<Qualifier> qualifiers) {
jQualifiers = new ArrayList<JQualifierButton>();
setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
setBackground(new Color(0xF2F2F5));
whichLabel = new JLabel("<html><span style='color: #0000E6; font-weight: bold;'>which</span><html>");
add(whichLabel);
JPanel container = new JPanel();
add(container);
container.setLayout(new BorderLayout(10, 5));
container.setBackground(new Color(0xF2F2F5));
panelForQualifierWrappers = new JPanel();
panelForQualifierWrappers.setLayout(new BoxLayout(panelForQualifierWrappers, BoxLayout.Y_AXIS));
container.add(panelForQualifierWrappers, BorderLayout.CENTER);
for (Qualifier q : qualifiers) {
addQualifier(q);
}
JPanel controlPanel = new JPanel();
controlPanel.setBackground(new Color(0xF2F2F5));
andButton = new JButton("<html><span style='color: #0000E6; font-weight: bold;'>and</span></html>");
andButton.addActionListener(new AndButtonListener());
controlPanel.add(andButton);
container.add(controlPanel, BorderLayout.SOUTH);
if (qualifiers.size() == 0) {
addQualifier(new ExistenceQualifier(ObjectComparisonOperator.EQUAL));
setEnabled(false);
}
}
public JQualifierList() {
this(new ArrayList<Qualifier>());
}
public void addQualifier(Qualifier qualifier) {
JPanel wrapper = new JPanel(new FlowLayout(FlowLayout.LEFT));
wrapper.setBackground(new Color(0xF2F2F5));
JQualifierButton JQualifierButton = new JQualifierButton(this, qualifier);
jQualifiers.add(JQualifierButton);
wrapper.add(JQualifierButton);
JButton btnDelete = new JButton(new ImageIcon(getClass().getResource("icons/button-delete-condition.png")));
btnDelete.setPreferredSize(new Dimension(btnDelete.getPreferredSize().height, btnDelete.getPreferredSize().height));
btnDelete.addActionListener(new JQualifierDeleteListener(JQualifierButton));
wrapper.add(btnDelete);
panelForQualifierWrappers.add(wrapper);
panelForQualifierWrappers.revalidate(); // will not display anything without this revalidate here
}
@Override
public void setEnabled(boolean bool) {
super.setEnabled(bool);
Component [] wrappers = panelForQualifierWrappers.getComponents();
for (int i = 0; i < wrappers.length; i++) {
Component wrapper = wrappers[i];
JButton qualifierButton = (JButton)((JPanel)wrapper).getComponent(0);
qualifierButton.setEnabled(bool);
if (bool == true) {
qualifierButton.setText(jQualifiers.get(i).createQualifier().toHTML());
} else {
qualifierButton.setText("<html><span style='color: #A0A0A0;'>"+
jQualifiers.get(i).createQualifier().toString().replaceAll(".?", " ") +
"</span><html>");
}
((JPanel)wrapper).getComponent(1).setEnabled(bool);
}
andButton.setEnabled(bool);
if (bool == true) {
whichLabel.setText("<html><span style='color: #0000E6; font-weight: bold;'>which</span><html>");
andButton.setText("<html><span style='color: #0000E6; font-weight: bold;'>and</span><html>");
} else {
whichLabel.setText("<html><span style='color: #A0A0A0; font-weight: bold;'>which</span><html>");
andButton.setText("<html><span style='color: #A0A0A0; font-weight: bold;'>and</span><html>");
}
}
private class AndButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
Qualifier qualifier = Configuration.AVAILABLE_QUALIFIERS.get(0);
addQualifier(qualifier);
}
}
private class JQualifierDeleteListener implements ActionListener {
private JQualifierButton jQualifier;
public JQualifierDeleteListener(JQualifierButton jQualifier) {
this.jQualifier = jQualifier;
}
public void actionPerformed(ActionEvent e) {
jQualifiers.remove(jQualifier);
Component [] components = panelForQualifierWrappers.getComponents();
for (int i = 0; i < components.length; i++) {
JPanel wrapper = (JPanel)components[i];
if (wrapper.getComponent(0) == jQualifier) {
panelForQualifierWrappers.remove(wrapper);
panelForQualifierWrappers.revalidate();
panelForQualifierWrappers.repaint();
break;
}
}
if (jQualifiers.size() == 0) {
addQualifier(Configuration.AVAILABLE_QUALIFIERS.get(0));
}
}
}
}