/*----------------------------------------------------------------------------*/
/* Copyright (c) 2018 FIRST. All Rights Reserved. */
/* Open Source Software - may be modified and shared by FRC teams. The code */
/* must be accompanied by the FIRST BSD license file in the root directory of */
/* the project. */
/*----------------------------------------------------------------------------*/
#pragma once
#include "frc/shuffleboard/WidgetType.h"
namespace frc {
/**
* The types of the widgets bundled with Shuffleboard.
*
*
For example, setting a number to be displayed with a slider:
*
{@code
* NetworkTableEntry example = Shuffleboard.getTab("My Tab")
* .add("My Number", 0)
* .withWidget(BuiltInWidgets.kNumberSlider)
* .getEntry();
* }
*
* Each value in this enum goes into detail on what data types that widget
* can support, as well as the custom properties that widget uses.
*/
enum class BuiltInWidgets {
/**
* Displays a value with a simple text field.
*
Supported types:
*
* - String
* - Number
* - Boolean
*
*
This widget has no custom properties.
*/
kTextView,
/**
* Displays a number with a controllable slider.
*
Supported types:
*
*
Custom properties:
*
* | Name | Type | Default Value | Notes |
* | Min | Number | -1.0 | The minimum value of the
* slider |
| Max | Number | 1.0 | The maximum
* value of the slider |
| Block
* increment | Number | 0.0625 | How much to move the
* slider by with the arrow keys |
*
*/
kNumberSlider,
/**
* Displays a number with a view-only bar.
*
Supported types:
*
*
Custom properties:
*
* | Name | Type | Default Value | Notes |
* | Min | Number | -1.0 | The minimum value of the
* bar |
| Max | Number | 1.0 | The maximum
* value of the bar |
* | Center | Number | 0 | The center ("zero") value
* of the bar |
*
*/
kNumberBar,
/**
* Displays a number with a view-only dial. Displayed values are rounded to
* the nearest integer.
Supported types:
*
Custom properties:
*
* | Name | Type | Default Value | Notes |
* | Min | Number | 0 | The minimum value of the
* dial |
| Max | Number | 100 | The maximum
* value of the dial |
| Show
* value | Boolean | true | Whether or not to show the
* value as text |
*
*/
kDial,
/**
* Displays a number with a graph. NOTE: graphs can be taxing
* on the computer running the dashboard. Keep the number of visible data
* points to a minimum. Making the widget smaller also helps with performance,
* but may cause the graph to become difficult to read.
Supported types:
*
* - Number
* - Number array
*
*
Custom properties:
*
* | Name | Type | Default Value | Notes |
* | Visible time | Number | 30 |
* How long, in seconds, should past data be visible for |
*
*/
kGraph,
/**
* Displays a boolean value as a large colored box.
*
Supported types:
*
*
Custom properties:
*
* | Name | Type | Default Value | Notes |
* | Color when true | Color | "green" |
* Can be specified as a string ({@code "#00FF00"}) or a rgba integer
* ({@code 0x00FF0000})
* |
* | Color when false | Color | "red" |
* Can be specified as a string or a number |
*
*/
kBooleanBox,
/**
* Displays a boolean with a large interactive toggle button.
*
Supported types:
*
*
This widget has no custom properties.
*/
kToggleButton,
/**
* Displays a boolean with a fixed-size toggle switch.
*
Supported types:
*
*
This widget has no custom properties.
*/
kToggleSwitch,
/**
* Displays an analog input or a raw number with a number bar.
*
Supported types:
*
* - Number
* - {@link edu.wpi.first.wpilibj.AnalogInput}
*
*
Custom properties:
*
* | Name | Type | Default Value | Notes |
* | Min | Number | 0 | The minimum value of the
* bar |
| Max | Number | 5 | The maximum
* value of the bar |
* | Center | Number | 0 | The center ("zero") value
* of the bar |
* | Orientation | String | "HORIZONTAL" |
* The orientation of the bar. One of {@code ["HORIZONTAL",
* "VERTICAL"]} |
| Number of tick
* marks | Number | 5 | The number of discrete ticks on the
* bar |
*
*/
kVoltageView,
/**
* Displays a {@link edu.wpi.first.wpilibj.PowerDistributionPanel
* PowerDistributionPanel}.
Supported types: - {@link
* edu.wpi.first.wpilibj.PowerDistributionPanel}
*
*
Custom properties:
*
* | Name | Type | Default Value | Notes |
* | Show voltage and current values | Boolean | true |
* Whether or not to display the voltage and current draw |
*
*/
kPowerDistributionPanel,
/**
* Displays a {@link edu.wpi.first.wpilibj.smartdashboard.SendableChooser
* SendableChooser} with a dropdown combo box with a list of options.
*
Supported types:
*
* - {@link edu.wpi.first.wpilibj.smartdashboard.SendableChooser}
*
*
This widget has no custom properties.
*/
kComboBoxChooser,
/**
* Displays a {@link edu.wpi.first.wpilibj.smartdashboard.SendableChooser
* SendableChooser} with a toggle button for each available option.
*
Supported types:
*
* - {@link edu.wpi.first.wpilibj.smartdashboard.SendableChooser}
*
*
This widget has no custom properties.
*/
kSplitButtonChooser,
/**
* Displays an {@link edu.wpi.first.wpilibj.Encoder} displaying its speed,
* total travelled distance, and its distance per tick.
Supported types:
*
* - {@link edu.wpi.first.wpilibj.Encoder}
*
*
This widget has no custom properties.
*/
kEncoder,
/**
* Displays a {@link edu.wpi.first.wpilibj.SpeedController SpeedController}.
* The speed controller will be controllable from the dashboard when test mode
* is enabled, but will otherwise be view-only.
Supported types:
* - {@link edu.wpi.first.wpilibj.PWMSpeedController}
* - {@link edu.wpi.first.wpilibj.DMC60}
* - {@link edu.wpi.first.wpilibj.Jaguar}
* - {@link edu.wpi.first.wpilibj.PWMTalonSRX}
* - {@link edu.wpi.first.wpilibj.PWMVictorSPX}
* - {@link edu.wpi.first.wpilibj.SD540}
* - {@link edu.wpi.first.wpilibj.Spark}
* - {@link edu.wpi.first.wpilibj.Talon}
* - {@link edu.wpi.first.wpilibj.Victor}
* - {@link edu.wpi.first.wpilibj.VictorSP}
* - {@link edu.wpi.first.wpilibj.SpeedControllerGroup}
*
*
Custom properties:
*
* | Name | Type | Default Value | Notes |
* | Orientation | String | "HORIZONTAL" |
* One of {@code ["HORIZONTAL", "VERTICAL"]} |
*
*/
kSpeedController,
/**
* Displays a command with a toggle button. Pressing the button will start the
* command, and the button will automatically release when the command
* completes.
Supported types: - {@link
* edu.wpi.first.wpilibj.command.Command}
- {@link
* edu.wpi.first.wpilibj.command.CommandGroup}
- Any custom subclass of
* {@code Command} or {@code CommandGroup}
*
*
This widget has no custom properties.
*/
kCommand,
/**
* Displays a PID command with a checkbox and an editor for the PIDF
* constants. Selecting the checkbox will start the command, and the checkbox
* will automatically deselect when the command completes.
Supported
* types: - {@link edu.wpi.first.wpilibj.command.PIDCommand}
* - Any custom subclass of {@code PIDCommand}
*
*
This widget has no custom properties.
*/
kPIDCommand,
/**
* Displays a PID controller with an editor for the PIDF constants and a
* toggle switch for enabling and disabling the controller.
Supported
* types: - {@link edu.wpi.first.wpilibj.PIDController}
*
*
This widget has no custom properties.
*/
kPIDController,
/**
* Displays an accelerometer with a number bar displaying the magnitude of the
* acceleration and text displaying the exact value.
Supported types:
* - {@link edu.wpi.first.wpilibj.AnalogAccelerometer}
*
*
Custom properties:
*
* | Name | Type | Default Value | Notes |
* | Min | Number | -1 |
* The minimum acceleration value to display |
* | Max | Number | 1 |
* The maximum acceleration value to display |
* | Show text | Boolean | true |
* Show or hide the acceleration values |
* | Precision | Number | 2 |
* How many numbers to display after the decimal point |
* | Show tick marks | Boolean | false |
* Show or hide the tick marks on the number bars |
*
*/
kAccelerometer,
/**
* Displays a 3-axis accelerometer with a number bar for each axis'
* accleration.
Supported types: - {@link
* edu.wpi.first.wpilibj.ADXL345_I2C}
- {@link
* edu.wpi.first.wpilibj.ADXL345_SPI}
- {@link
* edu.wpi.first.wpilibj.ADXL362}
*
*
Custom properties:
*
* | Name | Type | Default Value | Notes |
* | Range | {@link Range} | k16G | The accelerometer
* range |
| Show value | Boolean | true |
* Show or hide the acceleration values |
* | Precision | Number | 2 |
* How many numbers to display after the decimal point |
* | Show tick marks | Boolean | false |
* Show or hide the tick marks on the number bars |
*
*/
k3AxisAccelerometer,
/**
* Displays a gyro with a dial from 0 to 360 degrees.
*
Supported types:
*
* - {@link edu.wpi.first.wpilibj.ADXRS450_Gyro}
* - {@link edu.wpi.first.wpilibj.AnalogGyro}
* - Any custom subclass of {@code GyroBase} (such as a MXP gyro)
*
*
Custom properties:
*
* | Name | Type | Default Value | Notes |
* | Major tick
* spacing | Number | 45 | Degrees |
* | Starting angle | Number | 180 |
* How far to rotate the entire dial, in degrees |
* | Show tick mark ring | Boolean | true |
*
*/
kGyro,
/**
* Displays a relay with toggle buttons for each supported mode (off, on,
* forward, reverse).
Supported types: - {@link
* edu.wpi.first.wpilibj.Relay}
*
*
This widget has no custom properties.
*/
kRelay,
/**
* Displays a differential drive with a widget that displays the speed of each
* side of the drivebase and a vector for the direction and rotation of the
* drivebase. The widget will be controllable if the robot is in test mode.
*
Supported types:
*
* - {@link edu.wpi.first.wpilibj.drive.DifferentialDrive}
*
*
Custom properties:
*
* | Name | Type | Default Value | Notes |
* | Number of wheels | Number | 4 | Must be a
* positive even integer
* |
* | Wheel diameter | Number | 80 | Pixels |
* | Show velocity vectors | Boolean | true |
*
*/
kDifferentialDrive,
/**
* Displays a mecanum drive with a widget that displays the speed of each
* wheel, and vectors for the direction and rotation of the drivebase. The
* widget will be controllable if the robot is in test mode.
Supported
* types: - {@link edu.wpi.first.wpilibj.drive.MecanumDrive}
*
*
Custom properties:
*
* | Name | Type | Default Value | Notes |
* | Show velocity vectors | Boolean | true |
*
*/
kMecanumDrive,
/**
* Displays a camera stream.
*
Supported types:
*
* - {@link edu.wpi.cscore.VideoSource} (as long as it is streaming on an
* MJPEG server)
*
*
Custom properties:
*
* | Name | Type | Default Value | Notes |
* | Show crosshair | Boolean | true |
* Show or hide a crosshair on the image |
* | Crosshair color | Color | "white" |
* Can be a string or a rgba integer |
* | Show controls | Boolean | true | Show or hide the
* stream controls
* |
* | Rotation | String | "NONE" |
* Rotates the displayed image. One of {@code ["NONE", "QUARTER_CW",
* "QUARTER_CCW", "HALF"]}
* |
*
*/
kCameraStream
};
} // namespace frc