AgIsoStack++
A control-function-focused implementation of the major ISOBUS and J1939 protocols
Loading...
Searching...
No Matches
Classes | Public Types | Public Member Functions | Static Public Member Functions | Protected Attributes | List of all members
isobus::VTObject Class Referenceabstract

Generic VT object base class. More...

#include <isobus_virtual_terminal_objects.hpp>

Inheritance diagram for isobus::VTObject:
[legend]

Classes

class  ChildObjectData
 Storage for child object data. More...
 

Public Types

enum class  AttributeError : std::uint8_t { InvalidObjectID = 0 , InvalidAttributeID = 1 , InvalidValue = 2 , AnyOtherError = 4 }
 Enumerates the bit indices of the error fields that can be set when changing an attribute. More...
 

Public Member Functions

 VTObject ()=default
 Constructor for a generic VT object. Sets up default values and the pointer to the member object pool.
 
virtual ~VTObject ()=default
 Virtual destructor for a generic VT object.
 
virtual VirtualTerminalObjectType get_object_type () const =0
 Returns the VT object type of the underlying derived object.
 
virtual std::uint32_t get_minumum_object_length () const =0
 Returns the minimum binary serialized length of the associated object.
 
virtual bool get_is_valid (const std::map< std::uint16_t, std::shared_ptr< VTObject > > &objectPool) const =0
 Performs basic error checking on the object and returns if the object is valid.
 
virtual bool set_attribute (std::uint8_t attributeID, std::uint32_t rawAttributeData, const std::map< std::uint16_t, std::shared_ptr< VTObject > > &objectPool, AttributeError &returnedError)=0
 Sets an attribute and optionally returns an error code in the last parameter.
 
virtual bool get_attribute (std::uint8_t attributeID, std::uint32_t &returnedAttributeData) const =0
 Gets an attribute and returns the raw data in the last parameter.
 
std::uint16_t get_id () const
 Returns the object ID of this VT object.
 
void set_id (std::uint16_t value)
 Sets the object ID of this VT object.
 
std::uint16_t get_width () const
 Returns the width of this object in px.
 
void set_width (std::uint16_t value)
 Sets the width of this object in px.
 
std::uint16_t get_height () const
 Returns the height of this object in px.
 
void set_height (std::uint16_t value)
 Sets the height of this object in px.
 
std::uint8_t get_background_color () const
 Returns the background color attribute of this object.
 
void set_background_color (std::uint8_t value)
 Sets the background color attribute of this object.
 
std::uint16_t get_number_children () const
 Returns the number of child objects within this object.
 
void add_child (std::uint16_t objectID, std::int16_t relativeXLocation, std::int16_t relativeYLocation)
 Adds an object as a child to another object, which essentially creates a tree of object association.
 
std::uint16_t get_child_id (std::uint16_t index) const
 Returns the ID of the child by index, if one was added previously.
 
std::int16_t get_child_x (std::uint16_t index) const
 Returns the X offset of the child object associated with the specified index into the parent object.
 
std::int16_t get_child_y (std::uint16_t index) const
 Returns the Y offset of the child object associated with the specified index into the parent object.
 
void set_child_x (std::uint16_t index, std::int16_t xOffset)
 Sets the X offset of the child object associated with the specified index into the parent object.
 
void set_child_y (std::uint16_t index, std::int16_t yOffset)
 Sets the Y offset of the child object associated with the specified index into the parent object.
 
bool offset_all_children_with_id (std::uint16_t childObjectID, std::int8_t xOffset, std::int8_t yOffset)
 Offsets all child objects with the specified ID by the amount specified relative to its parent.
 
void remove_child (std::uint16_t objectIDToRemove, std::int16_t relativeXLocation, std::int16_t relativeYLocation)
 Removes an object reference from another object. All fields must exactly match for the object to be removed. This is because objects can have multiple of the same child at different places, so we can't infer which one to remove without the exact position.
 
void pop_child ()
 Removes the last added child object. This is meant to be a faster way to deal with objects that only have a max of 1 child.
 
std::uint8_t get_number_macros () const
 Returns the number of macros referenced by this object.
 
void add_macro (MacroMetadata macroToAdd)
 Adds a macro to the list of macros referenced by this object.
 
MacroMetadata get_macro (std::uint8_t index) const
 Returns the macro ID at the specified index.
 

Static Public Member Functions

