#include "documentvalidator.h"
#include "definitions.h"
+#include "initeffects.h"
#include <KDebug>
#include <KMessageBox>
#include <QFile>
#include <QColor>
+#include <QString>
#include <mlt++/Mlt.h>
+#include "locale.h"
+
DocumentValidator::DocumentValidator(QDomDocument doc):
m_doc(doc),
// Check if we're validating a Kdenlive project
if (kdenliveDoc.isNull())
return false;
-
- QLocale documentLocale;
+
+ // Previous MLT / Kdenlive versions used C locale by default
+ QLocale documentLocale = QLocale::c();
if (mlt.hasAttribute("LC_NUMERIC")) {
// Set locale for the document
+ // WARNING: what should be done in case the locale does not exist on the system?
+ setlocale(LC_NUMERIC, mlt.attribute("LC_NUMERIC").toUtf8().constData());
documentLocale = QLocale(mlt.attribute("LC_NUMERIC"));
- if (documentLocale.decimalPoint() != QLocale().decimalPoint()) {
- QDomElement docProperties = kdenliveDoc.firstChildElement("documentproperties");
- if (docProperties.isNull()) {
- docProperties = m_doc.createElement("documentproperties");
- kdenliveDoc.appendChild(docProperties);
- }
- docProperties.setAttribute("readonly", 1);
- KMessageBox::sorry(kapp->activeWindow(), i18n("The document you are opening uses a different locale (%1) than your system. You can only open and render it, no editing is supported unless you change your system's locale.", mlt.attribute("LC_NUMERIC")), i18n("Read only project"));
- }
}
+ documentLocale.setNumberOptions(QLocale::OmitGroupSeparator);
+
+ if (documentLocale != QLocale()) {
+ QLocale::setDefault(documentLocale);
+ // locale conversion might need to be redone
+ initEffects::parseEffectFiles();
+ }
+
+ // TODO: remove after string freeze
+ if (0)
+ KMessageBox::sorry(kapp->activeWindow(), i18n("The document you are opening uses a different locale (%1) than your system. You can only open and render it, no editing is supported unless you change your system's locale.", mlt.attribute("LC_NUMERIC")), i18n("Read only project"));
+
// Upgrade the document to the latest version
if (!upgrade(documentLocale.toDouble(kdenliveDoc.attribute("version")), currentVersion))
return false;
}
}
+ if (version <= 0.87) {
+ if (!m_doc.firstChildElement("mlt").hasAttribute("LC_NUMERIC")) {
+ m_doc.firstChildElement("mlt").setAttribute("LC_NUMERIC", "C");
+ }
+ }
+
// The document has been converted: mark it as modified
infoXml.setAttribute("version", currentVersion);
m_modified = true;