Make orientation switch explicit on Symbian, too.
[dorian] / bookmarksdialog.cpp
1 #include <QtGui>
2
3 #include "bookmarksdialog.h"
4 #include "book.h"
5 #include "bookmarkinfodialog.h"
6 #include "trace.h"
7
8 BookmarksDialog::BookmarksDialog(Book *book_, QWidget *parent):
9     ListWindow(tr("(No bookmarks)\n"), parent), book(book_)
10 {
11     setWindowTitle(tr("Bookmarks"));
12     if (!book) {
13         return;
14     }
15
16     // Build and set bookmark model
17     foreach (Book::Bookmark bookmark, book_->bookmarks()) {
18         data.append(bookmarkToText(bookmark));
19     }
20     QStringListModel *model = new QStringListModel(data, this);
21     setModel(model);
22
23     addButton(tr("Add bookmark"), this, SLOT(onAdd()), "add");
24     addItemButton(tr("Go to bookmark"), this, SLOT(onGo()), "goto");
25     addItemButton(tr("Edit bookmark"), this, SLOT(onEdit()), "edit");
26     addItemButton(tr("Delete bookmark"), this, SLOT(onDelete()), "delete");
27
28     connect(this, SIGNAL(activated(const QModelIndex &)),
29             this, SLOT(onItemActivated(const QModelIndex &)));
30 }
31
32 void BookmarksDialog::onGo()
33 {
34     TRACE;
35     QModelIndex current = currentItem();
36     if (current.isValid()) {
37         emit goToBookmark(current.row());
38         close();
39     }
40 }
41
42 void BookmarksDialog::onItemActivated(const QModelIndex &index)
43 {
44     TRACE;
45 #ifdef Q_WS_MAEMO_5
46     switch ((new BookmarkInfoDialog(book, index.row(), this))->exec()) {
47     case BookmarkInfoDialog::GoTo:
48         onGo();
49         break;
50     case BookmarkInfoDialog::Delete:
51         reallyDelete();
52         break;
53     default:
54         ;
55     }
56 #else
57     Q_UNUSED(index);
58 #endif
59 }
60
61 void BookmarksDialog::onAdd()
62 {
63     TRACE;
64     bool ok;
65     QString text = QInputDialog::getText(this, tr("Add bookmark"),
66         tr("Note (optional):"), QLineEdit::Normal, QString(), &ok);
67     if (ok) {
68         emit addBookmark(text);
69         close();
70     }
71 }
72
73 void BookmarksDialog::onDelete()
74 {
75     TRACE;
76     if (!currentItem().isValid()) {
77         return;
78     }
79     if (QMessageBox::Yes !=
80         QMessageBox::question(this, tr("Delete bookmark"),
81             tr("Delete bookmark?"), QMessageBox::Yes | QMessageBox::No)) {
82         return;
83     }
84     reallyDelete();
85 }
86
87 void BookmarksDialog::reallyDelete()
88 {
89     TRACE;
90     QModelIndex current = currentItem();
91     if (!current.isValid()) {
92         return;
93     }
94     int row = current.row();
95     model()->removeRow(row);
96     book->deleteBookmark(row);
97 }
98
99 void BookmarksDialog::onEdit()
100 {
101     TRACE;
102     QModelIndex current = currentItem();
103     if (!current.isValid()) {
104         return;
105     }
106     int row = current.row();
107     Book::Bookmark b = book->bookmarks()[row];
108     bool ok;
109     QString text = QInputDialog::getText(this, tr("Edit bookmark"),
110         tr("Note:"), QLineEdit::Normal, b.note, &ok);
111     if (!ok) {
112         return;
113     }
114     b.note = text;
115     book->setBookmarkNote(row, text);
116     QStringListModel *m = qobject_cast<QStringListModel *>(model());
117     if (m) {
118         m->setData(current, bookmarkToText(b), Qt::DisplayRole);
119     }
120 }
121
122 QString BookmarksDialog::bookmarkToText(const Book::Bookmark &bookmark)
123 {
124     // FIXME: Localize me
125     QString label("At ");
126     label += QString::number((int)(100 * book->
127         getProgress(bookmark.part, bookmark.pos))) + "%";
128     if (!bookmark.note.isEmpty()) {
129         label += ": " + bookmark.note;
130     }
131     label += "\n";
132     int chapterIndex = book->chapterFromPart(bookmark.part);
133     if (chapterIndex != -1) {
134         QString chapterId = book->chapters[chapterIndex];
135         label += "In \"" + book->content[chapterId].name + "\"";
136     }
137     return label;
138 }