33 #include "private/ArnItem_p.hpp" 36 #include <QTimerEvent> 37 #include <QBasicTimer> 38 #include <QMetaObject> 42 #if QT_VERSION >= 0x050000 43 QMetaMethod ArnItem::_metaSignalChanged(
46 QMetaMethod ArnItem::_metaSignalChangedInt(
48 QMetaMethod ArnItem::_metaSignalChangedReal(
50 QMetaMethod ArnItem::_metaSignalChangedBool(
52 QMetaMethod ArnItem::_metaSignalChangedString(
54 QMetaMethod ArnItem::_metaSignalChangedByteArray(
56 QMetaMethod ArnItem::_metaSignalChangedVariant(
71 void start(QObject* obj) {QBasicTimer::start( _interval, obj);}
72 void start(
int msec, QObject* obj)
75 QBasicTimer::start( _interval, obj);
83 ArnItemPrivate::ArnItemPrivate()
85 _delayTimer = arnNullptr;
92 _emitChangedString = 0;
93 _emitChangedByteArray = 0;
97 ArnItemPrivate::~ArnItemPrivate()
110 :
ArnItemB( *new ArnItemPrivate, parent)
117 :
ArnItemB( *new ArnItemPrivate, parent)
125 :
ArnItemB( *new ArnItemPrivate, parent)
129 this->addSyncMode( itemTemplate.
syncMode(),
true);
147 void ArnItem::itemCreatedBelow(
const QString& path)
153 void ArnItem::itemModeChangedBelow(
const QString& path, uint linkId,
Arn::ObjectMode mode)
159 void ArnItem::timerEvent( QTimerEvent* ev)
163 if (d->_delayTimer && (ev->timerId() == d->_delayTimer->timerId())) {
165 doItemUpdate( ArnLinkHandle::null());
168 return ArnItemB::timerEvent( ev);
172 int ArnItem::delayTimerId()
const 176 if (!d->_delayTimer)
return 0;
178 return d->_delayTimer->timerId();
195 return d->_isTemplate;
203 if (!d->_delayTimer) {
214 if (!d->_delayTimer)
return 0;
216 return d->_delayTimer->interval();
224 return d->_delayTimer && d->_delayTimer->isActive();
231 doItemUpdate( ArnLinkHandle::null());
328 #if QT_VERSION >= 0x050000 330 void ArnItem::connectNotify(
const QMetaMethod &signal)
334 if (signal == _metaSignalChanged) {
337 else if (signal == _metaSignalChangedInt) {
338 d->_emitChangedInt++;
340 else if (signal == _metaSignalChangedReal) {
341 d->_emitChangedReal++;
343 else if (signal == _metaSignalChangedBool) {
344 d->_emitChangedBool++;
346 else if (signal == _metaSignalChangedString) {
347 d->_emitChangedString++;
349 else if (signal == _metaSignalChangedByteArray) {
350 d->_emitChangedByteArray++;
352 else if (signal == _metaSignalChangedVariant) {
353 d->_emitChangedVariant++;
358 void ArnItem::disconnectNotify(
const QMetaMethod &signal)
362 if (signal == _metaSignalChanged) {
365 else if (signal == _metaSignalChangedInt) {
366 d->_emitChangedInt--;
368 else if (signal == _metaSignalChangedReal) {
369 d->_emitChangedReal--;
371 else if (signal == _metaSignalChangedBool) {
372 d->_emitChangedBool--;
374 else if (signal == _metaSignalChangedString) {
375 d->_emitChangedString--;
377 else if (signal == _metaSignalChangedByteArray) {
378 d->_emitChangedByteArray--;
380 else if (signal == _metaSignalChangedVariant) {
381 d->_emitChangedVariant--;
388 void ArnItem::connectNotify(
const char *signal)
392 if (QLatin1String( signal) == SIGNAL(
changed())) {
395 else if (QLatin1String( signal) == SIGNAL(
changed(
int))) {
396 d->_emitChangedInt++;
399 else if (QLatin1String( signal) == SIGNAL(
changed(
float))) {
401 else if (QLatin1String( signal) == SIGNAL(
changed(
double))) {
403 d->_emitChangedReal++;
405 else if (QLatin1String( signal) == SIGNAL(
changed(
bool))) {
406 d->_emitChangedBool++;
408 else if (QLatin1String( signal) == SIGNAL(
changed(QString))) {
409 d->_emitChangedString++;
411 else if (QLatin1String( signal) == SIGNAL(
changed(QByteArray))) {
412 d->_emitChangedByteArray++;
414 else if (QLatin1String( signal) == SIGNAL(
changed(QVariant))) {
415 d->_emitChangedVariant++;
420 void ArnItem::disconnectNotify(
const char *signal)
424 if (QLatin1String( signal) == SIGNAL(
changed())) {
427 else if (QLatin1String( signal) == SIGNAL(
changed(
int))) {
428 d->_emitChangedInt--;
431 else if (QLatin1String( signal) == SIGNAL(
changed(
float))) {
433 else if (QLatin1String( signal) == SIGNAL(
changed(
double))) {
435 d->_emitChangedReal--;
437 else if (QLatin1String( signal) == SIGNAL(
changed(
bool))) {
438 d->_emitChangedBool--;
440 else if (QLatin1String( signal) == SIGNAL(
changed(QString))) {
441 d->_emitChangedString--;
443 else if (QLatin1String( signal) == SIGNAL(
changed(QByteArray))) {
444 d->_emitChangedByteArray--;
446 else if (QLatin1String( signal) == SIGNAL(
changed(QVariant))) {
447 d->_emitChangedVariant--;
454 void ArnItem::itemUpdated(
const ArnLinkHandle& handleData,
const QByteArray* value)
459 if (d->_delayTimer) {
460 if (!d->_delayTimer->isActive()) {
461 d->_delayTimer->start(
this);
466 doItemUpdate( handleData);
470 if (d->_emitChanged) {
473 if (d->_emitChangedInt) {
474 emit
changed(
int( value->toInt()));
476 if (d->_emitChangedReal) {
477 #if defined( ARNREAL_FLOAT) 478 emit
changed(
float( value->toFloat()));
480 emit
changed(
double( value->toDouble()));
483 if (d->_emitChangedBool) {
484 emit
changed(
bool( value->toInt() != 0));
486 if (d->_emitChangedString) {
487 emit
changed( QString::fromUtf8( value->constData(), value->size()));
489 if (d->_emitChangedByteArray) {
492 if (d->_emitChangedVariant) {
494 emit
changed( QVariant( QString::fromUtf8( value->constData(), value->size())));
501 void ArnItem::doItemUpdate(
const ArnLinkHandle& handleData)
503 Q_UNUSED(handleData);
507 if (d->_delayTimer ) {
508 d->_delayTimer->stop();
511 if (d->_emitChanged) {
514 if (d->_emitChangedInt) {
517 if (d->_emitChangedReal) {
520 if (d->_emitChangedBool) {
523 if (d->_emitChangedString) {
526 if (d->_emitChangedByteArray) {
529 if (d->_emitChangedByteArray) {
538 ArnItemB::modeUpdate( mode, isSetup);
void setValue(const ArnItem &other, int ignoreSame=Arn::SameValue::DefaultAction)
Assign the value of an other ArnItem to an Arn Data Object
void setDelay(int delay)
Set delay of data changed signal.
ArnItem(QObject *parent=arnNullptr)
Standard constructor of a closed handle.
ArnItem & operator+=(int val)
QTextStream & operator<<(QTextStream &out, const ArnItem &item)
void start(int msec, QObject *obj)
Arn::ObjectSyncMode syncMode() const
Arn::ObjectMode getMode() const
bool isDelayPending() const
void addMode(Arn::ObjectMode mode)
Add general mode settings for this Arn Data Object
void toggleBool()
Toggle the bool at the Arn Data Object
ArnItem & operator=(const ArnItem &other)
int delay() const
Get delay of data changed signal.
QByteArray toByteArray(bool *isOk=arnNullptr) const
void changed()
Signals emitted when data in Arn Data Object is changed.
bool open(const QString &path)
Open a handle to an Arn Data Object
ArnItem & setTemplate(bool isTemplate=true)
Mark this ArnItem as a template.
QVariant toVariant(bool *isOk=arnNullptr) const
void modeChanged(Arn::ObjectMode mode)
Signal emitted when mode in Arn Data Object is changed.
QString toString(bool *isOk=arnNullptr) const
bool toBool(bool *isOk=arnNullptr) const
QString path(Arn::NameF nameF=Arn::NameF::EmptyOk) const
Path of the Arn Data Object
void bypassDelayPending()
void arnItemCreated(const QString &path)
Signal emitted when an Arn Data Object is created in the tree below.
ARNREAL toReal(bool *isOk=arnNullptr) const
Base class handle for an Arn Data Object.
uint linkId() const
Get the id for this Arn Data Object
void setInterval(int interval)
static void errorLog(QString errText, ArnError err=ArnError::Undef, void *reference=arnNullptr)
int toInt(bool *isOk=arnNullptr) const
void arnModeChanged(const QString &path, uint linkId, Arn::ObjectMode mode)
Signal emitted when an Arn Data Object in the tree below has a general mode change.
Handle for an Arn Data Object.
void addValue(int value)
AtomicOp adds an integer to an Arn Data Object