LeechCraft Monocle  %{LEECHCRAFT_VERSION}
Modular document viewer for LeechCraft
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator
idocument.h
Go to the documentation of this file.
1 /**********************************************************************
2  * LeechCraft - modular cross-platform feature rich internet client.
3  * Copyright (C) 2006-2014 Georg Rudoy
4  *
5  * Boost Software License - Version 1.0 - August 17th, 2003
6  *
7  * Permission is hereby granted, free of charge, to any person or organization
8  * obtaining a copy of the software and accompanying documentation covered by
9  * this license (the "Software") to use, reproduce, display, distribute,
10  * execute, and transmit the Software, and to prepare derivative works of the
11  * Software, and to permit third-parties to whom the Software is furnished to
12  * do so, all subject to the following:
13  *
14  * The copyright notices in the Software and this entire statement, including
15  * the above license grant, this restriction and the following disclaimer,
16  * must be included in all copies of the Software, in whole or in part, and
17  * all derivative works of the Software, unless such copies or derivative
18  * works are solely in the form of machine-executable object code generated by
19  * a source language processor.
20  *
21  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23  * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
24  * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
25  * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
26  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
27  * DEALINGS IN THE SOFTWARE.
28  **********************************************************************/
29 
30 #pragma once
31 
32 #include <memory>
33 #include <QImage>
34 #include <QMetaType>
35 #include <QStringList>
36 #include <QDateTime>
37 #include "ilink.h"
38 
39 class QUrl;
40 
41 namespace LeechCraft
42 {
43 namespace Monocle
44 {
49  struct DocumentInfo
50  {
53  QString Title_;
56  QString Subject_;
59  QString Description_;
62  QString Author_;
63 
66  QStringList Genres_;
69  QStringList Keywords_;
70 
73  QDateTime Date_;
74  };
75 
98  class IDocument
99  {
100  public:
103  virtual ~IDocument () {}
104 
114  virtual QObject* GetBackendPlugin () const = 0;
115 
123  virtual QObject* GetQObject () = 0;
124 
132  virtual bool IsValid () const = 0;
133 
138  virtual DocumentInfo GetDocumentInfo () const = 0;
139 
144  virtual int GetNumPages () const = 0;
145 
158  virtual QSize GetPageSize (int page) const = 0;
159 
176  virtual QImage RenderPage (int page, double xScale, double yScale) = 0;
177 
190  virtual QList<ILink_ptr> GetPageLinks (int page) = 0;
191 
200  virtual QUrl GetDocURL () const = 0;
201  protected:
221  virtual void navigateRequested (const QString& filename, int pageNum, double x, double y) = 0;
222 
231  virtual void printRequested (const QList<int>& pages) = 0;
232  };
233 
236  typedef std::shared_ptr<IDocument> IDocument_ptr;
237 }
238 }
239 
240 Q_DECLARE_INTERFACE (LeechCraft::Monocle::IDocument,
241  "org.LeechCraft.Monocle.IDocument/1.0");
Q_DECLARE_INTERFACE(LeechCraft::Monocle::IAnnotation,"org.LeechCraft.Monocle.IAnnotation/1.0")