• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdegraphics API Reference
  • KDE Home
  • Contact Us
 

okular

  • sources
  • kde-4.14
  • kdegraphics
  • okular
  • active
  • components
documentitem.cpp
Go to the documentation of this file.
1 /*
2  * Copyright 2012 by Marco Martin <mart@kde.org>
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as
6  * published by the Free Software Foundation; either version 2,
7  * or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details
13  *
14  * You should have received a copy of the GNU General Public
15  * License along with this program; if not, write to the
16  * Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18  */
19 
20 #include "documentitem.h"
21 
22 #include <QtDeclarative/qdeclarative.h>
23 
24 #include <core/document_p.h>
25 #include <core/page.h>
26 #include <core/bookmarkmanager.h>
27 
28 #include "ui/tocmodel.h"
29 
30 DocumentItem::DocumentItem(QObject *parent)
31  : QObject(parent),
32  m_thumbnailObserver(0),
33  m_pageviewObserver(0),
34  m_searchInProgress(false)
35 {
36  qmlRegisterUncreatableType<TOCModel>("org.kde.okular", 1, 0, "TOCModel", QLatin1String("Do not create objects of this type."));
37  Okular::Settings::instance("okularproviderrc");
38  m_document = new Okular::Document(0);
39  m_tocModel = new TOCModel(m_document, this);
40 
41  connect(m_document, SIGNAL(searchFinished(int,Okular::Document::SearchStatus)),
42  this, SLOT(searchFinished(int,Okular::Document::SearchStatus)));
43  connect(m_document->bookmarkManager(), SIGNAL(bookmarksChanged(KUrl)),
44  this, SIGNAL(bookmarkedPagesChanged()));
45  connect(m_document->bookmarkManager(), SIGNAL(bookmarksChanged(KUrl)),
46  this, SIGNAL(bookmarksChanged()));
47 }
48 
49 
50 DocumentItem::~DocumentItem()
51 {
52  delete m_document;
53 }
54 
55 void DocumentItem::setPath(const QString &path)
56 {
57  //TODO: remote urls
58  //TODO: password
59  m_document->openDocument(path, KUrl(path), KMimeType::findByUrl(KUrl(path)));
60 
61  m_tocModel->fill(m_document->documentSynopsis());
62  m_tocModel->setCurrentViewport(m_document->viewport());
63 
64  m_matchingPages.clear();
65  for (uint i = 0; i < m_document->pages(); ++i) {
66  m_matchingPages << (int)i;
67  }
68  emit matchingPagesChanged();
69  emit pathChanged();
70  emit pageCountChanged();
71  emit openedChanged();
72  emit supportsSearchingChanged();
73  emit windowTitleForDocumentChanged();
74 }
75 
76 QString DocumentItem::windowTitleForDocument() const
77 {
78  // If 'DocumentTitle' should be used, check if the document has one. If
79  // either case is false, use the file name.
80  QString title = Okular::Settings::displayDocumentNameOrPath() == Okular::Settings::EnumDisplayDocumentNameOrPath::Path ? m_document->currentDocument().pathOrUrl() : m_document->currentDocument().fileName();
81 
82  if (Okular::Settings::displayDocumentTitle()) {
83  const QString docTitle = m_document->metaData( "DocumentTitle" ).toString();
84 
85  if (!docTitle.isEmpty() && !docTitle.trimmed().isEmpty()) {
86  title = docTitle;
87  }
88  }
89 
90  return title;
91 }
92 
93 QString DocumentItem::path() const
94 {
95  return m_document->currentDocument().prettyUrl();
96 }
97 
98 void DocumentItem::setCurrentPage(int page)
99 {
100  m_document->setViewportPage(page);
101  m_tocModel->setCurrentViewport(m_document->viewport());
102  emit currentPageChanged();
103 }
104 
105 int DocumentItem::currentPage() const
106 {
107  return m_document->currentPage();
108 }
109 
110 bool DocumentItem::isOpened() const
111 {
112  return m_document->isOpened();
113 }
114 
115 int DocumentItem::pageCount() const
116 {
117  return m_document->pages();
118 }
119 
120 QList<int> DocumentItem::matchingPages() const
121 {
122  return m_matchingPages;
123 }
124 
125 TOCModel *DocumentItem::tableOfContents() const
126 {
127  return m_tocModel;
128 }
129 
130 QList<int> DocumentItem::bookmarkedPages() const
131 {
132  QList<int> list;
133  QSet<int> pages;
134  foreach (const KBookmark &bookmark, m_document->bookmarkManager()->bookmarks()) {
135  Okular::DocumentViewport viewport(bookmark.url().htmlRef());
136  pages << viewport.pageNumber;
137  }
138  list = pages.toList();
139  qSort(list);
140  return list;
141 }
142 
143 QStringList DocumentItem::bookmarks() const
144 {
145  QStringList list;
146  foreach(const KBookmark &bookmark, m_document->bookmarkManager()->bookmarks()) {
147  list << bookmark.url().prettyUrl();
148  }
149  return list;
150 }
151 
152 bool DocumentItem::supportsSearching() const
153 {
154  return m_document->supportsSearching();
155 }
156 
157 bool DocumentItem::isSearchInProgress() const
158 {
159  return m_searchInProgress;
160 }
161 
162 void DocumentItem::searchText(const QString &text)
163 {
164  if (text.isEmpty()) {
165  resetSearch();
166  return;
167  }
168  m_document->cancelSearch();
169  m_document->resetSearch(PAGEVIEW_SEARCH_ID);
170  m_document->searchText(PAGEVIEW_SEARCH_ID, text, 1, Qt::CaseInsensitive,
171  Okular::Document::AllDocument, true, QColor(100,100,200,40));
172 
173  if (!m_searchInProgress) {
174  m_searchInProgress = true;
175  emit searchInProgressChanged();
176  }
177 }
178 
179 void DocumentItem::resetSearch()
180 {
181  m_document->resetSearch(PAGEVIEW_SEARCH_ID);
182  m_matchingPages.clear();
183  for (uint i = 0; i < m_document->pages(); ++i) {
184  m_matchingPages << (int)i;
185  }
186  if (m_searchInProgress) {
187  m_searchInProgress = false;
188  emit searchInProgressChanged();
189  }
190 
191  emit matchingPagesChanged();
192 }
193 
194 Okular::Document *DocumentItem::document()
195 {
196  return m_document;
197 }
198 
199 Observer *DocumentItem::thumbnailObserver()
200 {
201  if (!m_thumbnailObserver)
202  m_thumbnailObserver = new Observer(this);
203 
204  return m_thumbnailObserver;
205 }
206 
207 Observer *DocumentItem::pageviewObserver()
208 {
209  if (!m_pageviewObserver) {
210  m_pageviewObserver = new Observer(this);
211  }
212 
213  return m_pageviewObserver;
214 }
215 
216 void DocumentItem::searchFinished(int id, Okular::Document::SearchStatus endStatus)
217 {
218  Q_UNUSED(endStatus)
219 
220  if (id != PAGEVIEW_SEARCH_ID) {
221  return;
222  }
223 
224  m_matchingPages.clear();
225  for (uint i = 0; i < m_document->pages(); ++i) {
226  if (m_document->page(i)->hasHighlights(id)) {
227  m_matchingPages << (int)i;
228  }
229  }
230 
231  if (m_searchInProgress) {
232  m_searchInProgress = false;
233  emit searchInProgressChanged();
234  }
235  emit matchingPagesChanged();
236 }
237 
238 
239 //Observer
240 
241 Observer::Observer(DocumentItem *parent)
242  : QObject(parent),
243  m_document(parent)
244 {
245  parent->document()->addObserver(this);
246 }
247 
248 Observer::~Observer()
249 {
250 }
251 
252 void Observer::notifyPageChanged(int page, int flags)
253 {
254  emit pageChanged(page, flags);
255 }
256 
257 #include "documentitem.moc"
QList::clear
void clear()
Observer::pageChanged
void pageChanged(int page, int flags)
DocumentItem::pageCountChanged
void pageCountChanged()
DocumentItem::pageviewObserver
Observer * pageviewObserver()
Definition: documentitem.cpp:207
Observer::notifyPageChanged
void notifyPageChanged(int page, int flags)
This method is called whenever the content on page described by the passed flags has been changed...
Definition: documentitem.cpp:252
bookmarkmanager.h
DocumentItem::windowTitleForDocument
QString windowTitleForDocument() const
DocumentItem::path
QString path() const
Okular::Document::bookmarkManager
BookmarkManager * bookmarkManager() const
Returns the bookmark manager of the document.
Definition: document.cpp:3511
Okular::Document::pages
uint pages() const
Returns the number of pages of the document.
Definition: document.cpp:2700
Okular::Document::currentDocument
KUrl currentDocument() const
Returns the url of the currently opened document.
Definition: document.cpp:2705
Okular::Document::AllDocument
Search complete document.
Definition: document.h:480
DocumentItem::tableOfContents
TOCModel * tableOfContents() const
DocumentItem::thumbnailObserver
Observer * thumbnailObserver()
Definition: documentitem.cpp:199
DocumentItem::bookmarksChanged
void bookmarksChanged()
documentitem.h
DocumentItem
Definition: documentitem.h:37
page.h
DocumentItem::supportsSearching
bool supportsSearching() const
Okular::Document::isOpened
bool isOpened() const
Returns whether the document is currently opened.
Definition: document.cpp:2561
DocumentItem::pageCount
int pageCount() const
Observer::Observer
Observer(DocumentItem *parent)
Definition: documentitem.cpp:241
DocumentItem::bookmarkedPagesChanged
void bookmarkedPagesChanged()
PAGEVIEW_SEARCH_ID
#define PAGEVIEW_SEARCH_ID
Definition: document.h:62
Okular::Document::page
const Page * page(int number) const
Returns the page object for the given page number or 0 if the number is out of range.
Definition: document.cpp:2667
DocumentItem::isSearchInProgress
bool isSearchInProgress() const
Definition: documentitem.cpp:157
DocumentItem::setCurrentPage
void setCurrentPage(int page)
Definition: documentitem.cpp:98
DocumentItem::~DocumentItem
~DocumentItem()
Definition: documentitem.cpp:50
DocumentItem::currentPage
int currentPage() const
Okular::Document::SearchStatus
SearchStatus
Describes how search ended.
Definition: document.h:488
DocumentItem::pathChanged
void pathChanged()
QObject
QString::isEmpty
bool isEmpty() const
QString::trimmed
QString trimmed() const
Okular::Document
The Document.
Definition: document.h:84
DocumentItem::DocumentItem
DocumentItem(QObject *parent=0)
Definition: documentitem.cpp:30
DocumentItem::openedChanged
void openedChanged()
QSet< int >
DocumentItem::resetSearch
Q_INVOKABLE void resetSearch()
Reset the search over the document.
Definition: documentitem.cpp:179
QString
QList< int >
DocumentItem::bookmarkedPages
QList< int > bookmarkedPages() const
QColor
DocumentItem::matchingPagesChanged
void matchingPagesChanged()
DocumentItem::document
Okular::Document * document()
Definition: documentitem.cpp:194
QStringList
Observer
Definition: documentitem.h:167
Okular::Document::documentSynopsis
const DocumentSynopsis * documentSynopsis() const
Returns the table of content of the document or 0 if no table of content is available.
Definition: document.cpp:2615
DocumentItem::matchingPages
QList< int > matchingPages() const
Okular::Document::viewport
const DocumentViewport & viewport() const
Returns the current viewport of the document.
Definition: document.cpp:2672
DocumentItem::searchText
Q_INVOKABLE void searchText(const QString &text)
Performs a search in the document.
Definition: documentitem.cpp:162
Okular::Document::metaData
QVariant metaData(const QString &key, const QVariant &option=QVariant()) const
Returns the meta data for the given key and option or an empty variant if the key doesn't exists...
Definition: document.cpp:2794
Observer::~Observer
~Observer()
Definition: documentitem.cpp:248
Okular::BookmarkManager::bookmarks
KBookmark::List bookmarks(const KUrl &url) const
Returns the list of bookmarks for the specified url.
Definition: bookmarkmanager.cpp:248
Okular::Document::openDocument
OpenResult openDocument(const QString &docFile, const KUrl &url, const KMimeType::Ptr &mime, const QString &password=QString())
Opens the document.
Definition: document.cpp:2128
Okular::Document::cancelSearch
void cancelSearch()
Cancels the current search.
Definition: document.cpp:3448
DocumentItem::isOpened
bool isOpened() const
Definition: documentitem.cpp:110
DocumentItem::windowTitleForDocumentChanged
void windowTitleForDocumentChanged()
document_p.h
QLatin1String
Okular::Page::hasHighlights
bool hasHighlights(int id=-1) const
Returns whether the page provides highlighting for the observer with the given id.
Definition: page.cpp:262
Okular::Document::searchText
void searchText(int searchID, const QString &text, bool fromStart, Qt::CaseSensitivity caseSensitivity, SearchType type, bool moveViewport, const QColor &color)
Searches the given text in the document.
Definition: document.cpp:3285
DocumentItem::bookmarks
QStringList bookmarks() const
QSet::toList
QList< T > toList() const
Okular::DocumentViewport
A view on the document.
Definition: document.h:1016
Okular::Document::addObserver
void addObserver(DocumentObserver *observer)
Registers a new observer for the document.
Definition: document.cpp:2484
Okular::Document::supportsSearching
bool supportsSearching() const
Returns whether the document supports searching.
Definition: document.cpp:2723
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
DocumentItem::setPath
void setPath(const QString &path)
Definition: documentitem.cpp:55
DocumentItem::supportsSearchingChanged
void supportsSearchingChanged()
QVariant::toString
QString toString() const
Okular::Document::resetSearch
void resetSearch(int searchID)
Resets the search for the given searchID.
Definition: document.cpp:3419
Okular::Document::setViewportPage
void setViewportPage(int page, DocumentObserver *excludeObserver=0, bool smoothMove=false)
Sets the current document viewport to the given page.
Definition: document.cpp:3164
DocumentItem::currentPageChanged
void currentPageChanged()
DocumentItem::searchInProgressChanged
void searchInProgressChanged()
Okular::Document::currentPage
uint currentPage() const
Returns the number of the current page.
Definition: document.cpp:2695
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:19:25 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

okular

Skip menu "okular"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdegraphics API Reference

Skip menu "kdegraphics API Reference"
  •     libkdcraw
  •     libkexiv2
  •     libkipi
  •     libksane
  • okular

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal