Skip to content

Commit

Permalink
C++ Shuffleboard fixes (#1595)
Browse files Browse the repository at this point in the history
* Fix C++ ShuffleboardComponent template type

* Fix `WithWidget(WidgetType&)`not being properly capitalized

* Fix data members across dll boundaries by using enum for built in types
  • Loading branch information
SamCarlberg authored and PeterJohnson committed Feb 15, 2019
1 parent 182758c commit e8b2471
Show file tree
Hide file tree
Showing 12 changed files with 184 additions and 89 deletions.
2 changes: 1 addition & 1 deletion wpilibc/src/main/native/cpp/Watchdog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ constexpr std::chrono::milliseconds Watchdog::kMinPrintPeriod;
class Watchdog::Thread : public wpi::SafeThread {
public:
template <typename T>
struct DerefGreater : public std::binary_function<T, T, bool> {
struct DerefGreater {
constexpr bool operator()(const T& lhs, const T& rhs) const {
return *lhs > *rhs;
}
Expand Down
13 changes: 0 additions & 13 deletions wpilibc/src/main/native/cpp/shuffleboard/BuiltInLayouts.cpp

This file was deleted.

35 changes: 0 additions & 35 deletions wpilibc/src/main/native/cpp/shuffleboard/BuiltInWidgets.cpp

This file was deleted.

11 changes: 11 additions & 0 deletions wpilibc/src/main/native/cpp/shuffleboard/ShuffleboardContainer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,12 @@

using namespace frc;

static constexpr const char* layoutStrings[] = {"List Layout", "Grid Layout"};

static constexpr const char* GetStringFromBuiltInLayout(BuiltInLayouts layout) {
return layoutStrings[static_cast<int>(layout)];
}

ShuffleboardContainer::ShuffleboardContainer(const wpi::Twine& title)
: ShuffleboardValue(title) {}

Expand All @@ -26,6 +32,11 @@ ShuffleboardContainer::GetComponents() const {
return m_components;
}

ShuffleboardLayout& ShuffleboardContainer::GetLayout(const wpi::Twine& title,
BuiltInLayouts type) {
return GetLayout(title, GetStringFromBuiltInLayout(type));
}

ShuffleboardLayout& ShuffleboardContainer::GetLayout(const wpi::Twine& title,
const LayoutType& type) {
return GetLayout(title, type.GetLayoutName());
Expand Down
41 changes: 41 additions & 0 deletions wpilibc/src/main/native/cpp/shuffleboard/ShuffleboardWidget.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/*----------------------------------------------------------------------------*/
/* 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. */
/*----------------------------------------------------------------------------*/

#include "frc/shuffleboard/ShuffleboardWidget.h"

using namespace frc;

static constexpr const char* widgetStrings[] = {
"Text View",
"Number Slider",
"Number Bar",
"Simple Dial",
"Graph",
"Boolean Box",
"Toggle Button",
"Toggle Switch",
"Voltage View",
"PDP",
"ComboBox Chooser",
"Split Button Chooser",
"Encoder",
"Speed Controller",
"Command",
"PID Command",
"PID Controller",
"Accelerometer",
"3-Axis Accelerometer",
"Gyro",
"Relay",
"Differential Drivebase",
"Mecanum Drivebase",
"Camera Stream",
};

const char* detail::GetStringForWidgetType(BuiltInWidgets type) {
return widgetStrings[static_cast<int>(type)];
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,7 @@ namespace frc {
* .GetLayout(BuiltinLayouts::kList, "My List");
* }</pre>
*/
class BuiltInLayouts {
public:
enum class BuiltInLayouts {
/**
* Groups components in a vertical list. New widgets added to the layout will
* be placed at the bottom of the list. <br>Custom properties: <table>
Expand All @@ -30,7 +29,7 @@ class BuiltInLayouts {
* {@code ["TOP", "LEFT", "BOTTOM", "RIGHT", "HIDDEN"}</td></tr>
* </table>
*/
static const LayoutType kList;
kList,

/**
* Groups components in an <i>n</i> x <i>m</i> grid. Grid layouts default to
Expand All @@ -47,7 +46,7 @@ class BuiltInLayouts {
* </tr>
* </table>
*/
static const LayoutType kGrid;
kGrid
};

} // namespace frc
51 changes: 25 additions & 26 deletions wpilibc/src/main/native/include/frc/shuffleboard/BuiltInWidgets.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,7 @@ namespace frc {
* <p>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.
*/
class BuiltInWidgets {
public:
enum class BuiltInWidgets {
/**
* Displays a value with a simple text field.
* <br>Supported types:
Expand All @@ -37,7 +36,7 @@ class BuiltInWidgets {
* </ul>
* <br>This widget has no custom properties.
*/
static const WidgetType kTextView;
kTextView,
/**
* Displays a number with a controllable slider.
* <br>Supported types:
Expand All @@ -54,7 +53,7 @@ class BuiltInWidgets {
* slider by with the arrow keys</td></tr>
* </table>
*/
static const WidgetType kNumberSlider;
kNumberSlider,
/**
* Displays a number with a view-only bar.
* <br>Supported types:
Expand All @@ -71,7 +70,7 @@ class BuiltInWidgets {
* of the bar</td></tr>
* </table>
*/
static const WidgetType kNumberBar;
kNumberBar,
/**
* Displays a number with a view-only dial. Displayed values are rounded to
* the nearest integer. <br>Supported types: <ul> <li>Number</li>
Expand All @@ -86,7 +85,7 @@ class BuiltInWidgets {
* value as text</td></tr>
* </table>
*/
static const WidgetType kDial;
kDial,
/**
* Displays a number with a graph. <strong>NOTE:</strong> graphs can be taxing
* on the computer running the dashboard. Keep the number of visible data
Expand All @@ -103,7 +102,7 @@ class BuiltInWidgets {
* <td>How long, in seconds, should past data be visible for</td></tr>
* </table>
*/
static const WidgetType kGraph;
kGraph,
/**
* Displays a boolean value as a large colored box.
* <br>Supported types:
Expand All @@ -121,7 +120,7 @@ class BuiltInWidgets {
* <td>Can be specified as a string or a number</td></tr>
* </table>
*/
static const WidgetType kBooleanBox;
kBooleanBox,
/**
* Displays a boolean with a large interactive toggle button.
* <br>Supported types:
Expand All @@ -130,7 +129,7 @@ class BuiltInWidgets {
* </ul>
* <br>This widget has no custom properties.
*/
static const WidgetType kToggleButton;
kToggleButton,
/**
* Displays a boolean with a fixed-size toggle switch.
* <br>Supported types:
Expand All @@ -139,7 +138,7 @@ class BuiltInWidgets {
* </ul>
* <br>This widget has no custom properties.
*/
static const WidgetType kToggleSwitch;
kToggleSwitch,
/**
* Displays an analog input or a raw number with a number bar.
* <br>Supported types:
Expand All @@ -162,7 +161,7 @@ class BuiltInWidgets {
* bar</td></tr>
* </table>
*/
static const WidgetType kVoltageView;
kVoltageView,
/**
* Displays a {@link edu.wpi.first.wpilibj.PowerDistributionPanel
* PowerDistributionPanel}. <br>Supported types: <ul> <li>{@link
Expand All @@ -175,7 +174,7 @@ class BuiltInWidgets {
* <td>Whether or not to display the voltage and current draw</td></tr>
* </table>
*/
static const WidgetType kPowerDistributionPanel;
kPowerDistributionPanel,
/**
* Displays a {@link edu.wpi.first.wpilibj.smartdashboard.SendableChooser
* SendableChooser} with a dropdown combo box with a list of options.
Expand All @@ -185,7 +184,7 @@ class BuiltInWidgets {
* </ul>
* <br>This widget has no custom properties.
*/
static const WidgetType kComboBoxChooser;
kComboBoxChooser,
/**
* Displays a {@link edu.wpi.first.wpilibj.smartdashboard.SendableChooser
* SendableChooser} with a toggle button for each available option.
Expand All @@ -195,7 +194,7 @@ class BuiltInWidgets {
* </ul>
* <br>This widget has no custom properties.
*/
static const WidgetType kSplitButtonChooser;
kSplitButtonChooser,
/**
* Displays an {@link edu.wpi.first.wpilibj.Encoder} displaying its speed,
* total travelled distance, and its distance per tick. <br>Supported types:
Expand All @@ -204,7 +203,7 @@ class BuiltInWidgets {
* </ul>
* <br>This widget has no custom properties.
*/
static const WidgetType kEncoder;
kEncoder,
/**
* Displays a {@link edu.wpi.first.wpilibj.SpeedController SpeedController}.
* The speed controller will be controllable from the dashboard when test mode
Expand All @@ -228,7 +227,7 @@ class BuiltInWidgets {
* <td>One of {@code ["HORIZONTAL", "VERTICAL"]}</td></tr>
* </table>
*/
static const WidgetType kSpeedController;
kSpeedController,
/**
* Displays a command with a toggle button. Pressing the button will start the
* command, and the button will automatically release when the command
Expand All @@ -239,7 +238,7 @@ class BuiltInWidgets {
* </ul>
* <br>This widget has no custom properties.
*/
static const WidgetType kCommand;
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
Expand All @@ -249,15 +248,15 @@ class BuiltInWidgets {
* </ul>
* <br>This widget has no custom properties.
*/
static const WidgetType kPIDCommand;
kPIDCommand,
/**
* Displays a PID controller with an editor for the PIDF constants and a
* toggle switch for enabling and disabling the controller. <br>Supported
* types: <ul> <li>{@link edu.wpi.first.wpilibj.PIDController}</li>
* </ul>
* <br>This widget has no custom properties.
*/
static const WidgetType kPIDController;
kPIDController,
/**
* Displays an accelerometer with a number bar displaying the magnitude of the
* acceleration and text displaying the exact value. <br>Supported types: <ul>
Expand All @@ -278,7 +277,7 @@ class BuiltInWidgets {
* <td>Show or hide the tick marks on the number bars</td></tr>
* </table>
*/
static const WidgetType kAccelerometer;
kAccelerometer,
/**
* Displays a 3-axis accelerometer with a number bar for each axis'
* accleration. <br>Supported types: <ul> <li>{@link
Expand All @@ -298,7 +297,7 @@ class BuiltInWidgets {
* <td>Show or hide the tick marks on the number bars</td></tr>
* </table>
*/
static const WidgetType k3AxisAccelerometer;
k3AxisAccelerometer,
/**
* Displays a gyro with a dial from 0 to 360 degrees.
* <br>Supported types:
Expand All @@ -317,15 +316,15 @@ class BuiltInWidgets {
* <tr><td>Show tick mark ring</td><td>Boolean</td><td>true</td></tr>
* </table>
*/
static const WidgetType kGyro;
kGyro,
/**
* Displays a relay with toggle buttons for each supported mode (off, on,
* forward, reverse). <br>Supported types: <ul> <li>{@link
* edu.wpi.first.wpilibj.Relay}</li>
* </ul>
* <br>This widget has no custom properties.
*/
static const WidgetType kRelay;
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
Expand All @@ -344,7 +343,7 @@ class BuiltInWidgets {
* <tr><td>Show velocity vectors</td><td>Boolean</td><td>true</td></tr>
* </table>
*/
static const WidgetType kDifferentialDrive;
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
Expand All @@ -357,7 +356,7 @@ class BuiltInWidgets {
* <tr><td>Show velocity vectors</td><td>Boolean</td><td>true</td></tr>
* </table>
*/
static const WidgetType kMecanumDrive;
kMecanumDrive,
/**
* Displays a camera stream.
* <br>Supported types:
Expand All @@ -381,7 +380,7 @@ class BuiltInWidgets {
* </td></tr>
* </table>
*/
static const WidgetType kCameraStream;
kCameraStream
};

} // namespace frc
Loading

0 comments on commit e8b2471

Please sign in to comment.