diff options
| author | craig <craig@11d20701-8431-0410-a711-e3c959e3b870> | 2012-01-01 11:40:09 +0000 |
|---|---|---|
| committer | craig <craig@11d20701-8431-0410-a711-e3c959e3b870> | 2012-01-01 11:40:09 +0000 |
| commit | 7ed83b6c6666eb8b6b104c211ae7e52907350372 (patch) | |
| tree | 4430b556abac0ad660a0aacf1887d77f85d8be02 /scribus/fileloader.cpp | |
| download | scribus-7ed83b6c6666eb8b6b104c211ae7e52907350372.tar.gz scribus-7ed83b6c6666eb8b6b104c211ae7e52907350372.tar.xz scribus-7ed83b6c6666eb8b6b104c211ae7e52907350372.zip | |
Branch 1.3.5 tree to 1.4.x tree, goodbye 1.3.x
git-svn-id: svn://scribus.net/branches/Version14x/Scribus@17163 11d20701-8431-0410-a711-e3c959e3b870
Diffstat (limited to 'scribus/fileloader.cpp')
| -rw-r--r-- | scribus/fileloader.cpp | 615 |
1 files changed, 615 insertions, 0 deletions
diff --git a/scribus/fileloader.cpp b/scribus/fileloader.cpp new file mode 100644 index 0000000..e946f55 --- /dev/null +++ b/scribus/fileloader.cpp @@ -0,0 +1,615 @@ +/* +For general Scribus (>=1.3.2) copyright and licensing information please refer +to the COPYING file provided with the program. Following this notice may exist +a copyright and/or license notice that predates the release of Scribus 1.3.2 +for which a new license (GPL+exception) is in place. +*/ +#include <QDomElement> +#include <QFile> +#include <QFileInfo> +#include <QtAlgorithms> +#include <QCursor> +#include <QRegExp> +#include <QDir> +#include <QTextCodec> +#include <QCheckBox> +#include <QMessageBox> +#include <QProgressBar> + +#include <QList> +#include <cstdlib> +#include <cmath> +#include <QTextStream> + +#include "commonstrings.h" +#include "fileloader.h" +#include "fontreplacedialog.h" +#include "hyphenator.h" +#include "missing.h" +#include "page.h" +#include "pluginmanager.h" +#include "plugins/formatidlist.h" +#include "pagestructs.h" +#include "resourcecollection.h" +#include "scconfig.h" +#include "scclocale.h" +#include "scribuscore.h" +#include "scribusXml.h" +#include "units.h" +#include "loadsaveplugin.h" +#include "guidemanager.h" +#include "text/nlsconfig.h" + +// We need to include the headers for the plugins we support until we start +// using LoadSavePlugin to pick them for us. We only use these headers to +// get the format IDs, NOTHING ELSE. +// #include "plugins/svgimplugin/svgplugin.h" +// #include "plugins/psimport/importpsplugin.h" +// #include "plugins/fileloader/oodraw/oodrawimp.h" + +#include <zlib.h> +#include "util.h" +#include "prefsmanager.h" + +/*! + \author Franz Schmid + \date + \brief Constructor, sets the variable "FileName" to the input parameter fileName + \param fileName filename to load + \retval None + */ +FileLoader::FileLoader(const QString & fileName) : + QObject(0), + FileName(fileName), + FileType(-1), + formatSLA12x(LoadSavePlugin::getFormatById(FORMATID_SLA12XIMPORT)), + formatSLA13x(LoadSavePlugin::getFormatById(FORMATID_SLA13XIMPORT)), + formatSLA134(LoadSavePlugin::getFormatById(FORMATID_SLA134IMPORT)), + formatPS(LoadSavePlugin::getFormatById(FORMATID_PSIMPORT)), + formatSVG(LoadSavePlugin::getFormatById(FORMATID_SVGIMPORT)), + formatSXD(LoadSavePlugin::getFormatById(FORMATID_SXDIMPORT)), + formatODG(LoadSavePlugin::getFormatById(FORMATID_ODGIMPORT)), + prefsManager(PrefsManager::instance()) +{ +} + +// FIXME: This static method is here as a temporary transitional +// measure during the process of converting to file loader plugins. +const QString FileLoader::getLoadFilterString() +{ + return LoadSavePlugin::fileDialogLoadFilter().join(";;"); +} + +/*! + \fn int FileLoader::TestFile() + \author Franz Schmid + \date + \brief Tests if the file "FileName" exists and determines the type of the file. + \retval int -1 if the file doesn't exist or any other error has occurred, 0 for the old Format, 1 for the new Format, 2 for EPS and PS files, 3 for SVG files and 4 for PDF files + */ +int FileLoader::TestFile() +{ + QFileInfo fi = QFileInfo(FileName); + int ret = -1; + if (!fi.exists()) + ret = -1; + QString ext = fi.completeSuffix().toLower(); + + QList<FileFormat> fileFormats(LoadSavePlugin::supportedFormats()); + QList<FileFormat>::const_iterator it(fileFormats.constBegin()); + QList<FileFormat>::const_iterator itEnd(fileFormats.constEnd()); + for ( ; it != itEnd ; ++it ) + { + if ((*it).nameMatch.indexIn("."+ext)!=-1) + { +// qDebug() << QString("Match :%1: :.%2: on %3").arg((*it).nameMatch.pattern()).arg(ext).arg((*it).trName); + if ((*it).plug!=0) + { + if ((*it).plug->fileSupported(0, FileName)) + { +// qDebug(QString("File Supported With: %1").arg((*it).trName)); + ret=(*it).formatId; + break; + } + } + } +// else +// qDebug() << QString("No Match :%1: :.%2: on %3").arg((*it).nameMatch.pattern()).arg(ext).arg((*it).trName); + } + +// if (ret==-1) +// { +// if ((ext.endsWith("sla.gz")) || (ext.endsWith("sla")) || (ext.endsWith("scd.gz")) || (ext.endsWith("scd"))) +// ret = CheckScribus(); +// else +// if (((ext.endsWith("ps")) || (ext.endsWith("eps"))) && (formatPS)) +// ret = FORMATID_PSIMPORT; +// else if (((ext.endsWith("svg")) || (ext.endsWith("svgz"))) && (formatSVG)) +// ret = FORMATID_SVGIMPORT; +// else if ((ext.endsWith("sxd")) && (formatSXD)) +// ret = FORMATID_SXDIMPORT; +// else if ((ext.endsWith("odg")) && (formatODG)) +// ret = FORMATID_ODGIMPORT; +// } +/* if (ext == "pdf") + ret = 4; */ + FileType = ret; + return ret; +} +/* +static void replaceFonts(ScribusDoc* currDoc, PageItem *it, QMap<QString, int> UsedFonts, QMap<QString, QString> ReplacedFonts) +{ + if ((it->asTextFrame()) || (it->asPathText())) + { + CharStyle newFontStyle; + for (uint e = 0; e < it->itemText.nrOfRuns(); ++e) + { + int start = it->itemText.startOfRun(e); + ScFace oldFont = it->itemText.charStyle(start).font(); + if (!UsedFonts.contains(oldFont.scName())) { + newFontStyle.setFont((*currDoc->AllFonts)[ReplacedFonts[oldFont.scName()]]); + it->itemText.applyCharStyle(start, it->itemText.endOfRun(e) - start, newFontStyle ); + } + } + } +} + +*/ +bool FileLoader::LoadPage(ScribusDoc* currDoc, int PageToLoad, bool Mpage, QString renamedPageName) +{ + bool ret = false; +// newReplacement = false; + ReplacedFonts = currDoc->AllFonts->getSubstitutions(); +// dummyScFaces.clear(); + QList<FileFormat>::const_iterator it; + if (findFormat(FileType, it)) + { + if (FileType==FORMATID_SLA12XIMPORT) + { + (*it).plug->setupTargets(currDoc, currDoc->view(), currDoc->scMW(), currDoc->scMW()->mainWindowProgressBar, &(prefsManager->appPrefs.AvailFonts)); + ret=(*it).plug->loadPage(FileName, PageToLoad, Mpage, renamedPageName); +// if (ret) +// (*it).plug->getReplacedFontData(newReplacement, ReplacedFonts, dummyScFaces); + } + if (FileType==FORMATID_SLA13XIMPORT || FileType==FORMATID_SLA134IMPORT) + { + (*it).plug->setupTargets(currDoc, 0, currDoc->scMW(), currDoc->scMW()->mainWindowProgressBar, &(prefsManager->appPrefs.AvailFonts)); + ret=(*it).plug->loadPage(FileName, PageToLoad, Mpage, renamedPageName); +// if (ret) +// (*it).plug->getReplacedFontData(newReplacement, ReplacedFonts, dummyScFaces); + } + } + if (ret) + ret = postLoad(currDoc); // FIXME: return false if user doesnt want to replace fonts?? + + /* + //FIXME: this goes into scribusdoc and should work with substitutes + if (ReplacedFonts.count() != 0) + { + if ((prefsManager->appPrefs.askBeforeSubstituite) || (newReplacement)) + { + qApp->setOverrideCursor(QCursor(Qt::arrowCursor), true); + FontReplaceDialog dia(0, &ReplacedFonts); + if (dia.exec()) + { + QMap<QString,QString>::Iterator itfsu; + for (itfsu = ReplacedFonts.begin(); itfsu != ReplacedFonts.end(); ++itfsu) + { + if (dia.stickyReplacements->isChecked()) + prefsManager->appPrefs.GFontSub[itfsu.key()] = itfsu.data(); + } + } + else + { + return false; + } + } + for (uint d = 0; d < currDoc->MasterItems.count(); ++d) + { + replaceFonts(currDoc, currDoc->MasterItems.at(d), currDoc->UsedFonts, ReplacedFonts); + } + for (uint d = 0; d < currDoc->DocItems.count(); ++d) + { + replaceFonts(currDoc, currDoc->DocItems.at(d), currDoc->UsedFonts, ReplacedFonts); + } + for (uint d = 0; d < currDoc->FrameItems.count(); ++d) + { + replaceFonts(currDoc, currDoc->FrameItems.at(d), currDoc->UsedFonts, ReplacedFonts); + } + for (uint a = 0; a < currDoc->paragraphStyles().count(); ++a) + { +// if ( !currDoc->paragraphStyles()[a].charStyle().font().isNone() && !currDoc->UsedFonts.contains(currDoc->paragraphStyles()[a].charStyle().font().scName())) +// currDoc->paragraphStyles()[a].charStyle().setFont +// ((*currDoc->AllFonts)[ReplacedFonts[currDoc->paragraphStyles()[a].charStyle().font().scName()]]); + } + QMap<QString,QString>::Iterator itfsu; + for (itfsu = ReplacedFonts.begin(); itfsu != ReplacedFonts.end(); ++itfsu) + { + if (!currDoc->UsedFonts.contains(itfsu.data())) + { +// QFont fo = prefsManager->appPrefs.AvailFonts[itfsu.data()]->Font; +// fo.setPointSize(qRound(ScMW->doc->toolSettings.defSize / 10.0)); + currDoc->AddFont(itfsu.data(), qRound(currDoc->toolSettings.defSize / 10.0)); + } + } + if (prefsManager->appPrefs.askBeforeSubstituite) + ReplacedFonts.clear(); +// dummyScFaces.clear(); + } + */ + return ret; +} + +/*! + \fn bool FileLoader::LoadFile(ScribusDoc* currDoc) + \author Franz Schmid + \date + \brief Loads the file "FileName" as a Scribus document + \param currDoc the current document + \retval bool true when loading is succsessful, false otherwise + */ +bool FileLoader::LoadFile(ScribusDoc* currDoc) +{ + newReplacement = false; + currDoc->guidesSettings.marginsShown = prefsManager->appPrefs.guidesSettings.marginsShown; + currDoc->guidesSettings.framesShown = prefsManager->appPrefs.guidesSettings.framesShown; + currDoc->guidesSettings.layerMarkersShown = prefsManager->appPrefs.guidesSettings.layerMarkersShown; + currDoc->guidesSettings.gridShown = prefsManager->appPrefs.guidesSettings.gridShown; + currDoc->guidesSettings.guidesShown = prefsManager->appPrefs.guidesSettings.guidesShown; + currDoc->guidesSettings.colBordersShown = prefsManager->appPrefs.guidesSettings.colBordersShown; + currDoc->guidesSettings.baseShown = prefsManager->appPrefs.guidesSettings.baseShown; + currDoc->guidesSettings.linkShown = prefsManager->appPrefs.guidesSettings.linkShown; + currDoc->toolSettings.polyC = prefsManager->appPrefs.toolSettings.polyC; + currDoc->toolSettings.polyF = prefsManager->appPrefs.toolSettings.polyF; + currDoc->toolSettings.polyR = prefsManager->appPrefs.toolSettings.polyR; + currDoc->toolSettings.polyCurvature = prefsManager->appPrefs.toolSettings.polyCurvature; + currDoc->toolSettings.polyFd = prefsManager->appPrefs.toolSettings.polyFd; + currDoc->toolSettings.polyS = prefsManager->appPrefs.toolSettings.polyS; + currDoc->AutoSave = prefsManager->appPrefs.AutoSave; + currDoc->AutoSaveTime = prefsManager->appPrefs.AutoSaveTime; + ReplacedFonts = currDoc->AllFonts->getSubstitutions(); + //dummyScFaces.clear(); + bool ret = false; + QList<FileFormat>::const_iterator it; + if (findFormat(FileType, it)) + { +// qDebug("fileloader: type %d plugin %s"),FileType,(*it).trName); + switch (FileType) + { + case FORMATID_SLA12XIMPORT: + { + (*it).setupTargets(currDoc, currDoc->view(), currDoc->scMW(), currDoc->scMW()->mainWindowProgressBar, &(prefsManager->appPrefs.AvailFonts)); + ret=(*it).loadFile(FileName, LoadSavePlugin::lfCreateDoc); +// if (ret) +// (*it).getReplacedFontData(newReplacement, ReplacedFonts, dummyScFaces); + } + break; + case FORMATID_SLA13XIMPORT: + case FORMATID_SLA134IMPORT: + { + (*it).setupTargets(currDoc, 0, currDoc->scMW(), currDoc->scMW()->mainWindowProgressBar, &(prefsManager->appPrefs.AvailFonts)); + ret=(*it).loadFile(FileName, LoadSavePlugin::lfCreateDoc); +// if (ret) +// (*it).getReplacedFontData(newReplacement, ReplacedFonts, dummyScFaces); + } + break; + default: + (*it).setupTargets(currDoc, currDoc->view(), currDoc->scMW(), currDoc->scMW()->mainWindowProgressBar, &(prefsManager->appPrefs.AvailFonts)); + ret = (*it).loadFile(FileName, LoadSavePlugin::lfCreateDoc); + break; + } + } + return ret; +} + +bool FileLoader::SaveFile(const QString& fileName, ScribusDoc *doc, QString *savedFile) +{ + bool ret = false; + QList<FileFormat>::const_iterator it; + if (findFormat(FORMATID_SLA134EXPORT, it)) + { + it->setupTargets(doc, 0, doc->scMW(), doc->scMW()->mainWindowProgressBar, &(prefsManager->appPrefs.AvailFonts)); + ret = it->saveFile(fileName); + if (savedFile) + *savedFile = it->lastSavedFile(); + } + return ret; +} + +bool FileLoader::ReadStyles(const QString& fileName, ScribusDoc* doc, StyleSet<ParagraphStyle> &docParagraphStyles) +{ + QList<FileFormat>::const_iterator it; + if (findFormat(FileType, it)) { + (*it).plug->setupTargets(doc, 0, doc->scMW(), doc->scMW()->mainWindowProgressBar, &(prefsManager->appPrefs.AvailFonts)); + return (*it).readStyles(fileName, doc, docParagraphStyles); + } + return false; +} + +bool FileLoader::ReadCharStyles(const QString& fileName, ScribusDoc* doc, StyleSet<CharStyle> &docCharStyles) +{ + QList<FileFormat>::const_iterator it; + if (findFormat(FileType, it)) { + (*it).plug->setupTargets(doc, 0, doc->scMW(), doc->scMW()->mainWindowProgressBar, &(prefsManager->appPrefs.AvailFonts)); + return (*it).readCharStyles(fileName, doc, docCharStyles); + } + return false; +} + +bool FileLoader::ReadColors(const QString& fileName, ColorList & colors) +{ + QList<FileFormat>::const_iterator it; + if (findFormat(FileType, it)) + return (*it).readColors(fileName, colors); + return false; +} + + +bool FileLoader::ReadPageCount(const QString& fileName, int *num1, int *num2, QStringList & masterPageNames) +{ + QList<FileFormat>::const_iterator it; + if (findFormat(FileType, it)) + return (*it).readPageCount(fileName, num1, num2, masterPageNames); + return false; +} + +bool FileLoader::ReadLineStyles(const QString& fileName, QMap<QString,multiLine> *Sty) +{ + QList<FileFormat>::const_iterator it; + if (findFormat(FileType, it)) + return (*it).readLineStyles(fileName, Sty); + return false; +} + +void FileLoader::readParagraphStyle(ParagraphStyle& vg, const QDomElement& pg, SCFonts &avail, ScribusDoc *currDoc) +{ + vg.setName(pg.attribute("NAME")); + vg.setLineSpacingMode(static_cast<ParagraphStyle::LineSpacingMode>(pg.attribute("LINESPMode", "0").toInt())); + vg.setLineSpacing(ScCLocale::toDoubleC(pg.attribute("LINESP"))); + vg.setLeftMargin(ScCLocale::toDoubleC(pg.attribute("INDENT"), 0.0)); + if (pg.hasAttribute("RMARGIN")) + vg.setRightMargin(ScCLocale::toDoubleC(pg.attribute("RMARGIN"), 0.0)); + else + vg.setRightMargin(0); + vg.setFirstIndent(ScCLocale::toDoubleC(pg.attribute("FIRST"), 0.0)); + vg.setAlignment(static_cast<ParagraphStyle::AlignmentType>(pg.attribute("ALIGN").toInt())); + vg.setGapBefore(ScCLocale::toDoubleC(pg.attribute("VOR"), 0.0)); + vg.setGapAfter(ScCLocale::toDoubleC(pg.attribute("NACH"), 0.0)); + QString tmpf = pg.attribute("FONT", currDoc->toolSettings.defFont); + currDoc->AllFonts->findFont(tmpf, currDoc); + vg.charStyle().setFont((*currDoc->AllFonts)[tmpf]); + vg.charStyle().setFontSize(qRound(ScCLocale::toDoubleC(pg.attribute("FONTSIZE"), 12.0) * 10.0)); + vg.setHasDropCap(static_cast<bool>(pg.attribute("DROP", "0").toInt())); + vg.setDropCapLines(pg.attribute("DROPLIN", "2").toInt()); + vg.setDropCapOffset(ScCLocale::toDoubleC(pg.attribute("DROPDIST"), 0.0)); + vg.charStyle().setFeatures(static_cast<StyleFlag>(pg.attribute("EFFECT", "0").toInt()).featureList()); + vg.charStyle().setFillColor(pg.attribute("FCOLOR", currDoc->toolSettings.dBrush)); + vg.charStyle().setFillShade(pg.attribute("FSHADE", "100").toInt()); + vg.charStyle().setStrokeColor(pg.attribute("SCOLOR", currDoc->toolSettings.dPen)); + vg.charStyle().setStrokeShade(pg.attribute("SSHADE", "100").toInt()); + if (static_cast<bool>(pg.attribute("BASE", "0").toInt())) + vg.setLineSpacingMode(ParagraphStyle::BaselineGridLineSpacing); + vg.charStyle().setShadowXOffset(qRound(ScCLocale::toDoubleC(pg.attribute("TXTSHX"), 5.0)) * 10); + vg.charStyle().setShadowYOffset(qRound(ScCLocale::toDoubleC(pg.attribute("TXTSHY"), -5.0)) * 10); + vg.charStyle().setOutlineWidth(qRound(ScCLocale::toDoubleC(pg.attribute("TXTOUT"), 1.0)) * 10); + vg.charStyle().setUnderlineOffset(qRound(ScCLocale::toDoubleC(pg.attribute("TXTULP"), -0.1)) * 10); + vg.charStyle().setUnderlineWidth(qRound(ScCLocale::toDoubleC(pg.attribute("TXTULW"), -0.1)) * 10); + vg.charStyle().setStrikethruOffset(qRound(ScCLocale::toDoubleC(pg.attribute("TXTSTP"), -0.1)) * 10); + vg.charStyle().setStrikethruWidth(qRound(ScCLocale::toDoubleC(pg.attribute("TXTSTW"), -0.1)) * 10); + vg.charStyle().setScaleH(qRound(ScCLocale::toDoubleC(pg.attribute("SCALEH"), 100.0)) * 10); + vg.charStyle().setScaleV(qRound(ScCLocale::toDoubleC(pg.attribute("SCALEV"), 100.0)) * 10); + vg.charStyle().setBaselineOffset(qRound(ScCLocale::toDoubleC(pg.attribute("BASEO"), 0.0)) * 10); + vg.charStyle().setTracking(qRound(ScCLocale::toDoubleC(pg.attribute("KERN"), 0.0)) * 10); + if ((pg.hasAttribute("NUMTAB")) && (pg.attribute("NUMTAB", "0").toInt() != 0)) + { + QList<ParagraphStyle::TabRecord> tbs; + ParagraphStyle::TabRecord tb; + QString tmp = pg.attribute("TABS"); + QTextStream tgv(&tmp, QIODevice::ReadOnly); + QString xf, xf2; + for (int cxv = 0; cxv < pg.attribute("NUMTAB", "0").toInt(); cxv += 2) + { + tgv >> xf; + tgv >> xf2; + tb.tabPosition = ScCLocale::toDoubleC(xf2); + tb.tabType = static_cast<int>(ScCLocale::toDoubleC(xf)); + tb.tabFillChar = QChar(); + tbs.append(tb); + } + vg.setTabValues(tbs); + tmp = ""; + } + else + { + QList<ParagraphStyle::TabRecord> tbs; + QDomNode IT = pg.firstChild(); + while(!IT.isNull()) + { + QDomElement it = IT.toElement(); + if (it.tagName()=="Tabs") + { + ParagraphStyle::TabRecord tb; + tb.tabPosition = ScCLocale::toDoubleC(it.attribute("Pos")); + tb.tabType = it.attribute("Type").toInt(); + QString tbCh = ""; + tbCh = it.attribute("Fill",""); + if (tbCh.isEmpty()) + tb.tabFillChar = QChar(); + else + tb.tabFillChar = tbCh[0]; + tbs.append(tb); + } + IT=IT.nextSibling(); + } + vg.setTabValues(tbs); + } +} + +bool FileLoader::postLoad(ScribusDoc* currDoc) +{ + //CB #3749 We have to set these up in post load as each format will load into the doc itself + //settings. As the hyphenator was created in the doc constructor, it needs to be updated. + //FIXME: Remove these duplicate settings altogether + if (currDoc->docHyphenator!=0) + { + currDoc->docHyphenator->Automatic=currDoc->Automatic; + currDoc->docHyphenator->AutoCheck=currDoc->AutoCheck; + currDoc->docHyphenator->Language=currDoc->Language; + currDoc->docHyphenator->MinWordLen=currDoc->MinWordLen; + currDoc->docHyphenator->HyCount=currDoc->HyCount; + } +/* for (uint d = 0; d < ScMW->doc->MasterItems.count(); ++d) + { + PageItem *it = ScMW->doc->MasterItems.at(d); + if ((it->itemType() == PageItem::TextFrame) || (it->itemType() == PageItem::PathText)) + { + for (uint e = 0; e < it->itemText.count(); ++e) + { + ScText *hl = it->itemText.at(e); + if ((hl->ch == QChar(25)) && ((int)hl->cembedded != -1)) + hl->cembedded = ScMW->doc->FrameItems.at((int)hl->cembedded); + else + hl->cembedded = 0; + } + } + } + for (uint d = 0; d < ScMW->doc->DocItems.count(); ++d) + { + PageItem *it = ScMW->doc->DocItems.at(d); + if ((it->itemType() == PageItem::TextFrame) || (it->itemType() == PageItem::PathText)) + { + for (uint e = 0; e < it->itemText.count(); ++e) + { + ScText *hl = it->itemText.at(e); + if ((hl->ch == QChar(25)) && ((int)hl->cembedded != -1)) + hl->cembedded = ScMW->doc->FrameItems.at((int)hl->cembedded); + else + hl->cembedded = 0; + } + } + } */ + //FIXME: this goes into scribusdoc + //ResourceCollection rsc; + //currDoc->getNamedResources(rsc); + //ReplacedFonts.clear(); + //QMap<QString,QString>::ConstIterator it; + //for (it = rsc.fonts().begin(); it != rsc.fonts().end(); ++it) + //{ + // const ScFace& font (rsc.availableFonts->findFont(it.key(), currDoc)); + // if (font.isReplacement() ) + // ReplacedFonts[it.key()] = font.replacementName(); + //} + ReplacedFonts = currDoc->AllFonts->getSubstitutions(ReplacedFonts.keys()); + if (ReplacedFonts.count() != 0) + { + if ((prefsManager->appPrefs.askBeforeSubstituite)) + { + qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor)); + FontReplaceDialog dia(0, &ReplacedFonts); + if (dia.exec()) + { + QMap<QString,QString>::Iterator itfsu; + for (itfsu = ReplacedFonts.begin(); itfsu != ReplacedFonts.end(); ++itfsu) + { + if (dia.stickyReplacements->isChecked()) + prefsManager->appPrefs.GFontSub[itfsu.key()] = itfsu.value(); + } + currDoc->AllFonts->setSubstitutions(ReplacedFonts, currDoc); + ResourceCollection repl; + repl.availableFonts = currDoc->AllFonts; + repl.mapFonts(ReplacedFonts); + currDoc->replaceNamedResources(repl); + return true; + } + else + { + return false; + } + } + /* + for (uint d = 0; d < currDoc->MasterItems.count(); ++d) + { + replaceFonts(currDoc, currDoc->MasterItems.at(d), currDoc->UsedFonts, ReplacedFonts); + } + for (uint d = 0; d < currDoc->DocItems.count(); ++d) + { + replaceFonts(currDoc, currDoc->DocItems.at(d), currDoc->UsedFonts, ReplacedFonts); + } + for (uint d = 0; d < currDoc->FrameItems.count(); ++d) + { + replaceFonts(currDoc, currDoc->FrameItems.at(d), currDoc->UsedFonts, ReplacedFonts); + } + for (uint a = 0; a < currDoc->paragraphStyles().count(); ++a) + { + if ( !currDoc->paragraphStyles()[a].charStyle().font().isNone() + && !currDoc->UsedFonts.contains(currDoc->paragraphStyles()[a].charStyle().font().scName())) + { +// currDoc->paragraphStyles()[a].charStyle().setFont +// ((*currDoc->AllFonts)[ReplacedFonts[currDoc->paragraphStyles()[a].charStyle().font().scName()]]); + } + } + QList<QString> tmpList; + tmpList.clear(); + for (int fe = 0; fe < currDoc->PDF_Options.EmbedList.count(); ++fe) + { + if (ReplacedFonts.contains(currDoc->PDF_Options.EmbedList[fe])) + tmpList.append(ReplacedFonts[currDoc->PDF_Options.EmbedList[fe]]); + else + tmpList.append(currDoc->PDF_Options.EmbedList[fe]); + } + currDoc->PDF_Options.EmbedList = tmpList; + tmpList.clear(); + for (int fe = 0; fe < currDoc->PDF_Options.SubsetList.count(); ++fe) + { + if (ReplacedFonts.contains(currDoc->PDF_Options.SubsetList[fe])) + tmpList.append(ReplacedFonts[currDoc->PDF_Options.SubsetList[fe]]); + else + tmpList.append(currDoc->PDF_Options.SubsetList[fe]); + } + currDoc->PDF_Options.SubsetList = tmpList; + QMap<QString,QString>::Iterator itfsu; + for (itfsu = ReplacedFonts.begin(); itfsu != ReplacedFonts.end(); ++itfsu) + { + if (!currDoc->UsedFonts.contains(itfsu.data())) + { +// QFont fo = prefsManager->appPrefs.AvailFonts[itfsu.data()]->Font; +// fo.setPointSize(qRound(ScMW->doc->toolSettings.defSize / 10.0)); + currDoc->AddFont(itfsu.data(), qRound(currDoc->toolSettings.defSize / 10.0)); + } + } + if (prefsManager->appPrefs.askBeforeSubstituite) + ReplacedFonts.clear(); + dummyScFaces.clear(); + */ + } + + return true; +} + +void FileLoader::informReplacementFonts() +{ + if (ReplacedFonts.count() != 0) + { + qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor)); + QString mess = tr("Some fonts used by this document have been substituted:")+"\n\n"; + QMap<QString,QString>::Iterator it; + for (it = ReplacedFonts.begin(); it != ReplacedFonts.end(); ++it) + { + mess += it.key() + tr(" was replaced by: ")+ it.value() +"\n"; + } + QMessageBox::warning(ScCore->primaryMainWindow(), CommonStrings::trWarning, mess, 1, 0, 0); + } +} + +bool FileLoader::findFormat(uint formatId, QList<FileFormat>::const_iterator &it) +{ + QList<FileFormat> fileFormats(LoadSavePlugin::supportedFormats()); + it=fileFormats.constBegin(); + QList<FileFormat>::const_iterator itEnd(fileFormats.constEnd()); + for ( ; it != itEnd ; ++it ) + { + if (formatId==(*it).formatId) + return true; + } + return false; +} |
