ArnLib  4.0.x
Active Registry Network
ArnItem.hpp
Go to the documentation of this file.
1 // Copyright (C) 2010-2022 Michael Wiklund.
2 // All rights reserved.
3 // Contact: arnlib@wiklunden.se
4 //
5 // This file is part of the ArnLib - Active Registry Network.
6 // Parts of ArnLib depend on Qt and/or other libraries that have their own
7 // licenses. Usage of these other libraries is subject to their respective
8 // license agreements.
9 //
10 // GNU Lesser General Public License Usage
11 // This file may be used under the terms of the GNU Lesser General Public
12 // License version 2.1 as published by the Free Software Foundation and
13 // appearing in the file LICENSE_LGPL.txt included in the packaging of this
14 // file. In addition, as a special exception, you may use the rights described
15 // in the Nokia Qt LGPL Exception version 1.1, included in the file
16 // LGPL_EXCEPTION.txt in this package.
17 //
18 // GNU General Public License Usage
19 // Alternatively, this file may be used under the terms of the GNU General Public
20 // License version 3.0 as published by the Free Software Foundation and appearing
21 // in the file LICENSE_GPL.txt included in the packaging of this file.
22 //
23 // Other Usage
24 // Alternatively, this file may be used in accordance with the terms and conditions
25 // contained in a signed written agreement between you and Michael Wiklund.
26 //
27 // This program is distributed in the hope that it will be useful, but WITHOUT ANY
28 // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
29 // PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
30 //
31 
32 #ifndef ARNITEM_HPP
33 #define ARNITEM_HPP
34 
35 #include "ArnLib_global.hpp"
36 #include "ArnItemB.hpp"
37 #include "ArnError.hpp"
38 #include <QTextStream>
39 #include <QObject>
40 #include <QMetaMethod>
41 #include <QString>
42 #include <QByteArray>
43 #include <QVariant>
44 #include <QAtomicInt>
45 
46 class ArnItemPrivate;
47 
48 
50 
73 {
74  Q_OBJECT
75  Q_DECLARE_PRIVATE(ArnItem)
76 
77 public:
79 
81  ArnItem( QObject* parent = arnNullptr);
82 
84 
88  ArnItem( const QString& path, QObject* parent = arnNullptr);
89 
91 
95  ArnItem( const ArnItem& itemTemplate, const QString& path, QObject* parent = arnNullptr);
96 
97  virtual ~ArnItem();
98 
100 
103  bool openUuid( const QString& path)
104  {return ArnItemB::openUuid( path);}
105 
107 
110  bool openUuidPipe( const QString& path)
111  {return ArnItemB::openUuidPipe( path);}
112 
114 
117  bool openFolder( const QString& path)
118  {return ArnItemB::openFolder( path);}
119 
122  bool isFolder() const
123  {return ArnItemB::isFolder();}
124 
129  bool isProvider() const
130  {return ArnItemB::isProvider();}
131 
133 
136  {return ArnItemB::type();}
137 
139 
141  void setIgnoreSameValue( bool isIgnore = true)
142  {ArnItemB::setIgnoreSameValue( isIgnore);}
143 
148  {return ArnItemB::isIgnoreSameValue();}
149 
151 
160  {return ArnItemB::addMode( mode);}
161 
167  {return ArnItemB::getMode();}
168 
173  {return ArnItemB::syncMode();}
174 
176 
183  ArnItem& setTemplate( bool isTemplate = true);
184 
188  bool isTemplate() const;
189 
191 
196  {ArnItemB::setBiDirMode(); return *this;}
197 
203  bool isBiDirMode() const
204  {return ArnItemB::isBiDirMode();}
205 
207 
212  {ArnItemB::setPipeMode(); return *this;}
213 
219  bool isPipeMode() const
220  {return ArnItemB::isPipeMode();}
221 
223 
229  {ArnItemB::setSaveMode(); return *this;}
230 
236  bool isSaveMode() const
237  {return ArnItemB::isSaveMode();}
238 
240 
245  {ArnItemB::setMaster(); return *this;}
246 
251  bool isMaster() const
252  {return ArnItemB::isMaster();}
253 
255 
259  {ArnItemB::setAutoDestroy(); return *this;}
260 
264  bool isAutoDestroy() const
265  {return ArnItemB::isAutoDestroy();}
266 
268 
275  void setUncrossed( bool isUncrossed = true)
276  {return ArnItemB::setUncrossed( isUncrossed);}
277 
279 
285  bool isUncrossed() const
286  {return ArnItemB::isUncrossed();}
287 
289 
293  void setBlockEcho( bool blockEcho = true)
294  {return ArnItemB::setBlockEcho( blockEcho);}
295 
297 
306  void setDelay( int delay);
307 
309 
313  int delay() const;
314 
321  bool isDelayPending() const;
322 
329  void bypassDelayPending();
330 
332 
339  void arnImport( const QByteArray& data, int ignoreSame = Arn::SameValue::DefaultAction)
340  {ArnItemB::arnImport( data, ignoreSame);}
341 
345  QByteArray arnExport() const
346  {return ArnItemB::arnExport();}
347 
352  int toInt( bool* isOk = arnNullptr) const
353  {return ArnItemB::toInt( isOk);}
354 
359  double toDouble( bool* isOk = arnNullptr) const
360  {return ArnItemB::toDouble( isOk);}
361 
366  ARNREAL toReal( bool* isOk = arnNullptr) const
367  {return ArnItemB::toReal( isOk);}
368 
373  bool toBool( bool* isOk = arnNullptr) const
374  {return ArnItemB::toBool( isOk);}
375 
380  QString toString( bool* isOk = arnNullptr) const
381  {return ArnItemB::toString( isOk);}
382 
387  QByteArray toByteArray( bool* isOk = arnNullptr) const
388  {return ArnItemB::toByteArray( isOk);}
389 
394  QVariant toVariant( bool* isOk = arnNullptr) const
395  {return ArnItemB::toVariant( isOk);}
396 
402  uint toUInt( bool* isOk = arnNullptr) const
403  {return ArnItemB::toUInt( isOk);}
404 
410  qint64 toInt64( bool* isOk = arnNullptr) const
411  {return ArnItemB::toInt64( isOk);}
412 
418  quint64 toUInt64( bool* isOk = arnNullptr) const
419  {return ArnItemB::toUInt64( isOk);}
420 
421  ArnItem& operator=( const ArnItem& other);
422  ArnItem& operator=( int val);
423  ArnItem& operator=( ARNREAL other);
424  ArnItem& operator=( const QString& val);
425  ArnItem& operator=( const QByteArray& val);
426  ArnItem& operator=( const QVariant& val);
427  ArnItem& operator=( const char* val);
428  ArnItem& operator=( uint val);
429  ArnItem& operator=( qint64 val);
430  ArnItem& operator=( quint64 val);
431 
432  ArnItem& operator+=( int val);
433  ArnItem& operator+=( ARNREAL val);
434 
436 
440  void setValue( const ArnItem& other, int ignoreSame = Arn::SameValue::DefaultAction)
441  {ArnItemB::setValue( other, ignoreSame);}
442 
444 
449  void setValue( uint value, int ignoreSame = Arn::SameValue::DefaultAction)
450  {ArnItemB::setValue( value, ignoreSame);}
451 
453 
458  void setValue( qint64 value, int ignoreSame = Arn::SameValue::DefaultAction)
459  {ArnItemB::setValue( value, ignoreSame);}
460 
462 
467  void setValue( quint64 value, int ignoreSame = Arn::SameValue::DefaultAction)
468  {ArnItemB::setValue( value, ignoreSame);}
469 
471 
475  void setValue( int value, int ignoreSame)
476  {ArnItemB::setValue( value, ignoreSame);}
477 
479 
483 #ifdef ARNREAL_FLOAT
484  void setValue( float value, int ignoreSame)
485 #else
486  void setValue( double value, int ignoreSame)
487 #endif
488  {ArnItemB::setValue( value, ignoreSame);}
489 
491 
495  void setValue( bool value, int ignoreSame)
496  {ArnItemB::setValue( value, ignoreSame);}
497 
499 
503  void setValue( const QString& value, int ignoreSame)
504  {ArnItemB::setValue( value, ignoreSame);}
505 
507 
511  void setValue( const QByteArray& value, int ignoreSame)
512  {ArnItemB::setValue( value, ignoreSame);}
513 
515 
519  void setValue( const QVariant& value, int ignoreSame)
520  {ArnItemB::setValue( value, ignoreSame);}
521 
523 
527  void setValue( const char* value, int ignoreSame)
528  {ArnItemB::setValue( value, ignoreSame);}
529 
531 
539  void setBits( int mask, int value, int ignoreSame = Arn::SameValue::DefaultAction)
540  {ArnItemB::setBits( mask, value, ignoreSame);}
541 
543 
548  void addValue( int value)
549  {ArnItemB::addValue( value);}
550 
552 
557  void addValue( ARNREAL value)
558  {ArnItemB::addValue( value);}
559 
560 public slots:
562 
565  void setValue( int value)
567 
569 
572 #ifdef ARNREAL_FLOAT
573  void setValue( float value)
574 #else
575  void setValue( double value)
576 #endif
578 
580 
583  void setValue( bool value)
585 
587 
590  void setValue( const QString& value)
592 
594 
597  void setValue( const QByteArray& value)
599 
601 
604  void setValue( const QVariant& value)
606 
608 
611  void setValue( const char* value)
613 
615 
618  void toggleBool();
619 
620 signals:
622 
631  void changed();
632 
635  void changed( int value);
636 
639 #ifdef ARNREAL_FLOAT
640  void changed( float value);
641 #else
642  void changed( double value);
643 #endif
644 
647  void changed( bool value);
648 
651  void changed( const QString& value);
652 
655  void changed( const QByteArray& value);
656 
659  void changed( const QVariant& value);
660 
662 
666  void modeChanged( Arn::ObjectMode mode);
667 
669 
675  void arnItemCreated( const QString& path);
676 
678 
687  void arnModeChanged( const QString& path, uint linkId, Arn::ObjectMode mode);
688 
690 protected:
691  virtual void itemUpdated( const ArnLinkHandle& handleData, const QByteArray* value = arnNullptr);
692  virtual void modeUpdate( Arn::ObjectMode mode, bool isSetup = false);
693  virtual void itemCreatedBelow( const QString& path);
694  virtual void itemModeChangedBelow( const QString& path, uint linkId, Arn::ObjectMode mode);
695  virtual void timerEvent( QTimerEvent* ev);
696 
697  int delayTimerId() const;
698 
699  ArnItem( ArnItemPrivate& dd, QObject* parent);
701 
702 private slots:
703 
704 private:
705  void init();
706  void doItemUpdate( const ArnLinkHandle& handleData);
707 
708 #if QT_VERSION >= 0x050000
709  void connectNotify( const QMetaMethod & signal);
710  void disconnectNotify( const QMetaMethod & signal);
711  static QMetaMethod _metaSignalChanged;
712  static QMetaMethod _metaSignalChangedInt;
713  static QMetaMethod _metaSignalChangedReal;
714  static QMetaMethod _metaSignalChangedBool;
715  static QMetaMethod _metaSignalChangedString;
716  static QMetaMethod _metaSignalChangedByteArray;
717  static QMetaMethod _metaSignalChangedVariant;
718 #else
719  void connectNotify( const char* signal);
720  void disconnectNotify( const char* signal);
721 #endif
722 };
723 
724 QTextStream& operator<<(QTextStream& out, const ArnItem& item);
725 
726 #endif // ARNITEM_HPP
void setValue(const QByteArray &value)
Assign a QByteArray to an Arn Data Object
Definition: ArnItem.hpp:597
Data type of an Arn Data Object
Definition: Arn.hpp:74
void setValue(const QByteArray &value, int ignoreSame)
Assign a QByteArray to an Arn Data Object
Definition: ArnItem.hpp:511
bool isUncrossed() const
Get the Uncrossed state of an object.
void setValue(uint value, int ignoreSame=Arn::SameValue::DefaultAction)
Assign an unsigned int to an Arn Data Object
Definition: ArnItem.hpp:449
QString toString(bool *isOk=arnNullptr) const
void setValue(qint64 value, int ignoreSame=Arn::SameValue::DefaultAction)
Assign an int 64 bit to an Arn Data Object
Definition: ArnItem.hpp:458
void setValue(const ArnBasicItem &other, int ignoreSame=Arn::SameValue::DefaultAction)
void setValue(const ArnItem &other, int ignoreSame=Arn::SameValue::DefaultAction)
Assign the value of an other ArnItem to an Arn Data Object
Definition: ArnItem.hpp:440
ArnBasicItem & setPipeMode()
Set general mode as Pipe for this Arn Data Object
ArnItem & setAutoDestroy()
Set client session sync mode as AutoDestroy for this ArnItem.
Definition: ArnItem.hpp:258
quint64 toUInt64(bool *isOk=arnNullptr) const
bool isMaster() const
void setValue(const QString &value)
Assign a QString to an Arn Data Object
Definition: ArnItem.hpp:590
Arn::ObjectSyncMode syncMode() const
bool isMaster() const
Definition: ArnItem.hpp:251
bool toBool(bool *isOk=arnNullptr) const
double toDouble(bool *isOk=arnNullptr) const
Definition: ArnItem.hpp:359
uint toUInt(bool *isOk=arnNullptr) const
Definition: ArnItem.hpp:402
ArnBasicItem & setSaveMode()
Set general mode as Save for this Arn Data Object
ArnItem & setPipeMode()
Set general mode as Pipe for this Arn Data Object
Definition: ArnItem.hpp:211
bool isFolder() const
Definition: ArnItem.hpp:122
uint toUInt(bool *isOk=arnNullptr) const
Arn::ObjectSyncMode syncMode() const
Definition: ArnItem.hpp:172
bool isUncrossed() const
Get the Uncrossed state of an object.
Definition: ArnItem.hpp:285
void setIgnoreSameValue(bool isIgnore=true)
Set skipping of equal value.
Arn::DataType type() const
The type stored in the Arn Data Object
Definition: ArnItem.hpp:135
Arn::ObjectMode getMode() const
Definition: ArnItem.hpp:166
void setValue(const QVariant &value, int ignoreSame)
Assign a QVariant to an Arn Data Object
Definition: ArnItem.hpp:519
void addValue(ARNREAL value)
AtomicOp adds an ARNREAL to an Arn Data Object
Definition: ArnItem.hpp:557
bool isProvider() const
Definition: ArnItem.hpp:129
void setUncrossed(bool isUncrossed=true)
Set a Bidirectional item as Uncrossed.
Arn::ObjectMode getMode() const
Use with care, link must be "referenced" before use, otherwise it might have been deleted...
int toInt(bool *isOk=arnNullptr) const
void setValue(const QString &value, int ignoreSame)
Assign a QString to an Arn Data Object
Definition: ArnItem.hpp:503
bool isIgnoreSameValue() const
ARNREAL toReal(bool *isOk=arnNullptr) const
void addMode(Arn::ObjectMode mode)
Add general mode settings for this Arn Data Object
Definition: ArnItem.hpp:159
ArnItem & setMaster()
Set client session sync mode as Master for this ArnItem.
Definition: ArnItem.hpp:244
bool isBiDirMode() const
Definition: ArnItem.hpp:203
QByteArray toByteArray(bool *isOk=arnNullptr) const
ArnItem & setBiDirMode()
Set general mode as Bidirectional for this Arn Data Object
Definition: ArnItem.hpp:195
QByteArray arnExport() const
Definition: ArnItem.hpp:345
QByteArray toByteArray(bool *isOk=arnNullptr) const
Definition: ArnItem.hpp:387
void setValue(double value, int ignoreSame)
Assign an ARNREAL to an Arn Data Object
Definition: ArnItem.hpp:486
void addValue(int value)
AtomicOp adds an integer to an Arn Data Object
void setValue(int value)
Assign an integer to an Arn Data Object
Definition: ArnItem.hpp:565
void setIgnoreSameValue(bool isIgnore=true)
Set skipping assignment of equal value.
Definition: ArnItem.hpp:141
void setBits(int mask, int value, int ignoreSame=Arn::SameValue::DefaultAction)
AtomicOp assign an integer to specified bits in an Arn Data Object
void setValue(quint64 value, int ignoreSame=Arn::SameValue::DefaultAction)
Assign an unsigned int 64 bit to an Arn Data Object
Definition: ArnItem.hpp:467
bool isSaveMode() const
Definition: ArnItem.hpp:236
void arnImport(const QByteArray &data, int ignoreSame=Arn::SameValue::DefaultAction)
Import data to an Arn Data Object
void arnImport(const QByteArray &data, int ignoreSame=Arn::SameValue::DefaultAction)
Import data to an Arn Data Object
Definition: ArnItem.hpp:339
Assigning same value gives default action set in ArnM or ArnItem.
Definition: Arn.hpp:68
ArnBasicItem & operator+=(int val)
QVariant toVariant(bool *isOk=arnNullptr) const
QVariant toVariant(bool *isOk=arnNullptr) const
Definition: ArnItem.hpp:394
QString toString(bool *isOk=arnNullptr) const
Definition: ArnItem.hpp:380
bool toBool(bool *isOk=arnNullptr) const
Definition: ArnItem.hpp:373
ArnItem & setSaveMode()
Set general mode as Save for this Arn Data Object
Definition: ArnItem.hpp:228
void setBits(int mask, int value, int ignoreSame=Arn::SameValue::DefaultAction)
AtomicOp assign an integer to specified bits in an Arn Data Object
Definition: ArnItem.hpp:539
void setValue(double value)
Assign an ARNREAL to an Arn Data Object
Definition: ArnItem.hpp:575
ArnBasicItem & setBiDirMode()
Set general mode as Bidirectional for this Arn Data Object
void addMode(Arn::ObjectMode mode)
Add general mode settings for this Arn Data Object
Arn::DataType type() const
The type stored in the Arn Data Object
void setValue(bool value)
Assign a bool to an Arn Data Object
Definition: ArnItem.hpp:583
#define ARNREAL
Definition: Arn.hpp:44
bool isAutoDestroy() const
ARNREAL toReal(bool *isOk=arnNullptr) const
Definition: ArnItem.hpp:366
void setValue(int value, int ignoreSame)
Assign an integer to an Arn Data Object
Definition: ArnItem.hpp:475
bool isIgnoreSameValue()
Definition: ArnItem.hpp:147
void setValue(const char *value)
Assign a char* to an Arn Data Object
Definition: ArnItem.hpp:611
Base class handle for an Arn Data Object.
Definition: ArnItemB.hpp:59
ArnBasicItem & setAutoDestroy()
Set client session sync mode as AutoDestroy for this ArnItem.
double toDouble(bool *isOk=arnNullptr) const
bool isAutoDestroy() const
Definition: ArnItem.hpp:264
bool isFolder() const
void setValue(bool value, int ignoreSame)
Assign a bool to an Arn Data Object
Definition: ArnItem.hpp:495
bool openUuidPipe(const QString &path)
Open a handle to an Arn Pipe Object with a unique uuid name.
Definition: ArnItem.hpp:110
void setUncrossed(bool isUncrossed=true)
Set a Bidirectional item as Uncrossed.
Definition: ArnItem.hpp:275
void setBlockEcho(bool blockEcho=true)
Control echo cancellation for this item.
Definition: ArnItem.hpp:293
bool isPipeMode() const
Definition: ArnItem.hpp:219
bool openFolder(const QString &path)
Open a handle to an Arn folder.
Definition: ArnItem.hpp:117
qint64 toInt64(bool *isOk=arnNullptr) const
bool isSaveMode() const
bool isBiDirMode() const
#define ARNLIBSHARED_EXPORT
int toInt(bool *isOk=arnNullptr) const
Definition: ArnItem.hpp:352
void setValue(const QVariant &value)
Assign a QVariant to an Arn Data Object
Definition: ArnItem.hpp:604
void setValue(const char *value, int ignoreSame)
Assign a char* to an Arn Data Object
Definition: ArnItem.hpp:527
QByteArray arnExport() const
ArnBasicItem & setMaster()
Set client session sync mode as Master for this ArnItem.
qint64 toInt64(bool *isOk=arnNullptr) const
Definition: ArnItem.hpp:410
ArnBasicItem & operator=(const ArnBasicItem &other)
QTextStream & operator<<(QTextStream &out, const ArnItem &item)
Definition: ArnItem.cpp:550
Handle for an Arn Data Object.
Definition: ArnItem.hpp:72
void addValue(int value)
AtomicOp adds an integer to an Arn Data Object
Definition: ArnItem.hpp:548
bool isProvider() const
bool openUuid(const QString &path)
Open a handle to an Arn Object with a unique uuid name.
Definition: ArnItem.hpp:103
bool isPipeMode() const
quint64 toUInt64(bool *isOk=arnNullptr) const
Definition: ArnItem.hpp:418