Browse Source

New class: Fb2MainDocument

Kandrashin Denis 13 years ago
parent
commit
51f32c40ca
6 changed files with 78 additions and 35 deletions
  1. 20 0
      source/fb2doc.cpp
  2. 31 0
      source/fb2doc.h
  3. 4 2
      source/fb2edit.pro
  4. 3 16
      source/fb2main.cpp
  5. 5 4
      source/fb2main.h
  6. 15 13
      source/fb2read.h

+ 20 - 0
source/fb2doc.cpp

@@ -0,0 +1,20 @@
+#include "fb2doc.h"
+#include "fb2read.h"
+
+Fb2MainDocument * Fb2MainDocument::load(QIODevice &io)
+{
+    Fb2MainDocument * document = new Fb2MainDocument;
+
+    Fb2Handler handler(*document);
+    QXmlSimpleReader reader;
+    reader.setContentHandler(&handler);
+    reader.setErrorHandler(&handler);
+    QXmlInputSource source(&io);
+
+    if (reader.parse(source)) {
+        return document;
+    } else {
+        delete document;
+        return NULL;
+    }
+}

+ 31 - 0
source/fb2doc.h

@@ -0,0 +1,31 @@
+#ifndef FB2DOC_H
+#define FB2DOC_H
+
+#include <QTextDocument>
+#include <QVariant>
+
+class Fb2ChildDocument : public QTextDocument
+{
+    Q_OBJECT
+public:
+    explicit Fb2ChildDocument(QTextDocument &parent)
+        : QTextDocument(&parent), m_parent(parent) {}
+protected:
+    virtual QVariant loadResource(int type, const QUrl &name)
+        { return m_parent.resource(type, name); }
+private:
+    QTextDocument &m_parent;
+};
+
+class Fb2MainDocument : public QTextDocument
+{
+    Q_OBJECT
+public:
+    static Fb2MainDocument * load(QIODevice &io);
+    explicit Fb2MainDocument(QObject *parent = 0) : QTextDocument(parent), m_child(*this) {}
+    Fb2ChildDocument & child() { return m_child; }
+private:
+    Fb2ChildDocument m_child;
+};
+
+#endif // FB2DOC_H

+ 4 - 2
source/fb2edit.pro

@@ -1,11 +1,13 @@
 HEADERS = \
     fb2main.h \
-    fb2read.h
+    fb2read.h \
+    fb2doc.h
 
 SOURCES = \
     fb2app.cpp \
     fb2main.cpp \
-    fb2read.cpp
+    fb2read.cpp \
+    fb2doc.cpp
 
 RESOURCES = \
     fb2edit.qrc

+ 3 - 16
source/fb2main.cpp

@@ -2,7 +2,7 @@
 #include <QtDebug>
 
 #include "fb2main.h"
-#include "fb2read.h"
+#include "fb2doc.h"
 
 #include <Qsci/qsciscintilla.h>
 #include <Qsci/qscilexerxml.h>
@@ -42,7 +42,7 @@ bool MainWindow::loadXML(const QString &filename)
     return false;
 }
 
-QTextDocument * MainWindow::loadFB2(const QString &filename)
+Fb2MainDocument * MainWindow::loadFB2(const QString &filename)
 {
     if (filename.isEmpty()) return NULL;
 
@@ -52,20 +52,7 @@ QTextDocument * MainWindow::loadFB2(const QString &filename)
         return NULL;
     }
 
-    QTextDocument * document = new QTextDocument;
-
-    Fb2Handler handler(*document);
-    QXmlSimpleReader reader;
-    reader.setContentHandler(&handler);
-    reader.setErrorHandler(&handler);
-    QXmlInputSource source(&file);
-
-    if (reader.parse(source)) {
-        return document;
-    } else {
-        delete document;
-        return NULL;
-    }
+    return Fb2MainDocument::load(file);
 }
 
 void MainWindow::closeEvent(QCloseEvent *event)

+ 5 - 4
source/fb2main.h

@@ -12,15 +12,16 @@ class QTextDocument;
 QT_END_NAMESPACE
 
 class QsciScintilla;
