/*
* Copyright (c) 2010-2016, Sikuli.org, sikulix.com
* Released under the MIT License.
*
*/
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.RunTime;
import org.sikuli.script.Screen;
import org.sikuli.util.EventSubject;
import org.sikuli.util.OverlayCapturePrompt;
import org.sikuli.script.ScreenImage;
import org.sikuli.util.EventObserver;
/**
*
* @author rhocke
*/
public class EditorRegionLabel extends JLabel implements MouseListener, EventObserver {
protected String pyText;
protected String oldPyText = null;
private EditorPane editor;
private final Color bc = Color.BLACK;
private final Color bcs = Color.RED;
private Color fc;
private final Color fcs = Color.RED;
private final Border paddingBorder = BorderFactory.createEmptyBorder(0, 4, 0, 3);
private final Border border = BorderFactory.createLineBorder(bc);
private final Border borders = BorderFactory.createLineBorder(bcs);
private final Border bfinal = BorderFactory.createCompoundBorder(paddingBorder, border);
private final Border bfinals = BorderFactory.createCompoundBorder(paddingBorder, borders);
private SikuliIDEPopUpMenu popMenu = null;
private boolean wasPopup = false;
EditorRegionLabel() {
}
EditorRegionLabel(EditorPane pane, String lblText) {
init(pane, lblText);
}
EditorRegionLabel(EditorPane pane, String lblText, String oldText) {
oldPyText = oldText;
init(pane, lblText);
}
private 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 boolean isRegionLabel() {
return true;
}
public static EditorRegionLabel labelFromString(EditorPane parentPane, String str) {
EditorRegionLabel reg = new EditorRegionLabel(parentPane, str);
return reg;
}
@Override
public String toString() {
return pyText;
}
@Override
public void mousePressed(MouseEvent me) {
checkPopup(me);
}
@Override
public void mouseReleased(MouseEvent me) {
checkPopup(me);
}
private void checkPopup(MouseEvent me) {
if (me.isPopupTrigger()) {
popMenu = editor.getPopMenuImage();
if (popMenu != null) {
wasPopup = true;
popMenu.show(this, me.getX(), me.getY());
}
return;
}
}
@Override
public void mouseClicked(MouseEvent me) {
if (wasPopup) {
wasPopup = false;
return;
}
SikuliIDE ide = SikuliIDE.getInstance();
ide.setVisible(false);
setForeground(fc);
setBorder(bfinal);
RunTime.pause(0.5f);
Screen.doPrompt(SikuliIDE._I("msgCapturePrompt"), this);
}
@Override
public void update(EventSubject es) {
OverlayCapturePrompt ocp = (OverlayCapturePrompt) es;
ScreenImage simg = ocp.getSelection();
Screen.closePrompt();
if (simg != null) {
try {
Thread.sleep(300);
} catch (InterruptedException ie) {
}
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 + ")";
}
Screen.resetPrompt(ocp);
SikuliIDE.showAgain();
}
@Override
public void mouseEntered(MouseEvent me) {
setForeground(fcs);
setBorder(bfinals);
}
@Override
public void mouseExited(MouseEvent me) {
setForeground(fc);
setBorder(bfinal);
}
}