LeechCraft 0.6.70-19214-g121e5318a7
Modular cross-platform feature rich live environment.
Loading...
Searching...
No Matches
flattofoldersproxymodel.h
Go to the documentation of this file.
1/**********************************************************************
2 * LeechCraft - modular cross-platform feature rich internet client.
3 * Copyright (C) 2006-2014 Georg Rudoy
4 *
5 * Distributed under the Boost Software License, Version 1.0.
6 * (See accompanying file LICENSE or copy at https://www.boost.org/LICENSE_1_0.txt)
7 **********************************************************************/
8
9#pragma once
10
11#include <memory>
12#include <QAbstractItemModel>
13#include <QStringList>
14#include <QMultiHash>
15#include "modelsconfig.h"
16
17class ITagsManager;
18
19namespace LC::Util
20{
21 struct FlatTreeItem;
22 using FlatTreeItem_ptr = std::shared_ptr<FlatTreeItem>;
23
39 class UTIL_MODELS_API FlatToFoldersProxyModel : public QAbstractItemModel
40 {
41 QAbstractItemModel *SourceModel_ = nullptr;
42
43 const ITagsManager * const TM_;
44
45 FlatTreeItem_ptr Root_;
46 QMultiHash<QPersistentModelIndex, FlatTreeItem_ptr> Items_;
47 public:
48 explicit FlatToFoldersProxyModel (const ITagsManager*, QObject* = nullptr);
49
50 int columnCount (const QModelIndex& = {}) const override;
51 QVariant data (const QModelIndex&, int = Qt::DisplayRole) const override;
52 QVariant headerData (int, Qt::Orientation, int) const override;
53 Qt::ItemFlags flags (const QModelIndex&) const override;
54 bool setData (const QModelIndex&, const QVariant&, int = Qt::EditRole) override;
55 QModelIndex index (int, int, const QModelIndex& = {}) const override;
56 QModelIndex parent (const QModelIndex&) const override;
57 int rowCount (const QModelIndex& = {}) const override;
58
59 Qt::DropActions supportedDropActions () const override;
60 QStringList mimeTypes () const override;
61 QMimeData* mimeData (const QModelIndexList& indexes) const override;
62 bool dropMimeData (const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex& parent) override;
63
64 void SetSourceModel (QAbstractItemModel*);
65 QAbstractItemModel* GetSourceModel () const;
66 QModelIndex MapToSource (const QModelIndex&) const;
67 QList<QModelIndex> MapFromSource (const QModelIndex&) const;
68
69 bool IsFolder (const QModelIndex&) const;
70 QList<QModelIndex> GetChildren (const QModelIndex&) const;
71 QList<QVariant> GetChildrenData (const QModelIndex& index, int role) const;
72
73 template<typename T>
74 QList<T> GetChildrenData (const QModelIndex& index, int role) const
75 {
76 QList<T> result;
77 for (const auto& var : GetChildrenData (index, role))
78 result.push_back (var.value<T> ());
79 return result;
80 }
81 private:
82 const FlatTreeItem& ToFlatOrRoot (const QModelIndex&) const;
83 QModelIndex IndexOf (const FlatTreeItem&, int column = 0) const;
84
85 FlatTreeItem_ptr FindFolder (const QString&) const;
86 FlatTreeItem_ptr GetFolder (const QString&);
87 void AddForTag (const QString&, const QPersistentModelIndex&);
88 void RemoveLeaf (const FlatTreeItem_ptr&);
89
90 void HandleDataChanged (const QModelIndex&, const QModelIndex&, const QList<int>&);
91 void HandleModelReset ();
92 void HandleRowsInserted (const QModelIndex&, int, int);
93 void HandleRowsAboutToBeRemoved (const QModelIndex&, int, int);
94 };
95}
Tags manager's interface.
QList< QModelIndex > GetChildren(const QModelIndex &) const
QVariant headerData(int, Qt::Orientation, int) const override
QList< T > GetChildrenData(const QModelIndex &index, int role) const
Qt::DropActions supportedDropActions() const override
int rowCount(const QModelIndex &={}) const override
QAbstractItemModel * GetSourceModel() const
bool IsFolder(const QModelIndex &) const
FlatToFoldersProxyModel(const ITagsManager *, QObject *=nullptr)
QModelIndex parent(const QModelIndex &) const override
QMimeData * mimeData(const QModelIndexList &indexes) const override
QList< QModelIndex > MapFromSource(const QModelIndex &) const
QList< QVariant > GetChildrenData(const QModelIndex &index, int role) const
bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override
int columnCount(const QModelIndex &={}) const override
QVariant data(const QModelIndex &, int=Qt::DisplayRole) const override
bool setData(const QModelIndex &, const QVariant &, int=Qt::EditRole) override
QModelIndex MapToSource(const QModelIndex &) const
QModelIndex index(int, int, const QModelIndex &={}) const override
Qt::ItemFlags flags(const QModelIndex &) const override
#define UTIL_MODELS_API
std::shared_ptr< FlatTreeItem > FlatTreeItem_ptr