static std::shared_ptr< VTObjectget_object_by_id (std::uint16_t objectID, const std::map< std::uint16_t, std::shared_ptr< VTObject > > &objectPool)
 Returns a VT object from its member pool by ID, or the null id if it does not exist.
 

Protected Attributes

std::vector< ChildObjectDatachildren
 List of child objects.
 
std::vector< MacroMetadatamacros
 List of macros referenced by this object.
 
std::uint16_t objectID = NULL_OBJECT_ID
 Object identifier. Shall be unique within the object pool.
 
std::uint16_t width = 0
 The width of the object. Not always applicable, but often used.
 
std::uint16_t height = 0
 The height of the object. Not always applicable, but often used.
 
std::uint8_t backgroundColor = 0
 The background color (from the VT colour table)
 

Detailed Description

Generic VT object base class.

Definition at line 182 of file isobus_virtual_terminal_objects.hpp.

Member Enumeration Documentation

◆ AttributeError

enum class isobus::VTObject::AttributeError : std::uint8_t
strong

Enumerates the bit indices of the error fields that can be set when changing an attribute.

Definition at line 186 of file isobus_virtual_terminal_objects.hpp.

Member Function Documentation

◆ add_child()

void isobus::VTObject::add_child ( std::uint16_t objectID,
std::int16_t relativeXLocation,
std::int16_t relativeYLocation )

Adds an object as a child to another object, which essentially creates a tree of object association.

Parameters
[in]objectIDThe object ID of the child to add
[in]relativeXLocationThe X offset of this object to its parent
[in]relativeYLocationThe Y offset of this object to its parent

Definition at line 107 of file isobus_virtual_terminal_objects.cpp.

◆ add_macro()

void isobus::VTObject::add_macro ( MacroMetadata macroToAdd)

Adds a macro to the list of macros referenced by this object.

Parameters
[in]macroToAddThe macro to add, which includes the event ID and macro ID

Definition at line 201 of file isobus_virtual_terminal_objects.cpp.

◆ get_attribute()

virtual bool isobus::VTObject::get_attribute ( std::uint8_t attributeID,
std::uint32_t & returnedAttributeData ) const
pure virtual

◆ get_background_color()

std::uint8_t isobus::VTObject::get_background_color ( ) const

Returns the background color attribute of this object.

Returns
The background color attribute of this object (index to the actual color in the color table)

Definition at line 92 of file isobus_virtual_terminal_objects.cpp.

Here is the caller graph for this function:

◆ get_child_id()

std::uint16_t isobus::VTObject::get_child_id ( std::uint16_t index) const

Returns the ID of the child by index, if one was added previously.

Note
NULL_OBJECT_ID is a valid child, so you should always check the number of children to know if the return value of this is "valid"
Parameters
[in]indexThe index of the child to retrieve
Returns
The ID of the child at the specified index, or NULL_OBJECT_ID if the index is out of range

Definition at line 112 of file isobus_virtual_terminal_objects.cpp.

Here is the caller graph for this function:

◆ get_child_x()

std::int16_t isobus::VTObject::get_child_x ( std::uint16_t index) const

Returns the X offset of the child object associated with the specified index into the parent object.

Parameters
[in]indexThe index of the child to retrieve
Returns
The relative X position of the child, and always 0 if the index is out of range

Definition at line 123 of file isobus_virtual_terminal_objects.cpp.

◆ get_child_y()

std::int16_t isobus::VTObject::get_child_y ( std::uint16_t index) const

Returns the Y offset of the child object associated with the specified index into the parent object.

Parameters
[in]indexThe index of the child to retrieve
Returns
The relative Y position of the child, and always 0 if the index is out of range

Definition at line 134 of file isobus_virtual_terminal_objects.cpp.

◆ get_height()

std::uint16_t isobus::VTObject::get_height ( ) const

Returns the height of this object in px.

Returns
The height of this object in px

Definition at line 82 of file isobus_virtual_terminal_objects.cpp.

Here is the caller graph for this function:

◆ get_id()

std::uint16_t isobus::VTObject::get_id ( ) const

Returns the object ID of this VT object.

Returns
The object ID of this VT object

Definition at line 62 of file isobus_virtual_terminal_objects.cpp.

◆ get_is_valid()

virtual bool isobus::VTObject::get_is_valid ( const std::map< std::uint16_t, std::shared_ptr< VTObject > > & objectPool) const
pure virtual

