Implement the TagFilter model.

This model accepts check / unchedk. Now, I need to also
plug the result of the check / uncheck to the list model.

Signed-off-by: Tomaz Canabrava <tomaz.canabrava@intel.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Tomaz Canabrava 2014-09-17 15:45:18 -03:00 committed by Dirk Hohndel
parent 7a90b9d764
commit a6e9a1eab5
4 changed files with 71 additions and 0 deletions

View file

@ -2099,3 +2099,54 @@ int LanguageModel::rowCount(const QModelIndex &parent) const
{
return languages.count();
}
TagFilterModel::TagFilterModel(QObject *parent): QStringListModel(parent), checkState(NULL)
{
}
TagFilterModel *TagFilterModel::instance()
{
static TagFilterModel *self = new TagFilterModel();
return self;
}
QVariant TagFilterModel::data(const QModelIndex &index, int role) const
{
if(role == Qt::CheckStateRole){
return checkState[index.row()] ? Qt::Checked : Qt::Unchecked;
} else if (role == Qt::DisplayRole) {
return stringList()[index.row()];
}
return QVariant();
}
Qt::ItemFlags TagFilterModel::flags(const QModelIndex &index) const
{
return QStringListModel::flags(index) | Qt::ItemIsUserCheckable;
}
void TagFilterModel::repopulate()
{
if (g_tag_list == NULL)
return;
QStringList list;
struct tag_entry *current_tag_entry = g_tag_list->next;
while (current_tag_entry != NULL) {
list.append(QString(current_tag_entry->tag->name));
current_tag_entry = current_tag_entry->next;
}
setStringList(list);
delete[] checkState;
checkState = new bool[list.count()];
memset(checkState, false, list.count());
}
bool TagFilterModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
if(role == Qt::CheckStateRole){
checkState[index.row()] = value.toBool();
return true;
}
return false;
}