public class PageLabel
extends Label {
private static final Border MARKED_BORDER = BorderFactory.
createEtchedBorder(Color.
red, Color.red);
private static final Border BORDER = BorderFactory.createEtchedBorder(Color.
black,
Color.black);
private boolean marked = false;
private PDPage page = null;
private JPPages view = null;
private BufferedImage bi = null;
private PropertyChangeSupport pcs = null;
public static final String PROPERTY_MARKED_CHANGED =
"PROPERTY_MARKED_CHANGED";
PageLabel(BufferedImage bi, PDPage page, JPPages view, int seite) {
pcs = new PropertyChangeSupport(this);
this.bi = bi;
this.page = page;
this.view = view;
guiInit(bi);
setToolTipText("Seite " + (seite + 1));
}
public void addPropertyChangeListener(PropertyChangeListener l) {
super.addPropertyChangeListener(l);
if (pcs != null)
pcs.addPropertyChangeListener(l);
}
public void removePropertyChangeListener(PropertyChangeListener l) {
super.removePropertyChangeListener(l);
if (pcs != null)
pcs.removePropertyChangeListener(l);
}
private void guiInit(Image i) {
ImageIcon ii = new ImageIcon(i);
setBorder(BORDER);
setIcon(ii);
addMouseListener(new MouseListener() {
public void mouseClicked(MouseEvent e) {
boolean b = e.isControlDown();
if (b) {
if (marked) {
unmark(true);
}
else {
mark(true);
}
}
else {
view.unmarkAll();
if (!marked) {
mark(true);
}
}
}
public void mouseEntered(MouseEvent e) {
if (!marked)
setBorder(MARKED_BORDER);
}
public void mouseExited(MouseEvent e) {
if (!marked)
setBorder(BORDER);
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
});
}
BufferedImage getBufferedImage() {
return bi;
}
void setBufferedImage(BufferedImage bi) {
this.bi = bi;
}
public PDPage getPage() {
return page;
}
void mark(boolean fireEvent) {
boolean old = marked;
marked = true;
setBorder(MARKED_BORDER);
if(fireEvent)
pcs.firePropertyChange(PROPERTY_MARKED_CHANGED, old, marked);
}
void mark() {
mark(false);
}
void unmark() {
unmark(false);
}
void unmark(boolean fireEvent) {
boolean old = marked;
marked = false;
setBorder(BORDER);
if(fireEvent)
pcs.firePropertyChange(PROPERTY_MARKED_CHANGED, old, marked);
}
}
//ROTATE_METHOD:
private void rotatePages(double angle) {
double rad = Math.toRadians(angle);
for (Iterator iter = view.getSelectedPages().iterator(); iter.hasNext(); ) {
PageLabel pl = (PageLabel) iter.next();
BufferedImage old = pl.getBufferedImage();
AffineTransform af = AffineTransform.getRotateInstance(rad, old.getWidth()/2, old.getHeight()/2);
AffineTransformOp afp = new AffineTransformOp(af,
AffineTransformOp.TYPE_BILINEAR);
BufferedImage _new = new BufferedImage(old.getHeight(), old.getWidth(), old.getType());
afp.filter(old, _new);
pl.setIcon(new ImageIcon(_new));
pl.setBufferedImage(_new);
}
}