Git commit f438c2fbc9283df3cdef073857ef3af597b9eccc by Stefan Böhmann. Pushed by sboehmann into branch 'master'. move CategoryModel from gui/ to core/ M +2 -0 core/CMakeLists.txt A +423 -0 core/categorymodel.cpp [License: GPL (v2+)] A +92 -0 core/categorymodel.h [License: GPL (v2+)] M +0 -2 gui/CMakeLists.txt D +0 -428 gui/categorymodel.cpp D +0 -89 gui/categorymodel.h http://commits.kde.org/knipptasch/f438c2fbc9283df3cdef073857ef3af597b9eccc diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt index 5b4a670..053f74a 100644 --- a/core/CMakeLists.txt +++ b/core/CMakeLists.txt @@ -21,6 +21,7 @@ set( knipptasch_core_SOURCES abstractaccounttabwidget.cpp accountmodel.cpp + categorymodel.cpp widgets/dateedit.cpp widgets/datevalidator.cpp @@ -47,6 +48,7 @@ set( knipptasch_core_HEADERS abstractaccounttabwidget.h accountmodel.h + categorymodel.h widgets/dateedit.h widgets/datevalidator.h diff --git a/core/categorymodel.cpp b/core/categorymodel.cpp new file mode 100644 index 0000000..89cfc8b --- /dev/null +++ b/core/categorymodel.cpp @@ -0,0 +1,423 @@ +/* + * Copyright 2011 Stefan Böhmann + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include "categorymodel.h" + +#include "backend/account.h" +#include "backend/category.h" + +#include + + +CategoryModel::CategoryModel(QObject *parent) + : QAbstractItemModel( parent ), + m_account( 0 ) +{ +} + + + +CategoryModel::CategoryModel(Account *account, QObject *parent) + : QAbstractItemModel( parent ), + m_account( 0 ) +{ + setAccount( account ); +} + + +Account* CategoryModel::account() +{ + return m_account; +} + + +const Account* CategoryModel::account() const +{ + return m_account; +} + + +void CategoryModel::setAccount(Account *account) +{ +#if QT_VERSION >= 0x040600 + beginResetModel(); +#endif + + m_account = account; + +#if QT_VERSION >= 0x040600 + endResetModel(); +#else + reset(); +#endif +} + + +const Category* CategoryModel::category(const QModelIndex &index) const +{ + if( !index.isValid() ) { + return 0; + } + + return static_cast( index.internalPointer() ); +} + + +Category* CategoryModel::category(const QModelIndex &index) +{ + if( !index.isValid() ) { + return m_account->rootCategory(); + } + + return static_cast( index.internalPointer() ); +} + + +QModelIndex CategoryModel::categoryIndex(const Category *category) const +{ + if( !category ) { + return QModelIndex(); + } + + for(int i = 0; i < rowCount(); ++i) { + QModelIndex idx = findCategoryIndex( index( i, 0 ), category ); + if( idx.isValid() ) { + return idx; + } + } + + return QModelIndex(); +} + + +int CategoryModel::rowCount(const QModelIndex &parent) const +{ + if( !m_account ) { + return 0; + } + + if( parent.column() > 0 ) { + return 0; + } + + Category *parentCategory = 0; + if( !parent.isValid() ) { + parentCategory = m_account->rootCategory(); + } + else { + parentCategory = static_cast( parent.internalPointer() ); + } + + return parentCategory->countCategories(); +} + + +int CategoryModel::columnCount(const QModelIndex &parent) const +{ + Q_UNUSED( parent ); + + if( !m_account ) { + return 0; + } + + return CategoryModel::ENTRYCOUNT; +} + + +QVariant CategoryModel::headerData(int section, Qt::Orientation orientation, int role) const +{ + if( orientation == Qt::Horizontal && role == Qt::DisplayRole ) { + switch( section ) { + case CATEGORY_NAME: + return tr( "Name" ); + + case CATEGORY_COLOR: + return tr( "Color" ); + + case CATEGORY_USAGE: + //return tr( "Usage Count" ); + return QString(); + + default: + break; + } + } + + return QAbstractItemModel::headerData( section, orientation, role ); +} + + +QVariant CategoryModel::data(const QModelIndex &index, int role) const +{ + if( !m_account ) { + return QVariant(); + } + + if( !index.isValid() ) { + return QVariant(); + } + + if( !(role == Qt::EditRole || role == Qt::DisplayRole) ) { + return QVariant(); + } + + Category *category = static_cast( index.internalPointer() ); + Q_ASSERT( category ); + + switch( index.column() ) { + case CATEGORY_NAME: + return category->name(); + + case CATEGORY_COLOR: + if( role == Qt::EditRole ) { + return QVariant::fromValue( category->color() ); + } + break; + + default: + break; + } + + return QVariant(); +} + + +bool CategoryModel::setData(const QModelIndex &index, const QVariant &value, int role) +{ + if( !m_account ) { + return false; + } + + if( !index.isValid() ) { + return false; + } + + if( !(role == Qt::EditRole || role == Qt::DisplayRole) ) { + return false; + } + + Category *category = static_cast( index.internalPointer() ); + Q_ASSERT( category ); + + switch( index.column() ) { + case CATEGORY_NAME: + { + QString str = value.toString().trimmed(); + category->setName( str.isEmpty() ? tr( "Unnamed Category" ) : str ); + break; + } + + case CATEGORY_COLOR: + category->setColor( value.value() ); + break; + + default: + return false; + } + + emit dataChanged( index, index ); + return true; +} + + +bool CategoryModel::insertRows(int position, int rows, const QModelIndex &parent) +{ + Q_UNUSED( position ); + + Category *parentCategory = 0; + if( !parent.isValid() ) { + parentCategory = m_account->rootCategory(); + } + else { + parentCategory = static_cast( parent.internalPointer() ); + } + Q_ASSERT( parentCategory ); + + beginInsertRows( parent, parentCategory->countCategories(), + parentCategory->countCategories() + rows - 1 ); + + for(int row = 0; row < rows; row++) { + parentCategory->addCategory( new Category( tr( "Unnamed Category" ), m_account ) ); + } + + endInsertRows(); + + return true; +} + + +bool CategoryModel::removeRows(int position, int rows, const QModelIndex &parent) +{ + Category *parentCategory = 0; + if( !parent.isValid() ) { + parentCategory = m_account->rootCategory(); + } + else { + parentCategory = static_cast( parent.internalPointer() ); + } + Q_ASSERT( parentCategory ); + Q_ASSERT( ( position + rows - 1 ) < parentCategory->countCategories() ); + + beginRemoveRows( parent, position, position + rows - 1 ); + + for(int row = 0; row < rows; ++row) { + delete parentCategory->takeCategory( position ); + } + + endRemoveRows(); + + return true; +} + + +Qt::ItemFlags CategoryModel::flags(const QModelIndex &index) const +{ + if( !m_account ) { + return 0; + } + + if( !index.isValid() ) { + return QAbstractItemModel::flags( index ) + /* | Qt::ItemIsDropEnabled */; //<< TODO implement Drag & Drop + } + + return QAbstractItemModel::flags( index ) + | Qt::ItemIsEditable + | Qt::ItemIsDragEnabled + /* | Qt::ItemIsDropEnabled */; //<< TODO implement Drag & Drop +} + + +Qt::DropActions CategoryModel::supportedDropActions() const +{ + return Qt::CopyAction | Qt::MoveAction; +} + + +QStringList CategoryModel::mimeTypes() const +{ + QStringList list( QAbstractItemModel::mimeTypes() ); + + //TODO implement Drag & Drop + + return list; +} + + +QMimeData* CategoryModel::mimeData(const QModelIndexList &indexes) const +{ + QMimeData *mimeData = QAbstractItemModel::mimeData( indexes ); + + //TODO implement Drag & Drop + + return mimeData; +} + + +bool CategoryModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) +{ + //TODO implement Drag & Drop + return QAbstractItemModel::dropMimeData( data, action, row, column, parent ); +} + + +QModelIndex CategoryModel::index(int row, int column, const QModelIndex &parent) const +{ + if( !m_account ) { + return QModelIndex(); + } + + if( !hasIndex( row, column, parent ) ) { + return QModelIndex(); + } + + Category *parentCategory; + + if( !parent.isValid() ) { + parentCategory = m_account->rootCategory(); + } + else { + parentCategory = static_cast( parent.internalPointer() ); + } + + + if( row >= 0 && row < parentCategory->countCategories() ) { + Category *childCategory = parentCategory->category( row ); + Q_ASSERT( childCategory ); + + return createIndex( row, column, childCategory ); + } + else { + return QModelIndex(); + } +} + + +QModelIndex CategoryModel::parent(const QModelIndex &index) const +{ + if( !m_account ) { + return QModelIndex(); + } + + if( !index.isValid() ) { + return QModelIndex(); + } + + Category *childCategory = static_cast( index.internalPointer() ); + Category *parentCategory = m_account->findCategoryParent( childCategory ); + + if( parentCategory == m_account->rootCategory() ) { + return QModelIndex(); + } + + Category *grandparents = m_account->findCategoryParent( parentCategory ); + Q_ASSERT( grandparents ); + + int row = 0; + for(int i = 0; i < grandparents->countCategories(); ++i) { + if( grandparents->category( i ) == parentCategory ) { + row = i; + break; + } + } + + return createIndex( row, 0, parentCategory ); +} + + +QModelIndex CategoryModel::findCategoryIndex(const QModelIndex &parent, const Category *category) const +{ + if( !parent.isValid() ) { + return QModelIndex(); + } + + if( static_cast( parent.internalPointer() ) == category ) { + return parent; + } + + for(int i = 0; i < rowCount( parent ); ++i) { + QModelIndex idx = findCategoryIndex( parent.child( i, parent.column() ), category ); + if( idx.isValid() ) { + return idx; + } + } + + return QModelIndex(); +} + + +// kate: word-wrap off; encoding utf-8; indent-width 4; tab-width 4; line-numbers on; mixed-indent off; remove-trailing-space-save on; replace-tabs-save on; replace-tabs on; space-indent on; +// vim:set spell et sw=4 ts=4 nowrap cino=l1,cs,U1: diff --git a/core/categorymodel.h b/core/categorymodel.h new file mode 100644 index 0000000..136cad7 --- /dev/null +++ b/core/categorymodel.h @@ -0,0 +1,92 @@ +/* + * Copyright 2011 by Stefan Böhmann + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#ifndef CATEGORYMODEL_H +#define CATEGORYMODEL_H + +#include "knipptasch_core_export.h" + +#include + + +class Account; +class Category; + + +/** + * @class CategoryModel + * @brief + * + * @author Stefan Böhmann + */ +class KNIPPTASCH_CORE_EXPORT CategoryModel : public QAbstractItemModel +{ + Q_OBJECT + + public: + enum Column + { + CATEGORY_NAME = 0, + CATEGORY_COLOR, + CATEGORY_USAGE, + ENTRYCOUNT + }; + + explicit CategoryModel(QObject *parent = 0); + explicit CategoryModel(Account *account, QObject *parent = 0); + + Account* account(); + const Account* account() const; + void setAccount(Account *account); + + const Category* category(const QModelIndex &index) const; + Category* category(const QModelIndex &index); + + QModelIndex categoryIndex(const Category *category) const; + + int rowCount(const QModelIndex &parent = QModelIndex()) const; + int columnCount(const QModelIndex &parent = QModelIndex()) const; + + QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; + + QVariant data(const QModelIndex &index, int role) const; + bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); + + bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()); + bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()); + + Qt::ItemFlags flags(const QModelIndex &index) const; + Qt::DropActions supportedDropActions() const; + + QStringList mimeTypes() const; + QMimeData* mimeData(const QModelIndexList &indexes) const; + bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); + + QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; + QModelIndex parent(const QModelIndex &index) const; + + private: + QModelIndex findCategoryIndex(const QModelIndex &parent, const Category *category) const; + + private: + Account *m_account; +}; + + +#endif + +// kate: word-wrap off; encoding utf-8; indent-width 4; tab-width 4; line-numbers on; mixed-indent off; remove-trailing-space-save on; replace-tabs-save on; replace-tabs on; space-indent on; +// vim:set spell et sw=4 ts=4 nowrap cino=l1,cs,U1: diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt index bc46d2f..90db1e1 100644 --- a/gui/CMakeLists.txt +++ b/gui/CMakeLists.txt @@ -11,7 +11,6 @@ set(knipptasch_SOURCES quickreportwidget.cpp passworddialog.cpp categorycombobox.cpp - categorymodel.cpp main.cpp config/configdialog.cpp @@ -47,7 +46,6 @@ set( knipptasch_HEADERS quickreportwidget.h passworddialog.h categorycombobox.h - categorymodel.h config/configdialog.h config/configwidget.h diff --git a/gui/categorymodel.cpp b/gui/categorymodel.cpp deleted file mode 100644 index e382fdc..0000000 --- a/gui/categorymodel.cpp +++ /dev/null @@ -1,428 +0,0 @@ -/* - * Copyright 2011 Stefan Böhmann - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#include "categorymodel.h" - -#include "backend/account.h" -#include "backend/category.h" -#include "preferences.h" - -#include - -#include - - - - -CategoryModel::CategoryModel(QObject *parent) - : QAbstractItemModel( parent ), - m_account( 0 ) -{ -} - - - -CategoryModel::CategoryModel(Account *account, QObject *parent) - : QAbstractItemModel( parent ), - m_account( 0 ) -{ - setAccount( account ); -} - - -Account* CategoryModel::account() -{ - return m_account; -} - - -const Account* CategoryModel::account() const -{ - return m_account; -} - - -void CategoryModel::setAccount(Account *account) -{ -#if QT_VERSION >= 0x040600 - beginResetModel(); -#endif - - m_account = account; - -#if QT_VERSION >= 0x040600 - endResetModel(); -#else - reset(); -#endif -} - - -const Category* CategoryModel::category(const QModelIndex &index) const -{ - if( !index.isValid() ) { - return 0; - } - - return static_cast( index.internalPointer() ); -} - - -Category* CategoryModel::category(const QModelIndex &index) -{ - if( !index.isValid() ) { - return m_account->rootCategory(); - } - - return static_cast( index.internalPointer() ); -} - - -QModelIndex CategoryModel::categoryIndex(const Category *category) const -{ - if( !category ) { - return QModelIndex(); - } - - for(int i = 0; i < rowCount(); ++i) { - QModelIndex idx = findCategoryIndex( index( i, 0 ), category ); - if( idx.isValid() ) { - return idx; - } - } - - return QModelIndex(); -} - - -int CategoryModel::rowCount(const QModelIndex &parent) const -{ - if( !m_account ) { - return 0; - } - - if( parent.column() > 0 ) { - return 0; - } - - Category *parentCategory = 0; - if( !parent.isValid() ) { - parentCategory = m_account->rootCategory(); - } - else { - parentCategory = static_cast( parent.internalPointer() ); - } - - return parentCategory->countCategories(); -} - - -int CategoryModel::columnCount(const QModelIndex &parent) const -{ - Q_UNUSED( parent ); - - if( !m_account ) { - return 0; - } - - return CategoryModel::ENTRYCOUNT; -} - - -QVariant CategoryModel::headerData(int section, Qt::Orientation orientation, int role) const -{ - if( orientation == Qt::Horizontal && role == Qt::DisplayRole ) { - switch( section ) { - case CATEGORY_NAME: - return tr( "Name" ); - - case CATEGORY_COLOR: - return tr( "Color" ); - - case CATEGORY_USAGE: - //return tr( "Usage Count" ); - return QString(); - - default: - break; - } - } - - return QAbstractItemModel::headerData( section, orientation, role ); -} - - -QVariant CategoryModel::data(const QModelIndex &index, int role) const -{ - if( !m_account ) { - return QVariant(); - } - - if( !index.isValid() ) { - return QVariant(); - } - - if( !(role == Qt::EditRole || role == Qt::DisplayRole) ) { - return QVariant(); - } - - Category *category = static_cast( index.internalPointer() ); - Q_ASSERT( category ); - - switch( index.column() ) { - case CATEGORY_NAME: - return category->name(); - - case CATEGORY_COLOR: - if( role == Qt::EditRole ) { - return QVariant::fromValue( category->color() ); - } - break; - - default: - break; - } - - return QVariant(); -} - - -bool CategoryModel::setData(const QModelIndex &index, const QVariant &value, int role) -{ - if( !m_account ) { - return false; - } - - if( !index.isValid() ) { - return false; - } - - if( !(role == Qt::EditRole || role == Qt::DisplayRole) ) { - return false; - } - - Category *category = static_cast( index.internalPointer() ); - Q_ASSERT( category ); - - switch( index.column() ) { - case CATEGORY_NAME: - { - QString str = value.toString().trimmed(); - category->setName( str.isEmpty() ? tr( "Unnamed Category" ) : str ); - break; - } - - case CATEGORY_COLOR: - category->setColor( value.value() ); - break; - - default: - return false; - } - - emit dataChanged( index, index ); - return true; -} - - -bool CategoryModel::insertRows(int position, int rows, const QModelIndex &parent) -{ - Q_UNUSED( position ); - - Category *parentCategory = 0; - if( !parent.isValid() ) { - parentCategory = m_account->rootCategory(); - } - else { - parentCategory = static_cast( parent.internalPointer() ); - } - Q_ASSERT( parentCategory ); - - beginInsertRows( parent, parentCategory->countCategories(), - parentCategory->countCategories() + rows - 1 ); - - for(int row = 0; row < rows; row++) { - parentCategory->addCategory( new Category( tr( "Unnamed Category" ), m_account ) ); - } - - endInsertRows(); - - return true; -} - - -bool CategoryModel::removeRows(int position, int rows, const QModelIndex &parent) -{ - Category *parentCategory = 0; - if( !parent.isValid() ) { - parentCategory = m_account->rootCategory(); - } - else { - parentCategory = static_cast( parent.internalPointer() ); - } - Q_ASSERT( parentCategory ); - Q_ASSERT( ( position + rows - 1 ) < parentCategory->countCategories() ); - - beginRemoveRows( parent, position, position + rows - 1 ); - - for(int row = 0; row < rows; ++row) { - delete parentCategory->takeCategory( position ); - } - - endRemoveRows(); - - return true; -} - - -Qt::ItemFlags CategoryModel::flags(const QModelIndex &index) const -{ - if( !m_account ) { - return 0; - } - - if( !index.isValid() ) { - return QAbstractItemModel::flags( index ) - /* | Qt::ItemIsDropEnabled */; //<< TODO implement Drag & Drop - } - - return QAbstractItemModel::flags( index ) - | Qt::ItemIsEditable - | Qt::ItemIsDragEnabled - /* | Qt::ItemIsDropEnabled */; //<< TODO implement Drag & Drop -} - - -Qt::DropActions CategoryModel::supportedDropActions() const -{ - return Qt::CopyAction | Qt::MoveAction; -} - - -QStringList CategoryModel::mimeTypes() const -{ - QStringList list( QAbstractItemModel::mimeTypes() ); - - //TODO implement Drag & Drop - - return list; -} - - -QMimeData* CategoryModel::mimeData(const QModelIndexList &indexes) const -{ - QMimeData *mimeData = QAbstractItemModel::mimeData( indexes ); - - //TODO implement Drag & Drop - - return mimeData; -} - - -bool CategoryModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) -{ - //TODO implement Drag & Drop - return QAbstractItemModel::dropMimeData( data, action, row, column, parent ); -} - - -QModelIndex CategoryModel::index(int row, int column, const QModelIndex &parent) const -{ - if( !m_account ) { - return QModelIndex(); - } - - if( !hasIndex( row, column, parent ) ) { - return QModelIndex(); - } - - Category *parentCategory; - - if( !parent.isValid() ) { - parentCategory = m_account->rootCategory(); - } - else { - parentCategory = static_cast( parent.internalPointer() ); - } - - - if( row >= 0 && row < parentCategory->countCategories() ) { - Category *childCategory = parentCategory->category( row ); - Q_ASSERT( childCategory ); - - return createIndex( row, column, childCategory ); - } - else { - return QModelIndex(); - } -} - - -QModelIndex CategoryModel::parent(const QModelIndex &index) const -{ - if( !m_account ) { - return QModelIndex(); - } - - if( !index.isValid() ) { - return QModelIndex(); - } - - Category *childCategory = static_cast( index.internalPointer() ); - Category *parentCategory = m_account->findCategoryParent( childCategory ); - - if( parentCategory == m_account->rootCategory() ) { - return QModelIndex(); - } - - Category *grandparents = m_account->findCategoryParent( parentCategory ); - Q_ASSERT( grandparents ); - - int row = 0; - for(int i = 0; i < grandparents->countCategories(); ++i) { - if( grandparents->category( i ) == parentCategory ) { - row = i; - break; - } - } - - return createIndex( row, 0, parentCategory ); -} - - -QModelIndex CategoryModel::findCategoryIndex(const QModelIndex &parent, const Category *category) const -{ - if( !parent.isValid() ) { - return QModelIndex(); - } - - if( static_cast( parent.internalPointer() ) == category ) { - return parent; - } - - for(int i = 0; i < rowCount( parent ); ++i) { - QModelIndex idx = findCategoryIndex( parent.child( i, parent.column() ), category ); - if( idx.isValid() ) { - return idx; - } - } - - return QModelIndex(); -} - - -// kate: word-wrap off; encoding utf-8; indent-width 4; tab-width 4; line-numbers on; mixed-indent off; remove-trailing-space-save on; replace-tabs-save on; replace-tabs on; space-indent on; -// vim:set spell et sw=4 ts=4 nowrap cino=l1,cs,U1: diff --git a/gui/categorymodel.h b/gui/categorymodel.h deleted file mode 100644 index d1b82b0..0000000 --- a/gui/categorymodel.h +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright 2011 by Stefan Böhmann - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#ifndef CATEGORYMODEL_H -#define CATEGORYMODEL_H - -#include - -class Account; -class Category; - - -/** - * @class CategoryModel - * @brief - * - * @author Stefan Böhmann - */ -class CategoryModel : public QAbstractItemModel -{ - Q_OBJECT - - public: - enum Column - { - CATEGORY_NAME = 0, - CATEGORY_COLOR, - CATEGORY_USAGE, - ENTRYCOUNT - }; - - explicit CategoryModel(QObject *parent = 0); - explicit CategoryModel(Account *account, QObject *parent = 0); - - Account* account(); - const Account* account() const; - void setAccount(Account *account); - - const Category* category(const QModelIndex &index) const; - Category* category(const QModelIndex &index); - - QModelIndex categoryIndex(const Category *category) const; - - int rowCount(const QModelIndex &parent = QModelIndex()) const; - int columnCount(const QModelIndex &parent = QModelIndex()) const; - - QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; - - QVariant data(const QModelIndex &index, int role) const; - bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); - - bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()); - bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()); - - Qt::ItemFlags flags(const QModelIndex &index) const; - Qt::DropActions supportedDropActions() const; - - QStringList mimeTypes() const; - QMimeData* mimeData(const QModelIndexList &indexes) const; - bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); - - QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; - QModelIndex parent(const QModelIndex &index) const; - - private: - QModelIndex findCategoryIndex(const QModelIndex &parent, const Category *category) const; - - private: - Account *m_account; -}; - - -#endif - -// kate: word-wrap off; encoding utf-8; indent-width 4; tab-width 4; line-numbers on; mixed-indent off; remove-trailing-space-save on; replace-tabs-save on; replace-tabs on; space-indent on; -// vim:set spell et sw=4 ts=4 nowrap cino=l1,cs,U1: