3.3 KiB
3.3 KiB
EWOL: Object model
@tableofcontents
Objectifs:
- Understand ewol basic ewol::Object
- Use ewol::Object correctly
Basis of the ewol::Object
An object in Ewol is a simple class: ewol::Object This object is the basis of all element in the ewol system. This is designed to manage many common things:
- Unique ID
- Name
- Parameters
- Signal generation
- Xml configuration
- Removing
Note:
Please do not compare with the gObject basic class...
Create an Object:
Creating an object is really simple:
ewol::widget::ButtonShared tmpButon = ewol::widget::Button::create();
APPL_INFO("We just create a button widget with unique ID=" << tmpButon->getId() << " name='" << tmpButon->propertyName.get() << "'");
Note:
The widget is not stored in a ememory::SharedPtr<ewol::widget::Button> but in a ewol::widget::ButtonShared to simplify the using of the pointer.
You have also: ememory::WeakPtr<ewol::widget::Button> = ewol::widget::ButtonWeak
Set the name of the object:
tmpButon->propertyName.set("my widget name");
APPL_INFO("We just create an Object with ID=" << tmpButon->getId() << " name='" << tmpButon->propertyName.get() << "'");
Remove an Object:
Simply use the function:
tmpButon->destroy();
This function request his parrent to remove the ememory::SharedPtr it keep on it. And when all ememory::SharedPtr is removed the object will be really removed.
At his point we can think an object is alive all the time someone keep a reference on it, then when you are not a parrent of the object, do not keep a ememory::SharedPtr but a ememory::WeakPtr.
Note:
If some Object is not removed when you close the application, the system inform you with displaying all object alive.
Retrieve an Object:
In Ewol this is possible to get a object with his name.
Find a global Object (ouside an Object)
#include <ewol/context/Context.hpp>
ewol::ObjectShared tmpObject = ewol::getContext().getEObjectManager().getObjectNamed("obj Name");
if (tmpObject == null) {
APPL_ERROR("The Object does not exist");
}
Find a global Object (inside an Object)
ewol::ObjectShared tmpObject = getObjectNamed("obj Name");
if (tmpObject == null) {
APPL_ERROR("The Object does not exist");
}
Find a sub-object
ewol::ObjectShared tmpObject = getSubObjectNamed("obj Name");
if (tmpObject == NULL) {
APPL_ERROR("The Object does not exist");
}
retriving your object type
It could be really interesting to retrive your own instance:
ewol::ObjectShared tmpObject ...;
appl::MyOwnObjectShared myObject = ememory::dynamicPointerCast<appl::MyOwnObject>(tmpObject);