◆ get_macro()

MacroMetadata isobus::VTObject::get_macro ( std::uint8_t index) const

Returns the macro ID at the specified index.

Parameters
[in]indexThe index of the macro to retrieve
Returns
The macro metadata at the specified index, or NULL_OBJECT_ID + EventID::Reserved if the index is out of range

Definition at line 206 of file isobus_virtual_terminal_objects.cpp.

◆ get_minumum_object_length()

virtual std::uint32_t isobus::VTObject::get_minumum_object_length ( ) const
pure virtual

◆ get_number_children()

std::uint16_t isobus::VTObject::get_number_children ( ) const

Returns the number of child objects within this object.

Returns
The number of child objects within this object

Definition at line 102 of file isobus_virtual_terminal_objects.cpp.

Here is the caller graph for this function:

◆ get_number_macros()

std::uint8_t isobus::VTObject::get_number_macros ( ) const

Returns the number of macros referenced by this object.

Returns
The number of macros referenced by this object

Definition at line 196 of file isobus_virtual_terminal_objects.cpp.

◆ get_object_by_id()

std::shared_ptr< VTObject > isobus::VTObject::get_object_by_id ( std::uint16_t objectID,
const std::map< std::uint16_t, std::shared_ptr< VTObject > > & objectPool )
static

Returns a VT object from its member pool by ID, or the null id if it does not exist.

Parameters
[in]objectIDThe object ID to search for
[in]objectPoolThe object pool to search in
Returns
The object with the corresponding ID

Definition at line 218 of file isobus_virtual_terminal_objects.cpp.

Here is the caller graph for this function:

◆ get_object_type()

virtual VirtualTerminalObjectType isobus::VTObject::get_object_type ( ) const
pure virtual

◆ get_width()

std::uint16_t isobus::VTObject::get_width ( ) const

Returns the width of this object in px.

Returns
The width of this object in px

Definition at line 72 of file isobus_virtual_terminal_objects.cpp.

Here is the caller graph for this function:

◆ offset_all_children_with_id()

bool isobus::VTObject::offset_all_children_with_id ( std::uint16_t childObjectID,
std::int8_t xOffset,
std::int8_t yOffset )

Offsets all child objects with the specified ID by the amount specified relative to its parent.

Parameters
[in]childObjectIDThe object ID of the children to offset
[in]xOffsetThe relative amount to offset the object(s) by in the X axis
[in]yOffsetThe relative amount to offset the object(s) by in the Y axis
Returns
true if any child matched the specified object ID, otherwise false if no children were found with the specified ID.

Definition at line 161 of file isobus_virtual_terminal_objects.cpp.

◆ pop_child()

void isobus::VTObject::pop_child ( )

Removes the last added child object. This is meant to be a faster way to deal with objects that only have a max of 1 child.

Definition at line 188 of file isobus_virtual_terminal_objects.cpp.

◆ remove_child()

void isobus::VTObject::remove_child ( std::uint16_t objectIDToRemove,
std::int16_t relativeXLocation,
std::int16_t relativeYLocation )

Removes an object reference from another object. All fields must exactly match for the object to be removed. This is because objects can have multiple of the same child at different places, so we can't infer which one to remove without the exact position.

Parameters
[in]objectIDToRemoveThe object ID of the child to remove
[in]relativeXLocationThe X offset of this object to its parent
[in]relativeYLocationThe Y offset of this object to its parent

Definition at line 176 of file isobus_virtual_terminal_objects.cpp.

◆ set_attribute()

virtual bool isobus::VTObject::set_attribute ( std::uint8_t attributeID,
std::uint32_t rawAttributeData,
const std::map< std::uint16_t, std::shared_ptr< VTObject > > & objectPool,
AttributeError & returnedError )
pure virtual

Sets an attribute and optionally returns an error code in the last parameter.

Parameters
[in]attributeIDThe ID of the attribute to change
[in]rawAttributeDataThe raw data to change the attribute to, as decoded in little endian format with unused bytes/bits set to zero.
[in]objectPoolA map of all objects in the current object pool, keyed by their object ID. Used to validate some object references.
[out]returnedErrorIf this function returns false, this will be the error code. If the function returns true, this value is undefined.
Returns
True if the attribute was changed, otherwise false (check the returnedError in this case to know why).

