#include "sortedlibrary.h"
+#include "library.h"
#include "book.h"
#include "trace.h"
QSortFilterProxyModel(parent), mSortBy(SortByTitle)
{
setSourceModel(Library::instance());
+ setDynamicSortFilter(true);
sort(0);
}
-void SortedLibrary::sortBy(SortBy key)
+void SortedLibrary::setSortBy(SortBy key)
{
- mSortBy = key;
+ TRACE;
+ if (mSortBy != key) {
+ mSortBy = key;
+ invalidate();
+ sort(0);
+ }
+}
+
+SortedLibrary::SortBy SortedLibrary::sortBy()
+{
+ return mSortBy;
}
bool SortedLibrary::lessThan(const QModelIndex &left,
{
Book *leftBook = Library::instance()->book(left);
Book *rightBook = Library::instance()->book(right);
-
- QString leftString;
- QString rightString;
+ int ret = 0;
switch (mSortBy) {
- case SortByTitle:
- leftString = leftBook->shortName();
- rightString = rightBook->shortName();
+ case SortByAuthor:
+ ret = compareBy(SortByAuthor, leftBook, rightBook);
+ if (ret == 0) {
+ ret = compareBy(SortByTitle, leftBook, rightBook);
+ }
break;
default:
- leftString = leftBook->creators[0];
- rightString = rightBook->creators[0];
- break;
+ ret = compareBy(SortByTitle, leftBook, rightBook);
+ if (ret == 0) {
+ ret = compareBy(SortByAuthor, leftBook, rightBook);
+ }
}
- return QString::localeAwareCompare(leftString, rightString) < 0;
+ return ret < 0;
+}
+
+int SortedLibrary::compareBy(SortBy key, Book *left, Book *right) const
+{
+ Q_ASSERT(left);
+ Q_ASSERT(right);
+ switch (key) {
+ case SortByAuthor:
+ return QString::localeAwareCompare(left->creators.join(" "),
+ right->creators.join(" "));
+ default:
+ return QString::localeAwareCompare(left->shortName(), right->shortName());
+ }
}