Make orientation switch explicit on Symbian, too.
[dorian] / model / sortedlibrary.cpp
1 #include "sortedlibrary.h"
2 #include "library.h"
3 #include "book.h"
4 #include "trace.h"
5
6 SortedLibrary::SortedLibrary(QObject *parent):
7         QSortFilterProxyModel(parent), mSortBy(SortByTitle)
8 {
9     setSourceModel(Library::instance());
10     setDynamicSortFilter(true);
11     sort(0);
12 }
13
14 void SortedLibrary::setSortBy(SortBy key)
15 {
16     TRACE;
17     if (mSortBy != key) {
18         mSortBy = key;
19         invalidate();
20         sort(0);
21     }
22 }
23
24 SortedLibrary::SortBy SortedLibrary::sortBy()
25 {
26     return mSortBy;
27 }
28
29 bool SortedLibrary::lessThan(const QModelIndex &left,
30                              const QModelIndex &right) const
31 {
32     Book *leftBook = Library::instance()->book(left);
33     Book *rightBook = Library::instance()->book(right);
34     int ret = 0;
35
36     switch (mSortBy) {
37     case SortByAuthor:
38         ret = compareBy(SortByAuthor, leftBook, rightBook);
39         if (ret == 0) {
40             ret = compareBy(SortByTitle, leftBook, rightBook);
41         }
42         break;
43     default:
44         ret = compareBy(SortByTitle, leftBook, rightBook);
45         if (ret == 0) {
46             ret = compareBy(SortByAuthor, leftBook, rightBook);
47         }
48     }
49
50     return ret < 0;
51 }
52
53 int SortedLibrary::compareBy(SortBy key, Book *left, Book *right) const
54 {
55     Q_ASSERT(left);
56     Q_ASSERT(right);
57     switch (key) {
58     case SortByAuthor:
59         return QString::localeAwareCompare(left->creators.join(" "),
60                                            right->creators.join(" "));
61     default:
62         return QString::localeAwareCompare(left->shortName(),
63                                            right->shortName());
64     }
65 }