Import of original sources
[qcomicbook-oblomov] / src / thumbnailsview.cpp
1 /*
2  * This file is a part of QComicBook.
3  *
4  * Copyright (C) 2005-2006 Pawel Stolowski <yogin@linux.bydg.org>
5  *
6  * QComicBook is free software; you can redestribute it and/or modify it
7  * under terms of GNU General Public License by Free Software Foundation.
8  *
9  * This program is distributed in the hope that it will be useful, but
10  * WITHOUT ANY WARRANTY. See GPL for more details.
11  */
12
13 #include "thumbnailsview.h"
14 #include "iconviewthumbnail.h"
15 #include "thumbnail.h"
16 #include <qiconview.h>
17 #include <qpixmap.h>
18 #include <qstring.h>
19 #include <qpainter.h>
20 #include <qptrvector.h>
21 #include <qpopupmenu.h>
22
23 using namespace QComicBook;
24
25 ThumbnailsView::ThumbnailsView(QWidget *parent): QIconView(parent), selected(NULL), numpages(0)
26 {
27         setFocusPolicy(QWidget::NoFocus);
28         setItemsMovable(false);
29         arrangeItemsInGrid(true);
30         setAutoArrange(true);
31         setResizeMode(QIconView::Adjust);
32         setMaxItemWidth(Thumbnail::maxWidth());
33
34         //
35         // context menu
36         menu = new QPopupMenu(this);
37         menu->insertItem(tr("Go to"), this, SLOT(goToPageAction()));
38         
39         //
40         // create "empty page" image
41         emptypage = new QPixmap(Thumbnail::maxWidth(), Thumbnail::maxHeight());
42         emptypage->fill(Qt::white);
43         QPainter paint(emptypage);
44         QPen pen(Qt::black, 3);
45         paint.setPen(pen);
46         paint.drawRect(0, 0, Thumbnail::maxWidth(), Thumbnail::maxHeight());
47
48         connect(this, SIGNAL(doubleClicked(QIconViewItem *)), this, SLOT(onDoubleClick(QIconViewItem *)));
49         connect(this, SIGNAL(contextMenuRequested(QIconViewItem *, const QPoint&)), this, SLOT(showContextMenu(QIconViewItem *, const QPoint&)));
50 }
51
52 ThumbnailsView::~ThumbnailsView()
53 {
54         delete emptypage;
55 }
56
57 void ThumbnailsView::onDoubleClick(QIconViewItem *item)
58 {
59         emit requestedPage(dynamic_cast<ThumbnailItem *>(item)->page(), false);
60 }
61
62 void ThumbnailsView::setPages(int pages)
63 {
64         clear();
65
66         icons.resize(numpages = pages); 
67         for (int i=0; i<numpages; i++)
68                 icons.insert(i, new IconViewThumbnail(this, i, *emptypage));
69
70         //setArrangement(visibleWidth() > visibleHeight() ? QIconView::LeftToRight : QIconView::TopToBottom);
71 }
72
73 void ThumbnailsView::setPage(int n, const QImage &img)
74 {
75         if (n < icons.count())
76         {
77                 IconViewThumbnail *th = icons[n];
78                 th->setPixmap(img);
79                 th->setLoaded(true);
80         }
81 }
82
83 void ThumbnailsView::setPage(const Thumbnail &t)
84 {
85         setPage(t.page(), t.image());
86 }
87
88 void ThumbnailsView::clear()
89 {
90         QIconView::clear();
91         icons.clear();
92         numpages = 0;
93         selected = NULL;
94 }
95
96 void ThumbnailsView::scrollToPage(int n)
97 {
98         if (n < icons.count())
99         {
100                 IconViewThumbnail *th = icons[n];
101                 setSelected(th, true);
102                 if (isVisible())
103                         ensureVisible(th->x(), th->y());
104         }
105 }
106
107 void ThumbnailsView::showContextMenu(QIconViewItem *item, const QPoint &p)
108 {
109         if (item)
110         {
111                 selected = item;
112                 menu->popup(p);
113         }
114 }
115
116 void ThumbnailsView::goToPageAction()
117 {
118         if (selected)
119                 onDoubleClick(selected);
120 }
121
122 bool ThumbnailsView::isLoaded(int n) const
123 {
124         return (n < icons.count()) ? icons[n]->isLoaded() : false;
125 }
126