File indexing completed on 2025-01-05 04:55:01

0001 /*
0002     Copyright (c) 2016 Christian Mollekopf <mollekopf@kolabsystems.com>
0003 
0004     This library is free software; you can redistribute it and/or modify it
0005     under the terms of the GNU Library General Public License as published by
0006     the Free Software Foundation; either version 2 of the License, or (at your
0007     option) any later version.
0008 
0009     This library is distributed in the hope that it will be useful, but WITHOUT
0010     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0011     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
0012     License for more details.
0013 
0014     You should have received a copy of the GNU Library General Public License
0015     along with this library; see the file COPYING.LIB.  If not, write to the
0016     Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
0017     02110-1301, USA.
0018 */
0019 
0020 #pragma once
0021 #include "kube_export.h"
0022 #include <QObject>
0023 #include <QAbstractItemModel>
0024 #include <QVariant>
0025 
0026 /**
0027  * A wrapper for a QAbstractItemModel to retrieve a value from a single index via property binding
0028  * 
0029  * Assign a model that retrieves the index, set the property your interested in, and propery-bind "value".
0030  */
0031 class KUBE_EXPORT Retriever : public QObject
0032 {
0033     Q_OBJECT
0034     Q_PROPERTY(QAbstractItemModel* model READ model WRITE setModel)
0035     Q_PROPERTY(QString propertyName MEMBER mPropertyName)
0036     Q_PROPERTY(QVariant value MEMBER mValue NOTIFY valueChanged)
0037 
0038 public:
0039     explicit Retriever(QObject *parent = Q_NULLPTR);
0040 
0041     QAbstractItemModel* model() const;
0042     void setModel(QAbstractItemModel* model);
0043 
0044 signals:
0045     void valueChanged();
0046 
0047 private slots:
0048     void onRowsInserted(const QModelIndex &parent, int first, int last);
0049     void onModelReset();
0050 
0051 private:
0052     QString mPropertyName;
0053     QVariant mValue;
0054     QAbstractItemModel *mModel;
0055 };