void MarbleLegendBrowser::loadLegend() { #ifndef MARBLE_NO_WEBKIT if (d->m_currentThemeId != d->m_marbleModel->mapThemeId()) { d->m_currentThemeId = d->m_marbleModel->mapThemeId(); } else { return; } // Read the html string. QString legendPath; // Check for a theme specific legend.html first if ( d->m_marbleModel != 0 && d->m_marbleModel->mapTheme() != 0 ) { const GeoSceneDocument *currentMapTheme = d->m_marbleModel->mapTheme(); legendPath = MarbleDirs::path( "maps/" + currentMapTheme->head()->target() + '/' + currentMapTheme->head()->theme() + "/legend.html" ); } if ( legendPath.isEmpty() ) { legendPath = MarbleDirs::path( "legend.html" ); } QString finalHtml = readHtml( QUrl::fromLocalFile( legendPath ) ); TemplateDocument doc(finalHtml); finalHtml = doc.finalText(); reverseSupportCheckboxes(finalHtml); // Generate some parts of the html from the MapTheme <Legend> tag. const QString sectionsHtml = generateSectionsHtml(); // And then create the final html from these two parts. finalHtml.replace( QString( "<!-- ##customLegendEntries:all## -->" ), sectionsHtml ); translateHtml( finalHtml ); QUrl baseUrl = QUrl::fromLocalFile( legendPath ); // Set the html string in the QTextBrowser. setHtml(finalHtml, baseUrl); if ( d->m_marbleModel ) { QTextDocument *document = new QTextDocument(page()->mainFrame()->toHtml()); d->m_marbleModel->setLegend( document ); } #endif }
/*! * \brief Handle doc translation */ void Translator::fileTranslate(QString filePath) { QDir outputDocDir(QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation)); QString dirName = tr("Apertium Translated Documents"); outputDocDir.mkdir(dirName); if (!outputDocDir.cd(dirName)) { emit fileTranslateRejected(); return; } QFileInfo fileInfo(filePath); #ifdef Q_OS_LINUX auto multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType); QHttpPart filePart; filePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; filename=\"" + fileInfo.fileName() + "\"; name=\"file\"")); auto file = new QFile(filePath); if (!file->open(QIODevice::ReadOnly)) { emit fileTranslateRejected(); return; } filePart.setBodyDevice(file); file->setParent(multiPart); multiPart->append(filePart); QUrlQuery query; query.addQueryItem("langpair", parent->getCurrentSourceLang() + "|" + parent->getCurrentTargetLang()); QUrl url("http://localhost:2737/translateDoc?"); QNetworkRequest request(QUrl(url.url() + query.query())); QNetworkAccessManager mngr; QEventLoop loop; QNetworkReply *reply = mngr.post(request, multiPart); connect(reply, &QNetworkReply::finished, [&]() { loop.exit(); if (reply->error() != QNetworkReply::NoError) { qDebug() << reply->errorString(); emit fileTranslateRejected(); return; } QFile outDoc(outputDocDir.absoluteFilePath(fileInfo.baseName() + "_" + parent->getCurrentSourceLang() + "-" + parent->getCurrentTargetLang() + "." + fileInfo.completeSuffix())); if (!outDoc.open(QIODevice::WriteOnly | QIODevice::Truncate)) { emit fileTranslateRejected(); reply->deleteLater(); return; } outDoc.write(reply->readAll()); outDoc.close(); emit fileTranslated(outDoc.fileName()); reply->deleteLater(); }); loop.exec(); #else if (fileInfo.suffix() == "txt") translateTxt(filePath, outputDocDir); else if (fileInfo.suffix() == "docx") translateDocx(filePath, outputDocDir); else if (fileInfo.suffix() == "pptx") translatePptx(filePath, outputDocDir); else if (fileInfo.suffix() == "xlsx") translateXlsx(filePath, outputDocDir); else if (fileInfo.suffix() == "html") translateHtml(filePath, outputDocDir); else if (fileInfo.suffix() == "rtf") translateRtf(filePath, outputDocDir); #endif }