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