Explorar el Código

Images: use class QNetworkAccessManager

Kandrashin Denis hace 13 años
padre
commit
666f431ece
Se han modificado 6 ficheros con 108 adiciones y 8 borrados
  1. 5 2
      source/fb2edit.pro
  2. 9 4
      source/fb2main.cpp
  3. 2 2
      source/fb2main.h
  4. 1 0
      source/fb2read.cpp
  5. 55 0
      source/fb2view.cpp
  6. 36 0
      source/fb2view.h

+ 5 - 2
source/fb2edit.pro

@@ -4,14 +4,16 @@ HEADERS = \
     fb2main.h \
     fb2main.h \
     fb2read.h \
     fb2read.h \
     fb2text.h \
     fb2text.h \
-    fb2tree.h
+    fb2tree.h \
+    fb2view.h
 
 
 SOURCES = \
 SOURCES = \
     fb2app.cpp \
     fb2app.cpp \
     fb2doc.cpp \
     fb2doc.cpp \
     fb2main.cpp \
     fb2main.cpp \
     fb2read.cpp \
     fb2read.cpp \
-    fb2tree.cpp
+    fb2tree.cpp \
+    fb2view.cpp
 
 
 RESOURCES = \
 RESOURCES = \
     fb2edit.qrc
     fb2edit.qrc
@@ -22,5 +24,6 @@ VERSION = 0.01.1
 
 
 QT += xml
 QT += xml
 QT += webkit
 QT += webkit
+QT += network
 
 
 LIBS += -lqscintilla2
 LIBS += -lqscintilla2

+ 9 - 4
source/fb2main.cpp

@@ -9,6 +9,8 @@
 #include "fb2read.h"
 #include "fb2read.h"
 #include "fb2text.h"
 #include "fb2text.h"
 #include "fb2tree.h"
 #include "fb2tree.h"
+#include "fb2view.h"
+#include "fb2main.h"
 
 
 #include <Qsci/qsciscintilla.h>
 #include <Qsci/qsciscintilla.h>
 #include <Qsci/qscilexerxml.h>
 #include <Qsci/qscilexerxml.h>
@@ -232,6 +234,7 @@ void MainWindow::createActions()
     QAction * act;
     QAction * act;
     QMenu * menu;
     QMenu * menu;
     QToolBar * tool;
     QToolBar * tool;
+    QList<QAction*> actions;
 
 
     menu = menuBar()->addMenu(tr("&File"));
     menu = menuBar()->addMenu(tr("&File"));
     tool = addToolBar(tr("File"));
     tool = addToolBar(tr("File"));
@@ -416,10 +419,13 @@ void MainWindow::connectTextDocument(QTextDocument * document)
 
 
 void MainWindow::createText()
 void MainWindow::createText()
 {
 {
-    textEdit = new QWebView(this);
-    textEdit->page()->setContentEditable(true);
+    textEdit = new Fb2WebView(this);
     setCentralWidget(textEdit);
     setCentralWidget(textEdit);
     textEdit->setFocus();
     textEdit->setFocus();
+
+    connect(actionZoomIn, SIGNAL(triggered()), textEdit, SLOT(zoomIn()));
+    connect(actionZoomOut, SIGNAL(triggered()), textEdit, SLOT(zoomOut()));
+    connect(actionZoomOrig, SIGNAL(triggered()), textEdit, SLOT(zoomOrig()));
 }
 }
 
 
 void MainWindow::createQsci()
 void MainWindow::createQsci()
@@ -550,8 +556,7 @@ void MainWindow::setCurrentFile(const QString &filename, const QString &html)
     }
     }
     title += QString(" - ") += qApp->applicationName();
     title += QString(" - ") += qApp->applicationName();
 
 
-    textEdit->setHtml(html);
-    textEdit->page()->setContentEditable(true);
+    textEdit->setHtml(html, QUrl("fb2://s/"));
 
 
     setWindowModified(false);
     setWindowModified(false);
     setWindowFilePath(curFile);
     setWindowFilePath(curFile);

+ 2 - 2
source/fb2main.h

