![]() |
LeechCraft
0.6.70-13729-g7046a9d2a7
Modular cross-platform feature rich live environment.
|
#include "mergemodel.h"
Public Types | |
typedef models_t::iterator | iterator |
typedef models_t::const_iterator | const_iterator |
Public Slots | |
virtual void | handleColumnsAboutToBeInserted (const QModelIndex &, int, int) |
virtual void | handleColumnsAboutToBeRemoved (const QModelIndex &, int, int) |
virtual void | handleColumnsInserted (const QModelIndex &, int, int) |
virtual void | handleColumnsRemoved (const QModelIndex &, int, int) |
virtual void | handleDataChanged (const QModelIndex &, const QModelIndex &) |
virtual void | handleRowsAboutToBeInserted (const QModelIndex &, int, int) |
virtual void | handleRowsAboutToBeRemoved (const QModelIndex &, int, int) |
virtual void | handleRowsInserted (const QModelIndex &, int, int) |
virtual void | handleRowsRemoved (const QModelIndex &, int, int) |
virtual void | handleModelAboutToBeReset () |
virtual void | handleModelReset () |
Public Member Functions | |
MergeModel (const QStringList &headers, QObject *parent=0) | |
Constructs the merge model. More... | |
int | columnCount (const QModelIndex &=QModelIndex()) const override |
QVariant | headerData (int, Qt::Orientation, int=Qt::DisplayRole) const override |
QVariant | data (const QModelIndex &, int=Qt::DisplayRole) const override |
Qt::ItemFlags | flags (const QModelIndex &) const override |
QModelIndex | index (int, int, const QModelIndex &=QModelIndex()) const override |
QModelIndex | parent (const QModelIndex &) const override |
int | rowCount (const QModelIndex &=QModelIndex()) const override |
QStringList | mimeTypes () const override |
Returns the union of MIME types of the models. More... | |
QMimeData * | mimeData (const QModelIndexList &indices) const override |
Returns the MIME data for the given indices. More... | |
virtual QModelIndex | mapFromSource (const QModelIndex &index) const |
Returns the model index in the MergeModel given the index from the source model. More... | |
virtual QModelIndex | mapToSource (const QModelIndex &index) const |
Returns the source model index corresponding to the given index from the sorting filter model. More... | |
virtual void | setSourceModel (QAbstractItemModel *) |
void | SetHeaders (const QStringList &headers) |
Sets the new headers for this model. More... | |
void | AddModel (QAbstractItemModel *model) |
Adds a model to the list of source models. More... | |
void | RemoveModel (QAbstractItemModel *model) |
Removes a model from the list of source models. More... | |
size_t | Size () const |
Returns the number of child models in the merger. More... | |
const_iterator | FindModel (const QAbstractItemModel *model) const |
Returns a const_iterator corresponding to the passed model, or one-past-end if no such model is found. More... | |
iterator | FindModel (const QAbstractItemModel *model) |
This is an overloaded function provided for convenience. Non-const and returns a non-const iterator. More... | |
int | GetStartingRow (const_iterator it) const |
Finds starting row for the model pointed by it. More... | |
const_iterator | GetModelForRow (int row, int *starting=0) const |
Returns the model for the given row. More... | |
iterator | GetModelForRow (int row, int *starting=0) |
This is an overloaded function provided for convenience. More... | |
QList< QAbstractItemModel * > | GetAllModels () const |
Returns all models intalled into this one. More... | |
Protected Types | |
typedef QList< QPointer< QAbstractItemModel > > | models_t |
Protected Member Functions | |
virtual bool | AcceptsRow (QAbstractItemModel *model, int row) const |
Allows to filter rows from the resulting model. More... | |
Protected Attributes | |
models_t | Models_ |
Merges data from multiple source models into one resulting model and provides means to lookup models by row, get starting rows for a model etc.
To add a new source model, one should use AddModel() as setSourceModel() throws an std::runtime_error exception.
Currently it doesn't support hierarchical source models. Seems like it would never support it at least someone would try to implement it.
Definition at line 58 of file mergemodel.h.
typedef models_t::const_iterator LC::Util::MergeModel::const_iterator |
Definition at line 74 of file mergemodel.h.
typedef models_t::iterator LC::Util::MergeModel::iterator |
Definition at line 73 of file mergemodel.h.
|
protected |
Definition at line 64 of file mergemodel.h.
LC::Util::MergeModel::MergeModel | ( | const QStringList & | headers, |
QObject * | parent = 0 |
||
) |
Constructs the merge model.
Sets the given headers and parent object.
[in] | headers | The headers of the model. |
[in] | parent | The parent object of the model. |
Definition at line 41 of file mergemodel.cpp.
|
protectedvirtual |
Allows to filter rows from the resulting model.
This virtual function could be overridden to provide custom filtering facilities. If the row in the model should be merged into the resulting model, this function should return true, otherwise if it returns false the row would be filtered out.
[in] | model | The source model the row belongs. |
[in] | row | The row index in the source model. |
Definition at line 511 of file mergemodel.cpp.
void LC::Util::MergeModel::AddModel | ( | QAbstractItemModel * | model | ) |
Adds a model to the list of source models.
The newly added model is appended to the end.
If the model already exists in the list, it is added again, and bad things would happen, as all the signals and slots would be connected and called twice. So it's your duty to ensure that you don't add the same model more than once.
[in] | model | The model to append to the list. |
Definition at line 229 of file mergemodel.cpp.
References handleColumnsAboutToBeInserted(), handleColumnsAboutToBeRemoved(), handleColumnsInserted(), handleColumnsRemoved(), handleDataChanged(), handleModelAboutToBeReset(), handleModelReset(), handleRowsAboutToBeInserted(), handleRowsAboutToBeRemoved(), handleRowsInserted(), handleRowsRemoved(), Models_, and rowCount().
|
override |
Definition at line 48 of file mergemodel.cpp.
References index(), and mapToSource().
|
override |
Definition at line 67 of file mergemodel.cpp.
References index(), and mapToSource().
MergeModel::const_iterator LC::Util::MergeModel::FindModel | ( | const QAbstractItemModel * | model | ) | const |
Returns a const_iterator corresponding to the passed model, or one-past-end if no such model is found.
[in] | model | The model to find. |
Definition at line 300 of file mergemodel.cpp.
References Models_.
Referenced by GetModelForRow(), handleModelAboutToBeReset(), handleModelReset(), handleRowsAboutToBeInserted(), handleRowsAboutToBeRemoved(), handleRowsInserted(), and RemoveModel().
MergeModel::iterator LC::Util::MergeModel::FindModel | ( | const QAbstractItemModel * | model | ) |
This is an overloaded function provided for convenience. Non-const and returns a non-const iterator.
[in] | model | The model to find. |
Definition at line 305 of file mergemodel.cpp.
References Models_.
|
override |
Definition at line 84 of file mergemodel.cpp.
References index(), and mapToSource().
QList< QAbstractItemModel * > LC::Util::MergeModel::GetAllModels | ( | ) | const |
Returns all models intalled into this one.
Only those models that are not null (and, thus, haven't been destroyed) are returned in the list. This list is guaranteed to contain only valid objects.
Definition at line 370 of file mergemodel.cpp.
References Models_.
Referenced by mimeTypes().
MergeModel::const_iterator LC::Util::MergeModel::GetModelForRow | ( | int | row, |
int * | starting = 0 |
||
) | const |
Returns the model for the given row.
Returns the model that corresponds to the given row. If there is no such model, throws std::runtime_error. If starting is not null, it also calculates and returns the starting row for the returned model. This allows one to avoid calling GetStartingRow() after this function and thus speed things up.
[in] | row | The row that should be identified. |
[in,out] | starting | The pointer to variable that will store the starting row, if not null. |
std::runtime_error | Throws if there is no model for such row. |
Definition at line 348 of file mergemodel.cpp.
References FindModel(), and GetStartingRow().
MergeModel::iterator LC::Util::MergeModel::GetModelForRow | ( | int | row, |
int * | starting = 0 |
||
) |
This is an overloaded function provided for convenience.
[in] | row | The row that should be identified. |
[in,out] | starting | The pointer to variable that will store the starting row, if not null. |
std::runtime_error | Throws if there is no model for such row. |
Definition at line 359 of file mergemodel.cpp.
References FindModel(), and GetStartingRow().
int LC::Util::MergeModel::GetStartingRow | ( | MergeModel::const_iterator | it | ) | const |
Finds starting row for the model pointed by it.
Returns the row in the resulting MergeModel from which do begin rows which belong to the model corresponding to the given const_iterator.
[in] | it | The iterator corresponding to the model. |
Definition at line 340 of file mergemodel.cpp.
References Models_.
Referenced by GetModelForRow(), handleModelAboutToBeReset(), handleModelReset(), handleRowsAboutToBeInserted(), handleRowsAboutToBeRemoved(), and handleRowsInserted().
|
virtualslot |
Definition at line 379 of file mergemodel.cpp.
Referenced by AddModel().
|
virtualslot |
Definition at line 383 of file mergemodel.cpp.
Referenced by AddModel().
|
virtualslot |
Definition at line 389 of file mergemodel.cpp.
Referenced by AddModel().
|
virtualslot |
Definition at line 393 of file mergemodel.cpp.
Referenced by AddModel().
|
virtualslot |
Definition at line 399 of file mergemodel.cpp.
References mapFromSource().
Referenced by AddModel().
|
virtualslot |
Definition at line 483 of file mergemodel.cpp.
References FindModel(), and GetStartingRow().
Referenced by AddModel().
|
virtualslot |
Definition at line 495 of file mergemodel.cpp.
References FindModel(), and GetStartingRow().
Referenced by AddModel().
|
virtualslot |
Definition at line 405 of file mergemodel.cpp.
References FindModel(), GetStartingRow(), mapFromSource(), and parent().
Referenced by AddModel().
|
virtualslot |
Definition at line 417 of file mergemodel.cpp.
References FindModel(), GetStartingRow(), mapFromSource(), and parent().
Referenced by AddModel().
|
virtualslot |
Definition at line 443 of file mergemodel.cpp.
References FindModel(), GetStartingRow(), mapFromSource(), and parent().
Referenced by AddModel().
|
virtualslot |
Definition at line 477 of file mergemodel.cpp.
Referenced by AddModel().
|
override |
Definition at line 59 of file mergemodel.cpp.
|
override |
Definition at line 98 of file mergemodel.cpp.
References parent().
Referenced by columnCount(), data(), flags(), mimeData(), and parent().
|
virtual |
Returns the model index in the MergeModel given the index from the source model.
[in] | index | Source index. |
Definition at line 179 of file mergemodel.cpp.
References parent().
Referenced by handleDataChanged(), handleRowsAboutToBeInserted(), handleRowsAboutToBeRemoved(), and handleRowsInserted().
|
virtual |
Returns the source model index corresponding to the given index from the sorting filter model.
[in] | index | MergeModel's index. |
Definition at line 209 of file mergemodel.cpp.
Referenced by columnCount(), data(), flags(), and mimeData().
|
override |
Returns the MIME data for the given indices.
This function queries the corresponding source model for each index of the indices, merging the URL list (if any) and using first obtained data of any other format.
[in] | indices | The indices for which to return the MIME data. |
Definition at line 154 of file mergemodel.cpp.
References index(), and mapToSource().
|
override |
Returns the union of MIME types of the models.
Definition at line 132 of file mergemodel.cpp.
References GetAllModels().
|
override |
Definition at line 110 of file mergemodel.cpp.
References index().
Referenced by handleRowsAboutToBeInserted(), handleRowsAboutToBeRemoved(), handleRowsInserted(), index(), mapFromSource(), and rowCount().
void LC::Util::MergeModel::RemoveModel | ( | QAbstractItemModel * | model | ) |
Removes a model from the list of source models.
If there is no such model, this function does nothing.
[in] | model | The model to remove from the list. |
Definition at line 310 of file mergemodel.cpp.
References FindModel(), and Models_.
|
override |
Definition at line 123 of file mergemodel.cpp.
References LC::Util::ModelItem::GetModel(), and parent().
Referenced by AddModel().
void LC::Util::MergeModel::SetHeaders | ( | const QStringList & | headers | ) |
Sets the new headers for this model.
[in] | headers | The new headers. |
Definition at line 224 of file mergemodel.cpp.
|
virtual |
You shouldn't use this function because its semantics in the context of multiple source models aren't clearly defined. Calling this function results in std::runtime_error.
std::runtime_error | No matter what, you'd get it. |
Definition at line 219 of file mergemodel.cpp.
size_t LC::Util::MergeModel::Size | ( | ) | const |
Returns the number of child models in the merger.
Definition at line 335 of file mergemodel.cpp.
References Models_.
|
protected |
Definition at line 65 of file mergemodel.h.
Referenced by AddModel(), FindModel(), GetAllModels(), GetStartingRow(), RemoveModel(), and Size().