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

0001 /*
0002     Copyright (c) 2016 Christian Mollekopf <mollekopf@kolabsys.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 #pragma once
0020 
0021 #include "kube_export.h"
0022 #include <QAbstractItemModel>
0023 
0024 /**
0025  * Exposes a model and maintains a current index selection.
0026  */
0027 class KUBE_EXPORT Selector : public QObject {
0028     Q_OBJECT
0029     Q_PROPERTY (int currentIndex READ currentIndex WRITE setCurrentIndex NOTIFY currentIndexChanged)
0030     Q_PROPERTY (QAbstractItemModel* model READ model CONSTANT)
0031 
0032 public:
0033     Selector(QAbstractItemModel *model);
0034 
0035     virtual QAbstractItemModel *model() { return mModel; }
0036 
0037     void setCurrentIndex(int i, bool setAlways = false) {
0038         if (i == mCurrentIndex && !setAlways) {
0039             return;
0040         }
0041         mCurrentIndex = i;
0042         Q_ASSERT(mModel);
0043         if (i >= 0) {
0044             setCurrent(mModel->index(mCurrentIndex, 0));
0045         } else {
0046             setCurrent(QModelIndex());
0047         }
0048         emit currentIndexChanged();
0049     }
0050 
0051     void reapplyCurrentIndex();
0052 
0053     int currentIndex() { return mCurrentIndex; }
0054 
0055     virtual void setCurrent(const QModelIndex &) = 0;
0056 
0057 signals:
0058     void currentIndexChanged();
0059 
0060 private:
0061     QAbstractItemModel *mModel = nullptr;
0062     int mCurrentIndex = -1;
0063 };
0064