From a5bf0345750b373e6fb53dff5ae88b5153cadc55 Mon Sep 17 00:00:00 2001 From: Tobias Doerffel Date: Fri, 21 Aug 2009 18:30:34 +0200 Subject: [PATCH] RecentResourceListModel: new model providing resources sorted by date RecentResourceListModel is a new proxy model which provides a list of resources sorted by date (based on a ResourceListModel as source model). --- include/RecentResourceListModel.h | 65 ++++++++++++++++++++++++++++ src/core/RecentResourceListModel.cpp | 52 ++++++++++++++++++++++ 2 files changed, 117 insertions(+) create mode 100644 include/RecentResourceListModel.h create mode 100644 src/core/RecentResourceListModel.cpp diff --git a/include/RecentResourceListModel.h b/include/RecentResourceListModel.h new file mode 100644 index 000000000..1d886c916 --- /dev/null +++ b/include/RecentResourceListModel.h @@ -0,0 +1,65 @@ +/* + * RecentResourceListModel.h - a model providing list of recent resources + * + * Copyright (c) 2009 Tobias Doerffel + * + * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net + * + * 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 (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + +#ifndef _RECENT_RESOURCE_LIST_MODEL_H +#define _RECENT_RESOURCE_LIST_MODEL_H + +#include + +#include "ResourceListModel.h" + + +class RecentResourceListModel : public QSortFilterProxyModel +{ +public: + RecentResourceListModel( ResourceDB * _db, int _numRows = -1, + QObject * _parent = NULL ); + virtual ~RecentResourceListModel() + { + } + + virtual int rowCount( const QModelIndex & = QModelIndex() ) const + { + return m_numRows > 0 ? m_numRows : m_model->rowCount(); + } + + // return ResourceListModel, this proxy-model is operating on + ResourceListModel * resourceListModel() + { + return m_model; + } + + +protected: + // compares items at two indices by date-property + virtual bool lessThan( const QModelIndex &, const QModelIndex & ) const; + + +private: + ResourceListModel * m_model; + int m_numRows; + +} ; + +#endif diff --git a/src/core/RecentResourceListModel.cpp b/src/core/RecentResourceListModel.cpp new file mode 100644 index 000000000..c87095361 --- /dev/null +++ b/src/core/RecentResourceListModel.cpp @@ -0,0 +1,52 @@ +/* + * RecentResourceListModel.cpp - implementation of RecentResourceListModel + * + * Copyright (c) 2009 Tobias Doerffel + * + * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net + * + * 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 (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + +#include "RecentResourceListModel.h" + + +RecentResourceListModel::RecentResourceListModel( ResourceDB * _db, + int _numRows, + QObject * _parent ) : + QSortFilterProxyModel( _parent ), + m_model( new ResourceListModel( _db, _parent ) ), + m_numRows( _numRows ) +{ + setSourceModel( m_model ); + setDynamicSortFilter( true ); + sort( 0, Qt::DescendingOrder ); +} + + + +bool RecentResourceListModel::lessThan ( const QModelIndex & _left, + const QModelIndex & _right ) const +{ + return m_model->item( _left )->lastMod() < m_model->item( _right )->lastMod(); +} + + + +#include "moc_RecentResourceListModel.cxx" + +/* vim: set tw=0 noexpandtab: */