public Clock(Color onColor, Color offColor) { // create effect for on LEDs Glow onEffect = new Glow(1.7f); onEffect.setInput(new InnerShadow()); // create effect for on dot LEDs Glow onDotEffect = new Glow(1.7f); onDotEffect.setInput(new InnerShadow(5, Color.BLACK)); // create effect for off LEDs InnerShadow offEffect = new InnerShadow(); // create digits digits = new Digit[7]; for (int i = 0; i < 6; i++) { Digit digit = new Digit(onColor, offColor, onEffect, offEffect); digit.setLayoutX(i * 80 + ((i + 1) % 2) * 20); digits[i] = digit; getChildren().add(digit); } // create dots Group dots = new Group( new Circle(80 + 54 + 20, 44, 6, onColor), new Circle(80 + 54 + 17, 64, 6, onColor), new Circle((80 * 3) + 54 + 20, 44, 6, onColor), new Circle((80 * 3) + 54 + 17, 64, 6, onColor)); dots.setEffect(onDotEffect); getChildren().add(dots); // update digits to current time and start timer to update every second refreshClocks(); }
@Override protected void extend( StringBuilder builder, String number, int suffix, int power, int len, int hundreds, int tens, int inds) { if (hundreds <= 0 && tens <= 0 && inds <= 0 && suffix >= 0) { if (number.length() == 1) builder.append(Digit.Zero.display); return; } if (len > 3) builder.append(getConnectDisplay(Connect.AfterPower)); if (hundreds == 0 && (len > 3 && (tens > 0 || inds > 0))) { builder.append(getConnectDisplay(Connect.And)).append(getConnectDisplay(Connect.AfterAnd)); } else if (hundreds > 0) { builder .append(Digit.values()[hundreds].display) .append(getConnectDisplay(Connect.AfterNumber)) .append(getConnectDisplay(Connect.Hundred)); if (tens > 0 || inds > 0) builder .append(getConnectDisplay(Connect.AfterHundred)) .append(getConnectDisplay(Connect.And)) .append(getConnectDisplay(Connect.AfterAnd)); } if (tens > 1) { builder.append(Digit.values()[tens].multiTen); if (inds > 0) builder.append(getConnectDisplay(Connect.AfterTen)); } if (tens == 1) builder.append(Digit.values()[inds].plusTen); else if (inds > 0 || number.length() == 1) builder.append(Digit.values()[inds].display); if (power > 0) builder .append(getConnectDisplay(Connect.AfterNumber)) .append(Power.values()[power - 1].display); }
/** * Returns a parser that produces a digit (0 to 9). * * @param missing The error if there is no character on the stream to produce a digit with. * @param sat The error if the produced character is not a digit. * @return A parser that produces a digit (0 to 9). */ public static <E> Parser<Stream<Character>, Digit, E> digit( final F0<E> missing, final F<Character, E> sat) { return StreamParser.satisfy(missing, sat, c -> Character.isDigit(c)) .map(c1 -> Digit.fromChar(c1).some()); }