Implemented in isobus::WorkingSet, isobus::DataMask, isobus::AlarmMask, isobus::Container, isobus::SoftKeyMask, isobus::Key, isobus::KeyGroup, isobus::Button, isobus::InputBoolean, isobus::InputString, isobus::InputNumber, isobus::InputList, isobus::OutputString, isobus::OutputNumber, isobus::OutputList, isobus::OutputLine, isobus::OutputRectangle, isobus::OutputEllipse, isobus::OutputPolygon, isobus::OutputMeter, isobus::OutputLinearBarGraph, isobus::OutputArchedBarGraph, isobus::PictureGraphic, isobus::NumberVariable, isobus::StringVariable, isobus::FontAttributes, isobus::LineAttributes, isobus::FillAttributes, isobus::InputAttributes, isobus::ExtendedInputAttributes, isobus::ObjectPointer, isobus::ExternalObjectPointer, isobus::Macro, isobus::ColourMap, isobus::WindowMask, isobus::AuxiliaryFunctionType1, isobus::AuxiliaryFunctionType2, isobus::AuxiliaryInputType1, isobus::AuxiliaryInputType2, and isobus::AuxiliaryControlDesignatorType2.

◆ set_background_color()

void isobus::VTObject::set_background_color ( std::uint8_t value)

Sets the background color attribute of this object.

Parameters
[in]valueThe new background color attribute for this object (index to the actual color in the color table)

Definition at line 97 of file isobus_virtual_terminal_objects.cpp.

Here is the caller graph for this function:

◆ set_child_x()

void isobus::VTObject::set_child_x ( std::uint16_t index,
std::int16_t xOffset )

Sets the X offset of the child object associated with the specified index into the parent object.

Parameters
[in]indexThe child index to affect
[in]xOffsetThe relative X position of the child, and always 0 if the index is out of range

Definition at line 145 of file isobus_virtual_terminal_objects.cpp.

◆ set_child_y()

void isobus::VTObject::set_child_y ( std::uint16_t index,
std::int16_t yOffset )

Sets the Y offset of the child object associated with the specified index into the parent object.

Parameters
[in]indexThe child index to affect
[in]yOffsetThe relative Y position of the child, and always 0 if the index is out of range

Definition at line 153 of file isobus_virtual_terminal_objects.cpp.

◆ set_height()

void isobus::VTObject::set_height ( std::uint16_t value)

Sets the height of this object in px.

Parameters
[in]valueThe new height of this object in px

Definition at line 87 of file isobus_virtual_terminal_objects.cpp.

Here is the caller graph for this function:

◆ set_id()

void isobus::VTObject::set_id ( std::uint16_t value)

Sets the object ID of this VT object.

Parameters
[in]valueThe new object ID for this object. Must be unique in this pool.

Definition at line 67 of file isobus_virtual_terminal_objects.cpp.

◆ set_width()

void isobus::VTObject::set_width ( std::uint16_t value)

Sets the width of this object in px.

Parameters
[in]valueThe new width of this object in px

Definition at line 77 of file isobus_virtual_terminal_objects.cpp.

Here is the caller graph for this function:

Member Data Documentation

◆ backgroundColor

std::uint8_t isobus::VTObject::backgroundColor = 0
protected

The background color (from the VT colour table)

Definition at line 362 of file isobus_virtual_terminal_objects.hpp.

◆ children

std::vector<ChildObjectData> isobus::VTObject::children
protected

List of child objects.

Definition at line 357 of file isobus_virtual_terminal_objects.hpp.

◆ height

std::uint16_t isobus::VTObject::height = 0
protected

The height of the object. Not always applicable, but often used.

Definition at line 361 of file isobus_virtual_terminal_objects.hpp.

◆ macros

std::vector<MacroMetadata> isobus::VTObject::macros
protected

List of macros referenced by this object.

Definition at line 358 of file isobus_virtual_terminal_objects.hpp.

◆ objectID

std::uint16_t isobus::VTObject::objectID = NULL_OBJECT_ID
protected

Object identifier. Shall be unique within the object pool.

Definition at line 359 of file isobus_virtual_terminal_objects.hpp.

◆ width

std::uint16_t isobus::VTObject::width = 0
protected

The width of the object. Not always applicable, but often used.

Definition at line 360 of file isobus_virtual_terminal_objects.hpp.


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