wxArt2D
|
Ref Counted base object. More...
#include <gen.h>
Public Types | |
enum | CloneOptions { clone_members = 0x00000001, clone_properties = 0x00000002, clone_childs = 0x00000004, clone_unused = 0x00000008, clone_setoriginal = 0x00000010, clone_seteditcopy = 0x00000020, clone_noReference = 0x00000040, clone_noCameleonRef = 0x00000080, clone_toDrag = 0x00000100, clone_flat = 0x00000000, clone_deep = clone_members | clone_properties | clone_childs } |
options for cloning More... | |
typedef a2dAutoZeroPtr< a2dObject > | TAutoZeroPtrListClass |
this is needed inside the smart pointer template code | |
Public Member Functions | |
virtual bool | ProcessEvent (wxEvent &event) |
bool | SearchDynamicEventTable (wxEvent &event) |
void | Connect (int winid, int lastId, int eventType, wxObjectEventFunction func, wxObject *userData=(wxObject *) NULL, wxEvtHandler *eventSink=(wxEvtHandler *) NULL) |
bool | Disconnect (int winid, int lastId, wxEventType eventType, wxObjectEventFunction func=NULL, wxObject *userData=(wxObject *) NULL, wxEvtHandler *eventSink=(wxEvtHandler *) NULL) |
void | ProcessConnectedEvent (wxEvent &event) |
wxCHECK_VERSION(2,9,0) More... | |
void | ConnectEvent (wxEventType type, wxEvtHandler *eventSink) |
bool | DisconnectEvent (wxEventType type, wxEvtHandler *eventSink) |
bool | DisconnectEventAll (wxEvtHandler *eventSink) |
Remove all dynamic events in classA, going to classB (eventSink) More... | |
a2dObject () | |
constructor | |
virtual | ~a2dObject () |
destructor | |
void | operator= (const a2dObject &other) |
assignment operator | |
int | GetOwnedBy () |
like it to be protected, but this does not work with wxList macros More... | |
virtual a2dObject * | SetNonDynamic () |
Call to mark this object as non-dynamic (static/local/auto) More... | |
void | CheckReferences () |
Check zero reference count and delete if count is 0. More... | |
a2dObject * | Clone (CloneOptions options, a2dRefMap *refs=NULL) const |
create an exact copy of this property | |
a2dObject (const a2dObject &other, CloneOptions options, a2dRefMap *refs) | |
virtual wxString | GetName () const |
Returns the name of this object, if no name is given the internal id will be returned. More... | |
virtual void | SetName (const wxString &name) |
Creates the a2dStringProperty PROPID_Name. More... | |
virtual bool | IsTemporary_DontSave () const |
Check if this is a temporary object, which should not be saved. | |
void | SaveAsDocument (a2dIOHandlerXmlSerOut &out) |
Save this object and all below as an XML document. More... | |
virtual void | Save (wxObject *parent, a2dIOHandlerXmlSerOut &out, a2dObjectList *towrite) |
write all needed to an XML type of file called the CVG format More... | |
void | LoadFromDocument (a2dIOHandlerXmlSerIn &parser) |
Load this object and all below from an XML document. More... | |
virtual void | Load (wxObject *parent, a2dIOHandlerXmlSerIn &parser) |
load object from CVG file More... | |
wxInt64 | GetUniqueSerializationId () const |
return a unique id for this object More... | |
virtual bool | AlwaysWriteSerializationId () const |
If true, always write an id. More... | |
virtual bool | LinkReference (a2dObject *other) |
link a reference in the object to the given value More... | |
virtual void | ResolveInform () |
inform an object that reference resolution was done More... | |
void | Walker (wxObject *parent, a2dWalkerIOHandler &handler) |
This is used to recursively walk through an object tree. | |
void | SetCheck (bool check) |
general flag use at will. More... | |
bool | GetCheck () const |
general flag use at will. | |
void | SetRelease (bool value) |
set release flag More... | |
bool | GetRelease () const |
get release flag More... | |
a2dAutoZeroPtr< a2dObject > ** | GetAutoZeroPtrList () |
return the list head pointer for autozero pointers to this object More... | |
DECLARE_PROPERTIES () | |
Properties | |
a a2dObject has a list of general named properties | |
a2dNamedProperty * | GetProperty (const a2dPropertyId *propertyId, a2dPropertyId::Flags flags=a2dPropertyId::flag_none) const |
get property on this object More... | |
void | SetProperty (a2dNamedProperty *propertyHolder, a2dPropertyId::SetFlags flags=a2dPropertyId::set_none) |
Set the property to the this object. More... | |
void | SetProperty (const a2dNamedProperty &propertyHolder, a2dPropertyId::SetFlags flags=a2dPropertyId::set_none) |
Set the property to the this object and if enabled, to all childs and object members. More... | |
virtual a2dNamedProperty * | FindProperty (const a2dPropertyId *id, a2dPropertyId::Flags flags=a2dPropertyId::flag_none) |
Find a dynamic property with given id in the property list. More... | |
virtual const a2dNamedProperty * | FindProperty (const a2dPropertyId *id, a2dPropertyId::Flags flags=a2dPropertyId::flag_none) const |
Find a dynamic property with given id in the property list. More... | |
virtual bool | HasProperty (const a2dPropertyId *id, const wxString &stringvalue=wxEmptyString) const |
Check if the object has a property with given id and string representation. More... | |
virtual void | OnPropertyChanged (const a2dPropertyId *id) |
This function is called after a property changed. More... | |
virtual bool | EditProperties (const a2dPropertyId *id, bool withUndo=true) |
edit properties of the object More... | |
void | TakeOverProperties (a2dObject *from, a2dPropertyIdList *listOfIds) |
Properties in the id list are taken from the given object, en set to this. More... | |
wxURI | GetURI () const |
quick way to get to PROPID_URI property More... | |
void | SetURI (const wxURI &url) |
quickly set a property PROPID_URI More... | |
const a2dNamedPropertyList & | GetPropertyList () const |
Get the Property List. More... | |
bool | HasDynamicProperties () const |
test if there are dynamic properties in the m_propertylist | |
virtual bool | RemoveProperty (const a2dPropertyId *id, bool all=true) |
This function is called by a2dPropertyId to remove a property from the list. More... | |
void | RemoveTemporaryProperties () |
remove all temporary properties | |
virtual bool | AddProperty (a2dNamedProperty *property) |
This function is called by a2dPropertyId to add a property to the list. More... | |
Static Public Attributes | |
static a2dPropertyIdBool * | PROPID_Check = NULL |
used for linking multiple referenced objects when serializing | |
static a2dPropertyIdUri * | PROPID_URI = NULL |
attach an URL to the object | |
static a2dPropertyIdString * | PROPID_Name = NULL |
Name property, to return name of this object. | |
static a2dPropertyIdVoidPtr * | PROPID_autozeroptrlist = NULL |
static const a2dSignal | sm_Edit_properties = wxNewId() |
edit properties event, see EditProperties() | |
Protected Types | |
enum | { refcount_nondynamic = 0x76543210 } |
special refcount value for non-dynamic objects | |
Protected Member Functions | |
virtual bool | DoIgnoreIfNotMember (const a2dPropertyId *id) const |
used to decide if a property shall be ignored, if it is not a member More... | |
virtual a2dObject * | DoClone (CloneOptions options, a2dRefMap *refs) const =0 |
virtual void | DoWalker (wxObject *parent, a2dWalkerIOHandler &handler) |
iterate over this object and its children More... | |
virtual void | DoSave (wxObject *parent, a2dIOHandlerXmlSerOut &out, a2dXmlSer_flag xmlparts, a2dObjectList *towrite) |
Save settings. | |
virtual void | DoLoad (wxObject *parent, a2dIOHandlerXmlSerIn &parser, a2dXmlSer_flag xmlparts) |
Load settings. | |
Protected Attributes | |
a2dNamedPropertyList | m_propertylist |
properties | |
int | m_refcount |
how many references to this object do exist | |
bool | m_check: 1 |
used for linking multiple referenced objects when serializing | |
bool | m_release: 1 |
when set object is treated as being deleted, and wil be deleted in idle time. | |
bool | m_recursion_active: 1 |
this is used as a recursion stopper | |
bool | m_pendingDisconnects: 1 |
unsigned int | m_iteratorCount |
a2dAutoZeroPtr< a2dObject > * | m_autozeroptrlist |
this is a list of all a2dAutoZeroPtr object pointing to this object | |
Friends | |
class | a2dPropertyId |
wxProperty is a friend and allowed to use these functions | |
class | a2dSmrtPtrBase |
CloneOptions | operator| (CloneOptions a, CloneOptions b) |
Ref Counted base object.
Used for counting the number of objects that own this (derived) object. This object is the base object for most classes which used a2dSmrtPtr to keep track of them. An instance of a2dObject is held by a a2dObjectPtr, and many of those can point to the same a2dObject. When the a2dObjectPtr goes out of scope, automatically the reference count will be decremented. When the last a2dObjectPtr holding on to the a2dObject goes is destructed, the a2dObject will be deleted too. Smart pointers are ideal for holding events, since you can hold on to it until you think it is oke to release them. In wxDocview smart pointers are used for a2dCanvasObject's, that makes it possible to have a hierarchy of drawable objects, a multiple references a2dCanvasObject is drawn at a different locations, because its parent is responsible for its position. a2dObject has a a2dNamedProperty List containing dynamic properties. All objects derived from this can have dynamic properties added to them. For that there is a property list, to which those properties are added. Functions to manipulate the properties are all concentrated in this class. A property is a2dNamedProperty class, which are unique via a a2dPropertyId identification class. Assume that a derived class a2dCanvasObject has: <code>
declare of static member in the class static const a2dPropertyIdBoundingBox PROPID_BoundingBox;
initialize static member in cpp file const a2dPropertyIdBoundingBox a2dCanvasObject::PROPID_BoundingBox( CLASSNAME( a2dCanvasObject ), wxT("statebox"), a2dPropertyId::flag_temporary|a2dPropertyId::flag_multiple, a2dBoundingBox() );
We can set it like this: a2dBoundingBox updatearea(0,0,100,100); a2dCanvasObject::PROPID_BoundingBox->SetPropertyToObject( a_canvasobject, updatearea ); a2dBoundingBox updatearea2(0,0,100,100); a2dCanvasObject::PROPID_BoundingBox->SetPropertyToObject( a_canvasobject, updatearea2 );
see a2dPropertyId a2dPropertyIdTyped for more.
\remark Little is needed to make it carbage collected. \remark Specilized memeory allocation is possible e.g like in a2dFill with a2dMemManager \remark And debugging on id, helps a lot.
options for cloning
a2dObject is reference counted, and therefore each object can have more then one owner. For this reason there are many ways to clone a tree of nested a2dObject's. The options here are meant to stear this clone process for nested childs and/or properties. Although a a2dObject by itself does not have properties nor child objects, the idea is that in derived objects there will be such a structure, a2dObject and a2dCanvasObject to start with.
Enumerator | |
---|---|
clone_members |
if set, clone members (e.g. line end styles), otherwise ref-copy them |
clone_properties |
if set, clone properties (e.g. fill style), otherwise ref-copy them |
clone_childs |
if set, clone childs, otherwise ref-copy them |
clone_unused |
use this for new future flag |
clone_setoriginal |
if set, set in the clone the PROPID_Original property to the copied object clone_setoriginal is done recursively, if childs are cloned |
clone_seteditcopy |
if set, set in the clone the PROPID_editcopy property to the original object clone_seteditcopy is NOT done recursively, even if childs are cloned |
clone_noReference |
Prevent cloning a reference at a deeper level. |
clone_noCameleonRef |
Prevent cloning a a2dCameleon reference at a deeper level. |
clone_toDrag |
Hint to clone enough of the object to do proper dragging in graphics. |
|
virtual |
This function is called by a2dPropertyId to add a property to the list.
Best used via the a2dPropertyId.
|
virtual |
void a2dObject::CheckReferences | ( | ) |
Check zero reference count and delete if count is 0.
This is usefull if a reference counted object was never owned. Then the reference counter is always 0 and Release will never be called. As not all pointers (e.g. temporary, paramaters) call Own, this may happen.
void a2dObject::ConnectEvent | ( | wxEventType | type, |
wxEvtHandler * | eventSink | ||
) |
bool a2dObject::DisconnectEvent | ( | wxEventType | type, |
wxEvtHandler * | eventSink | ||
) |
bool a2dObject::DisconnectEventAll | ( | wxEvtHandler * | eventSink | ) |
|
inlineprotectedvirtual |
|
protectedvirtual |
iterate over this object and its children
This function allows you to extend the functionality of all a2dObject classes in a a2dDocument, without adding extra members to these objects.
Default functions are called on the a2dWalkerIOHandler, which redirect the calls to other functions based on this object its classname. On can register classes to a2dWalkerIOHandler or derived classes. This way for each unique object in the document there can be a function in a2dWalkerIOHandler.
See a2dWalkerIOHandler for more.
Reimplemented in a2dCanvasObject, a2dEndsEllipticChord, a2dEndsLine, a2dBarCurve, a2dCameleonSymbolicRef, a2dCameleon, a2dDrawing, a2dCanvasXYDisplayGroupAreas, a2dBuildIn, a2dMarkerShow, a2dDiagram, a2dPolylineL, a2dCurvesAreaList, a2dRectWindowT2, a2dNameReference, a2dCameleonInst, a2dMarker, a2dExternalReference, a2dLibraryReference, a2dAxisMarker, a2dCurvesArea, a2dCurveGroupLegend, a2dWidgetButton, a2dDrawingFrame, a2dCanvasObjectReference, and a2d3DShape.
|
virtual |
edit properties of the object
id | If property id is set only matching properties are selected |
withUndo | If true, the changes can be undone later. |
Reimplemented in a2dCanvasObject.
|
virtual |
|
virtual |
|
inline |
|
virtual |
Returns the name of this object, if no name is given the internal id will be returned.
Gives the name of the object in string form, or when the a2dStringProperty PROPID_Name is set, its value will be returned
Reimplemented in a2dPin, a2dCommand, a2dXMLTag, a2dLayerInfo, and a2dHandle.
|
inline |
like it to be protected, but this does not work with wxList macros
used together with wxObject debug possibility, sent a string containing m_id to the output stream. get the reference count, how many owners/references are made to this object.
normally the object should only be deleted is the refcount is 0, which means that is not longer owned by any other object. Use Release() For that.
a2dNamedProperty * a2dObject::GetProperty | ( | const a2dPropertyId * | propertyId, |
a2dPropertyId::Flags | flags = a2dPropertyId::flag_none |
||
) | const |
get property on this object
If the propertyId has member or member function pointers, that will be used to get the value. Else the property list will be searched for the right propertyId. In any case the value of the property is wrapped into a new a2dNamedProperty, which is returned. You must delete the returned object yourself.
|
inline |
|
inline |
wxInt64 a2dObject::GetUniqueSerializationId | ( | ) | const |
wxURI a2dObject::GetURI | ( | ) | const |
|
virtual |
Check if the object has a property with given id and string representation.
first the a check is done if the given id is valid for this object. If yes, the property value is retrieved and the stringvalue checked. If the property id dynamic, and not set, false is returned. If stringvalue is an empty string, only availability of the property is checked.
|
virtual |
link a reference in the object to the given value
This is intended for e.g. paired links as in a2dPin, where the usual a2dResolveIdInfo mechanism cannot be used.
Reimplemented in a2dCameleonSymbolicRef, a2dDrawing, a2dPin, a2dNameReference, a2dCameleonInst, a2dParPin, and a2dCanvasObjectReference.
|
virtual |
load object from CVG file
parent | parent object from where this was called. |
parser | basic pull parser for XML content |
Reimplemented in a2dDocument, a2dDrawing, and a2dCanvasDocument.
void a2dObject::LoadFromDocument | ( | a2dIOHandlerXmlSerIn & | parser | ) |
Load this object and all below from an XML document.
a2dWalker_SetBoolProperty setp( PROPID_Check, false ); setp.Start( this ); a2dIOHandlerXmlSerIn parser; SaveAsDocument( parser );
|
virtual |
This function is called after a property changed.
This is overloaded to set e.g. a pending flag
Reimplemented in a2dDrawingPart.
void a2dObject::ProcessConnectedEvent | ( | wxEvent & | event | ) |
|
virtual |
This function is called by a2dPropertyId to remove a property from the list.
The base class implementation does nothing
|
virtual |
|
virtual |
write all needed to an XML type of file called the CVG format
parent | parent object from where this was called. |
out | XML io handler |
towrite | nested object to write later. |
Reimplemented in a2dDocument, and a2dCanvasDocument.
void a2dObject::SaveAsDocument | ( | a2dIOHandlerXmlSerOut & | out | ) |
Save this object and all below as an XML document.
<code>
check flag is used for writing once an object which is referenced many times a2dWalker_SetCheck setp( false ); setp.Start( m_rootObject ); setp.Start( m_layersetup ); a2dIOHandlerXmlSerOut out; SaveAsDocument( out );
|
inline |
general flag use at will.
false
if you don't need it anymore. Another possibility might be to add a new property to this object if you want to be on the secure side.check | temporarely status information |
|
virtual |
Creates the a2dStringProperty PROPID_Name.
If set, the name will be returned for GetName() from now on.
name | name to be set for the object |
Reimplemented in a2dPin, a2dPort, a2dLayerInfo, and a2dHandle.
|
virtual |
void a2dObject::SetProperty | ( | a2dNamedProperty * | propertyHolder, |
a2dPropertyId::SetFlags | flags = a2dPropertyId::set_none |
||
) |
Set the property to the this object.
The a2dNamedProperty to set to the object as indicated by its a2dPropertyId, is used as as, or the value is taken from it and assigned to something in the object and the property is deleted itself in the end.
void a2dObject::SetProperty | ( | const a2dNamedProperty & | propertyHolder, |
a2dPropertyId::SetFlags | flags = a2dPropertyId::set_none |
||
) |
Set the property to the this object and if enabled, to all childs and object members.
The a2dNamedProperty to set to the object as indicated by this a2dPropertyId is cloned and like that added to the object, or the value is taken from it and assigned to something in the object.
|
inline |
void a2dObject::SetURI | ( | const wxURI & | url | ) |
quickly set a property PROPID_URI
This function stores an url string within a property called PROPID_URI When writing to SVG (scalable vector graphics), it is translated to the tag. This tag is for linking to other svg content or HTML etc. See SVG specification, for a complete overview.
url | a string containing a complete url ex: "xlink:href="http://www.w3.org"" ex: "href="http://www.w3.org" ex: "mydrawing.svg::myid" |
void a2dObject::TakeOverProperties | ( | a2dObject * | from, |
a2dPropertyIdList * | listOfIds | ||
) |