qobjectxmlmodel.h Example File | Qt WebKit Examples 5.9

Qt 5.9 | Qt WebKit Examples | QObject XML Model Example | qobjectxmlmodel.h Example File

Qt 5.9.2 Reference Documentation

# qobjectxmlmodel.h Example File

webkitwidgets/xmlpatterns/qobjectxmlmodel/qobjectxmlmodel.h

      /****************************************************************************
      **
      ** Copyright (C) 2015 The Qt Company Ltd.
      ** Contact: http://www.qt.io/licensing/
      **
      ** This file is part of the examples of the Qt Toolkit.
      **
      ** $QT_BEGIN_LICENSE:BSD$
      ** You may use this file under the terms of the BSD license as follows:
      **
      ** "Redistribution and use in source and binary forms, with or without
      ** modification, are permitted provided that the following conditions are
      ** met:
      **   * Redistributions of source code must retain the above copyright
      **     notice, this list of conditions and the following disclaimer.
      **   * Redistributions in binary form must reproduce the above copyright
      **     notice, this list of conditions and the following disclaimer in
      **     the documentation and/or other materials provided with the
      **     distribution.
      **   * Neither the name of The Qt Company Ltd nor the names of its
      **     contributors may be used to endorse or promote products derived
      **     from this software without specific prior written permission.
      **
      **
      ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
      ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
      ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
      ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
      ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
      ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
      ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
      ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
      ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
      ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
      ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
      **
      ** $QT_END_LICENSE$
      **
      ****************************************************************************/

      #ifndef Patternist_QObjectNodeModel_H
      #define Patternist_QObjectNodeModel_H

      #include <QSimpleXmlNodeModel>

      class QObject;
      class PropertyToAtomicValue;

      /**
       * @short Delegates QtCore's QObject into Patternist's QAbstractXmlNodeModel.
       * known as pre/post numbering.
       *
       * QObjectXmlModel sets the toggle on QXmlNodeModelIndex to @c true, if it
       * represents a property of the QObject. That is, if the QXmlNodeModelIndex is
       * an attribute.
       *
       * @author Frans Englich <frans.englich@nokia.com>
       */
      class QObjectXmlModel : public QSimpleXmlNodeModel
      {
        public:
          QObjectXmlModel(QObject *const object, const QXmlNamePool &np);

          QXmlNodeModelIndex root() const;

          virtual QXmlNodeModelIndex::DocumentOrder compareOrder(const QXmlNodeModelIndex &n1, const QXmlNodeModelIndex &n2) const;
          virtual QXmlName name(const QXmlNodeModelIndex &n) const;
          virtual QUrl documentUri(const QXmlNodeModelIndex &n) const;
          virtual QXmlNodeModelIndex::NodeKind kind(const QXmlNodeModelIndex &n) const;
          virtual QXmlNodeModelIndex root(const QXmlNodeModelIndex &n) const;
          virtual QVariant typedValue(const QXmlNodeModelIndex &n) const;
          virtual QVector<QXmlNodeModelIndex> attributes(const QXmlNodeModelIndex&) const;
          virtual QXmlNodeModelIndex nextFromSimpleAxis(SimpleAxis, const QXmlNodeModelIndex&) const;

        private:
          /**
           * The highest three bits are used to signify whether the node index
           * is an artificial node.
           *
           * @short if QXmlNodeModelIndex::additionalData() has the
           * QObjectPropery flag set, then the QXmlNodeModelIndex is an
           * attribute of the QObject element, and the remaining bits form
           * an offset to the QObject property that the QXmlNodeModelIndex
           * refers to.
           *
           */
          enum QObjectNodeType
          {
              IsQObject               = 0,
              QObjectProperty         = 1 << 26,
              MetaObjects             = 2 << 26,
              MetaObject              = 3 << 26,
              MetaObjectClassName     = 4 << 26,
              MetaObjectSuperClass    = 5 << 26,
              QObjectClassName        = 6 << 26
          };

          typedef QVector<const QMetaObject *> AllMetaObjects;
          AllMetaObjects allMetaObjects() const;

          static QObjectNodeType toNodeType(const QXmlNodeModelIndex &n);
          static bool isTypeSupported(QVariant::Type type);
          static inline QObject *asQObject(const QXmlNodeModelIndex &n);
          static inline bool isProperty(const QXmlNodeModelIndex n);
          static inline QMetaProperty toMetaProperty(const QXmlNodeModelIndex &n);
          /**
           * Returns the ancestors of @p n. Does therefore not include
           * @p n.
           */
          inline QXmlNodeModelIndex::List ancestors(const QXmlNodeModelIndex n) const;
          QXmlNodeModelIndex qObjectSibling(const int pos,
                                            const QXmlNodeModelIndex &n) const;
          QXmlNodeModelIndex metaObjectSibling(const int pos,
                                               const QXmlNodeModelIndex &n) const;

          const QUrl              m_baseURI;
          QObject *const          m_root;
          const AllMetaObjects    m_allMetaObjects;
      };

      #endif