Skip to content
Snippets Groups Projects
Select Git revision
  • ec3f27147f2f
  • main default protected
  • fix-provider-url-regex
  • release
  • quic
  • macos-bitmask
  • qt6.6
  • auto-update
  • fix-915
  • ui-924
  • update-obfsvpn
  • init-error
  • ovpn-status
  • introducer
  • fix-826
  • l10n
  • win-fix
  • rel
  • unix-socket
  • obfsvpn-bug
  • fix-903
  • 0.25.8
  • 0.24.10
  • 0.24.10-rc.3
  • 0.24.10-rc.2
  • 0.24.10-rc.1
  • 0.24.8
  • 0.24.8-rc.3
  • 0.24.8-rc.2
  • 0.24.8-rc.1
  • 0.24.6-rc.1
  • 0.24.5
  • 0.24.3
  • 0.24.03-rc.1
  • 0.21.11
  • 0.21.6
  • 0.21.2
  • 0.20.4
  • 0.20.1
  • 0.19.11
  • 0.19.6
41 results

qjsonmodel.h

Blame
  • kali's avatar
    Kali Kaneko authored and kali kaneko (leap communications) committed
    This fixes the segfault.
    
    mRootItem has to be deallocated to avoid memory leaks, but doing it
    concurrently with the dump of the json was a terrible idea.
    
    - Closes: #360
    a7dcea9a
    History
    qjsonmodel.h 3.59 KiB
    /*
     * The MIT License (MIT)
     *
     * Copyright (c) 2011 SCHUTZ Sacha
     *
     * Permission is hereby granted, free of charge, to any person obtaining a copy
     * of this software and associated documentation files (the "Software"), to deal
     * in the Software without restriction, including without limitation the rights
     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
     * copies of the Software, and to permit persons to whom the Software is
     * furnished to do so, subject to the following conditions:
     *
     * The above copyright notice and this permission notice shall be included in all
     * copies or substantial portions of the Software.
     *
     * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
     * SOFTWARE.
     */
    
    #ifndef QJSONMODEL_H
    #define QJSONMODEL_H
    
    #include <QAbstractItemModel>
    #include <QHash>
    #include <QIcon>
    #include <QJsonDocument>
    #include <QJsonValue>
    #include <QJsonArray>
    #include <QJsonObject>
    
    class QJsonModel;
    class QJsonItem;
    
    class QJsonTreeItem
    {
    public:
        QJsonTreeItem(QJsonTreeItem * parent = nullptr);
        ~QJsonTreeItem();
        void appendChild(QJsonTreeItem * item);
        QJsonTreeItem *child(int row);
        QJsonTreeItem *parent();
        int childCount() const;
        int row() const;
        void setKey(const QString& key);
        void setValue(const QString& value);
        void setType(const QJsonValue::Type& type);
        QString key() const;
        QString value() const;
        QJsonValue::Type type() const;
    
        static QJsonTreeItem* load(const QJsonValue& value, QJsonTreeItem * parent = 0);
    
    protected:
    
    
    private:
        QString mKey;
        QString mValue;
        QJsonValue::Type mType;
        QList<QJsonTreeItem*> mChilds;
        QJsonTreeItem * mParent;
    
    
    };
    
    //---------------------------------------------------
    
    class QJsonModel : public QAbstractItemModel
    {
        Q_OBJECT
        enum Roles {
            KeyRole = Qt::UserRole + 1,
            ValueRole
        };
    
    public:
        explicit QJsonModel(QObject *parent = nullptr);
        QJsonModel(const QString& fileName, QObject *parent = nullptr);
        QJsonModel(QIODevice * device, QObject *parent = nullptr);
        QJsonModel(const QByteArray& json, QObject *parent = nullptr);
        virtual ~QJsonModel();
        bool load(const QString& fileName);
        bool load(QIODevice * device);
        bool loadJson(const QByteArray& json);
        QVariant data(const QModelIndex &index, int role) const Q_DECL_OVERRIDE;
        bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE;
        QVariant headerData(int section, Qt::Orientation orientation, int role) const Q_DECL_OVERRIDE;
        QModelIndex index(int row, int column,const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
        QModelIndex parent(const QModelIndex &index) const Q_DECL_OVERRIDE;
        int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
        int columnCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
        Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE;
        QJsonDocument json() const;
        QHash<int, QByteArray> roleNames() const Q_DECL_OVERRIDE;
        Q_INVOKABLE QByteArray getJson();
    
    private:
        QJsonValue genJson(QJsonTreeItem *) const;
        QJsonTreeItem * mRootItem;
        QStringList mHeaders;
    };
    
    #endif // QJSONMODEL_H