private void restart() { if (!isStarted) return; if (theSubscription != null) { theSubscription.unsubscribe(); theSubscription = null; } start(); theWatchListeners.forEach(r -> r.run()); }
/** @param style The style to listen to */ public StyleChangeObservable(QuickStyle style) { theStyle = style; theDomains = new ConcurrentHashSet<>(); theAttributes = new LinkedHashSet<>(); theStyleListeners = new ListenerSet<>(); theStyleListeners.setUsedListener( used -> { if (used) { if (!theDomains.isEmpty() || !theAttributes.isEmpty() && isStarted) start(); } else if (theSubscription != null) { theSubscription.unsubscribe(); theSubscription = null; } }); theWatchListeners = new ListenerSet<>(); }
/** * @param style The style to listen to * @param other Another {@link StyleChangeObservable}. This observable will listen to the same * attributes as this other observable. */ public StyleChangeObservable(QuickStyle style, StyleChangeObservable other) { theStyle = style; theDomains = other.theDomains; theAttributes = other.theAttributes; theStyleListeners = new ListenerSet<>(); theStyleListeners.setUsedListener( used -> { if (used) { if (!theDomains.isEmpty() || !theAttributes.isEmpty() && isStarted) start(); } else if (theSubscription != null) { theSubscription.unsubscribe(); theSubscription = null; } }); theWatchListeners = new ListenerSet<>(); other.theWatchListeners.add( () -> { restart(); }); }