Facelift bookmarks dialog. Add Maemo-friendly dialog box class.
[dorian] / bookmarksdialog.cpp
1 #include <QtGui>
2
3 #include "bookmarksdialog.h"
4 #include "book.h"
5 #include "bookmarkinfodialog.h"
6
7 BookmarksDialog::BookmarksDialog(Book *book_, QWidget *parent):
8     QMainWindow(parent), book(book_)
9 {
10 #ifdef Q_WS_MAEMO_5
11     setAttribute(Qt::WA_Maemo5StackedWindow, true);
12 #endif
13     setWindowTitle(tr("Bookmarks"));
14
15     QFrame *frame = new QFrame(this);
16     setCentralWidget(frame);
17     QHBoxLayout *horizontalLayout = new QHBoxLayout(this);
18     frame->setLayout(horizontalLayout);
19
20     list = new QListWidget(this);
21     list->setSelectionMode(QAbstractItemView::SingleSelection);
22     foreach (Book::Bookmark bookmark, book_->bookmarks()) {
23         QString contentId = book_->toc[bookmark.chapter];
24         QString contentTitle = book_->content[contentId].name;
25         (void)new QListWidgetItem(QIcon(":icons/bookmark.png"), contentTitle +
26             "\nAt " + QString::number((int)(bookmark.pos*100)) + "%", list);
27     }
28
29     horizontalLayout->addWidget(list);
30
31 #ifndef Q_WS_MAEMO_5
32     QDialogButtonBox *buttonBox = new QDialogButtonBox(Qt::Vertical);
33
34     QPushButton *goButton = new QPushButton(tr("Go"), this);
35     buttonBox->addButton(goButton, QDialogButtonBox::ActionRole);
36     connect(goButton, SIGNAL(clicked()), this, SLOT(onGo()));
37
38     QPushButton *closeButton = new QPushButton(tr("Close"), this);
39     buttonBox->addButton(closeButton, QDialogButtonBox::AcceptRole);
40     connect(closeButton, SIGNAL(clicked()), this, SLOT(onClose()));
41
42     QPushButton *addButton = new QPushButton(tr("Add"), this);
43     buttonBox->addButton(addButton, QDialogButtonBox::ActionRole);
44     connect(addButton, SIGNAL(clicked()), this, SLOT(onAdd()));
45
46     QPushButton *deleteButton = new QPushButton(tr("Delete"), this);
47     buttonBox->addButton(deleteButton, QDialogButtonBox::DestructiveRole);
48     connect(deleteButton, SIGNAL(clicked()), this, SLOT(onDelete()));
49
50     horizontalLayout->addWidget(buttonBox);
51 #else
52     QAction *addBookmarkAction = menuBar()->addAction(tr("Add bookmark"));
53     connect(addBookmarkAction, SIGNAL(triggered()), this, SLOT(onAdd()));
54 #endif // Q_WS_MAEMO_5
55     connect(list, SIGNAL(itemActivated(QListWidgetItem *)),
56             this, SLOT(onItemActivated(QListWidgetItem *)));
57 }
58
59 void BookmarksDialog::onGo()
60 {
61     if (!list->selectedItems().isEmpty()) {
62         QListWidgetItem *item = list->selectedItems()[0];
63         emit goToBookmark(list->row(item));
64         close();
65     }
66 }
67
68 void BookmarksDialog::onItemActivated(QListWidgetItem *item)
69 {
70     switch ((new BookmarkInfoDialog(book, list->row(item), this))->exec()) {
71     case BookmarkInfoDialog::GoTo:
72         onGo();
73         break;
74     case BookmarkInfoDialog::Delete:
75         onDelete();
76         break;
77     default:
78         ;
79     }
80 }
81
82 void BookmarksDialog::onAdd()
83 {
84     emit addBookmark();
85     close();
86 }
87
88 void BookmarksDialog::onClose()
89 {
90     close();
91 }
92
93 void BookmarksDialog::onDelete()
94 {
95     if (!list->selectedItems().isEmpty()) {
96         QListWidgetItem *item = list->selectedItems()[0];
97         int row = list->row(item);
98         book->deleteBookmark(row);
99         delete item;
100     }
101 }
102
103 void BookmarksDialog::closeEvent(QCloseEvent *event)
104 {
105 #ifdef Q_WS_MAEMO_5
106     menuBar()->clear();
107 #endif
108     event->accept();
109 }