001// Copyright (c) FIRST and other WPILib contributors.
002// Open Source Software; you can modify and/or share it under the terms of
003// the WPILib BSD license file in the root directory of this project.
004
005// THIS FILE WAS AUTO-GENERATED BY ./wpilibj/generate_hids.py. DO NOT MODIFY
006
007package edu.wpi.first.wpilibj;
008
009import edu.wpi.first.hal.HAL;
010import edu.wpi.first.util.sendable.Sendable;
011import edu.wpi.first.util.sendable.SendableBuilder;
012import edu.wpi.first.wpilibj.event.BooleanEvent;
013import edu.wpi.first.wpilibj.event.EventLoop;
014
015/**
016 * Handle input from Stadia controllers connected to the Driver Station.
017 *
018 * <p>This class handles Stadia input that comes from the Driver Station. Each time a value is
019 * requested the most recent value is returned. There is a single class instance for each controller
020 * and the mapping of ports to hardware buttons depends on the code in the Driver Station.
021 *
022 * <p>Only first party controllers from Google are guaranteed to have the correct mapping, and
023 * only through the official NI DS. Sim is not guaranteed to have the same mapping, as well as any
024 * 3rd party controllers.
025 */
026public class StadiaController extends GenericHID implements Sendable {
027  /** Represents a digital button on a StadiaController. */
028  public enum Button {
029    /** A button. */
030    kA(1),
031    /** B button. */
032    kB(2),
033    /** X button. */
034    kX(3),
035    /** Y button. */
036    kY(4),
037    /** Left bumper button. */
038    kLeftBumper(5),
039    /** Right bumper button. */
040    kRightBumper(6),
041    /** Left stick button. */
042    kLeftStick(7),
043    /** Right stick button. */
044    kRightStick(8),
045    /** Ellipses button. */
046    kEllipses(9),
047    /** Hamburger button. */
048    kHamburger(10),
049    /** Stadia button. */
050    kStadia(11),
051    /** Right trigger button. */
052    kRightTrigger(12),
053    /** Left trigger button. */
054    kLeftTrigger(13),
055    /** Google button. */
056    kGoogle(14),
057    /** Frame button. */
058    kFrame(15);
059
060    /** Button value. */
061    public final int value;
062
063    Button(int value) {
064      this.value = value;
065    }
066
067    /**
068     * Get the human-friendly name of the button, matching the relevant methods. This is done by
069     * stripping the leading `k`, and appending `Button`.
070     *
071     * <p>Primarily used for automated unit tests.
072     *
073     * @return the human-friendly name of the button.
074     */
075    @Override
076    public String toString() {
077      // Remove leading `k`
078      return this.name().substring(1) + "Button";
079    }
080  }
081
082  /** Represents an axis on an StadiaController. */
083  public enum Axis {
084    /** Left X axis. */
085    kLeftX(0),
086    /** Right X axis. */
087    kRightX(3),
088    /** Left Y axis. */
089    kLeftY(1),
090    /** Right Y axis. */
091    kRightY(4);
092
093    /** Axis value. */
094    public final int value;
095
096    Axis(int value) {
097      this.value = value;
098    }
099
100    /**
101     * Get the human-friendly name of the axis, matching the relevant methods. This is done by
102     * stripping the leading `k`, and appending `Axis` if the name ends with `Trigger`.
103     *
104     * <p>Primarily used for automated unit tests.
105     *
106     * @return the human-friendly name of the axis.
107     */
108    @Override
109    public String toString() {
110      var name = this.name().substring(1); // Remove leading `k`
111      if (name.endsWith("Trigger")) {
112        return name + "Axis";
113      }
114      return name;
115    }
116  }
117
118  /**
119   * Construct an instance of a controller.
120   *
121   * @param port The port index on the Driver Station that the controller is plugged into (0-5).
122   */
123  public StadiaController(final int port) {
124    super(port);
125    HAL.reportUsage("HID", port, "StadiaController");
126  }
127
128  /**
129   * Get the X axis value of left side of the controller. Right is positive.
130   *
131   * @return The axis value.
132   */
133  public double getLeftX() {
134    return getRawAxis(Axis.kLeftX.value);
135  }
136
137  /**
138   * Get the X axis value of right side of the controller. Right is positive.
139   *
140   * @return The axis value.
141   */
142  public double getRightX() {
143    return getRawAxis(Axis.kRightX.value);
144  }
145
146  /**
147   * Get the Y axis value of left side of the controller. Back is positive.
148   *
149   * @return The axis value.
150   */
151  public double getLeftY() {
152    return getRawAxis(Axis.kLeftY.value);
153  }
154
155  /**
156   * Get the Y axis value of right side of the controller. Back is positive.
157   *
158   * @return The axis value.
159   */
160  public double getRightY() {
161    return getRawAxis(Axis.kRightY.value);
162  }
163
164  /**
165   * Read the value of the A button on the controller.
166   *
167   * @return The state of the button.
168   */
169  public boolean getAButton() {
170    return getRawButton(Button.kA.value);
171  }
172
173  /**
174   * Whether the A button was pressed since the last check.
175   *
176   * @return Whether the button was pressed since the last check.
177   */
178  public boolean getAButtonPressed() {
179    return getRawButtonPressed(Button.kA.value);
180  }
181
182  /**
183   * Whether the A button was released since the last check.
184   *
185   * @return Whether the button was released since the last check.
186   */
187  public boolean getAButtonReleased() {
188    return getRawButtonReleased(Button.kA.value);
189  }
190
191  /**
192   * Constructs an event instance around the A button's digital signal.
193   *
194   * @param loop the event loop instance to attach the event to.
195   * @return an event instance representing the A button's digital signal
196   *     attached to the given loop.
197   */
198  public BooleanEvent a(EventLoop loop) {
199    return button(Button.kA.value, loop);
200  }
201
202  /**
203   * Read the value of the B button on the controller.
204   *
205   * @return The state of the button.
206   */
207  public boolean getBButton() {
208    return getRawButton(Button.kB.value);
209  }
210
211  /**
212   * Whether the B button was pressed since the last check.
213   *
214   * @return Whether the button was pressed since the last check.
215   */
216  public boolean getBButtonPressed() {
217    return getRawButtonPressed(Button.kB.value);
218  }
219
220  /**
221   * Whether the B button was released since the last check.
222   *
223   * @return Whether the button was released since the last check.
224   */
225  public boolean getBButtonReleased() {
226    return getRawButtonReleased(Button.kB.value);
227  }
228
229  /**
230   * Constructs an event instance around the B button's digital signal.
231   *
232   * @param loop the event loop instance to attach the event to.
233   * @return an event instance representing the B button's digital signal
234   *     attached to the given loop.
235   */
236  public BooleanEvent b(EventLoop loop) {
237    return button(Button.kB.value, loop);
238  }
239
240  /**
241   * Read the value of the X button on the controller.
242   *
243   * @return The state of the button.
244   */
245  public boolean getXButton() {
246    return getRawButton(Button.kX.value);
247  }
248
249  /**
250   * Whether the X button was pressed since the last check.
251   *
252   * @return Whether the button was pressed since the last check.
253   */
254  public boolean getXButtonPressed() {
255    return getRawButtonPressed(Button.kX.value);
256  }
257
258  /**
259   * Whether the X button was released since the last check.
260   *
261   * @return Whether the button was released since the last check.
262   */
263  public boolean getXButtonReleased() {
264    return getRawButtonReleased(Button.kX.value);
265  }
266
267  /**
268   * Constructs an event instance around the X button's digital signal.
269   *
270   * @param loop the event loop instance to attach the event to.
271   * @return an event instance representing the X button's digital signal
272   *     attached to the given loop.
273   */
274  public BooleanEvent x(EventLoop loop) {
275    return button(Button.kX.value, loop);
276  }
277
278  /**
279   * Read the value of the Y button on the controller.
280   *
281   * @return The state of the button.
282   */
283  public boolean getYButton() {
284    return getRawButton(Button.kY.value);
285  }
286
287  /**
288   * Whether the Y button was pressed since the last check.
289   *
290   * @return Whether the button was pressed since the last check.
291   */
292  public boolean getYButtonPressed() {
293    return getRawButtonPressed(Button.kY.value);
294  }
295
296  /**
297   * Whether the Y button was released since the last check.
298   *
299   * @return Whether the button was released since the last check.
300   */
301  public boolean getYButtonReleased() {
302    return getRawButtonReleased(Button.kY.value);
303  }
304
305  /**
306   * Constructs an event instance around the Y button's digital signal.
307   *
308   * @param loop the event loop instance to attach the event to.
309   * @return an event instance representing the Y button's digital signal
310   *     attached to the given loop.
311   */
312  public BooleanEvent y(EventLoop loop) {
313    return button(Button.kY.value, loop);
314  }
315
316  /**
317   * Read the value of the left bumper button on the controller.
318   *
319   * @return The state of the button.
320   */
321  public boolean getLeftBumperButton() {
322    return getRawButton(Button.kLeftBumper.value);
323  }
324
325  /**
326   * Whether the left bumper button was pressed since the last check.
327   *
328   * @return Whether the button was pressed since the last check.
329   */
330  public boolean getLeftBumperButtonPressed() {
331    return getRawButtonPressed(Button.kLeftBumper.value);
332  }
333
334  /**
335   * Whether the left bumper button was released since the last check.
336   *
337   * @return Whether the button was released since the last check.
338   */
339  public boolean getLeftBumperButtonReleased() {
340    return getRawButtonReleased(Button.kLeftBumper.value);
341  }
342
343  /**
344   * Constructs an event instance around the left bumper button's digital signal.
345   *
346   * @param loop the event loop instance to attach the event to.
347   * @return an event instance representing the left bumper button's digital signal
348   *     attached to the given loop.
349   */
350  public BooleanEvent leftBumper(EventLoop loop) {
351    return button(Button.kLeftBumper.value, loop);
352  }
353
354  /**
355   * Read the value of the right bumper button on the controller.
356   *
357   * @return The state of the button.
358   */
359  public boolean getRightBumperButton() {
360    return getRawButton(Button.kRightBumper.value);
361  }
362
363  /**
364   * Whether the right bumper button was pressed since the last check.
365   *
366   * @return Whether the button was pressed since the last check.
367   */
368  public boolean getRightBumperButtonPressed() {
369    return getRawButtonPressed(Button.kRightBumper.value);
370  }
371
372  /**
373   * Whether the right bumper button was released since the last check.
374   *
375   * @return Whether the button was released since the last check.
376   */
377  public boolean getRightBumperButtonReleased() {
378    return getRawButtonReleased(Button.kRightBumper.value);
379  }
380
381  /**
382   * Constructs an event instance around the right bumper button's digital signal.
383   *
384   * @param loop the event loop instance to attach the event to.
385   * @return an event instance representing the right bumper button's digital signal
386   *     attached to the given loop.
387   */
388  public BooleanEvent rightBumper(EventLoop loop) {
389    return button(Button.kRightBumper.value, loop);
390  }
391
392  /**
393   * Read the value of the left stick button on the controller.
394   *
395   * @return The state of the button.
396   */
397  public boolean getLeftStickButton() {
398    return getRawButton(Button.kLeftStick.value);
399  }
400
401  /**
402   * Whether the left stick button was pressed since the last check.
403   *
404   * @return Whether the button was pressed since the last check.
405   */
406  public boolean getLeftStickButtonPressed() {
407    return getRawButtonPressed(Button.kLeftStick.value);
408  }
409
410  /**
411   * Whether the left stick button was released since the last check.
412   *
413   * @return Whether the button was released since the last check.
414   */
415  public boolean getLeftStickButtonReleased() {
416    return getRawButtonReleased(Button.kLeftStick.value);
417  }
418
419  /**
420   * Constructs an event instance around the left stick button's digital signal.
421   *
422   * @param loop the event loop instance to attach the event to.
423   * @return an event instance representing the left stick button's digital signal
424   *     attached to the given loop.
425   */
426  public BooleanEvent leftStick(EventLoop loop) {
427    return button(Button.kLeftStick.value, loop);
428  }
429
430  /**
431   * Read the value of the right stick button on the controller.
432   *
433   * @return The state of the button.
434   */
435  public boolean getRightStickButton() {
436    return getRawButton(Button.kRightStick.value);
437  }
438
439  /**
440   * Whether the right stick button was pressed since the last check.
441   *
442   * @return Whether the button was pressed since the last check.
443   */
444  public boolean getRightStickButtonPressed() {
445    return getRawButtonPressed(Button.kRightStick.value);
446  }
447
448  /**
449   * Whether the right stick button was released since the last check.
450   *
451   * @return Whether the button was released since the last check.
452   */
453  public boolean getRightStickButtonReleased() {
454    return getRawButtonReleased(Button.kRightStick.value);
455  }
456
457  /**
458   * Constructs an event instance around the right stick button's digital signal.
459   *
460   * @param loop the event loop instance to attach the event to.
461   * @return an event instance representing the right stick button's digital signal
462   *     attached to the given loop.
463   */
464  public BooleanEvent rightStick(EventLoop loop) {
465    return button(Button.kRightStick.value, loop);
466  }
467
468  /**
469   * Read the value of the ellipses button on the controller.
470   *
471   * @return The state of the button.
472   */
473  public boolean getEllipsesButton() {
474    return getRawButton(Button.kEllipses.value);
475  }
476
477  /**
478   * Whether the ellipses button was pressed since the last check.
479   *
480   * @return Whether the button was pressed since the last check.
481   */
482  public boolean getEllipsesButtonPressed() {
483    return getRawButtonPressed(Button.kEllipses.value);
484  }
485
486  /**
487   * Whether the ellipses button was released since the last check.
488   *
489   * @return Whether the button was released since the last check.
490   */
491  public boolean getEllipsesButtonReleased() {
492    return getRawButtonReleased(Button.kEllipses.value);
493  }
494
495  /**
496   * Constructs an event instance around the ellipses button's digital signal.
497   *
498   * @param loop the event loop instance to attach the event to.
499   * @return an event instance representing the ellipses button's digital signal
500   *     attached to the given loop.
501   */
502  public BooleanEvent ellipses(EventLoop loop) {
503    return button(Button.kEllipses.value, loop);
504  }
505
506  /**
507   * Read the value of the hamburger button on the controller.
508   *
509   * @return The state of the button.
510   */
511  public boolean getHamburgerButton() {
512    return getRawButton(Button.kHamburger.value);
513  }
514
515  /**
516   * Whether the hamburger button was pressed since the last check.
517   *
518   * @return Whether the button was pressed since the last check.
519   */
520  public boolean getHamburgerButtonPressed() {
521    return getRawButtonPressed(Button.kHamburger.value);
522  }
523
524  /**
525   * Whether the hamburger button was released since the last check.
526   *
527   * @return Whether the button was released since the last check.
528   */
529  public boolean getHamburgerButtonReleased() {
530    return getRawButtonReleased(Button.kHamburger.value);
531  }
532
533  /**
534   * Constructs an event instance around the hamburger button's digital signal.
535   *
536   * @param loop the event loop instance to attach the event to.
537   * @return an event instance representing the hamburger button's digital signal
538   *     attached to the given loop.
539   */
540  public BooleanEvent hamburger(EventLoop loop) {
541    return button(Button.kHamburger.value, loop);
542  }
543
544  /**
545   * Read the value of the stadia button on the controller.
546   *
547   * @return The state of the button.
548   */
549  public boolean getStadiaButton() {
550    return getRawButton(Button.kStadia.value);
551  }
552
553  /**
554   * Whether the stadia button was pressed since the last check.
555   *
556   * @return Whether the button was pressed since the last check.
557   */
558  public boolean getStadiaButtonPressed() {
559    return getRawButtonPressed(Button.kStadia.value);
560  }
561
562  /**
563   * Whether the stadia button was released since the last check.
564   *
565   * @return Whether the button was released since the last check.
566   */
567  public boolean getStadiaButtonReleased() {
568    return getRawButtonReleased(Button.kStadia.value);
569  }
570
571  /**
572   * Constructs an event instance around the stadia button's digital signal.
573   *
574   * @param loop the event loop instance to attach the event to.
575   * @return an event instance representing the stadia button's digital signal
576   *     attached to the given loop.
577   */
578  public BooleanEvent stadia(EventLoop loop) {
579    return button(Button.kStadia.value, loop);
580  }
581
582  /**
583   * Read the value of the right trigger button on the controller.
584   *
585   * @return The state of the button.
586   */
587  public boolean getRightTriggerButton() {
588    return getRawButton(Button.kRightTrigger.value);
589  }
590
591  /**
592   * Whether the right trigger button was pressed since the last check.
593   *
594   * @return Whether the button was pressed since the last check.
595   */
596  public boolean getRightTriggerButtonPressed() {
597    return getRawButtonPressed(Button.kRightTrigger.value);
598  }
599
600  /**
601   * Whether the right trigger button was released since the last check.
602   *
603   * @return Whether the button was released since the last check.
604   */
605  public boolean getRightTriggerButtonReleased() {
606    return getRawButtonReleased(Button.kRightTrigger.value);
607  }
608
609  /**
610   * Constructs an event instance around the right trigger button's digital signal.
611   *
612   * @param loop the event loop instance to attach the event to.
613   * @return an event instance representing the right trigger button's digital signal
614   *     attached to the given loop.
615   */
616  public BooleanEvent rightTrigger(EventLoop loop) {
617    return button(Button.kRightTrigger.value, loop);
618  }
619
620  /**
621   * Read the value of the left trigger button on the controller.
622   *
623   * @return The state of the button.
624   */
625  public boolean getLeftTriggerButton() {
626    return getRawButton(Button.kLeftTrigger.value);
627  }
628
629  /**
630   * Whether the left trigger button was pressed since the last check.
631   *
632   * @return Whether the button was pressed since the last check.
633   */
634  public boolean getLeftTriggerButtonPressed() {
635    return getRawButtonPressed(Button.kLeftTrigger.value);
636  }
637
638  /**
639   * Whether the left trigger button was released since the last check.
640   *
641   * @return Whether the button was released since the last check.
642   */
643  public boolean getLeftTriggerButtonReleased() {
644    return getRawButtonReleased(Button.kLeftTrigger.value);
645  }
646
647  /**
648   * Constructs an event instance around the left trigger button's digital signal.
649   *
650   * @param loop the event loop instance to attach the event to.
651   * @return an event instance representing the left trigger button's digital signal
652   *     attached to the given loop.
653   */
654  public BooleanEvent leftTrigger(EventLoop loop) {
655    return button(Button.kLeftTrigger.value, loop);
656  }
657
658  /**
659   * Read the value of the google button on the controller.
660   *
661   * @return The state of the button.
662   */
663  public boolean getGoogleButton() {
664    return getRawButton(Button.kGoogle.value);
665  }
666
667  /**
668   * Whether the google button was pressed since the last check.
669   *
670   * @return Whether the button was pressed since the last check.
671   */
672  public boolean getGoogleButtonPressed() {
673    return getRawButtonPressed(Button.kGoogle.value);
674  }
675
676  /**
677   * Whether the google button was released since the last check.
678   *
679   * @return Whether the button was released since the last check.
680   */
681  public boolean getGoogleButtonReleased() {
682    return getRawButtonReleased(Button.kGoogle.value);
683  }
684
685  /**
686   * Constructs an event instance around the google button's digital signal.
687   *
688   * @param loop the event loop instance to attach the event to.
689   * @return an event instance representing the google button's digital signal
690   *     attached to the given loop.
691   */
692  public BooleanEvent google(EventLoop loop) {
693    return button(Button.kGoogle.value, loop);
694  }
695
696  /**
697   * Read the value of the frame button on the controller.
698   *
699   * @return The state of the button.
700   */
701  public boolean getFrameButton() {
702    return getRawButton(Button.kFrame.value);
703  }
704
705  /**
706   * Whether the frame button was pressed since the last check.
707   *
708   * @return Whether the button was pressed since the last check.
709   */
710  public boolean getFrameButtonPressed() {
711    return getRawButtonPressed(Button.kFrame.value);
712  }
713
714  /**
715   * Whether the frame button was released since the last check.
716   *
717   * @return Whether the button was released since the last check.
718   */
719  public boolean getFrameButtonReleased() {
720    return getRawButtonReleased(Button.kFrame.value);
721  }
722
723  /**
724   * Constructs an event instance around the frame button's digital signal.
725   *
726   * @param loop the event loop instance to attach the event to.
727   * @return an event instance representing the frame button's digital signal
728   *     attached to the given loop.
729   */
730  public BooleanEvent frame(EventLoop loop) {
731    return button(Button.kFrame.value, loop);
732  }
733
734  /**
735   * Read the value of the left bumper (LB) button on the controller.
736   *
737   * @return The state of the button.
738   * @deprecated Use {@link getLeftBumperButton} instead. This function is deprecated for removal
739   *     to make function names consistent to allow the HID classes to be automatically generated.
740   */
741  @Deprecated(since = "2025", forRemoval = true)
742  public boolean getLeftBumper() {
743    return getRawButton(Button.kLeftBumper.value);
744  }
745
746  /**
747   * Read the value of the right bumper (RB) button on the controller.
748   *
749   * @return The state of the button.
750   * @deprecated Use {@link getRightBumperButton} instead. This function is deprecated for removal
751   *     to make function names consistent to allow the HID classes to be automatically generated.
752   */
753  @Deprecated(since = "2025", forRemoval = true)
754  public boolean getRightBumper() {
755    return getRawButton(Button.kRightBumper.value);
756  }
757
758  /**
759   * Whether the left bumper (LB) was pressed since the last check.
760   *
761   * @return Whether the button was pressed since the last check.
762   * @deprecated Use {@link getLeftBumperButtonPressed} instead. This function is deprecated for
763   *     removal to make function names consistent to allow the HID classes to be automatically
764   *     generated.
765   */
766  @Deprecated(since = "2025", forRemoval = true)
767  public boolean getLeftBumperPressed() {
768    return getRawButtonPressed(Button.kLeftBumper.value);
769  }
770
771  /**
772   * Whether the right bumper (RB) was pressed since the last check.
773   *
774   * @return Whether the button was pressed since the last check.
775   * @deprecated Use {@link getRightBumperButtonPressed} instead. This function is deprecated for
776   *     removal to make function names consistent to allow the HID classes to be automatically
777   *     generated.
778   */
779  @Deprecated(since = "2025", forRemoval = true)
780  public boolean getRightBumperPressed() {
781    return getRawButtonPressed(Button.kRightBumper.value);
782  }
783
784  /**
785   * Whether the left bumper (LB) was released since the last check.
786   *
787   * @return Whether the button was released since the last check.
788   * @deprecated Use {@link getLeftBumperButtonReleased} instead. This function is deprecated for
789   *     removal to make function names consistent to allow the HID classes to be automatically
790   *     generated.
791   */
792  @Deprecated(since = "2025", forRemoval = true)
793  public boolean getLeftBumperReleased() {
794    return getRawButtonReleased(Button.kLeftBumper.value);
795  }
796
797  /**
798   * Whether the right bumper (RB) was released since the last check.
799   *
800   * @return Whether the button was released since the last check.
801   * @deprecated Use {@link getRightBumperButtonReleased} instead. This function is deprecated for
802   *     removal to make function names consistent to allow the HID classes to be automatically
803   *     generated.
804   */
805  @Deprecated(since = "2025", forRemoval = true)
806  public boolean getRightBumperReleased() {
807    return getRawButtonReleased(Button.kRightBumper.value);
808  }
809
810  @Override
811  public void initSendable(SendableBuilder builder) {
812    builder.setSmartDashboardType("HID");
813    builder.publishConstString("ControllerType", "Stadia");
814    builder.addDoubleProperty("LeftX", this::getLeftX, null);
815    builder.addDoubleProperty("RightX", this::getRightX, null);
816    builder.addDoubleProperty("LeftY", this::getLeftY, null);
817    builder.addDoubleProperty("RightY", this::getRightY, null);
818    builder.addBooleanProperty("A", this::getAButton, null);
819    builder.addBooleanProperty("B", this::getBButton, null);
820    builder.addBooleanProperty("X", this::getXButton, null);
821    builder.addBooleanProperty("Y", this::getYButton, null);
822    builder.addBooleanProperty("LeftBumper", this::getLeftBumperButton, null);
823    builder.addBooleanProperty("RightBumper", this::getRightBumperButton, null);
824    builder.addBooleanProperty("LeftStick", this::getLeftStickButton, null);
825    builder.addBooleanProperty("RightStick", this::getRightStickButton, null);
826    builder.addBooleanProperty("Ellipses", this::getEllipsesButton, null);
827    builder.addBooleanProperty("Hamburger", this::getHamburgerButton, null);
828    builder.addBooleanProperty("Stadia", this::getStadiaButton, null);
829    builder.addBooleanProperty("RightTrigger", this::getRightTriggerButton, null);
830    builder.addBooleanProperty("LeftTrigger", this::getLeftTriggerButton, null);
831    builder.addBooleanProperty("Google", this::getGoogleButton, null);
832    builder.addBooleanProperty("Frame", this::getFrameButton, null);
833  }
834}