Tekkotsu Homepage
Demos
Overview
Downloads
Dev. Resources
Reference
Credits

ControlBase Class Reference

Base class for all items in the Controller hierarchy. More...

#include <ControlBase.h>

Inheritance diagram for ControlBase:

Detailed Description

Base class for all items in the Controller hierarchy.

These are similar to behaviors in that they can do processing and are told when to start and stop.

However, the important difference is that these have to follow a much tighter set of guidelines for a more refined purpose - user interface. Controls do not directly receive events - the Controller will process events for them and call the appropriate functions at the appropriate times. Controls are expected to fit into a heirarchical scheme, where each control (except the root) has a parent which created it, and may return its own children where appropriate.

Controls can be very powerful, and a class can be both a behavior and a control. This allows integrated user interface to controlling a complex behavior. Some controls may simply need EventListener access instead to perform a few tricks. Mix and match as you see fit. (multiple inheritance can be nice if it's planned for, as these have been)

This base class will do most of the work of maintaining submenus for you, and will call appropriate virtual functions which you are expected to override. Controls generally live in Behaviors/Controls/ as the Controller itself is a behavior, and these controls merely its tools.

The ControlBase pointers which are returned at various points are the responsibility of the creator. Controller will not delete them upon deactivation.

GUI Theory:
There are 3 levels to the user interface.

  1. Robot/Local: Uses the buttons for input, and LEDs and sounds for immediate feedback. No external resources needed
  2. Text: Uses a console to display/request information.
  3. GUI: Uses a graphical interface on a desktop machine

Obviously, higher levels require more technological resources, which also means there's more to go wrong and debug. However, another important distinction between the first level and the others is that the first level does not require the user to lose direct contact with the robot. Requiring the user to move back and forth from robot to computer can be much more frustrating than decoding LED signals or press head buttons. There are also safety issues when triggering behaviors remotely if the robot is out of immediate reach. But of course, having a GUI and text output is extremely valuable in terms of ease of use and efficiency.

So, the lesson is to try to support all 3 levels so that your interfaces will be robust and efficient in a variety of environments. You'll thank yourself when you're demoing on the road and you can't get wavelan up, or the guest machine you're supposed to use doesn't have Java, or whatever.

Todo:
ControlBase's should use ReferenceCounter so memory management is not an issue
See also:
Controller, NullControl

Definition at line 87 of file ControlBase.h.

List of all members.

Public Types

enum  RegisterControllerFlags_t { DEFAULTS = 0, BEH_START = 1, BEH_RETAIN = 2, BEH_NONEXCLUSIVE = 4 }
 

provides options for registerControllerEntry() and by extension REGISTER_CONTROLLER_OPT and REGISTER_CONTROLLER_MENU

More...
typedef MotionManagerMsg::MC_ID MC_ID
 Typically would use MotionManager::MC_ID, but re-specified here for convenience and to avoid dependence on MotionManager.h.
typedef std::map< std::string,
std::pair< ControlBase *, int > > 
ControlRegistryEntry_t
typedef std::map< std::string,
ControlRegistryEntry_t
ControlRegistry_t
 shorthand for the map between menu names and associated map of entries, see getControllerEntries()

Public Member Functions

Constructors/Destructors

 ControlBase ()
 Contructor.
 ControlBase (const std::string &n)
 Contructor, initializes with a name.
 ControlBase (const std::string &n, const std::string &d)
 Contructor, initializes with a name.
virtual ~ControlBase ()
 Destructor.
Controller Functions

You probably want to override some of these, call the ControlBase functions from your code if you want default sound effects (or look in Config::controller_config).

virtual ControlBaseactivate (MC_ID disp_id, Socket *gui)
 Called when the control is activated (or the control system is reactivating).
virtual void pause ()
 called when a control is being overriden by a child, or the control system is deactivating (e-stop being turned off)
virtual void refresh ()
 called when the child has deactivated and this control should refresh its display, or some other event (such as the user pressing the refresh button) has happened to cause a refresh to be needed
virtual void deactivate ()
 called when this control is being popped from the control stack
virtual ControlBasedoSelect ()
 when the user has trigger an "open selection" - default is to return the hilighted control*/
virtual ControlBasedoNextItem ()
 when the user wants to increment the control - default is to hilight the first non-null slot after the last hilight, and return this
virtual ControlBasedoPrevItem ()
 when the user wants to decrement the control - default is to hilight the last non-null slot before the first hilight, and return this
virtual ControlBasedoCancel ()
 when the user wants to cancel - you should almost always return NULL now unless you need to override the cancel in order to confirm something (e.g. "Save changes?")
virtual ControlBasedoReadStdIn (const std::string &prompt=std::string())
 prompt the user for text input on the current input device (cin, tekkotsu console (sout), or GUI)
virtual ControlBasetakeInput (const std::string &msg)
 called when the user has supplied a text string (may or may not have been prompted by doReadStdIn()! May not even be active yet - the user can direct the same input to a set of hilighted menus)
virtual bool validInput (const std::string &msg)
 may be called before takeInput to verify this Control can make sense of msg
virtual void registered ()
 Called when the control is picked up from the control registry (implies it is now safe to access global resources, such as erouter).
Accessors

virtual ControlBasesetName (const std::string &n)
 sets the name of the control
virtual std::string getName () const
 returns the name of the control
virtual ControlBasesetDescription (const std::string d)
 sets the description of the control
virtual std::string getDescription () const
 returns a short description of what the control does
virtual const std::vector
< ControlBase * > & 
getSlots () const
 returns the vector of sub-controls
virtual ControlBasefindSlot (const std::string &name) const
 sets the name of the control
virtual std::string getSlotName (unsigned int i) const
 returns the string that will appear in slot i
virtual unsigned int slotsSize () const
 returns the number of options available
virtual void setSlot (unsigned int i, ControlBase *o)
 sets i'th element of options to o
virtual void pushSlot (ControlBase *o)
 sets next unused element of options to o
virtual void clearSlots ()
 deletes each slot item and clears the slots
virtual const std::vector
< unsigned int > & 
getHilights () const
 returns a vector of the indicies of hilighted slots
virtual void setHilights (const std::vector< unsigned int > &hi)
 sets the hilighted slots
virtual void hilightFirst ()
 sets the hilight to the first non-null slot
virtual MC_ID getDisplay ()
 returns display being used
virtual ControlBasesetDisplay (MC_ID d)
 sets display to use

Static Public Member Functions

static ControlBaseregisterControllerEntry (ControlBase *c, const std::string &menu, int flags=ControlBase::DEFAULTS)
 Registers a ControlBase to be added to the specified Controller menu, use '/' to specify sub-menus, see REGISTER_CONTROLLER macro.
static ControlRegistry_tgetControllerEntries ()
 Provides static/global storage of behaviors requesting to be added to controller menus.

Static Public Attributes

static const MC_ID invalid_MC_ID = MotionManagerMsg::invalid_MC_ID
 Typically would use MotionManager::invalid_MC_ID, but re-specified here for convenience and to avoid dependence on MotionManager.h.

Protected Member Functions

virtual void clearMenu ()
 clears the display (if use_VT100 is on)
virtual ControlBaseinvalidInput (const std::string &msg, bool ambiguous)
 called by takeInput if the input doesn't match any slots or matches multiple slots -- the ControlBase implementation displays an error and returns itself
float hilightsAvg () const
 returns the average of the hilighted indicies - used to know to play the "next" sound, or the "prev" sound when the hilight changes

Protected Attributes

std::string name
 the name of this control
std::string description
 the description of this control
std::vector< unsigned int > hilights
 keep sorted - index(es) of current selection - can have multiple if using GUI
std::vector< ControlBase * > options
 vector of controls to select from
bool doRewrite
 toggles using VT100 codes to reposition the cursor at the beginning of the menu
MC_ID display_id
 LedMC to use for displaying selection.
Socketgui_comm
 socket to communicate with the GUI, if it is connected

Private Member Functions

 ControlBase (const ControlBase &)
 you can override, but don't call this...
ControlBaseoperator= (const ControlBase &)
 you can override, but don't call this...

Member Typedef Documentation

typedef std::map<std::string, ControlRegistryEntry_t > ControlBase::ControlRegistry_t

shorthand for the map between menu names and associated map of entries, see getControllerEntries()

Definition at line 184 of file ControlBase.h.

typedef std::map<std::string,std::pair<ControlBase*,int> > ControlBase::ControlRegistryEntry_t

Definition at line 183 of file ControlBase.h.

Typically would use MotionManager::MC_ID, but re-specified here for convenience and to avoid dependence on MotionManager.h.

Definition at line 90 of file ControlBase.h.


Member Enumeration Documentation

provides options for registerControllerEntry() and by extension REGISTER_CONTROLLER_OPT and REGISTER_CONTROLLER_MENU

Enumerator:
DEFAULTS 

indicates default options (behavior will not be started automatically), see also BEH_DEFAULTS macro

BEH_START 

indicates the behavior should be activated at launch instead of waiting for the user to do it manually, see also BEH_START macro

BEH_RETAIN 

the behavior's memory allocation will *not* be freed between activations, so state will be maintained, see also BEH_RETAIN macro

BEH_NONEXCLUSIVE 

the behavior be able to run in parallel with other behaviors, see also BEH_NONEXCLUSIVE macro

Definition at line 172 of file ControlBase.h.


Constructor & Destructor Documentation

ControlBase::ControlBase (  ) 
ControlBase::ControlBase ( const std::string &  n  ) 

Contructor, initializes with a name.

Definition at line 97 of file ControlBase.h.

ControlBase::ControlBase ( const std::string &  n,
const std::string &  d 
)

Contructor, initializes with a name.

Definition at line 98 of file ControlBase.h.

virtual ControlBase::~ControlBase (  )  [virtual]

Destructor.

Definition at line 101 of file ControlBase.h.

ControlBase::ControlBase ( const ControlBase  )  [private]

you can override, but don't call this...


Member Function Documentation

ControlBase * ControlBase::activate ( MC_ID  disp_id,
Socket gui 
) [virtual]

Called when the control is activated (or the control system is reactivating).

Takes the id number of a LedMC which the control should use, maintained by Controller. Controls share the display which is passed, and may use the socket gui to communicate with the GUI controller, if it is connected.

Returns:
a ControlBase pointer. Return:
  • this if the control should stay active (if it's not a one-shot command)
  • NULL to return to parent
  • other address to spawn a child control

Reimplemented in BatteryCheckControl, BehaviorActivatorControl, BehaviorSwitchControlBase, FileBrowserControl, HelpControl, NullControl, PostureEditor, RebootControl, ShutdownControl, ToggleControl, TorqueCalibrate::TakeMeasurementControl, ValueEditControl< T >, WalkCalibration, WaypointWalkControl, and XWalkEdit.

Definition at line 13 of file ControlBase.cc.

void ControlBase::clearMenu (  )  [protected, virtual]

clears the display (if use_VT100 is on)

Definition at line 452 of file ControlBase.cc.

Referenced by deactivate(), doSelect(), refresh(), and takeInput().

ControlBase * ControlBase::doCancel (  )  [virtual]

when the user wants to cancel - you should almost always return NULL now unless you need to override the cancel in order to confirm something (e.g. "Save changes?")

The value which is returned is then activate()ed and pushed on the Controller's stack, you probably want to return NULL

Definition at line 200 of file ControlBase.cc.

ControlBase * ControlBase::doNextItem (  )  [virtual]

when the user wants to increment the control - default is to hilight the first non-null slot after the last hilight, and return this

The value which is returned is then activate()ed and pushed on the Controller's stack, so you probably want to return this

Reimplemented in NullControl, and ValueEditControl< T >.

Definition at line 164 of file ControlBase.cc.

ControlBase * ControlBase::doPrevItem (  )  [virtual]

when the user wants to decrement the control - default is to hilight the last non-null slot before the first hilight, and return this

The value which is returned is then activate()ed and pushed on the Controller's stack, so you probably want to return this

Reimplemented in NullControl, and ValueEditControl< T >.

Definition at line 182 of file ControlBase.cc.

ControlBase * ControlBase::doReadStdIn ( const std::string &  prompt = std::string()  )  [virtual]

prompt the user for text input on the current input device (cin, tekkotsu console (sout), or GUI)

The value which is returned is then activate()ed and pushed on the Controller's stack, so you probably want to return this

Reimplemented in NullControl, and StringInputControl.

Definition at line 206 of file ControlBase.cc.

Referenced by StringInputControl::doReadStdIn(), WalkCalibration::processEvent(), and WalkCalibration::takeInput().

ControlBase * ControlBase::doSelect (  )  [virtual]
ControlBase * ControlBase::findSlot ( const std::string &  name  )  const [virtual]

sets the name of the control

Definition at line 355 of file ControlBase.cc.

static ControlRegistry_t& ControlBase::getControllerEntries (  )  [static]

Provides static/global storage of behaviors requesting to be added to controller menus.

This collection is processed by the startup behavior to build the menu structure.

Definition at line 188 of file ControlBase.h.

Referenced by registerControllerEntry(), and BehaviorBase::registerControllerEntry().

virtual std::string ControlBase::getDescription (  )  const [virtual]

returns a short description of what the control does

Reimplemented in BehaviorSwitchControlBase, and BehaviorSwitchControl< B, Al >.

Definition at line 151 of file ControlBase.h.

virtual MC_ID ControlBase::getDisplay (  )  [virtual]

returns display being used

Definition at line 165 of file ControlBase.h.

virtual const std::vector<unsigned int>& ControlBase::getHilights (  )  const [virtual]

returns a vector of the indicies of hilighted slots

Definition at line 161 of file ControlBase.h.

std::string ControlBase::getSlotName ( unsigned int  i  )  const [virtual]

returns the string that will appear in slot i

Definition at line 391 of file ControlBase.cc.

Referenced by refresh().

virtual const std::vector<ControlBase*>& ControlBase::getSlots (  )  const [virtual]

returns the vector of sub-controls

Definition at line 153 of file ControlBase.h.

Referenced by SensorObserverControl::processEvent(), HelpControl::report(), Controller::select(), and SensorObserverControl::updateRT().

void ControlBase::hilightFirst (  )  [virtual]

sets the hilight to the first non-null slot

Reimplemented in WalkCalibration.

Definition at line 434 of file ControlBase.cc.

Referenced by activate().

float ControlBase::hilightsAvg (  )  const [protected]

returns the average of the hilighted indicies - used to know to play the "next" sound, or the "prev" sound when the hilight changes

Definition at line 468 of file ControlBase.cc.

Referenced by setHilights().

ControlBase * ControlBase::invalidInput ( const std::string &  msg,
bool  ambiguous 
) [protected, virtual]

called by takeInput if the input doesn't match any slots or matches multiple slots -- the ControlBase implementation displays an error and returns itself

Parameters:
msg the input originally sent to takeInput()
ambiguous true if the input matched more than one item, false if it didn't match any

Reimplemented in FileInputControl.

Definition at line 459 of file ControlBase.cc.

Referenced by takeInput().

ControlBase& ControlBase::operator= ( const ControlBase  )  [private]

you can override, but don't call this...

void ControlBase::pause (  )  [virtual]

called when a control is being overriden by a child, or the control system is deactivating (e-stop being turned off)

Reimplemented in BatteryCheckControl, PostureEditor, SensorObserverControl::RTViewControl, and ValueEditControl< T >.

Definition at line 21 of file ControlBase.cc.

Referenced by WaypointWalkControl::doSelect().

void ControlBase::refresh (  )  [virtual]
ControlBase * ControlBase::registerControllerEntry ( ControlBase c,
const std::string &  menu,
int  flags = ControlBase::DEFAULTS 
) [static]

Registers a ControlBase to be added to the specified Controller menu, use '/' to specify sub-menus, see REGISTER_CONTROLLER macro.

This only works when called as an initializer to a static variable. Once the menus have been initialized, later calls to this function won't update the menus.

Definition at line 443 of file ControlBase.cc.

virtual void ControlBase::registered (  )  [virtual]

Called when the control is picked up from the control registry (implies it is now safe to access global resources, such as erouter).

Reimplemented in MoCapLogger.

Definition at line 142 of file ControlBase.h.

virtual ControlBase& ControlBase::setDescription ( const std::string  d  )  [virtual]

sets the description of the control

Definition at line 150 of file ControlBase.h.

Referenced by WaypointWalkControl::doSelect(), and TorqueCalibrate::refresh().

virtual ControlBase& ControlBase::setDisplay ( MC_ID  d  )  [virtual]

sets display to use

Definition at line 166 of file ControlBase.h.

void ControlBase::setHilights ( const std::vector< unsigned int > &  hi  )  [virtual]

sets the hilighted slots

Reimplemented in ConfigurationEditor::NamedEnumerationEditor, and WalkCalibration.

Definition at line 418 of file ControlBase.cc.

Referenced by ConfigurationEditor::NamedEnumerationEditor::setHilights().

void ControlBase::setSlot ( unsigned int  i,
ControlBase o 
) [virtual]

sets i'th element of options to o

Definition at line 401 of file ControlBase.cc.

virtual unsigned int ControlBase::slotsSize (  )  const [virtual]
ControlBase * ControlBase::takeInput ( const std::string &  msg  )  [virtual]

called when the user has supplied a text string (may or may not have been prompted by doReadStdIn()! May not even be active yet - the user can direct the same input to a set of hilighted menus)

The value which is returned is then activate()ed and pushed on the Controller's stack

Reimplemented in BehaviorSwitchControlBase, FileBrowserControl, NullControl, SavePostureControl, SaveWalkControl, StringInputControl, TorqueCalibrate::TakeMeasurementControl, ValueEditControl< T >, and WalkCalibration.

Definition at line 239 of file ControlBase.cc.

Referenced by doReadStdIn(), Controller::select(), NullControl::takeInput(), FileBrowserControl::takeInput(), BehaviorSwitchControlBase::takeInput(), and Controller::takeLine().

bool ControlBase::validInput ( const std::string &  msg  )  [virtual]

may be called before takeInput to verify this Control can make sense of msg

Definition at line 350 of file ControlBase.cc.


Member Data Documentation

std::string ControlBase::description [protected]

the description of this control

Definition at line 209 of file ControlBase.h.

Referenced by getDescription(), and setDescription().

LedMC to use for displaying selection.

Definition at line 216 of file ControlBase.h.

Referenced by activate(), deactivate(), doReadStdIn(), doSelect(), getDisplay(), refresh(), and setDisplay().

bool ControlBase::doRewrite [protected]

toggles using VT100 codes to reposition the cursor at the beginning of the menu

we don't always want to do this, any time someone else might have written to the display we set this to false so we don't overwrite it.

Definition at line 212 of file ControlBase.h.

Referenced by deactivate(), doSelect(), pause(), refresh(), DumpFileControl::selectedFile(), and takeInput().


The documentation for this class was generated from the following files:

Tekkotsu v5.1CVS
Generated Mon May 9 04:59:06 2016 by Doxygen 1.6.3