LeechCraft  0.6.70-15082-g543737046d
Modular cross-platform feature rich live environment.
mergemodel.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 <functional>
12 #include <QPointer>
13 #include <QAbstractProxyModel>
14 #include <QStringList>
15 #include <QStack>
16 #include "modelsconfig.h"
17 #include "modelitem.h"
18 
19 namespace LC::Util
20 {
34  class UTIL_MODELS_API MergeModel : public QAbstractItemModel
35  {
36  mutable bool DefaultAcceptsRowImpl_ = false;
37  protected:
38  using models_t = QList<QPointer<QAbstractItemModel>>;
39  models_t Models_;
40  private:
41  QStringList Headers_;
42 
43  ModelItem_ptr Root_;
44 
45  QStack<std::function<void ()>> RemovalRefreshers_;
46  public:
47  using iterator = models_t::iterator;
48  using const_iterator = models_t::const_iterator;
49 
57  explicit MergeModel (QStringList headers, QObject *parent = nullptr);
58 
59  int columnCount (const QModelIndex& = QModelIndex ()) const override;
60  QVariant headerData (int, Qt::Orientation, int = Qt::DisplayRole) const override;
61  QVariant data (const QModelIndex&, int = Qt::DisplayRole) const override;
62  Qt::ItemFlags flags (const QModelIndex&) const override;
63  QModelIndex index (int, int, const QModelIndex& = QModelIndex ()) const override;
64  QModelIndex parent (const QModelIndex&) const override;
65  int rowCount (const QModelIndex& = QModelIndex ()) const override;
66 
71  QStringList mimeTypes () const override;
72 
83  QMimeData* mimeData (const QModelIndexList& indices) const override;
84 
91  virtual QModelIndex mapFromSource (const QModelIndex& index) const;
92 
99  virtual QModelIndex mapToSource (const QModelIndex& index) const;
100 
109  virtual void setSourceModel (QAbstractItemModel*);
110 
115  void SetHeaders (const QStringList& headers);
116 
129  void AddModel (QAbstractItemModel *model);
130 
137  void RemoveModel (QAbstractItemModel *model);
138 
143  size_t Size () const;
144 
151  const_iterator FindModel (const QAbstractItemModel *model) const;
152 
159  iterator FindModel (const QAbstractItemModel *model);
160 
170  int GetStartingRow (const_iterator it) const;
171 
181  int GetStartingRow (iterator it);
182 
200  const_iterator GetModelForRow (int row, int *starting = nullptr) const;
201 
213  iterator GetModelForRow (int row, int *starting = nullptr);
214 
223  QList<QAbstractItemModel*> GetAllModels () const;
224  protected:
225  virtual void HandleRowsAboutToBeInserted (QAbstractItemModel*, const QModelIndex&, int, int);
226  virtual void HandleRowsAboutToBeRemoved (QAbstractItemModel*, const QModelIndex&, int, int);
227  virtual void HandleRowsInserted (QAbstractItemModel*, const QModelIndex&, int, int);
228  virtual void HandleRowsRemoved (QAbstractItemModel*, const QModelIndex&, int, int);
229  virtual void HandleModelAboutToBeReset (QAbstractItemModel*);
230  virtual void HandleModelReset (QAbstractItemModel*);
231 
244  virtual bool AcceptsRow (QAbstractItemModel *model, int row) const;
245  private:
246  int RowCount (QAbstractItemModel*) const;
247  };
248 }
QList
Definition: ianrulesstorage.h:14
LC::Util
Definition: icoreproxy.h:33
LC::Util::MergeModel::iterator
models_t::iterator iterator
Definition: mergemodel.h:59
modelsconfig.h
LC::Util::ModelItem_ptr
std::shared_ptr< ModelItem > ModelItem_ptr
Definition: modelitem.h:23
UTIL_MODELS_API
#define UTIL_MODELS_API
Definition: modelsconfig.h:16
modelitem.h
LC::Util::MergeModel
Definition: mergemodel.h:40
LC::Util::MergeModel::const_iterator
models_t::const_iterator const_iterator
Definition: mergemodel.h:60