Beispiel #1
0
 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();
 }
Beispiel #2
0
  @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);
  }
Beispiel #3
0
 /**
  * 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());
 }