Exemple #1
0
bool DocumentBrowser::open(const QString &fileName,const QString &mimeType)
{
    QFile file(fileName);
    if (!file.open(QIODevice::ReadOnly)) {
        return false;
    }    
    m_mimeType = mimeType;
    QFileInfo info(fileName);
    QString htmlType = m_liteApp->mimeTypeManager()->findMimeTypeByFile(fileName);
    m_name = info.fileName();
    m_fileName = QDir::toNativeSeparators(fileName);

    m_htmlWidget->setSearchPaths(QStringList()<<info.absolutePath());

    QByteArray ba = file.readAll();

    if (htmlType == "text/html") {
        QTextCodec *codec = QTextCodec::codecForHtml(ba,QTextCodec::codecForName("utf-8"));
        setUrlHtml(QUrl::fromLocalFile(fileName),codec->toUnicode(ba));
    } else if (htmlType == "text/x-markdown") {
        QTextCodec *codec = QTextCodec::codecForName("utf-8");
        QByteArray out = md2html(ba);
        setUrlHtml(QUrl::fromLocalFile(fileName),codec->toUnicode(out));
    }
    file.close();
    return true;
}
void WebKitBrowser::loadUrl(const QUrl &url)
{
    m_liteApp->mainWindow()->statusBar()->clearMessage();
    if (url.scheme() == "http" || url.scheme() == "https") {
        m_view->setUrl(url);
    } else if (url.scheme() == "file") {
        QFileInfo info(url.toLocalFile());
#ifdef Q_OS_WIN
        QString file = info.filePath();
        if (file.length() > 4 && file[0] == '/' && file[1] == '/' &&
                file[2].isLetter() && file[3] == '/') {
            info.setFile(file[2]+":"+file.right(file.length()-3));
        }
#endif
        if (info.exists()) {
            QFile file(info.filePath());
            if (file.open(QFile::ReadOnly)) {
                QByteArray ba = file.readAll();
                QString ext = info.suffix().toLower();
                if (ext == "html" || ext == "htm") {
                    QTextCodec *codec = QTextCodec::codecForHtml(ba,QTextCodec::codecForName("utf-8"));
                    m_view->setHtml(codec->toUnicode(ba),url);
                } else if (ext == "md") {
                    QString data = html_data;
                    data.replace("__HTML_TITLE__",info.fileName());
                    data.replace("__HTML_CONTENT__",QString::fromUtf8(md2html(ba)));
                    m_view->setHtml(data,url);
                } else {
                    QTextCodec *codec = QTextCodec::codecForUtfText(ba,QTextCodec::codecForName("utf-8"));
                #if QT_VERSION >= 0x050000
                    QString html = codec->toUnicode(ba).toHtmlEscaped();
                #else
                    QString html = Qt::escape(codec->toUnicode(ba));
                #endif
                    QString data = html_data;
                    data.replace("__HTML_TITLE__",info.fileName());
                    data.replace("__HTML_CONTENT__",QString("<pre>%1</pre>").arg(html));
                    m_view->setHtml(data,url);
                }
            }
        }
    }
    m_view->setFocus();
}
Exemple #3
0
void LiteDoc::openUrlFile(const QUrl &url)
{
    QFileInfo info(url.toLocalFile());
    if (!info.exists()) {
        info.setFile(url.path());
    }
    QString ext = info.suffix().toLower();
    if (ext == "html") {
        QFile file(info.filePath());
        if (file.open(QIODevice::ReadOnly)) {
            QByteArray ba = file.readAll();
            file.close();
            if (info.fileName().compare("docs.html",Qt::CaseInsensitive) == 0) {
                updateHtmlDoc(url,ba,QString(),false);
            } else {
                updateHtmlDoc(url,ba);
            }
        }
    } else if (ext == "md") {
        QFile file(info.filePath());
        if (file.open(QIODevice::ReadOnly)) {
            QByteArray ba = md2html(file.readAll());
            updateHtmlDoc(url,ba);
        }
    } else if (ext == "go") {
        LiteApi::IEditor *editor = m_liteApp->fileManager()->openEditor(info.filePath());
        if (editor) {
            editor->setReadOnly(true);
            QPlainTextEdit *ed = LiteApi::findExtensionObject<QPlainTextEdit*>(editor,"LiteApi.QPlainTextEdit");
#if QT_VERSION >= 0x050000
            if (ed && QUrlQuery(url).hasQueryItem("s")) {
                QStringList pos =  QUrlQuery(url).queryItemValue("s").split(":");
#else
            if (ed && url.hasQueryItem("s")) {
                QStringList pos = url.queryItemValue("s").split(":");
#endif
                if (pos.length() == 2) {
                    bool ok = false;
                    int begin = pos.at(0).toInt(&ok);
                    if (ok) {
                        QTextCursor cur = ed->textCursor();
                        cur.setPosition(begin);
                        ed->setTextCursor(cur);
                        ed->centerCursor();
                    }
                }
            }
        }
    } else if (ext == "pdf") {
        QDesktopServices::openUrl(info.filePath());
    } else {
        QFile file(info.filePath());
        if (file.open(QIODevice::ReadOnly)) {
            QByteArray ba = file.readAll();
            updateTextDoc(url,ba,info.fileName());
        }
    }
}

void LiteDoc::updateTextDoc(const QUrl &url, const QByteArray &ba, const QString &header)
{
    m_lastUrl = url;
    QTextCodec *codec = QTextCodec::codecForUtfText(ba,QTextCodec::codecForName("utf-8"));
#if QT_VERSION >= 0x050000
    QString html = codec->toUnicode(ba).toHtmlEscaped();
#else
    QString html = Qt::escape(codec->toUnicode(ba));
#endif
    QString data = m_templateData;
    data.replace("{header}",header);
    data.replace("{nav}","");
    data.replace("{content}",QString("<pre>%1</pre>").arg(html));
    m_docBrowser->setUrlHtml(url,data);

}