/*
* Copyright 2010-2013, Sikuli.org
* Released under the MIT License.
*
* added RaiMan 2013
*/
package org.sikuli.ide;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Font;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.border.Border;
import org.sikuli.script.EventObserver;
import org.sikuli.script.EventSubject;
import org.sikuli.script.OverlayCapturePrompt;
import org.sikuli.script.ScreenImage;
/**
*
* @author rhocke
*/
public class EditorRegionLabel extends JLabel implements MouseListener, EventObserver {
protected String pyText;
protected String oldPyText = null;
private EditorPane editor;
private Color bc = Color.BLACK;
private Color bcs = Color.RED;
private Color fc;
private Color fcs = Color.RED;
private Border paddingBorder = BorderFactory.createEmptyBorder(0, 4, 0, 3);
private Border border = BorderFactory.createLineBorder(bc);
private Border borders = BorderFactory.createLineBorder(bcs);
private Border bfinal = BorderFactory.createCompoundBorder(paddingBorder, border);
private Border bfinals = BorderFactory.createCompoundBorder(paddingBorder, borders);
EditorRegionLabel() {
}
EditorRegionLabel(EditorPane pane, String lblText) {
init(pane, lblText);
}
EditorRegionLabel(EditorPane pane, String lblText, String oldText) {
oldPyText = oldText;
init(pane, lblText);
}
public void init(EditorPane pane, String lblText) {
editor = pane;
pyText = lblText;
setFont(new Font(editor.getFont().getFontName(), Font.PLAIN, editor.getFont().getSize()));
setBorder(bfinal);
setCursor(new Cursor(Cursor.HAND_CURSOR));
addMouseListener(this);
setText(pyText.replaceAll("Region", "").replaceAll("\\(", "").replaceAll("\\)", ""));
}
public static EditorRegionLabel labelFromString(EditorPane parentPane, String str) {
EditorRegionLabel reg = new EditorRegionLabel(parentPane, str);
return reg;
}
@Override
public void update(EventSubject s) {
if (s instanceof OverlayCapturePrompt) {
OverlayCapturePrompt cp = (OverlayCapturePrompt) s;
ScreenImage r = cp.getSelection();
cp.close();
if (r != null) {
try {
Thread.sleep(300);
} catch (InterruptedException ie) {}
doUpdate(r);
}
}
SikuliIDE.getInstance().setVisible(true);
}
public void doUpdate(ScreenImage simg) {
Rectangle roi = simg.getROI();
pyText = String.format("%d,%d,%d,%d",
(int) roi.x, (int) roi.y, (int) roi.width, (int) roi.height);
setText(pyText);
pyText = "Region(" + pyText + ")";
}
@Override
public String toString() {
return pyText;
}
//<editor-fold defaultstate="collapsed" desc="Mouse events not used">
@Override
public void mousePressed(MouseEvent me) {}
@Override
public void mouseReleased(MouseEvent me) {}
//</editor-fold>
@Override
public void mouseClicked(MouseEvent me) {
SikuliIDE ide = SikuliIDE.getInstance();
EditorPane codePane = ide.getCurrentCodePane();
ide.setVisible(false);
setForeground(fc);
setBorder(bfinal);
OverlayCapturePrompt prompt = new OverlayCapturePrompt(null, this);
prompt.prompt(SikuliIDE._I("msgCapturePrompt"), 500);
}
@Override
public void mouseEntered(MouseEvent me) {
setForeground(fcs);
setBorder(bfinals);
}
@Override
public void mouseExited(MouseEvent me) {
setForeground(fc);
setBorder(bfinal);
}
}