NOISSUE Various changes from multiauth that are unrelated to it
This commit is contained in:

committed by
Petr Mrázek

parent
161dc66c2c
commit
3a8b238052
36
logic/resources/ResourceProxyModel.h
Normal file
36
logic/resources/ResourceProxyModel.h
Normal file
@ -0,0 +1,36 @@
|
||||
#pragma once
|
||||
|
||||
#include <QIdentityProxyModel>
|
||||
#include <memory>
|
||||
|
||||
/// Convenience proxy model that transforms resource identifiers (strings) for Qt::DecorationRole into other types.
|
||||
class ResourceProxyModel : public QIdentityProxyModel
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
// resultTypeId is found using qMetaTypeId<T>()
|
||||
explicit ResourceProxyModel(const int resultTypeId, QObject *parent = nullptr);
|
||||
|
||||
enum
|
||||
{
|
||||
// provide this role from your model if you want to show a placeholder
|
||||
PlaceholderRole = Qt::UserRole + 0xabc // some random offset to not collide with other stuff
|
||||
};
|
||||
|
||||
QVariant data(const QModelIndex &proxyIndex, int role) const override;
|
||||
void setSourceModel(QAbstractItemModel *model) override;
|
||||
|
||||
template <typename T>
|
||||
static QAbstractItemModel *mixin(QAbstractItemModel *model)
|
||||
{
|
||||
ResourceProxyModel *proxy = new ResourceProxyModel(qMetaTypeId<T>(), model);
|
||||
proxy->setSourceModel(model);
|
||||
return proxy;
|
||||
}
|
||||
|
||||
private:
|
||||
// mutable because it needs to be available from the const data()
|
||||
mutable QMap<QPersistentModelIndex, std::shared_ptr<class Resource>> m_resources;
|
||||
|
||||
const int m_resultTypeId;
|
||||
};
|
Reference in New Issue
Block a user