+class Fb2MainDocument;
 
 class MainWindow : public QMainWindow
 {
     Q_OBJECT
 
 public:
-    MainWindow();
-    MainWindow(const QString &filename);
-    MainWindow(const QString &filename, QTextDocument * document);
+    explicit MainWindow();
+    explicit MainWindow(const QString &filename);
+    explicit MainWindow(const QString &filename, QTextDocument * document);
 
 protected:
     void closeEvent(QCloseEvent *event);
@@ -36,7 +37,7 @@ private slots:
     void viewText();
 
 private:
-    static QTextDocument * loadFB2(const QString &filename);
+    static Fb2MainDocument * loadFB2(const QString &filename);
     bool loadXML(const QString &filename);
 
 private:

+ 15 - 13
source/fb2read.h

@@ -1,6 +1,8 @@
 #ifndef FB2READ_H
 #define FB2READ_H
 
+#include "fb2doc.h"
+
 #include <QXmlDefaultHandler>
 #include <QTextCursor>
 #include <QStringList>
@@ -21,7 +23,7 @@ static Keyword toKeyword(const QString &name); private:
 class Fb2Handler : public QXmlDefaultHandler
 {
 public:
-    Fb2Handler(QTextDocument & document);
+    explicit Fb2Handler(QTextDocument & document);
     virtual ~Fb2Handler();
     bool startElement(const QString &namespaceURI, const QString &localName, const QString &qName, const QXmlAttributes &attributes);
     bool endElement(const QString &namespaceURI, const QString &localName, const QString &qName);
@@ -33,8 +35,8 @@ private:
     class ContentHandler
     {
     public:
-        ContentHandler(Fb2Handler &owner, const QString &name);
-        ContentHandler(ContentHandler &parent, const QString &name);
+        explicit ContentHandler(Fb2Handler &owner, const QString &name);
+        explicit ContentHandler(ContentHandler &parent, const QString &name);
         virtual ~ContentHandler();
         virtual bool doStart(const QString &name, const QXmlAttributes &attributes);
         virtual bool doText(const QString &text);
@@ -57,7 +59,7 @@ private:
             Binary,
         FB2_END_KEYLIST
     public:
-        RootHandler(Fb2Handler & owner, const QString &name);
+        explicit RootHandler(Fb2Handler & owner, const QString &name);
         virtual bool doStart(const QString & name, const QXmlAttributes &attributes);
     private:
     };
@@ -65,7 +67,7 @@ private:
     class DescrHandler : public ContentHandler
     {
     public:
-        DescrHandler(ContentHandler &parent, const QString &name) : ContentHandler(parent, name) {}
+        explicit DescrHandler(ContentHandler &parent, const QString &name) : ContentHandler(parent, name) {}
         virtual bool doStart(const QString &name, const QXmlAttributes &attributes);
         virtual bool doEnd(const QString &name, bool & exit);
     };
@@ -83,7 +85,7 @@ private:
             Verse,
        FB2_END_KEYLIST
     public:
-        BodyHandler(ContentHandler &parent, const QString &name);
+        explicit BodyHandler(ContentHandler &parent, const QString &name);
         virtual bool doStart(const QString &name, const QXmlAttributes &attributes);
     private:
         bool m_feed;
@@ -103,7 +105,7 @@ private:
             Image,
         FB2_END_KEYLIST
     public:
-        TextHandler(ContentHandler &parent, const QString &name, const QXmlAttributes &attributes);
+        explicit TextHandler(ContentHandler &parent, const QString &name, const QXmlAttributes &attributes);
         virtual bool doStart(const QString &name, const QXmlAttributes &attributes);
         virtual bool doText(const QString &text);
     };
@@ -111,7 +113,7 @@ private:
     class ImageHandler : public ContentHandler
     {
     public:
-        ImageHandler(ContentHandler &parent, const QString &name, const QXmlAttributes &attributes);
+        explicit ImageHandler(ContentHandler &parent, const QString &name, const QXmlAttributes &attributes);
         virtual bool doStart(const QString &name, const QXmlAttributes &attributes);
     };
 
@@ -131,7 +133,7 @@ private:
             Table,
         FB2_END_KEYLIST
     public:
-        SectionHandler(ContentHandler &parent, const QString &name, const QXmlAttributes &attributes);
+        explicit SectionHandler(ContentHandler &parent, const QString &name, const QXmlAttributes &attributes);
         virtual bool doStart(const QString &name, const QXmlAttributes &attributes);
         virtual bool doEnd(const QString &name, bool & exit);
     private:
@@ -146,7 +148,7 @@ private:
             Emptyline,
         FB2_END_KEYLIST
     public:
-        TitleHandler(ContentHandler &parent, const QString &name, const QXmlAttributes &attributes);
+        explicit TitleHandler(ContentHandler &parent, const QString &name, const QXmlAttributes &attributes);
         virtual bool doStart(const QString &name, const QXmlAttributes &attributes);
         virtual bool doEnd(const QString &name, bool & exit);
     private:
@@ -165,7 +167,7 @@ private:
             Date,
         FB2_END_KEYLIST
     public:
-        PoemHandler(ContentHandler &parent, const QString &name, const QXmlAttributes &attributes);
+        explicit PoemHandler(ContentHandler &parent, const QString &name, const QXmlAttributes &attributes);
         virtual bool doStart(const QString &name, const QXmlAttributes &attributes);
         virtual bool doEnd(const QString &name, bool & exit);
     private:
@@ -182,7 +184,7 @@ private:
             Verse,
         FB2_END_KEYLIST
     public:
-        StanzaHandler(ContentHandler &parent, const QString &name, const QXmlAttributes &attributes);
+        explicit StanzaHandler(ContentHandler &parent, const QString &name, const QXmlAttributes &attributes);
         virtual bool doStart(const QString &name, const QXmlAttributes &attributes);
     private:
         bool m_feed;
@@ -191,7 +193,7 @@ private:
     class BinaryHandler : public ContentHandler
     {
     public:
-        BinaryHandler(ContentHandler &parent, const QString &name, const QXmlAttributes &attributes);
+        explicit BinaryHandler(ContentHandler &parent, const QString &name, const QXmlAttributes &attributes);
         virtual bool doStart(const QString &name, const QXmlAttributes &attributes);
         virtual bool doText(const QString &text);
         virtual bool doEnd(const QString &name, bool & exit);