Browse Source

Code refactoring: Clean up

master
Debao Zhang 11 years ago
parent
commit
c2fc9e4aa1
  1. 39
      src/xlsx/xlsxdocument.cpp
  2. 2
      src/xlsx/xlsxdrawing_p.h
  3. 4
      src/xlsx/xlsxdrawinganchor.cpp
  4. 19
      src/xlsx/xlsxworkbook.cpp
  5. 43
      src/xlsx/xlsxworksheet.cpp
  6. 2
      src/xlsx/xlsxworksheet.h
  7. 3
      src/xlsx/xlsxworksheet_p.h

39
src/xlsx/xlsxdocument.cpp

@ -145,9 +145,9 @@ bool DocumentPrivate::loadPackage(QIODevice *device)
if (rels_xl.isEmpty()) if (rels_xl.isEmpty())
return false; return false;
QString xlworkbook_Path = rels_xl[0].target; QString xlworkbook_Path = rels_xl[0].target;
QStringList xlworkbook_PathList = splitPath(xlworkbook_Path); QString xlworkbook_Dir = splitPath(xlworkbook_Path)[0];
QString xlworkbook_Dir = xlworkbook_PathList[0];
workbook->relationships().loadFromXmlData(zipReader.fileData(getRelFilePath(xlworkbook_Path))); workbook->relationships().loadFromXmlData(zipReader.fileData(getRelFilePath(xlworkbook_Path)));
workbook->setFilePath(xlworkbook_Path);
workbook->loadFromXmlData(zipReader.fileData(xlworkbook_Path)); workbook->loadFromXmlData(zipReader.fileData(xlworkbook_Path));
//load styles //load styles
@ -180,33 +180,22 @@ bool DocumentPrivate::loadPackage(QIODevice *device)
} }
//load worksheets //load worksheets
QList<XlsxRelationship> rels_worksheets = workbook->relationships().documentRelationships(QStringLiteral("/worksheet")); for (int i=0; i<workbook->worksheetCount(); ++i) {
if (rels_worksheets.isEmpty()) Worksheet *sheet = workbook->worksheet(i);
return false; QString rel_path = getRelFilePath(sheet->filePath());
QList<XlsxSheetItemInfo> sheetNameIdPairList = workbook->d_func()->sheetItemInfoList;
for (int i=0; i<sheetNameIdPairList.size(); ++i) {
XlsxSheetItemInfo info = sheetNameIdPairList[i];
QString worksheet_path = xlworkbook_Dir + QLatin1String("/") + workbook->relationships().getRelationshipById(info.rId).target;
QString rel_path = getRelFilePath(worksheet_path);
Worksheet *sheet = workbook->addWorksheet(info.name, info.sheetId);
//If the .rel file exists, load it. //If the .rel file exists, load it.
if (zipReader.filePaths().contains(rel_path)) if (zipReader.filePaths().contains(rel_path))
sheet->relationships().loadFromXmlData(zipReader.fileData(rel_path)); sheet->relationships().loadFromXmlData(zipReader.fileData(rel_path));
sheet->loadFromXmlData(zipReader.fileData(worksheet_path)); sheet->loadFromXmlData(zipReader.fileData(sheet->filePath()));
//load drawing if exists
if (!sheet->drawingPath().isEmpty()) {
QString drawingPath = QDir::cleanPath(splitPath(worksheet_path)[0] + QLatin1String("/") + sheet->drawingPath());
Drawing *drawing = new Drawing(workbook.data());
drawing->pathInPackage = drawingPath;
QString drawing_rel_path = getRelFilePath(drawingPath);
if (zipReader.filePaths().contains(drawing_rel_path))
drawing->relationships.loadFromXmlData(zipReader.fileData(drawing_rel_path));
drawing->loadFromXmlData(zipReader.fileData(drawingPath));
sheet->setDrawing(drawing);
} }
//load drawings
for (int i=0; i<workbook->drawings().size(); ++i) {
Drawing *drawing = workbook->drawings()[i];
QString rel_path = getRelFilePath(drawing->filePath());
if (zipReader.filePaths().contains(rel_path))
drawing->relationships.loadFromXmlData(zipReader.fileData(rel_path));
drawing->loadFromXmlData(zipReader.fileData(drawing->filePath()));
} }
//load charts //load charts

2
src/xlsx/xlsxdrawing_p.h

@ -64,8 +64,6 @@ public:
Workbook *workbook; Workbook *workbook;
QList<DrawingAnchor *> anchors; QList<DrawingAnchor *> anchors;
mutable Relationships relationships; mutable Relationships relationships;
QString pathInPackage;
}; };
} // namespace QXlsx } // namespace QXlsx

4
src/xlsx/xlsxdrawinganchor.cpp

