/** * the event is removed from the list * * @param name event's name * @return the named event if happened otherwise null */ public ObserveEvent getEvent(String name) { return Observing.getEvent(name); }
/** * the region's events are removed from the list * * @return the region's happened events as array if any (size might be 0) */ public ObserveEvent[] getEvents() { return Observing.getEvents(this); }
/** * @return true if any events have happened for this region, false otherwise */ public boolean hasEvents() { return Observing.hasEvents(this); }
Observing.addRunningObserver(this); while (observing && stop_t > (new Date()).getTime()) { long before_find = (new Date()).getTime(); } else { log(lvl, "observe: ended successfully: " + this.toStringShort()); observeSuccess = Observing.hasEvents(this);
protected static void removeRunningObserver(Region r) { runningObservers.remove(r); log(lvl, "remove observer: now running %d observer(s)", runningObservers.size()); }
protected void removeObserver(String name) { Observing.remove(name); if (eventTypes.get(name) == ObserveEvent.Type.CHANGE) { if (eventCallBacks.get(name) != null) { numChangeCallBacks--; } numChangeObservers--; } eventNames.remove(name); eventCallBacks.remove(name); eventStates.remove(name); eventTypes.remove(name); eventCounts.remove(name); eventMatches.remove(name); eventRepeatWaitTimes.remove(name); }
public String onChangeDo(Integer threshold, Object observer) { String name = Observing.add(this, (ObserverCallBack) observer, ObserveEvent.Type.CHANGE, threshold); log(lvl, "%s: onChange%s: %s minSize: %d", toStringShort(), (observer == null ? "" : " with callback"), name, threshold); return name; }
private void callChangeObserver(FindResults results) { int n; log(lvl, "changes: %d in: %s", results.size(), observedRegion); for (String name : eventNames.keySet()) { if (eventTypes.get(name) != ObserveEvent.Type.CHANGE) { continue; } n = (Integer) eventNames.get(name); List<Match> changes = new ArrayList<Match>(); for (int i = 0; i < results.size(); i++) { FindResult r = results.get(i); if (r.getW() * r.getH() >= n) { changes.add(observedRegion.toGlobalCoord(new Match(r, observedRegion.getScreen()))); } } if (changes.size() > 0) { long now = (new Date()).getTime(); eventCounts.put(name, eventCounts.get(name) + 1); ObserveEvent observeEvent = new ObserveEvent(name, ObserveEvent.Type.CHANGE, null, null, observedRegion, now); observeEvent.setChanges(changes); observeEvent.setIndex(n); Observing.addEvent(observeEvent); Object callBack = eventCallBacks.get(name); if (callBack != null) { log(lvl, "running call back"); ((ObserverCallBack) callBack).changed(observeEvent); } } } }
protected void initialize() { log(3, "resetting observe states for " + observedRegion.toStringShort()); synchronized (eventNames) { for (String name : eventNames.keySet()) { eventStates.put(name, State.FIRST); eventCounts.put(name, 0); eventMatches.put(name, null); } } shouldStopOnFirstEvent = false; if (Observing.getStopOnFirstEvent()) { log(lvl, "requested to stop on first event"); shouldStopOnFirstEvent = true; } }
/** * INTERNAL USE: resets stateful Sikuli X features: <br> * ScreenHighlighter, Observing, Mouse, Key, Hotkeys <br> * When in IDE: resets selected options to defaults (TODO) * * @param n returncode */ public static void cleanUp(int n) { log(lvl, "cleanUp: %d", n); VNCScreen.stopAll(); ADBScreen.stop(); ScreenHighlighter.closeAll(); Observing.cleanUp(); HotkeyManager.reset(); try { new RobotDesktop().keyUp(); } catch (AWTException e) { } Mouse.reset(); }
protected static void addRunningObserver(Region r) { if (shouldStopOnFirstEvent) { shouldStopOnFirstEvent = false; r.getObserver().setStopOnFirstEvent(); } runningObservers.add(r); log(lvl,"add observer: now running %d observer(s)", runningObservers.size()); }
/** * stop and remove all observers registered for this region from the list <br> * events for those observers are removed as well * @param reg */ public static void remove(Region reg) { for (String name : reg.getObserver().getNames()) { remove(name); } }
private <PSIC> String onEvent(PSIC targetThreshhold, Object observer, ObserveEvent.Type obsType) { if (observer != null && (observer.getClass().getName().contains("org.python") || observer.getClass().getName().contains("org.jruby"))) { observer = new ObserverCallBack(observer, obsType); } if (!(targetThreshhold instanceof Integer)) { Image img = Image.getImageFromTarget(targetThreshhold); Boolean response = true; if (!img.isValid() && img.hasIOException()) { response = handleImageMissing(img, false); if (response == null) { runTime.abortScripting("onEvent(" + obsType.name() + "): Abort:", "ImageMissing: " + targetThreshhold.toString()); } } } String name = Observing.add(this, (ObserverCallBack) observer, obsType, targetThreshhold); log(lvl, "%s: observer %s %s: %s with: %s", toStringShort(), obsType, (observer == null ? "" : " with callback"), name, targetThreshhold); return name; }
private void callEventObserver(String name, Match match, long time) { Object ptn = eventNames.get(name); ObserveEvent.Type obsType = eventTypes.get(name); log(lvl, "%s: %s with: %s at: %s", obsType, name, ptn, match); ObserveEvent observeEvent = new ObserveEvent(name, obsType, ptn, match, observedRegion, time); Object callBack = eventCallBacks.get(name); Observing.addEvent(observeEvent); if (callBack != null && callBack instanceof ObserverCallBack) { log(lvl, "running call back: %s", obsType); if (obsType == ObserveEvent.Type.APPEAR) { ((ObserverCallBack) callBack).appeared(observeEvent); } else if (obsType == ObserveEvent.Type.VANISH) { ((ObserverCallBack) callBack).vanished(observeEvent); } else if (obsType == ObserveEvent.Type.CHANGE) { ((ObserverCallBack) callBack).changed(observeEvent); } else if (obsType == ObserveEvent.Type.GENERIC) { ((ObserverCallBack) callBack).happened(observeEvent); } } }
/** * stop and remove all observers and their registered events * */ public static void cleanUp() { String[] names; synchronized (observers) { names = new String[observers.size()]; int i = 0; for (String name : observers.keySet()) { Region reg = observers.get(name); if (reg.isObserving()) { reg.stopObserver(); } events.remove(name); names[i++] = name; } } runningObservers.clear(); for (String name : names) { observers.remove(name); } log(lvl + 1, "as requested: removed all observers"); }