@Override protected Connection connect () { return signal.connect(new UnitSlot() { @Override public void onEmit () { boolean old = _current; notifyChange(_current = !old, old); } }); } protected boolean _current = initial;
@Override protected Connection connect () { return signal.connect(new Slot<T>() { public void onEmit (T value) { updateAndNotifyIf(value); } }); } protected T _value = initial;
@Override protected Connection connect () { return signal.connect(new UnitSlot() { @Override public void onEmit () { boolean old = _current; notifyChange(_current = !old, old); } }); } protected boolean _current = initial;
@Override protected Connection connect () { return signal.connect(new Slot<T>() { public void onEmit (T value) { updateAndNotifyIf(value); } }); } protected T _value = initial;
/** A convenience method for registering a long press handler. Assumes you don't need the * result of {@link SignalView#connect}, because it throws it away. */ public LongPressButton onLongPress (SignalView.Listener<? super Button> onLongPress) { longPressed().connect(onLongPress); return this; }
/** A convenience method for registering a click handler. Assumes you don't need the result of * {@link SignalView#connect}, because it throws it away. */ public ImageButton onClick (SignalView.Listener<? super ImageButton> onClick) { clicked().connect(onClick); return this; }
/** A convenience method for registering a click handler. Assumes you don't need the result of * {@link SignalView#connect}, because it throws it away. */ public Button onClick (SignalView.Listener<? super Button> onClick) { clicked().connect(onClick); return this; }
/** * Tracks the children of {@code elements} for setting the selection. Children subsequently * added or removed from {@code elements} are automatically handled appropriately. */ public Selector add (Elements<?> elements) { for (Element<?> child : elements) { _addSlot.onEmit(child); } elements.childAdded().connect(_addSlot); elements.childRemoved().connect(_removeSlot); return this; }
grid.add(new Button(screen.name()).onClick(new UnitSlot() { public void onEmit () { _stack.push(screen); screen.back.clicked().connect(new UnitSlot() { public void onEmit () { _stack.remove(screen); }}); }})); // push this screen immediately if it was specified on the command line
/** * Creates a new menu using the given layout for its elements. */ public Menu (Layout layout) { super(layout); // use a hit tester "eater" to pretend our layer covers all its siblings layer.setHitTester(new Layer.HitTester() { @Override public Layer hitTest (Layer layer, Point p) { Layer descendant = layer.hitTestDefault(p); return descendant == null ? absorbHits() ? layer : null : descendant; } }); // deactivate the menu on any pointer events (children will still get theirs) layer.events().connect(new Pointer.Listener() { @Override public void onStart (Pointer.Interaction iact) { if (iact.hitLayer == layer) deactivate(); } }); childAdded().connect(_descendantAdded); childRemoved().connect(_descendantRemoved); }
return new Button(title).onClick(new UnitSlot() { public void onEmit () { final DemoScreen screen = factory.apply(); _stack.push(screen); screen.back.clicked().connect(new UnitSlot() { public void onEmit () { _stack.remove(screen); }}); }}); }
@Override public void onEmit (Button self) { MenuHost.Pop pop = new MenuHost.Pop(self, createMenu("Trees", "Elm", "Ash", "Maple", "Oak")); pop.menu.itemTriggered().connect(updater(self)); menuHost.popup(pop); } });
@Override public void onEmit (Button self) { MenuHost.Pop pop = new MenuHost.Pop(self, createMenu("Directions", "North", "South", "East", "West")); pop.menu.itemTriggered().connect(updater(self)); addIcons(pop.menu); menuHost.popup(pop); } });
@Override public void onEmit (Button self) { MenuHost.Pop pop = new MenuHost.Pop(self, createMenu(null, "Road", "Street", "Boulevard", "Avenue")); pop.menu.itemTriggered().connect(updater(self)); pop.menu.addStyles(Menu.OPENER.is(new Menu.AnimFn() { @Override public Animation go (Menu menu, Animator animator) { // TODO: fix short delay where menu is visible at this scale menu.layer.setScale(1, .25f); return animator.tweenScaleY(menu.layer).to(1).easeOut().in(125); } })); menuHost.popup(pop); } });
public TripleDemo (Platform plat) { super(plat, 25); // update our "simulation" 40 times per second game = this; // jam ourselves into a global variable, woo! new Pointer(plat, rootLayer, true); // wire up event dispatch screens.push(new DemoMenuScreen(screens)); // start off with our menu screen // show debug rectangles when D key is pressed; dump scene graph on shift-D plat.input().keyboardEvents.collect(Keyboard.isKey(Key.D)).connect(event -> { Layer.DEBUG_RECTS = event.down; if (event.down && event.isShiftDown()) { rootLayer.debugPrint(plat.log()); } }); } }
input.mouseEvents.collect(Mouse::buttonEvents).connect(event -> { if (currentTest != null && currentTest.usesPositionalInputs()) return; if (event.button == Mouse.ButtonEvent.Id.RIGHT) displayMenuLater(); input.keyboardEvents.collect(Keyboard::keyEvents).connect(event -> { switch (event.key) { case ESCAPE:
ColumnEditor () { super(new FlowLayout()); add(slider("Weight:", weight), slider("Min Width:", minWidth), stretch, halign); stretch.selected().update(col.isStretch()); weight.value.connect(new Slot<Float>() { @Override public void onEmit (Float event) { col = new ExposedColumn(col.halign(), col.isStretch(), event, col.minWidth()); } }); minWidth.value.connect(new Slot<Float>() { @Override public void onEmit (Float event) { col = new ExposedColumn(col.halign(), col.isStretch(), col.weight(), event); } }); stretch.selected().connect(new Slot<Boolean>() { @Override public void onEmit (Boolean event) { col = new ExposedColumn(col.halign(), event, col.weight(), col.minWidth()); } }); halign.clicked().connect(new Slot<Button>() { @Override public void onEmit (Button event) { Style.HAlign[] values = Style.HAlign.values(); Style.HAlign next = values[ (Style.HAlign.valueOf(halign.text.get()).ordinal() + 1) % values.length]; halign.text.update(next.name()); col = new ExposedColumn(next, col.isStretch(), col.weight(), col.minWidth()); } }); } }
@Override protected Group createIface (Root root) { final Field prefix = new Field("Love Potion Number "); Button add10 = new Button("+10"); Button add100 = new Button("+100"); HistoryGroup.Labels history = new HistoryGroup.Labels(); final SizableGroup historyBox = new SizableGroup(new BorderLayout()); historyBox.add(history.setConstraint(BorderLayout.CENTER)); Slider width = new Slider(150, 25, 1024); Group top = new Group(AxisLayout.horizontal()).add( prefix.setConstraint(AxisLayout.stretched()), add10, add100, width); width.value.connectNotify(new Slot<Float>() { @Override public void onEmit (Float val) { historyBox.preferredSize.updateWidth(val); } }); add10.clicked().connect(addSome(history, prefix, 10)); add100.clicked().connect(addSome(history, prefix, 100)); history.setStylesheet(Stylesheet.builder().add(Label.class, Style.BACKGROUND.is(Background.composite( Background.blank().inset(0, 2), Background.bordered(Colors.WHITE, Colors.BLACK, 1).inset(10))), Style.TEXT_WRAP.on, Style.HALIGN.left).create()); history.addStyles(Style.BACKGROUND.is(Background.beveled( Colors.CYAN, Colors.brighter(Colors.CYAN), Colors.darker(Colors.CYAN)).inset(5))); _lastNum = 0; return new Group(AxisLayout.vertical()).add( top, historyBox.setConstraint(AxisLayout.stretched())).addStyles( Style.BACKGROUND.is(Background.blank().inset(5))); }