[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: =?utf-8?q?=5Bcalligra=5D_filters/=3A_Ooxml_filter=2C_drawingML_s?=
From: Lassi Nieminen <lassniem () gmail ! com>
Date: 2011-01-26 12:58:05
Message-ID: 20110126125805.87A8AA6094 () git ! kde ! org
[Download RAW message or body]
Git commit 4440308043e5f8c2681acedb27d3cc3d2758b640 by Lassi Nieminen.
Pushed by lassin into branch 'master'.
Ooxml filter, drawingML srcRect support & fixed noFill to creater proper odf.
M +14 -8 filters/kpresenter/pptx/PptxXmlSlideReader.cpp
M +0 -1 filters/libmsooxml/MsooXmlCommonReader.h
M +34 -40 filters/libmsooxml/MsooXmlCommonReaderDrawingMLImpl.h
M +2 -8 filters/libmsooxml/MsooXmlCommonReaderDrawingMLMethods.h
M +38 -0 filters/libmsooxml/MsooXmlImport.cpp
M +11 -4 filters/libmsooxml/MsooXmlImport.h
M +42 -3 filters/libmsooxml/MsooXmlUtils.cpp
M +6 -2 filters/libmsooxml/MsooXmlUtils.h
M +9 -7 filters/tables/xlsx/XlsxXmlWorksheetReader.cpp
M +4 -2 filters/words/docx/DocxXmlDocumentReader.cpp
http://commits.kde.org/47e7010d/4440308043e5f8c2681acedb27d3cc3d2758b640
diff --git a/filters/kpresenter/pptx/PptxXmlSlideReader.cpp \
b/filters/kpresenter/pptx/PptxXmlSlideReader.cpp index 5996bf4..9b71992 100644
--- a/filters/kpresenter/pptx/PptxXmlSlideReader.cpp
+++ b/filters/kpresenter/pptx/PptxXmlSlideReader.cpp
@@ -628,11 +628,11 @@ KoFilter::ConversionStatus PptxXmlSlideReader::read_oleObj()
return KoFilter::FileNotFound;
}
- // As it is primary an ole ole object, this one should have the highest \
priority
- QString destinationName;
-
body->startElement("draw:object-ole");
- RETURN_IF_ERROR( copyFile(sourceName, "", destinationName))
+ QString destinationName = QLatin1String("") + \
sourceName.mid(sourceName.lastIndexOf('/') + 1);; + RETURN_IF_ERROR( \
m_context->import->copyFile(sourceName, destinationName, false ) ) + \
addManifestEntryForFile(destinationName); +
body->addAttribute("xlink:href", destinationName);
body->endElement(); // draw:object-ole
@@ -647,7 +647,9 @@ KoFilter::ConversionStatus PptxXmlSlideReader::read_oleObj()
// These should be one day part of ole shape functionality wise
if (progId == "Paint.Picture" || name == "Bitmap Image") {
body->startElement("draw:image");
- RETURN_IF_ERROR( copyFile(sourceName, QLatin1String("Pictures/"), \
destinationName, true) ) + QString destinationName = \
QLatin1String("Pictures/") + sourceName.mid(sourceName.lastIndexOf('/') + 1);; + \
RETURN_IF_ERROR( m_context->import->copyFile(sourceName, destinationName, true ) ) + \
addManifestEntryForFile(destinationName); addManifestEntryForPicturesDir();
body->addAttribute("xlink:href", destinationName);
body->addAttribute("xlink:show", "embed");
@@ -656,13 +658,17 @@ KoFilter::ConversionStatus PptxXmlSlideReader::read_oleObj()
}
else if (progId == "Package") {
body->startElement("draw:plugin"); // The mimetype is not told by the \
ole container, this is best guess
- RETURN_IF_ERROR( copyFile(sourceName, "", destinationName, true ))
+ QString destinationName = QLatin1String("") + \
sourceName.mid(sourceName.lastIndexOf('/') + 1);; + RETURN_IF_ERROR( \
m_context->import->copyFile(sourceName, destinationName, true ) ) + \
addManifestEntryForFile(destinationName); body->addAttribute("xlink:href", \
destinationName); body->endElement(); // draw:plugin
}
else if (progId.contains("AcroExch")) { // PDF
body->startElement("draw:object"); // The mimetype is not told by the \
ole container, this is best guess
- RETURN_IF_ERROR( copyFile(sourceName, "", destinationName, true ))
+ QString destinationName = QLatin1String("") + \
sourceName.mid(sourceName.lastIndexOf('/') + 1);; + RETURN_IF_ERROR( \
m_context->import->copyFile(sourceName, destinationName, true ) ) + \
addManifestEntryForFile(destinationName); body->addAttribute("xlink:href", \
destinationName); body->endElement(); // draw:object
}
@@ -1027,7 +1033,7 @@ KoFilter::ConversionStatus PptxXmlSlideReader::read_bgPr()
TRY_READ(effectLst)
}
else if (qualifiedName() == QLatin1String("a:noFill")) {
- m_currentDrawStyle->addAttribute("style:fill", constNone);
+ m_currentDrawStyle->addProperty("draw:fill", constNone);
}
else if (qualifiedName() == QLatin1String("a:blipFill")) {
TRY_READ_IF_NS_IN_CONTEXT(a, blipFill)
diff --git a/filters/libmsooxml/MsooXmlCommonReader.h \
b/filters/libmsooxml/MsooXmlCommonReader.h index 0b18dc0..37fe514 100644
--- a/filters/libmsooxml/MsooXmlCommonReader.h
+++ b/filters/libmsooxml/MsooXmlCommonReader.h
@@ -101,7 +101,6 @@ protected:
bool m_moveToStylesXml;
QSize m_imageSize;
- QString m_recentSourceName; // recent image
QPen m_currentPen;
QSet<QString> m_copiedFiles; //!< collects source names to avoid multiple \
copying of media files
diff --git a/filters/libmsooxml/MsooXmlCommonReaderDrawingMLImpl.h \
b/filters/libmsooxml/MsooXmlCommonReaderDrawingMLImpl.h index b5d49ca..acc4134 100644
--- a/filters/libmsooxml/MsooXmlCommonReaderDrawingMLImpl.h
+++ b/filters/libmsooxml/MsooXmlCommonReaderDrawingMLImpl.h
@@ -62,7 +62,6 @@ void MSOOXML_CURRENT_CLASS::initDrawingML()
m_hyperLink = false;
m_listStylePropertiesAltered = false;
m_inGrpSpPr = false;
- m_fillImageRenderingStyleStretch = false;
}
bool MSOOXML_CURRENT_CLASS::unsupportedPredefinedShape()
@@ -97,30 +96,6 @@ bool MSOOXML_CURRENT_CLASS::unsupportedPredefinedShape()
// ----------------------------------------------------------------
-KoFilter::ConversionStatus MSOOXML_CURRENT_CLASS::copyFile(const QString& \
sourceName,
- const QString& \
destinationDir,
- QString& destinationName,
- bool oleType)
-{
- destinationName = destinationDir + sourceName.mid(sourceName.lastIndexOf('/') + \
1);
- if (oleType) {
- // If it's of type ole, we don't know the file type, by default it has .bin
- // ending which we're removing here.
- destinationName.remove(".bin");
- }
-
- if (m_copiedFiles.contains(destinationName)) {
- kDebug() << sourceName << "already copied - skipping";
- }
- else {
-//! @todo should we check name uniqueness here in case the sourceName can be located \
in various directories?
- RETURN_IF_ERROR( m_context->import->copyFile(sourceName, destinationName, \
oleType) )
- addManifestEntryForFile(destinationName);
- m_copiedFiles.insert(destinationName);
- }
- return KoFilter::OK;
-}
-
// ================================================================
// DrawingML tags
// ================================================================
@@ -180,7 +155,6 @@ KoFilter::ConversionStatus MSOOXML_CURRENT_CLASS::read_pic()
m_cNvPrId.clear();
m_cNvPrName.clear();
m_cNvPrDescr.clear();
- m_fillImageRenderingStyleStretch = false;
m_flipH = false;
m_flipV = false;
m_rot = 0;
@@ -1232,11 +1206,11 @@ KoFilter::ConversionStatus MSOOXML_CURRENT_CLASS::read_spPr()
}
}
}
- else if ( qualifiedName() == QLatin1String("a:ln") ) {
+ else if (qualifiedName() == QLatin1String("a:ln")) {
TRY_READ(ln)
}
else if (qualifiedName() == QLatin1String("a:noFill")) {
- m_currentDrawStyle->addAttribute("style:fill", constNone);
+ m_currentDrawStyle->addProperty("draw:fill", constNone);
}
else if (qualifiedName() == QLatin1String("a:prstGeom")) {
TRY_READ(prstGeom)
@@ -2541,10 +2515,10 @@ KoFilter::ConversionStatus MSOOXML_CURRENT_CLASS::read_blip()
if (sourceName.isEmpty()) {
return KoFilter::FileNotFound;
}
- QString destinationName;
-
- RETURN_IF_ERROR( copyFile(sourceName, QLatin1String("Pictures/"), \
destinationName) )
- m_recentSourceName = sourceName;
+ QString destinationName = QLatin1String("Pictures/") + \
sourceName.mid(sourceName.lastIndexOf('/') + 1); + RETURN_IF_ERROR( \
m_context->import->copyFile(sourceName, destinationName, false ) ) + \
addManifestEntryForFile(destinationName); + m_recentDestName = sourceName;
addManifestEntryForPicturesDir();
m_xlinkHref = destinationName;
}
@@ -2588,7 +2562,6 @@ KoFilter::ConversionStatus \
MSOOXML_CURRENT_CLASS::read_stretch() {
READ_PROLOGUE
- m_fillImageRenderingStyleStretch = true;
m_currentDrawStyle->addProperty("style:repeat", QLatin1String("stretch"));
while (!atEnd()) {
@@ -2770,9 +2743,26 @@ KoFilter::ConversionStatus \
MSOOXML_CURRENT_CLASS::read_srcRect() TRY_READ_ATTR_WITHOUT_NS(r)
TRY_READ_ATTR_WITHOUT_NS(t)
- //TODO: m_imageSize should be converted to cm and percentages here calculatted \
in relation to that
- // and calligra should support fo:clip.
- //m_currentDrawStyle->addProperty("fo:clip", QString("rect(%1, %2, %3, \
%4)").arg(5).arg(5).arg(5).arg(5)); + if (!b.isEmpty()) {
+ qreal bReal = b.toDouble() / 100000;
+ qreal tReal = t.toDouble() / 100000;
+ qreal lReal = l.toDouble() / 100000;
+ qreal rReal = r.toDouble() / 100000;
+
+ int rectLeft = m_imageSize.rwidth() * lReal;
+ int rectTop = m_imageSize.rheight() * tReal;
+ int rectWidth = m_imageSize.rwidth() - m_imageSize.rwidth() * rReal - \
rectLeft; + int rectHeight = m_imageSize.rheight() - m_imageSize.rheight() * \
bReal - rectTop; +
+ QString destinationName = QLatin1String("Pictures/") + b + l + r + t +
+ m_recentDestName.mid(m_recentDestName.lastIndexOf('/') + 1);;
+ QImage image;
+ m_context->import->imageFromFile(m_recentDestName, image);
+ image = image.copy(rectLeft, rectTop, rectWidth, rectHeight);
+ RETURN_IF_ERROR( m_context->import->createImage(image, destinationName) )
+ addManifestEntryForFile(destinationName);
+ m_xlinkHref = destinationName;
+ }
readNext();
READ_EPILOGUE
@@ -2811,8 +2801,6 @@ KoFilter::ConversionStatus \
MSOOXML_CURRENT_CLASS::read_fillRect() TRY_READ_ATTR_WITHOUT_NS(r, t)*/
//MSOOXML_EXPORT qreal ST_Percentage_withMsooxmlFix_to_double(const QString& val, \
bool& ok);
- //m_fillImageRenderingStyle = QLatin1String("stretch");
-
readNext();
READ_EPILOGUE
}
@@ -2980,8 +2968,6 @@ KoFilter::ConversionStatus \
MSOOXML_CURRENT_CLASS::read_blipFill(blipFillCaller c return KoFilter::WrongFormat;
}
- m_fillImageRenderingStyleStretch = false;
-
while (!atEnd()) {
readNext();
kDebug() << *this;
@@ -5555,6 +5541,14 @@ KoFilter::ConversionStatus \
MSOOXML_CURRENT_CLASS::read_bodyPr() TRY_READ_ATTR_WITHOUT_NS(rIns)
TRY_READ_ATTR_WITHOUT_NS(bIns)
TRY_READ_ATTR_WITHOUT_NS(tIns)
+ TRY_READ_ATTR_WITHOUT_NS(vert)
+
+ // Todo
+ if (!vert.isEmpty()) {
+ if (vert == "vert270") {
+ }
+ }
+
//TODO TRY_READ_ATTR_WITHOUT_NS(fontAlgn)
m_shapeTextPosition.clear();
diff --git a/filters/libmsooxml/MsooXmlCommonReaderDrawingMLMethods.h \
b/filters/libmsooxml/MsooXmlCommonReaderDrawingMLMethods.h index af42cc7..54e8cbf \
100644
--- a/filters/libmsooxml/MsooXmlCommonReaderDrawingMLMethods.h
+++ b/filters/libmsooxml/MsooXmlCommonReaderDrawingMLMethods.h
@@ -202,17 +202,9 @@ void algnToODF(const char * odfEl, const QString& emuValue);
//! Sets fo:margin-* attribute of style:style/style:graphic-properties element. Used \
in read_anchor() void distToODF(const char * odfEl, const QString& emuValue);
-//! ODF 1.1., 15.14.9 Fill Image Rendering Style
-//! Set by read_stretch()
-bool m_fillImageRenderingStyleStretch;
-
//! Used by read_wrap*()
void readWrap();
-//! Copies file to destination directory. @a destinationName is set.
-KoFilter::ConversionStatus copyFile(
- const QString& sourceName, const QString& destinationDir, QString& \
destinationName, bool oleType=false);
-
bool m_drawing_anchor; //! set by read_drawing() to indicate if we have encountered \
drawing/anchor, used by read_pic() bool m_drawing_inline; //! set by read_drawing() \
to indicate if we have encountered drawing/inline, used by read_pic()
@@ -269,3 +261,5 @@ qreal* m_currentDoubleValue;
bool m_hyperLink;
QString m_hyperLinkTarget;
+QString m_recentDestName; // recent image
+
diff --git a/filters/libmsooxml/MsooXmlImport.cpp \
b/filters/libmsooxml/MsooXmlImport.cpp index bccc046..fff2208 100644
--- a/filters/libmsooxml/MsooXmlImport.cpp
+++ b/filters/libmsooxml/MsooXmlImport.cpp
@@ -39,6 +39,8 @@
#include <QRegExp>
#include <QImage>
#include <QInputDialog>
+#include <QImageReader>
+#include <QFileInfo>
#include <kdeversion.h>
#include <KDebug>
@@ -533,6 +535,20 @@ KTemporaryFile* MsooXmlImport::tryDecryptFile(QString &filename)
#endif
}
+KoFilter::ConversionStatus MsooXmlImport::createImage(const QImage& source,
+ const QString& destinationName)
+{
+ if (!m_zip || !m_outputStore) {
+ return KoFilter::UsageError;
+ }
+ QString errorMessage;
+ const KoFilter::ConversionStatus status = Utils::createImage(errorMessage, \
source, m_outputStore, destinationName); + if (status != KoFilter::OK) {
+ kWarning() << "Failed to createImage:" << errorMessage;
+ }
+ return status;
+}
+
KoFilter::ConversionStatus MsooXmlImport::copyFile(const QString& sourceName,
const QString& destinationName, bool oleFile)
{
@@ -548,6 +564,28 @@ KoFilter::ConversionStatus MsooXmlImport::copyFile(const \
QString& sourceName, return status;
}
+KoFilter::ConversionStatus MsooXmlImport::imageFromFile(const QString& sourceName, \
QImage& image) +{
+ if (!m_zip) {
+ return KoFilter::UsageError;
+ }
+
+ QString errorMessage;
+ KoFilter::ConversionStatus status = KoFilter::OK;
+
+ std::auto_ptr<QIODevice> inputDevice(Utils::openDeviceForFile(m_zip, \
errorMessage, sourceName, status)); + if (!inputDevice.get()) {
+ return status;
+ }
+ QImageReader r(inputDevice.get(), QFileInfo(sourceName).suffix().toLatin1());
+ if (!r.canRead()) {
+ return KoFilter::WrongFormat;
+ }
+ image = r.read();
+
+ return status;
+}
+
KoFilter::ConversionStatus MsooXmlImport::imageSize(const QString& sourceName, \
QSize& size) {
if (!m_zip) {
diff --git a/filters/libmsooxml/MsooXmlImport.h b/filters/libmsooxml/MsooXmlImport.h
index ffe8346..59bed24 100644
--- a/filters/libmsooxml/MsooXmlImport.h
+++ b/filters/libmsooxml/MsooXmlImport.h
@@ -74,14 +74,21 @@ public:
MsooXmlReaderContext* context = 0);
/*! Copies file @a sourceName from the input archive to the output document
- under @a destinationName name. @return KoFilter::OK on success.
- On failure @a errorMessage is set.
- KoFilter::UsageError is returned if this method is called outside
- of the importing process, i.e. not from within parseParts(). */
+ under @a destinationName name. @return KoFilter::OK on success.
+ On failure @a errorMessage is set.
+ KoFilter::UsageError is returned if this method is called outside
+ of the importing process, i.e. not from within parseParts(). */
KoFilter::ConversionStatus copyFile(const QString& sourceName,
const QString& destinationName,
bool oleFile);
+ /* Creates an image to the resulting odf with the given name */
+ KoFilter::ConversionStatus createImage(const QImage& source,
+ const QString& destinationName);
+
+ /*! @return image from the file for modifications */
+ KoFilter::ConversionStatus imageFromFile(const QString& sourceName, QImage& \
image); +
/*! @return size of image file @a sourceName read from zip archive @a zip.
Size of the image is returned in @a size.
@return KoFilter::OK on success.
diff --git a/filters/libmsooxml/MsooXmlUtils.cpp \
b/filters/libmsooxml/MsooXmlUtils.cpp index 1ea9924..66d3ed9 100644
--- a/filters/libmsooxml/MsooXmlUtils.cpp
+++ b/filters/libmsooxml/MsooXmlUtils.cpp
@@ -333,6 +333,44 @@ static KoFilter::ConversionStatus copyOle(QString& errorMessage,
#undef BLOCK_SIZE
#define BLOCK_SIZE 4096
+KoFilter::ConversionStatus Utils::createImage(QString& errorMessage,
+ const QImage& source, KoStore *outputStore,
+ const QString& destinationName)
+{
+ if (outputStore->hasFile(destinationName)) {
+ return KoFilter::OK;
+ }
+
+ KoFilter::ConversionStatus status = KoFilter::OK;
+ QByteArray array;
+ QBuffer inputDevice(&array);
+ inputDevice.open(QIODevice::ReadWrite);
+ QFileInfo info = QFileInfo(destinationName);
+ source.save(&inputDevice, info.suffix().toUtf8());
+ inputDevice.seek(0);
+
+ if (!outputStore->open(destinationName)) {
+ errorMessage = i18n("Could not open entry \"%1\" for writing.", \
destinationName); + return KoFilter::CreationError;
+ }
+ char block[BLOCK_SIZE];
+ while (true) {
+ const qint64 in = inputDevice.read(block, BLOCK_SIZE);
+ if (in <= 0) {
+ break;
+ }
+ if (in != outputStore->write(block, in)) {
+ errorMessage = i18n("Could not write block");
+ status = KoFilter::CreationError;
+ break;
+ }
+ }
+ outputStore->close();
+ return status;
+}
+#undef BLOCK_SIZE
+
+#define BLOCK_SIZE 4096
KoFilter::ConversionStatus Utils::copyFile(const KZip* zip, QString& errorMessage,
const QString& sourceName, KoStore \
*outputStore,
const QString& destinationName, bool \
oleType) @@ -427,10 +465,11 @@ static bool checkNsUri(const KoXmlElement& el, const \
char* expectedNsUri) bool Utils::convertBooleanAttr(const QString& value, bool \
defaultValue) {
const QByteArray val(value.toLatin1());
- if (val.isEmpty())
+ if (val.isEmpty()) {
return defaultValue;
-kDebug() << val;
-
+ }
+ kDebug() << val;
+
return val != MsooXmlReader::constOff && val != MsooXmlReader::constFalse && val \
!= MsooXmlReader::const0; }
diff --git a/filters/libmsooxml/MsooXmlUtils.h b/filters/libmsooxml/MsooXmlUtils.h
index 12d5bf8..91b90ee 100644
--- a/filters/libmsooxml/MsooXmlUtils.h
+++ b/filters/libmsooxml/MsooXmlUtils.h
@@ -248,10 +248,14 @@ MSOOXML_EXPORT KoFilter::ConversionStatus \
loadAndParseDocument(MsooXmlReader* re @return KoFilter::OK on success.
On failure @a errorMessage is set. */
KoFilter::ConversionStatus copyFile(const KZip* zip, QString& errorMessage,
- const QString& sourceName,
- KoStore *outputStore,
+ const QString& sourceName, KoStore *outputStore,
const QString& destinationName, bool \
oleType=false);
+/*! Creates a file */
+KoFilter::ConversionStatus createImage(QString& errorMessage,
+ const QImage& source, KoStore *outputStore,
+ const QString& destinationName);
+
/*! @return size of image file @a sourceName read from zip archive @a zip.
Size of the image is returned in @a size.
@return KoFilter::OK on success.
diff --git a/filters/tables/xlsx/XlsxXmlWorksheetReader.cpp \
b/filters/tables/xlsx/XlsxXmlWorksheetReader.cpp index 5f8cb22..fc2f771 100644
--- a/filters/tables/xlsx/XlsxXmlWorksheetReader.cpp
+++ b/filters/tables/xlsx/XlsxXmlWorksheetReader.cpp
@@ -1336,10 +1336,11 @@ KoFilter::ConversionStatus \
XlsxXmlWorksheetReader::read_picture() const QXmlStreamAttributes \
attrs(attributes()); TRY_READ_ATTR_WITH_NS(r, id)
const QString link = m_context->relationships->target(m_context->path, \
m_context->file, r_id);
- QString fileName = link.right( link.lastIndexOf('/') +1 );
- RETURN_IF_ERROR( copyFile(link, "Pictures/", fileName) )
- m_context->sheet->setPictureBackgroundPath(fileName);
- //NOTE manifest entry is added by copyFile
+ QString destinationName = QLatin1String("Pictures/") + \
link.mid(link.lastIndexOf('/') + 1); + RETURN_IF_ERROR( \
m_context->import->copyFile(link, destinationName, true ) ) + \
addManifestEntryForFile(destinationName); +
+ m_context->sheet->setPictureBackgroundPath(destinationName);
while (!atEnd()) {
readNext();
@@ -1381,12 +1382,13 @@ KoFilter::ConversionStatus \
XlsxXmlWorksheetReader::read_oleObject() shapeId = "_x0000_s" + shapeId;
const QString link = m_context->relationships->target(m_context->path, \
m_context->file, r_id);
- QString fileName = link.right( link.lastIndexOf('/') +1 );
- RETURN_IF_ERROR( copyFile(link, "", fileName) )
+ QString destinationName = QLatin1String("") + link.mid(link.lastIndexOf('/') + \
1); + RETURN_IF_ERROR( m_context->import->copyFile(link, destinationName, true ) )
+ addManifestEntryForFile(destinationName);
//TODO find out which cell to pick
Cell* cell = m_context->sheet->cell(0, 0, true);
- cell->appendOleObject( qMakePair<QString,QString>(fileName, \
m_context->oleReplacements.value(shapeId)), \
m_context->oleFrameBegins.value(shapeId)); + cell->appendOleObject( \
qMakePair<QString,QString>(destinationName, \
m_context->oleReplacements.value(shapeId)), \
m_context->oleFrameBegins.value(shapeId));
while (!atEnd()) {
readNext();
diff --git a/filters/words/docx/DocxXmlDocumentReader.cpp \
b/filters/words/docx/DocxXmlDocumentReader.cpp index 4b87b75..2d51891 100644
--- a/filters/words/docx/DocxXmlDocumentReader.cpp
+++ b/filters/words/docx/DocxXmlDocumentReader.cpp
@@ -4601,9 +4601,11 @@ KoFilter::ConversionStatus \
DocxXmlDocumentReader::read_OLEObject()
const QString oleName(m_context->relationships->target(m_context->path, \
m_context->file, r_id)); kDebug() << "oleName:" << oleName;
- QString destinationName;
//! @todo ooo saves binaries to the root dir; should we?
- RETURN_IF_ERROR( copyFile(oleName, QString(), destinationName) )
+
+ QString destinationName = QLatin1String("") + \
oleName.mid(oleName.lastIndexOf('/') + 1);; + RETURN_IF_ERROR( \
m_context->import->copyFile(oleName, destinationName, false ) ) + \
addManifestEntryForFile(destinationName);
while (!atEnd()) {
readNext();
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic