All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Pages
MultiWidgets::Operator Class Reference

Operator class provides an interface that can be used to extend Widget behaviour by adding behaviours to it. More...

#include <MultiWidgets/Operator.hpp>

Inheritance diagram for MultiWidgets::Operator:
Stylish::Styleable Valuable::Node Valuable::Attribute Patterns::NotCopyable Valuable::Serializable MultiWidgets::AnimateTowardsOperator< float > Extensions::TimeLine::OperatorStateSaver MultiWidgets::AfterIdleOperator MultiWidgets::AnimateTowardsOperator< T > MultiWidgets::Animation MultiWidgets::Animator MultiWidgets::AnimatorFloatCosineModulator MultiWidgets::InputFlagsOperator MultiWidgets::JavaScriptOperator MultiWidgets::LayoutEngine MultiWidgets::LimitScaleOperator MultiWidgets::RotateTowardsHandsOperator MultiWidgets::SizeConstrainOperator MultiWidgets::SnapToAngleOperator MultiWidgets::StayInsideParentOperator MultiWidgets::TapAndHoldGestureOperator MultiWidgets::TimerOperator MultiWidgets::VideoStreamAudioCaptureOperator WebBrowserCef::WebPageOperator

Valuable Attributes

bool done = false
 Is the operator done (i.e. More...
 
- Valuable Attributes inherited from Stylish::Styleable
QString css-class = ""
 Get the CSS classes of the Styleable as a space separated string. More...
 
QString css-id = ""
 Get the CSS id of the Styleable. More...
 
- Valuable Attributes inherited from Valuable::Node
Node::Uuid id = generateId()
 Returns the unique id. More...
 

Public Member Functions

virtual void added (MultiWidgets::Widget &w)
 Called when the operator is added to a widget. More...
 
virtual OperatorPtr clone () const
 Creates a copy of the operator. More...
 
virtual void input (MultiWidgets::Widget &w, MultiWidgets::GrabManager &gm, const MultiWidgets::TrackedObjects &trackedObjects, float dt)
 Perform the operator logic on input. More...
 
virtual void interactionBegin (MultiWidgets::Widget &w, MultiWidgets::GrabManager &gm)
 This function gets called when the Widget::interactionBegin is called for the widget this operator is attached to. More...
 
virtual void interactionEnd (MultiWidgets::Widget &w, MultiWidgets::GrabManager &gm)
 This function gets called when the Widget::interactionEnd is called for the widget this operator is attached to. More...
 
virtual bool isActive () const
 Returns true if the operator is currently active. More...
 
bool isDone () const
 Is the operator done (i.e. More...
 
 Operator ()
 Default constructor.
 
virtual void removed (MultiWidgets::Widget &w)
 Called when the operator is removed from the widget or the widget is deleted. More...
 
virtual void reset ()
 Resets the state of the operator. More...
 
virtual QByteArray type () const
 Returns the type id of the Operator. More...
 
virtual void update (MultiWidgets::Widget &w, const MultiWidgets::FrameInfo &frameInfo)
 Perform operator logic. More...
 
virtual ~Operator ()
 Destructor.
 
- Public Member Functions inherited from Stylish::Styleable
void addCSSClass (const QString &s)
 Adds the Styleable to CSS class s. More...
 
void addCSSClasses (const QStringList &classes)
 Adds the Styleable to given CSS classes. More...
 
QString attributeSource (const QByteArray &name) const
 Gets CSS declaration source location based on the attribute name For example if this object has "size" attribute that is set from a CSS file, attributeSource("size") would return "filename.css:line". More...
 
const Style & childStyle () const
 Cached style that should be applied to all children of this object.
 
const Radiant::ArraySet
< QByteArray > & 
cssClasses () const
 Get the CSS classes of the Styleable in lowercase.
 
const QString & cssClassStr () const
 Get the CSS classes of the Styleable as a space separated string. More...
 
QString cssId () const
 Get the CSS id of the Styleable. More...
 
const QByteArray & cssType () const
 Get the CSS type of the Styleable.
 
bool hasCSSClass (const QByteArray &s) const
 Does the Styleable belong to given CSS class. More...
 
bool match (const SimpleSelector &ss, int *specificityOut=nullptr) const
 Checks if SimpleSelector matches this object. More...
 
bool pseudoClass (const QByteArray &name) const
 Query if the Styleable has pseudo class called name.
 
void removeCSSClass (const QString &s)
 Remove the Styleable from CSS class s. More...
 
void setCSSClasses (const QString &s)
 Set the CSS classes as a space separated list You almost always want to use addCSSClass instead of this one. More...
 
void setCSSId (const QString &s)
 Set the CSS id of the Styleable. More...
 
void setCSSType (const QByteArray &s)
 Set the CSS type of the Styleable.
 
virtual bool setProperty (Valuable::Attribute &var, const Valuable::StyleValue &value, Layer layer)
 Converts the given Stylish::Value to Valuable::Attribute.
 
void setPseudoClass (const QByteArray &name, bool state)
 Disable or enable pseudo class.
 
virtual bool setStyle (const Style &style)
 Applies a style to the object. More...
 
QString simpleSelector (bool includePseudoClasses=true) const
 Returns a CSS simple selector that matches this Styleable.
 
const Style & style () const
 Returns the style for this object.
 
 Styleable (const QByteArray &name="Styleable")
 Constructor for Styleable. More...
 
- Public Member Functions inherited from Valuable::Node
bool acceptsEvent (const QByteArray &messageId) const
 Returns true if this object accepts event 'id' in eventProcess.
 
bool addAttribute (Attribute *const attribute)
 Adds a new Attribute to the list of attribute objects. More...
 
bool addAttribute (const QByteArray &name, Attribute *const attribute)
 Adds a new Attribute to the list of attribute objects.
 
template<typename Widget >
bool addAttribute (const QByteArray &name, const Radiant::IntrusivePtr< Widget > &attribute)
 Adds a new Attribute to the list of attribute objects. More...
 
long addListener (const QByteArray &attribute, v8::Persistent< v8::Function > func, int role=Attribute::CHANGE_ROLE)
 Add a JavaScript attribute listener to attribute belonging this Node. More...
 
virtual Attributeattribute (const QByteArray &name) const
 Gets an Attribute with the given name. More...
 
template<typename T >
AttributeT< T > * attribute (const QByteArray &name) const
 Gets an Attribute with the given name. More...
 
const containerattributes () const
 
void clearValues (Layer layer)
 Clears all Attribute values of the given layer. More...
 
void debugDump ()
 Prints the contents of this Attribute to the terminal.
 
virtual bool deserialize (const ArchiveElement &element)
 De-serializes this object (and its children) from a DOM node.
 
void eventAddDeprecated (const QByteArray &deprecatedId, const QByteArray &newId)
 Register a deprecated event that is automatically converted to new event id and a warning is issued when it is used. More...
 
void eventAddIn (const QByteArray &messageId)
 Registers a new event that this class handles in eventProcess.
 
template<typename Widget >
long eventAddListener (const QByteArray &eventId, const QByteArray &messageId, Radiant::IntrusivePtr< Widget > &listener, ListenerType listenerType=DIRECT, const Radiant::BinaryData *defaultData=0)
 Add an event listener to this object. More...
 
long eventAddListener (const QByteArray &eventId, const QByteArray &messageId, Valuable::Node *listener, ListenerType listenerType=DIRECT, const Radiant::BinaryData *defaultData=0)
 Add an event listener to this object. More...
 
long eventAddListener (const QByteArray &eventId, ListenerFuncVoid func, ListenerType listenerType=DIRECT)
 Add an event listener to this object. More...
 
long eventAddListener (const QByteArray &eventId, Node *dstNode, ListenerFuncVoid func, ListenerType listenerType=DIRECT)
 
long eventAddListenerBd (const QByteArray &eventId, Node *dstNode, ListenerFuncBd func, ListenerType listenerType=DIRECT)
 
long eventAddListenerBd (const QByteArray &eventId, ListenerFuncBd func, ListenerType listenerType=DIRECT)
 Add an event listener to this object. More...
 
void eventAddOut (const QByteArray &eventId)
 Registers a new event this class can send with eventSend.
 
const QSet< QByteArray > & eventInNames () const
 Returns set of all registered IN events.
 
unsigned eventListenerCount () const
 Returns the number of event listeners.
 
const QSet< QByteArray > & eventOutNames () const
 Returns set of all registered OUT events.
 
void eventPassingEnable (bool enable)
 Control whether events are passed.
 
template<typename Widget >
int eventRemoveListener (Radiant::IntrusivePtr< Widget > &listener)
 Removes all events from this object to given listener. More...
 
template<typename Widget >
int eventRemoveListener (const QByteArray &eventId=QByteArray(), const QByteArray &messageId=QByteArray(), Radiant::IntrusivePtr< Widget > &listener=Radiant::IntrusivePtr< Widget >())
 Removes events from this object that match the parameters. More...
 
int eventRemoveListener (const QByteArray &eventId=QByteArray(), const QByteArray &messageId=QByteArray(), Valuable::Node *listener=0)
 Removes event listeners from this object. More...
 
int eventRemoveListener (Valuable::Node *listener)
 Removes all events from this object to given listener. More...
 
bool eventRemoveListener (long listenerId)
 Removes event listener with given id. More...
 
void eventSend (const QByteArray &eventId, Radiant::BinaryData &bd)
 Sends an event and bd to all listeners on this eventId.
 
void eventSend (const QByteArray &eventId)
 Sends an event to all listeners on this eventId.
 
template<typename P1 >
void eventSend (const QByteArray &eventId, const P1 &p1)
 Sends an event to all listeners on this eventId. More...
 
template<typename P1 , typename P2 >
void eventSend (const QByteArray &eventId, const P1 &p1, const P2 &p2)
 Sends an event to all listeners on this eventId. More...
 
template<typename P1 , typename P2 , typename P3 >
void eventSend (const QByteArray &eventId, const P1 &p1, const P2 &p2, const P3 &p3)
 Sends an event to all listeners on this eventId. More...
 
template<typename P1 , typename P2 , typename P3 , typename P4 >
void eventSend (const QByteArray &eventId, const P1 &p1, const P2 &p2, const P3 &p3, const P4 &p4)
 Sends an event to all listeners on this eventId. More...
 
template<typename P1 , typename P2 , typename P3 , typename P4 , typename P5 >
void eventSend (const QByteArray &eventId, const P1 &p1, const P2 &p2, const P3 &p3, const P4 &p4, const P5 &p5)
 Sends an event to all listeners on this eventId. More...
 
unsigned eventSourceCount () const
 Returns the number of event sources.
 
Uuid id () const
 Returns the unique id.
 
bool isBeingDestroyed () const
 Returns true if we are about to delete this object. More...
 
bool loadFromFileXML (const QString &filename)
 Reads this object (and its children) from an XML file.
 
bool loadFromMemoryXML (const QByteArray &buffer)
 Reads this object (and its children) from a memory buffer.
 
 Node (Node *host, const QByteArray &name="", bool transit=false)
 Constructs a new Node and adds it under the given host. More...
 
 Node (Node &&node)
 Moves a node, including all its attributes, events etc. More...
 
Nodeoperator= (Node &&node)
 Moves a node, replacing this. More...
 
virtual bool readElement (const ArchiveElement &element)
 Handles a serialization element that lacks automatic handlers. More...
 
void removeAttribute (Attribute *const attribute)
 Removes an Attribute from the list of attribute objects.
 
bool saveToFileXML (const QString &filename, unsigned int opts=SerializationOptions::DEFAULTS) const
 Saves this object (and its children) to an XML file.
 
bool saveToMemoryXML (QByteArray &buffer, unsigned int opts=SerializationOptions::DEFAULTS) const
 Saves this object (and its children) to binary data buffer.
 
virtual ArchiveElement serialize (Archive &doc) const
 Serializes this object (and its children) to a DOM node.
 
virtual void setAsDefaults ()
 Sets the current USER attribute value as the default value and clears the USER value. More...
 
void setId (Uuid newId)
 Sets the unique id. More...
 
template<class T >
bool setValue (const QByteArray &name, const T &v)
 Uses a query string to find a Attribute, and sets a new value to that if found. More...
 
bool setValue (const QByteArray &name, v8::Handle< v8::Value > v)
 Set attribute value from JavaScript. More...
 
- Public Member Functions inherited from Valuable::Attribute
long addListener (ListenerFunc func, int role=CHANGE_ROLE)
 Adds a listener that is invoked whenever the value is changed. More...
 
long addListener (Node *listener, ListenerFunc func, int role=CHANGE_ROLE)
 Adds a listener that is invoked whenever the value is changed. More...
 
long addListener (v8::Persistent< v8::Function > func, int role=CHANGE_ROLE)
 Adds a JavaScript listener that is invoked whenever the value is changed. More...
 
virtual float asFloat (bool *const ok=0, Layer layer=LAYER_CURRENT) const
 Converts the value object in a floating point number. More...
 
virtual int asInt (bool *const ok=0, Layer layer=LAYER_CURRENT) const
 Converts the value object in an integer. More...
 
virtual QString asString (bool *const ok=0, Layer layer=LAYER_CURRENT) const
 Converts the value object to a string. More...
 
 Attribute (const Attribute &o)
 Create a copy of the given Attribute WITHOUT the link to host, listeners, or the attribute name. More...
 
 Attribute (Node *host, const QByteArray &name, bool transit=false)
 Constructs a new value object and attaches it to its host. More...
 
virtual void clearValue (Layer layer)
 Unsets the value from a specific layer. More...
 
virtual void emitChange ()
 Invokes the change valueChanged function of all listeners.
 
virtual void eventProcess (const QByteArray &id, Radiant::BinaryData &data)
 Process a message. More...
 
void eventProcessFloat (const char *id, float v)
 Utility function for sending a float message to the object.
 
void eventProcessInt (const char *id, int v)
 Utility function for sending an int message to the object.
 
void eventProcessString (const char *id, const QString &str)
 Utility function for sending string message to the object.
 
void eventProcessString (const char *id, const char *str)
 Utility function for sending string message to the object.
 
void eventProcessVector2 (const char *id, Nimble::Vector2)
 Utility function for sending a Nimble::Vector2f message to the object.
 
void eventProcessVector3 (const char *id, Nimble::Vector3)
 Utility function for sending a Vector3 message to the object.
 
void eventProcessVector4 (const char *id, Nimble::Vector4)
 Utility function for sending a Vector4 message to the object.
 
virtual bool handleShorthand (const Valuable::StyleValue &value, Radiant::ArrayMap< Valuable::Attribute *, Valuable::StyleValue > &expanded)
 If attribute supports shorthand properties, this should be used to parse those. More...
 
Nodehost () const
 The host object of the value object (is any). More...
 
virtual bool isChanged () const
 
virtual bool isValueDefinedOnLayer (Layer layer) const
 Check if the given layer defines a value. More...
 
bool layerForSerialization (SerializationOptions flags, Layer &layer) const
 
const QByteArray & name () const
 Returns the name of the object.
 
const Attributeoperator= (const Attribute &)
 Create a copy of the given Attribute WITHOUT the link to host, listeners, or the attribute name. More...
 
AttributeownerShorthand () const
 
QByteArray path () const
 Returns the path (separated by '/'s) from the root.
 
void removeHost ()
 Sets the host pointer to zero and removes this object from the host. More...
 
bool removeListener (Node *listener, int role=ALL_ROLES)
 Removes a listener from the listener list. More...
 
bool removeListener (long id)
 Removes a listener from the listener list. More...
 
void removeListeners (int role=ALL_ROLES)
 Removes listeners from the listener list.
 
virtual bool set (float v, Layer layer=USER, ValueUnit unit=VU_UNKNOWN)
 Sets the value of the object.
 
virtual bool set (int v, Layer layer=USER, ValueUnit unit=VU_UNKNOWN)
 Sets the value of the object.
 
virtual bool set (const QString &v, Layer layer=USER, ValueUnit unit=VU_UNKNOWN)
 Sets the value of the object.
 
virtual bool set (const Nimble::Vector2f &v, Layer layer=USER, QList< ValueUnit > units=QList< ValueUnit >())
 Sets the value of the object.
 
virtual bool set (const Nimble::Vector3f &v, Layer layer=USER, QList< ValueUnit > units=QList< ValueUnit >())
 Sets the value of the object.
 
virtual bool set (const Nimble::Vector4f &v, Layer layer=USER, QList< ValueUnit > units=QList< ValueUnit >())
 Sets the value of the object.
 
virtual bool set (const StyleValue &value, Layer layer=USER)
 Sets the value of the object.
 
void setName (const QByteArray &s)
 Sets the name of the object.
 
void setOwnerShorthand (Attribute *owner)
 
- Public Member Functions inherited from Valuable::Serializable
virtual bool deserializeXML (const DOMElement &element)
 Deserializes (reads) this object from an XML element. More...
 
bool isSerializable () const
 
void setSerializable (bool v)
 

Static Public Member Functions

static OperatorPtr create (const Valuable::ArchiveElement &element)
 Creates an operator by deserializing it from the archive.
 

Protected Member Functions

void setDone (bool done=true)
 Mark the Operator as done. More...
 
- Protected Member Functions inherited from Stylish::Styleable
virtual void attributeAdded (Attribute *attribute)
 This is called when new attribute is added to Node. More...
 
virtual void attributeRemoved (Attribute *attribute)
 This is called when attribute is removed from Node. More...
 
virtual void updateStyle ()
 Set the style for this object.
 
- Protected Member Functions inherited from Valuable::Node
virtual void attributeAdded (Attribute *attribute)
 This is called when new attribute is added to Node. More...
 
virtual void attributeRemoved (Attribute *attribute)
 This is called when attribute is removed from Node. More...
 
Nodesender ()
 Get the sender of the event, only valid in DIRECT events. More...
 
void setBeingDestroyed ()
 Sets 'isBeginDestroyed' flag to true and removes all event listeners to this object. More...
 
- Protected Member Functions inherited from Valuable::Attribute
virtual void emitDelete ()
 Invokes the change valueDeleted function of all listeners.
 

Additional Inherited Members

- Public Types inherited from Valuable::Node
typedef container::const_iterator const_iterator
 
typedef Radiant::ArrayMap
< QByteArray, Attribute * > 
container
 Container for attributes, key is the attribute name.
 
typedef container::iterator iterator
 Iterator for the container.
 
typedef std::function< void(Radiant::BinaryData &)> ListenerFuncBd
 Listener function type that takes a BinaryData reference as a parameter, similar to eventProcess.
 
typedef std::function< void()> ListenerFuncVoid
 Default listener function type.
 
enum  ListenerType { DIRECT =1, AFTER_UPDATE =2, AFTER_UPDATE_ONCE =4 }
 Types of event listeners. More...
 
typedef int64_t Uuid
 Unique identifier type.
 
- Node Events inherited from Stylish::Styleable
[OUT] pseudo-class-changed (QString name, bool state)
 Pseudo class name was added (state == true) or removed (state == false)
 
- Protected Attributes inherited from Stylish::Styleable
Style m_childStyle
 Cached style that should be applied to all children of this object.
 
Valuable::AttributeString m_cssClass
 CSS class of the object as a space separated list.
 
Valuable::AttributeString m_cssId
 CSS id of the object.
 
QByteArray m_cssType
 CSS type of the object.
 
Style m_style
 Currently applied style.
 

Detailed Description

Operator class provides an interface that can be used to extend Widget behaviour by adding behaviours to it.

In many cases, some simple extra behaviour is required for different types of widgets. Changing the behaviour by overridign virtual functions would be cumbersome.

Operators can be used to add simple logic to widgets. The operator class is added as decoration to a widget. It can then access the input data given to the widget (Operator::input) and modify the state of the widget (Operator::update) without having to modify the widget itself.

Multiple operators can be added to a widget to generate more complex behaviours in a modular way.

You do not instantiate the Operator class directly, but inherit your custom behaviour from it.

Examples:
PositionalSoundsExample.cpp.

Member Function Documentation

virtual void MultiWidgets::Operator::added ( MultiWidgets::Widget w)
virtual

Called when the operator is added to a widget.

Can be called multiple times if the same operator is added to multiple widgets. Base implementation does nothing.

Parameters
wThe widget where the operator was added

Reimplemented in MultiWidgets::AnimatorT< T >, MultiWidgets::AnimatorT< float >, MultiWidgets::AnimatorT< Nimble::Vector2f >, MultiWidgets::JavaScriptOperator, MultiWidgets::LayoutEngine, MultiWidgets::SnapToAngleOperator, MultiWidgets::VideoStreamAudioCaptureOperator, and MultiWidgets::SizeConstrainOperator.

virtual OperatorPtr MultiWidgets::Operator::clone ( ) const
virtual

Creates a copy of the operator.

The default implementation serializes the operator and deserializes it to a new instance.

Returns
cloned operator

Reimplemented in MultiWidgets::AnimateRotationAboutCenterTowardsOperator, MultiWidgets::AnimateScaleAboutCenterTowardsOperator, MultiWidgets::AfterIdleApplyLambdaOperator, MultiWidgets::AnimateTowardsOperator< T >, and MultiWidgets::AnimateTowardsOperator< float >.

virtual void MultiWidgets::Operator::input ( MultiWidgets::Widget w,
MultiWidgets::GrabManager gm,
const MultiWidgets::TrackedObjects trackedObjects,
float  dt 
)
virtual

Perform the operator logic on input.

This function gets called when widget input is processed and the INPUT_OPERATORS input flag is set for the target widget. This function is called even if the trackedObjects list for the widget is empty.

Parameters
wThe widget that is the target of the operator
gmThe grab manager that holds current input status, transformation etc.
trackedObjectslist of tracked objects affecting the widget (may be empty)
dttime elapsed since last input frame

Reimplemented in MultiWidgets::StayInsideParentOperator, MultiWidgets::JavaScriptOperator, and MultiWidgets::RotateTowardsHandsOperator.

virtual void MultiWidgets::Operator::interactionBegin ( MultiWidgets::Widget w,
MultiWidgets::GrabManager gm 
)
virtual

This function gets called when the Widget::interactionBegin is called for the widget this operator is attached to.

Reimplemented in MultiWidgets::JavaScriptOperator.

virtual void MultiWidgets::Operator::interactionEnd ( MultiWidgets::Widget w,
MultiWidgets::GrabManager gm 
)
virtual

This function gets called when the Widget::interactionEnd is called for the widget this operator is attached to.

Reimplemented in MultiWidgets::JavaScriptOperator.

virtual bool MultiWidgets::Operator::isActive ( ) const
virtual

Returns true if the operator is currently active.

This information is used to determine which Widgets are currently active.

Typical use case is when an operator can be idle or active (for example #StayInsideParentOperator). In such cases the activity status of the operator can be used to determine if the widget has visible activity.

Returns
true if the operator is currently active, otherwise false.

Reimplemented in MultiWidgets::StayInsideParentOperator, MultiWidgets::LimitScaleOperator, MultiWidgets::AfterIdleOperator, MultiWidgets::JavaScriptOperator, and MultiWidgets::InputFlagsOperator.

bool MultiWidgets::Operator::isDone ( ) const

Is the operator done (i.e.

no longer needed). When the operator is done it is automatically deleted by the host widget.

Returns
Current value of the done attribute
virtual void MultiWidgets::Operator::removed ( MultiWidgets::Widget w)
virtual

Called when the operator is removed from the widget or the widget is deleted.

For every added() call there is eventually one removed() call. Base implementation does nothing.

Parameters
wThe widget where the operator was removed

Reimplemented in MultiWidgets::JavaScriptOperator, MultiWidgets::LayoutEngine, MultiWidgets::VideoStreamAudioCaptureOperator, and MultiWidgets::SizeConstrainOperator.

virtual void MultiWidgets::Operator::reset ( )
virtual

Resets the state of the operator.

For example, Animators should reset the animation back to the beginning. Base implementation will call setDone(false)

Reimplemented in MultiWidgets::AnimatorT< T >, MultiWidgets::AnimatorT< float >, MultiWidgets::AnimatorT< Nimble::Vector2f >, MultiWidgets::TimerOperator, MultiWidgets::JavaScriptOperator, and MultiWidgets::InputFlagsOperator.

void MultiWidgets::Operator::setDone ( bool  done = true)
protected

Mark the Operator as done.

Setter for attribute done.

Operators that have been marked as done are removed by the widget automatically during their update.

Parameters
donetrue to mark the operator as done
donenew attribute value
virtual QByteArray MultiWidgets::Operator::type ( ) const
virtual

Returns the type id of the Operator.

This is used in operator serialization.

Returns
operator type

Reimplemented from Valuable::Attribute.