LeechCraft  %{LEECHCRAFT_VERSION}
Modular cross-platform feature rich live environment.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
LeechCraft::Util::MergeModel Class Reference

#include "mergemodel.h"

+ Inheritance diagram for LeechCraft::Util::MergeModel:
+ Collaboration diagram for LeechCraft::Util::MergeModel:

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)
 

Public Member Functions

 MergeModel (const QStringList &, QObject *=0)
 
virtual ~MergeModel ()
 
virtual int columnCount (const QModelIndex &=QModelIndex()) const
 
virtual QVariant headerData (int, Qt::Orientation, int=Qt::DisplayRole) const
 
virtual QVariant data (const QModelIndex &, int=Qt::DisplayRole) const
 
virtual Qt::ItemFlags flags (const QModelIndex &) const
 
virtual QModelIndex index (int, int, const QModelIndex &=QModelIndex()) const
 
virtual QModelIndex parent (const QModelIndex &) const
 
virtual int rowCount (const QModelIndex &=QModelIndex()) const
 
virtual QModelIndex mapFromSource (const QModelIndex &index) const
 
virtual QModelIndex mapToSource (const QModelIndex &index) const
 
virtual void setSourceModel (QAbstractItemModel *)
 
void SetHeaders (const QStringList &headers)
 
void AddModel (QAbstractItemModel *model)
 
void RemoveModel (QAbstractItemModel *model)
 
size_t Size () const
 
const_iterator FindModel (const QAbstractItemModel *model) const
 
iterator FindModel (const QAbstractItemModel *model)
 
int GetStartingRow (const_iterator it) const
 
const_iterator GetModelForRow (int row, int *starting=0) const
 
iterator GetModelForRow (int row, int *starting=0)
 
QList< QAbstractItemModel * > GetAllModels () const
 Returns all models intalled into this one. More...
 

Protected Types

typedef std::deque< QPointer
< QAbstractItemModel > > 
models_t
 

Protected Member Functions

virtual bool AcceptsRow (QAbstractItemModel *model, int row) const
 

Protected Attributes

models_t Models_
 

Detailed Description

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 53 of file mergemodel.h.

Member Typedef Documentation

typedef models_t::const_iterator LeechCraft::Util::MergeModel::const_iterator

Definition at line 65 of file mergemodel.h.

typedef models_t::iterator LeechCraft::Util::MergeModel::iterator

Definition at line 64 of file mergemodel.h.

typedef std::deque<QPointer<QAbstractItemModel> > LeechCraft::Util::MergeModel::models_t
protected

Definition at line 59 of file mergemodel.h.

Constructor & Destructor Documentation

MergeModel::MergeModel ( const QStringList &  headers,
QObject *  parent = 0 
)

Definition at line 38 of file mergemodel.cpp.

MergeModel::~MergeModel ( )
virtual

Definition at line 45 of file mergemodel.cpp.

Member Function Documentation

bool MergeModel::AcceptsRow ( QAbstractItemModel *  model,
int  row 
) const
protectedvirtual

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.

Definition at line 422 of file mergemodel.cpp.

void 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.

Parameters
[in]modelThe model to append to the list.

Definition at line 181 of file mergemodel.cpp.

References handleColumnsAboutToBeInserted(), handleColumnsAboutToBeRemoved(), handleColumnsInserted(), handleColumnsRemoved(), handleDataChanged(), handleRowsAboutToBeInserted(), handleRowsAboutToBeRemoved(), handleRowsInserted(), handleRowsRemoved(), Models_, and rowCount().

+ Here is the call graph for this function:

int MergeModel::columnCount ( const QModelIndex &  index = QModelIndex ()) const
virtual

Definition at line 49 of file mergemodel.cpp.

References mapToSource().

+ Here is the call graph for this function:

QVariant MergeModel::data ( const QModelIndex &  index,
int  role = Qt::DisplayRole 
) const
virtual

Definition at line 68 of file mergemodel.cpp.

References mapToSource().

+ Here is the call graph for this function:

MergeModel::const_iterator 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.

Parameters
[in]modelThe model to find.
Returns
The iterator.

Definition at line 250 of file mergemodel.cpp.

References Models_.

Referenced by handleRowsAboutToBeInserted(), handleRowsAboutToBeRemoved(), mapFromSource(), and RemoveModel().

+ Here is the caller graph for this function:

MergeModel::iterator MergeModel::FindModel ( const QAbstractItemModel *  model)

This is an overloaded function provided for convenience. Non-const and returns a non-const iterator.

Parameters
[in]modelThe model to find.
Returns
The iterator.

Definition at line 255 of file mergemodel.cpp.

References Models_.

Qt::ItemFlags MergeModel::flags ( const QModelIndex &  index) const
virtual

Definition at line 79 of file mergemodel.cpp.

References mapToSource().

+ Here is the call graph for this function:

QList< QAbstractItemModel * > 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.

Returns
The list of models.

Definition at line 338 of file mergemodel.cpp.

References Models_.

MergeModel::const_iterator MergeModel::GetModelForRow ( int  row,
int *  starting = 0 
) const

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.

Parameters
[in]rowThe row that should be identified.
[in,out]startingThe pointer to variable that will store the starting row, if not null.
Returns
Iterator associated with the model.
Exceptions
std::runtime_errorThrows if there is no model for such row.

Definition at line 298 of file mergemodel.cpp.

References Models_.

Referenced by mapToSource().

+ Here is the caller graph for this function:

MergeModel::iterator MergeModel::GetModelForRow ( int  row,
int *  starting = 0 
)

This is an overloaded function provided for convenience. Non-const and returns a non-const iterator.

