LeechCraft  0.6.70-15082-g543737046d
Modular cross-platform feature rich live environment.
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 
17 class ITagsManager;
18 
19 namespace 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 }
QList
Definition: ianrulesstorage.h:14
Items_
QMultiMap< QDateTime, QString > Items_
Definition: networkdiskcachegc.cpp:49
LC::Util
Definition: icoreproxy.h:33
modelsconfig.h
LC::Util::FlatToFoldersProxyModel
Definition: flattofoldersproxymodel.h:24
ITagsManager
Tags manager's interface.
Definition: itagsmanager.h:22
LC::Util::FlatTreeItem_ptr
std::shared_ptr< FlatTreeItem > FlatTreeItem_ptr
Definition: flattofoldersproxymodel.h:22
LC::Util::FlatTreeItem
Definition: flattofoldersproxymodel.cpp:26
UTIL_MODELS_API
#define UTIL_MODELS_API
Definition: modelsconfig.h:16