Files
allwpilib/wpilibc/lib/SmartDashboard/SendableChooser.cpp
Brad Miller 69d9ad70ab CMake Changes
This is the changes made by Patrick Plenefisch converting the native
code to use CMake and the CMake Maven Plugin, as opposed to the
native Maven plugin. This is to allow for compatibility with newer
versions of the GCC toolchain. All the cpp sources were moved from
maven style directories to cpp style directories for CMake.

Change-Id: I67f5e3608948f37c83b0990d232105a3784f8593
2014-04-01 11:18:29 -04:00

79 lines
2.3 KiB
C++

/*----------------------------------------------------------------------------*/
/* Copyright (c) FIRST 2011. 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 $(WIND_BASE)/WPILib. */
/*----------------------------------------------------------------------------*/
#include "SmartDashboard/SendableChooser.h"
#include "networktables2/type/StringArray.h"
#include <stdio.h>
static const char *kDefault = "default";
static const char *kOptions = "options";
static const char *kSelected = "selected";
SendableChooser::SendableChooser()
{
m_defaultChoice = "";
}
/**
* Adds the given object to the list of options. On the {@link SmartDashboard} on the desktop,
* the object will appear as the given name.
* @param name the name of the option
* @param object the option
*/
void SendableChooser::AddObject(const char *name, void *object)
{
m_choices[name] = object;
}
/**
* Add the given object to the list of options and marks it as the default.
* Functionally, this is very close to {@link SendableChooser#AddObject(const char *name, void *object) AddObject(...)}
* except that it will use this as the default option if none other is explicitly selected.
* @param name the name of the option
* @param object the option
*/
void SendableChooser::AddDefault(const char *name, void *object)
{
m_defaultChoice = name;
AddObject(name, object);
}
/**
* Returns the selected option. If there is none selected, it will return the default. If there is none selected
* and no default, then it will return {@code NULL}.
* @return the option selected
*/
void *SendableChooser::GetSelected()
{
std::string selected = m_table->GetString(kSelected, m_defaultChoice);
if (selected == "")
return NULL;
else
return m_choices[selected];
}
void SendableChooser::InitTable(ITable* subtable) {
StringArray keys;
m_table = subtable;
if (m_table != NULL) {
std::map<std::string, void *>::iterator iter;
for (iter = m_choices.begin(); iter != m_choices.end(); iter++) {
keys.add(iter->first);
}
m_table->PutValue(kOptions, keys);
m_table->PutString(kDefault, m_defaultChoice);
}
}
ITable* SendableChooser::GetTable() {
return m_table;
}
std::string SendableChooser::GetSmartDashboardType() {
return "String Chooser";
}