LeechCraft 0.6.70-16373-g319c272718
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 private:
53 const FlatTreeItem& ToFlatOrRoot (const QModelIndex&) const;
54
55 void HandleRowInserted (int);
56 void HandleRowRemoved (int);
57 void AddForTag (const QString&, const QPersistentModelIndex&);
58 void RemoveFromTag (const QString&, const QPersistentModelIndex&);
59 void HandleChanged (const QModelIndex&);
60
61 FlatTreeItem_ptr FindFolder (const QString&) const;
62 FlatTreeItem_ptr GetFolder (const QString&);
63
64 void HandleDataChanged (const QModelIndex&, const QModelIndex&);
65 void HandleModelReset ();
66 void HandleRowsInserted (const QModelIndex&, int, int);
67 void HandleRowsAboutToBeRemoved (const QModelIndex&, int, int);
68 };
69}
Tags manager's interface.
QVariant headerData(int, Qt::Orientation, int) const override
Qt::DropActions supportedDropActions() const override
int rowCount(const QModelIndex &={}) const override
QAbstractItemModel * GetSourceModel() 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
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