LeechCraft 0.6.70-17609-g3dde4097dd
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
24 class UTIL_MODELS_API FlatToFoldersProxyModel : public QAbstractItemModel
25 {
26 QAbstractItemModel *SourceModel_ = nullptr;
27
28 const ITagsManager * const TM_;
29
30 FlatTreeItem_ptr Root_;
31 QMultiHash<QPersistentModelIndex, FlatTreeItem_ptr> Items_;
32 public:
33 explicit FlatToFoldersProxyModel (const ITagsManager*, QObject* = nullptr);
34
35 int columnCount (const QModelIndex& = {}) const override;
36 QVariant data (const QModelIndex&, int = Qt::DisplayRole) const override;
37 QVariant headerData (int, Qt::Orientation, int) const override;
38 Qt::ItemFlags flags (const QModelIndex&) const override;
39 QModelIndex index (int, int, const QModelIndex& = {}) const override;
40 QModelIndex parent (const QModelIndex&) const override;
41 int rowCount (const QModelIndex& = {}) const override;
42
43 Qt::DropActions supportedDropActions () const override;
44 QStringList mimeTypes () const override;
45 QMimeData* mimeData (const QModelIndexList& indexes) const override;
46 bool dropMimeData (const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex& parent) override;
47
48 void SetSourceModel (QAbstractItemModel*);
49 QAbstractItemModel* GetSourceModel () const;
50 QModelIndex MapToSource (const QModelIndex&) const;
51 QList<QModelIndex> MapFromSource (const QModelIndex&) const;
52
53 bool IsFolder (const QModelIndex&) const;
54 QList<QModelIndex> GetChildren (const QModelIndex&) const;
55 QList<QVariant> GetChildrenData (const QModelIndex& index, int role) const;
56
57 template<typename T>
58 QList<T> GetChildrenData (const QModelIndex& index, int role) const
59 {
60 QList<T> result;
61 for (const auto& var : GetChildrenData (index, role))
62 result.push_back (var.value<T> ());
63 return result;
64 }
65 private:
66 const FlatTreeItem& ToFlatOrRoot (const QModelIndex&) const;
67
68 void HandleRowInserted (int);
69 void HandleRowRemoved (int);
70 void AddForTag (const QString&, const QPersistentModelIndex&);
71 void RemoveFromTag (const QString&, const QPersistentModelIndex&);
72 void HandleChanged (const QModelIndex&);
73
74 FlatTreeItem_ptr FindFolder (const QString&) const;
75 FlatTreeItem_ptr GetFolder (const QString&);
76
77 void HandleDataChanged (const QModelIndex&, const QModelIndex&);
78 void HandleModelReset ();
79 void HandleRowsInserted (const QModelIndex&, int, int);
80 void HandleRowsAboutToBeRemoved (const QModelIndex&, int, int);
81 };
82}
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
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