Parameters
[in]rowThe row that should be identified.
[in,out]startingThe pointer to variable that will store the starting row, if not null.
Returns
Iterator associated with the model.
Exceptions
std::runtime_errorThrows if there is no model for such row.

Definition at line 318 of file mergemodel.cpp.

References Models_.

int MergeModel::GetStartingRow ( MergeModel::const_iterator  it) const

Returns the row in the resulting MergeModel from which do begin rows which belong to the model corresponding to the given const_iterator.

Parameters
[in]itThe iterator corresponding to the model.
Returns
The starting row.

Definition at line 290 of file mergemodel.cpp.

References Models_.

Referenced by handleRowsAboutToBeInserted(), handleRowsAboutToBeRemoved(), mapFromSource(), and RemoveModel().

+ Here is the caller graph for this function:

void MergeModel::handleColumnsAboutToBeInserted ( const QModelIndex &  ,
int  ,
int   
)
virtualslot

Definition at line 347 of file mergemodel.cpp.

Referenced by AddModel().

+ Here is the caller graph for this function:

void MergeModel::handleColumnsAboutToBeRemoved ( const QModelIndex &  ,
int  ,
int   
)
virtualslot

Definition at line 354 of file mergemodel.cpp.

Referenced by AddModel().

+ Here is the caller graph for this function:

void MergeModel::handleColumnsInserted ( const QModelIndex &  ,
int  ,
int   
)
virtualslot

Definition at line 361 of file mergemodel.cpp.

Referenced by AddModel().

+ Here is the caller graph for this function:

void MergeModel::handleColumnsRemoved ( const QModelIndex &  ,
int  ,
int   
)
virtualslot

Definition at line 368 of file mergemodel.cpp.

Referenced by AddModel().

+ Here is the caller graph for this function:

void MergeModel::handleDataChanged ( const QModelIndex &  topLeft,
const QModelIndex &  bottomRight 
)
virtualslot

Definition at line 375 of file mergemodel.cpp.

References mapFromSource().

Referenced by AddModel().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void MergeModel::handleRowsAboutToBeInserted ( const QModelIndex &  parent,
int  first,
int  last 
)
virtualslot

Definition at line 381 of file mergemodel.cpp.

References FindModel(), GetStartingRow(), and mapFromSource().

Referenced by AddModel().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void MergeModel::handleRowsAboutToBeRemoved ( const QModelIndex &  parent,
int  first,
int  last 
)
virtualslot

Definition at line 390 of file mergemodel.cpp.

References FindModel(), GetStartingRow(), and mapFromSource().

Referenced by AddModel().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void MergeModel::handleRowsInserted ( const QModelIndex &  ,
int  ,
int   
)
virtualslot

Definition at line 412 of file mergemodel.cpp.

Referenced by AddModel().

+ Here is the caller graph for this function:

void MergeModel::handleRowsRemoved ( const QModelIndex &  ,
int  ,
int   
)
virtualslot

Definition at line 417 of file mergemodel.cpp.

Referenced by AddModel().

+ Here is the caller graph for this function:

QVariant MergeModel::headerData ( int  column,
Qt::Orientation  orient,
int  role = Qt::DisplayRole 
) const
virtual

Definition at line 60 of file mergemodel.cpp.

QModelIndex MergeModel::index ( int  row,
int  column,
const QModelIndex &  parent = QModelIndex () 
) const
virtual

Definition at line 85 of file mergemodel.cpp.

QModelIndex MergeModel::mapFromSource ( const QModelIndex &  index) const
virtual

Returns the model index in the MergeModel given the index from the source model.

Parameters
[in]indexSource index.
Returns
MergeModel's index.

Definition at line 117 of file mergemodel.cpp.

References FindModel(), and GetStartingRow().

Referenced by handleDataChanged(), handleRowsAboutToBeInserted(), and handleRowsAboutToBeRemoved().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

QModelIndex MergeModel::mapToSource ( const QModelIndex &  index) const
virtual

Returns the source model index corresponding to the given index from the sorting filter model.

Parameters
[in]indexMergeModel's index.
Returns
Source index.

Definition at line 138 of file mergemodel.cpp.

References GetModelForRow(), and Models_.

Referenced by columnCount(), data(), flags(), and rowCount().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

QModelIndex MergeModel::parent ( const QModelIndex &  ) const
virtual

Definition at line 93 of file mergemodel.cpp.

void MergeModel::RemoveModel ( QAbstractItemModel *  model)

Removes a model from the list of source models. If there is no such model, this function does nothing.

Parameters
[in]modelThe model to remove from the list.

Definition at line 260 of file mergemodel.cpp.

References FindModel(), GetStartingRow(), and Models_.

+ Here is the call graph for this function:

int MergeModel::rowCount ( const QModelIndex &  parent = QModelIndex ()) const
virtual

Definition at line 99 of file mergemodel.cpp.

References mapToSource(), and Models_.

Referenced by AddModel().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void MergeModel::SetHeaders ( const QStringList &  headers)

Sets the new headers for this model.

Parameters
[in]headersThe new headers.

Definition at line 176 of file mergemodel.cpp.

void MergeModel::setSourceModel ( QAbstractItemModel *  )
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.

Exceptions
std::runtime_errorNo matter what, you'd get it.

Definition at line 171 of file mergemodel.cpp.

size_t MergeModel::Size ( ) const

Returns the number of child models in the merger.

Returns
The number of child models.

Definition at line 285 of file mergemodel.cpp.

References Models_.

Member Data Documentation

models_t LeechCraft::Util::MergeModel::Models_
protected

The documentation for this class was generated from the following files: