/**
* Copyright (c) 2009 - 2011 AppWork UG(haftungsbeschränkt) <e-mail@appwork.org>
*
* This file is part of org.appwork.utils.swing.renderer
*
* This software is licensed under the Artistic License 2.0,
* see the LICENSE file or http://www.opensource.org/licenses/artistic-license-2.0.php
* for details
*/
package org.appwork.utils.swing.renderer;
import java.awt.Color;
import javax.swing.Icon;
import javax.swing.JPanel;
import net.miginfocom.swing.MigLayout;
import org.appwork.utils.ImageProvider.ImageProvider;
/**
* @author daniel
*
*/
public class MultipleRenderLabel extends JPanel {
private static final long serialVersionUID = -378709535509849986L;
private RenderLabel left;
private RenderLabel[] rights = null;
private int ICONCOUNT = 0;
public MultipleRenderLabel(final int size) {
super(new MigLayout("ins 0", "[]0[fill,grow,align right]"));
this.rights = new RenderLabel[size];
this.ICONCOUNT = size;
this.add(this.left = new RenderLabel());
this.left.setOpaque(false);
for (int i = 0; i < this.ICONCOUNT; i++) {
this.add(this.rights[i] = new RenderLabel(), "dock east");
this.rights[i].setOpaque(false);
}
this.setOpaque(false);
}
/**
* Remember, that its always the same panel instance. so we have to reset to
* defaults before each cellrenderer call.
*/
public void clearIcons(final int counter) {
for (int i = counter; i < this.ICONCOUNT; i++) {
this.rights[i].setIcon(null);
this.rights[i].setText(null);
this.rights[i].setToolTipText(null);
}
}
@Override
public String getToolTipText() {
final StringBuilder sb = new StringBuilder();
if (this.left.getToolTipText() != null) {
sb.append(this.left.getToolTipText());
}
for (int i = this.rights.length - 1; i >= 0; --i) {
if (this.rights[i].getToolTipText() != null) {
if (sb.length() > 0) {
sb.append(" | ");
}
sb.append(this.rights[i].getToolTipText());
}
}
if (sb.length() > 0) { return sb.toString(); }
return null;
}
@Override
public void setEnabled(final boolean b) {
if (this.left == null) { return; }
if (b == false) {
this.left.setDisabledIcon(ImageProvider.getDisabledIcon(this.left.getIcon()));
}
this.left.setEnabled(b);
for (int i = 0; i < this.ICONCOUNT; i++) {
if (b == false) {
this.rights[i].setDisabledIcon(ImageProvider.getDisabledIcon(this.rights[i].getIcon()));
}
this.rights[i].setEnabled(b);
}
}
@Override
public void setForeground(final Color fg) {
super.setForeground(fg);
if (this.left == null) { return; }
this.left.setForeground(fg);
for (final RenderLabel right : this.rights) {
right.setForeground(fg);
}
}
public void setIcon(final int i, final Icon icon, final String text, final String tooltip) {
if (i < 0 && this.ICONCOUNT > 0) {
this.left.setIcon(icon);
// left.setText(text);
this.left.setToolTipText(tooltip);
} else {
if (i < 0 || i >= this.ICONCOUNT) { return; }
this.rights[i].setIcon(icon);
this.rights[i].setText(text);
this.rights[i].setToolTipText(tooltip);
}
}
/**
* clears the icon for left, setIcon AFTER setText
*/
public void setText(final String text, final Icon icon) {
this.left.setIcon(icon);
this.left.setText(text);
this.left.setToolTipText(text);
}
}