@ -181,7 +181,7 @@ void DrawingAnchor::loadXmlObjectGraphicFrame(QXmlStreamReader &reader)
if (reader.name() == QLatin1String("chart")) { if (reader.name() == QLatin1String("chart")) {
QString rId = reader.attributes().value(QLatin1String("r:id")).toString(); QString rId = reader.attributes().value(QLatin1String("r:id")).toString();
QString name = m_drawing->relationships.getRelationshipById(rId).target; QString name = m_drawing->relationships.getRelationshipById(rId).target;
QString path = QDir::cleanPath(splitPath(m_drawing->pathInPackage)[0] + QLatin1String("/") + name); QString path = QDir::cleanPath(splitPath(m_drawing->filePath())[0] + QLatin1String("/") + name);
bool exist = false; bool exist = false;
QList<QSharedPointer<ChartFile> > cfs = m_drawing->workbook->chartFiles(); QList<QSharedPointer<ChartFile> > cfs = m_drawing->workbook->chartFiles();
@ -222,7 +222,7 @@ void DrawingAnchor::loadXmlObjectPicture(QXmlStreamReader &reader)
if (reader.name() == QLatin1String("blip")) { if (reader.name() == QLatin1String("blip")) {
QString rId = reader.attributes().value(QLatin1String("r:embed")).toString(); QString rId = reader.attributes().value(QLatin1String("r:embed")).toString();
QString name = m_drawing->relationships.getRelationshipById(rId).target; QString name = m_drawing->relationships.getRelationshipById(rId).target;
QString path = QDir::cleanPath(splitPath(m_drawing->pathInPackage)[0] + QLatin1String("/") + name); QString path = QDir::cleanPath(splitPath(m_drawing->filePath())[0] + QLatin1String("/") + name);
bool exist = false; bool exist = false;
QList<QSharedPointer<MediaFile> > mfs = m_drawing->workbook->mediaFiles(); QList<QSharedPointer<MediaFile> > mfs = m_drawing->workbook->mediaFiles();

19
src/xlsx/xlsxworkbook.cpp

@ -31,11 +31,13 @@
#include "xlsxworksheet_p.h" #include "xlsxworksheet_p.h"
#include "xlsxformat_p.h" #include "xlsxformat_p.h"
#include "xlsxmediafile_p.h" #include "xlsxmediafile_p.h"
#include "xlsxutility_p.h"
#include <QXmlStreamWriter> #include <QXmlStreamWriter>
#include <QXmlStreamReader> #include <QXmlStreamReader>
#include <QFile> #include <QFile>
#include <QBuffer> #include <QBuffer>
#include <QDir>
QT_BEGIN_NAMESPACE_XLSX QT_BEGIN_NAMESPACE_XLSX
@ -485,14 +487,17 @@ bool Workbook::loadFromXmlFile(QIODevice *device)
QXmlStreamReader::TokenType token = reader.readNext(); QXmlStreamReader::TokenType token = reader.readNext();
if (token == QXmlStreamReader::StartElement) { if (token == QXmlStreamReader::StartElement) {
if (reader.name() == QLatin1String("sheet")) { if (reader.name() == QLatin1String("sheet")) {
XlsxSheetItemInfo info;
QXmlStreamAttributes attributes = reader.attributes(); QXmlStreamAttributes attributes = reader.attributes();
info.name = attributes.value(QLatin1String("name")).toString(); const QString name = attributes.value(QLatin1String("name")).toString();
info.sheetId = attributes.value(QLatin1String("sheetId")).toString().toInt(); int sheetId = attributes.value(QLatin1String("sheetId")).toString().toInt();
info.rId = attributes.value(QLatin1String("r:id")).toString(); const QString rId = attributes.value(QLatin1String("r:id")).toString();
if (attributes.hasAttribute(QLatin1String("state"))) // if (attributes.hasAttribute(QLatin1String("state")))
info.state = attributes.value(QLatin1String("state")).toString(); // QString state = attributes.value(QLatin1String("state")).toString();
d->sheetItemInfoList.append(info);
Worksheet *sheet = addWorksheet(name, sheetId);
const QString path = d->relationships.getRelationshipById(rId).target;
const QString fullPath = QDir::cleanPath(splitPath(filePath())[0] +QLatin1String("/")+ path);
sheet->setFilePath(fullPath);
} else if (reader.name() == QLatin1String("workbookPr")) { } else if (reader.name() == QLatin1String("workbookPr")) {
QXmlStreamAttributes attrs = reader.attributes(); QXmlStreamAttributes attrs = reader.attributes();
if (attrs.hasAttribute(QLatin1String("date1904"))) if (attrs.hasAttribute(QLatin1String("date1904")))

43
src/xlsx/xlsxworksheet.cpp

@ -49,6 +49,7 @@
#include <QXmlStreamWriter> #include <QXmlStreamWriter>
#include <QXmlStreamReader> #include <QXmlStreamReader>
#include <QTextDocument> #include <QTextDocument>
#include <QDir>
#include <math.h> #include <math.h>
@ -60,8 +61,6 @@ WorksheetPrivate::WorksheetPrivate(Worksheet *p)
, showZeros(true), rightToLeft(false), tabSelected(false), showRuler(false) , showZeros(true), rightToLeft(false), tabSelected(false), showRuler(false)
, showOutlineSymbols(true), showWhiteSpace(true) , showOutlineSymbols(true), showWhiteSpace(true)
{ {
drawing = 0;
previous_row = 0; previous_row = 0;
outline_row_level = 0; outline_row_level = 0;
@ -75,8 +74,6 @@ WorksheetPrivate::WorksheetPrivate(Worksheet *p)
WorksheetPrivate::~WorksheetPrivate() WorksheetPrivate::~WorksheetPrivate()
{ {
if (drawing)
delete drawing;
} }
/* /*
@ -1026,9 +1023,9 @@ bool Worksheet::insertImage(int row, int column, const QImage &image)
return false; return false;
if (!d->drawing) if (!d->drawing)
d->drawing = new Drawing(d->workbook); d->drawing = QSharedPointer<Drawing>(new Drawing(d->workbook));
DrawingOneCellAnchor *anchor = new DrawingOneCellAnchor(d->drawing, DrawingAnchor::Picture); DrawingOneCellAnchor *anchor = new DrawingOneCellAnchor(d->drawing.data(), DrawingAnchor::Picture);
/* /*
The size are expressed as English Metric Units (EMUs). There are The size are expressed as English Metric Units (EMUs). There are
@ -1451,7 +1448,7 @@ void WorksheetPrivate::saveXmlDrawings(QXmlStreamWriter &writer) const
if (!drawing) if (!drawing)
return; return;
int idx = workbook->drawings().indexOf(drawing); int idx = workbook->drawings().indexOf(drawing.data());
relationships.addWorksheetRelationship(QStringLiteral("/drawing"), QStringLiteral("../drawings/drawing%1.xml").arg(idx+1)); relationships.addWorksheetRelationship(QStringLiteral("/drawing"), QStringLiteral("../drawings/drawing%1.xml").arg(idx+1));
writer.writeEmptyElement(QStringLiteral("drawing")); writer.writeEmptyElement(QStringLiteral("drawing"));
@ -1699,32 +1696,7 @@ CellRange Worksheet::dimension() const
Drawing *Worksheet::drawing() const Drawing *Worksheet::drawing() const
{ {
Q_D(const Worksheet); Q_D(const Worksheet);
return d->drawing; return d->drawing.data();
}
/*!
* \internal
*
* When loading the .xlsx package, the drawing{x}.xml file path
* is extracted when we parse the sheet{x}.xml file.
*/
QString Worksheet::drawingPath() const
{
Q_D(const Worksheet);
return d->drawingPath_in_zip;
}
/*!
* \internal
*
* Note, the object will be managed by this sheet.
*/
void Worksheet::setDrawing(Drawing *draw)
{
Q_D(Worksheet);
Q_ASSERT(!d->drawing);
d->drawing = draw;
} }
/* /*
@ -2114,7 +2086,10 @@ bool Worksheet::loadFromXmlFile(QIODevice *device)
d->loadXmlHyperlinks(reader); d->loadXmlHyperlinks(reader);
} else if (reader.name() == QLatin1String("drawing")) { } else if (reader.name() == QLatin1String("drawing")) {
QString rId = reader.attributes().value(QStringLiteral("r:id")).toString(); QString rId = reader.attributes().value(QStringLiteral("r:id")).toString();
d->drawingPath_in_zip = d->relationships.getRelationshipById(rId).target; QString name = d->relationships.getRelationshipById(rId).target;
QString path = QDir::cleanPath(splitPath(filePath())[0] + QLatin1String("/") + name);
d->drawing = QSharedPointer<Drawing>(new Drawing(d->workbook));
d->drawing->filePath() = path;
} }
} }
} }

2
src/xlsx/xlsxworksheet.h

@ -151,8 +151,6 @@ private:
int sheetId() const; int sheetId() const;
Drawing *drawing() const; Drawing *drawing() const;
void setDrawing(Drawing *d);
QString drawingPath() const;
}; };
QT_END_NAMESPACE_XLSX QT_END_NAMESPACE_XLSX

3
src/xlsx/xlsxworksheet_p.h

@ -146,8 +146,7 @@ public:
Workbook *workbook; Workbook *workbook;
mutable Relationships relationships; mutable Relationships relationships;
Drawing *drawing; QSharedPointer<Drawing> drawing;
QString drawingPath_in_zip;
QMap<int, QMap<int, QSharedPointer<Cell> > > cellTable; QMap<int, QMap<int, QSharedPointer<Cell> > > cellTable;
QMap<int, QMap<int, QString> > comments; QMap<int, QMap<int, QString> > comments;
QMap<int, QMap<int, QSharedPointer<XlsxHyperlinkData> > > urlTable; QMap<int, QMap<int, QSharedPointer<XlsxHyperlinkData> > > urlTable;

Loading…
Cancel
Save