@@ -100,9 +100,9 @@ private:
         *actionTextStrike,
         *actionTextStrike,
         *actionTextSub,
         *actionTextSub,
         *actionTextSup,
         *actionTextSup,
-        *actionZoomOrig,
         *actionZoomIn,
         *actionZoomIn,
-        *actionZoomOut
+        *actionZoomOut,
+        *actionZoomOrig
     ;
     ;
 };
 };
 
 

+ 1 - 0
source/fb2read.cpp

@@ -280,6 +280,7 @@ Fb2Handler::ImageHandler::ImageHandler(QXmlStreamWriter &writer, const QString &
     : BodyHandler(writer, name, attributes, "img")
     : BodyHandler(writer, name, attributes, "img")
 {
 {
     QString href = Value(attributes, "href");
     QString href = Value(attributes, "href");
+    while (href.left(1) == "#") href.remove(0, 1);
     writer.writeAttribute("src", href);
     writer.writeAttribute("src", href);
 }
 }
 
 

+ 55 - 0
source/fb2view.cpp

@@ -0,0 +1,55 @@
+#include "fb2view.h"
+#include <QtDebug>
+#include <QNetworkReply>
+#include <QNetworkRequest>
+
+//---------------------------------------------------------------------------
+//  Fb2NetworkAccessManager
+//
+//    http://doc.trolltech.com/qq/32/qq32-webkit-protocols.html
+//---------------------------------------------------------------------------
+
+Fb2NetworkAccessManager::Fb2NetworkAccessManager(QObject *parent)
+    : QNetworkAccessManager(parent)
+{
+}
+
+QNetworkReply * Fb2NetworkAccessManager::createRequest(Operation op, const QNetworkRequest &request, QIODevice *outgoingData)
+{
+    qCritical() << request.url().toString();
+    return QNetworkAccessManager::createRequest(op, request, outgoingData);
+}
+
+//---------------------------------------------------------------------------
+//  Fb2WebView
+//---------------------------------------------------------------------------
+
+Fb2WebView::Fb2WebView(QWidget *parent)
+    : QWebView(parent)
+{
+    page()->setContentEditable(true);
+    QWebSettings *settings = page()->settings();
+    settings->setAttribute(QWebSettings::JavaEnabled, false);
+    settings->setAttribute(QWebSettings::JavascriptEnabled, true);
+    settings->setAttribute(QWebSettings::PrivateBrowsingEnabled, true);
+    settings->setAttribute(QWebSettings::PluginsEnabled, false);
+    settings->setAttribute(QWebSettings::ZoomTextOnly, true);
+    page()->setNetworkAccessManager(&m_network);
+}
+
+void Fb2WebView::zoomIn()
+{
+    qreal zoom = zoomFactor();
+    setZoomFactor(zoom * 1.1);
+}
+
+void Fb2WebView::zoomOut()
+{
+    qreal zoom = zoomFactor();
+    setZoomFactor(zoom * 0.9);
+}
+
+void Fb2WebView::zoomOrig()
+{
+    setZoomFactor(1);
+}

+ 36 - 0
source/fb2view.h

@@ -0,0 +1,36 @@
+#ifndef FB2VIEW_H
+#define FB2VIEW_H
+
+#include <QWebView>
+#include <QNetworkAccessManager>
+
+class Fb2NetworkAccessManager : public QNetworkAccessManager
+{
+    Q_OBJECT
+public:
+    explicit Fb2NetworkAccessManager(QObject *parent = 0);
+
+protected:
+    virtual QNetworkReply *createRequest(Operation op, const QNetworkRequest &request, QIODevice *outgoingData = 0);
+
+};
+
+class Fb2WebView : public QWebView
+{
+    Q_OBJECT
+public:
+    explicit Fb2WebView(QWidget *parent = 0);
+    
+signals:
+    
+public slots:
+    void zoomIn();
+    void zoomOut();
+    void zoomOrig();
+
+private:
+    Fb2NetworkAccessManager m_network;
+
+};
+
+#endif // FB2VIEW_H