Code refactoring: Cache worksheetNames

This commit is contained in:
Debao Zhang
2014-01-02 13:31:29 +08:00
parent 5866e1342c
commit c6e959291c
5 changed files with 31 additions and 37 deletions
+2 -10
View File
@@ -462,11 +462,7 @@ void Document::setCurrentWorksheet(const QString &name)
bool Document::selectWorksheet(const QString &name) bool Document::selectWorksheet(const QString &name)
{ {
Q_D(Document); Q_D(Document);
for (int i=0; i<d->workbook->worksheetCount(); ++i) { return d->workbook->setActiveWorksheet(worksheetNames().indexOf(name));
if (d->workbook->worksheet(i)->sheetName() == name)
return d->workbook->setActiveWorksheet(i);
}
return false;
} }
/*! /*!
@@ -475,11 +471,7 @@ bool Document::selectWorksheet(const QString &name)
QStringList Document::worksheetNames() const QStringList Document::worksheetNames() const
{ {
Q_D(const Document); Q_D(const Document);
QStringList names; return d->workbook->worksheetNames();
for (int i=0; i<d->workbook->worksheetCount(); ++i)
names.append(d->workbook->worksheet(i)->sheetName());
return names;
} }
/*! /*!
+26 -26
View File
@@ -163,6 +163,15 @@ Worksheet *Workbook::addWorksheet(const QString &name)
return insertWorkSheet(d->worksheets.size(), name); return insertWorkSheet(d->worksheets.size(), name);
} }
/*!
* \internal
*/
QStringList Workbook::worksheetNames() const
{
Q_D(const Workbook);
return d->worksheetNames;
}
/*! /*!
* \internal * \internal
* Used only when load the xlsx file!! * Used only when load the xlsx file!!
@@ -175,6 +184,7 @@ Worksheet *Workbook::addWorksheet(const QString &name, int sheetId)
Worksheet *sheet = new Worksheet(name, sheetId, this); Worksheet *sheet = new Worksheet(name, sheetId, this);
d->worksheets.append(QSharedPointer<Worksheet>(sheet)); d->worksheets.append(QSharedPointer<Worksheet>(sheet));
d->worksheetNames.append(name);
return sheet; return sheet;
} }
@@ -184,27 +194,19 @@ Worksheet *Workbook::insertWorkSheet(int index, const QString &name)
QString worksheetName = name; QString worksheetName = name;
if (!name.isEmpty()) { if (!name.isEmpty()) {
//If user given an already in-used name, we should not continue any more! //If user given an already in-used name, we should not continue any more!
for (int i=0; i<d->worksheets.size(); ++i) { if (d->worksheetNames.contains(name))
if (d->worksheets[i]->sheetName() == name) { return 0;
return 0;
}
}
} else { } else {
bool exists;
do { do {
++d->last_sheet_index; ++d->last_sheet_index;
exists = false;
worksheetName = QStringLiteral("Sheet%1").arg(d->last_sheet_index); worksheetName = QStringLiteral("Sheet%1").arg(d->last_sheet_index);
for (int i=0; i<d->worksheets.size(); ++i) { } while (d->worksheetNames.contains(worksheetName));
if (d->worksheets[i]->sheetName() == worksheetName)
exists = true;
}
} while (exists);
} }
++d->last_sheet_id; ++d->last_sheet_id;
Worksheet *sheet = new Worksheet(worksheetName, d->last_sheet_id, this); Worksheet *sheet = new Worksheet(worksheetName, d->last_sheet_id, this);
d->worksheets.insert(index, QSharedPointer<Worksheet>(sheet)); d->worksheets.insert(index, QSharedPointer<Worksheet>(sheet));
d->worksheetNames.insert(index, worksheetName);
d->activesheetIndex = index; d->activesheetIndex = index;
return sheet; return sheet;
} }
@@ -242,6 +244,7 @@ bool Workbook::renameWorksheet(int index, const QString &name)
} }
d->worksheets[index]->setSheetName(name); d->worksheets[index]->setSheetName(name);
d->worksheetNames[index] = name;
return true; return true;
} }
@@ -256,6 +259,7 @@ bool Workbook::deleteWorksheet(int index)
if (index < 0 || index >= d->worksheets.size()) if (index < 0 || index >= d->worksheets.size())
return false; return false;
d->worksheets.removeAt(index); d->worksheets.removeAt(index);
d->worksheetNames.removeAt(index);
return true; return true;
} }
@@ -272,10 +276,14 @@ bool Workbook::moveWorksheet(int srcIndex, int distIndex)
return false; return false;
QSharedPointer<Worksheet> sheet = d->worksheets.takeAt(srcIndex); QSharedPointer<Worksheet> sheet = d->worksheets.takeAt(srcIndex);
if (distIndex >= 0 || distIndex <= d->worksheets.size()) d->worksheetNames.takeAt(srcIndex);
if (distIndex >= 0 || distIndex <= d->worksheets.size()) {
d->worksheets.insert(distIndex, sheet); d->worksheets.insert(distIndex, sheet);
else d->worksheetNames.insert(distIndex, sheet->sheetName());
} else {
d->worksheets.append(sheet); d->worksheets.append(sheet);
d->worksheetNames.append(sheet->sheetName());
}
return true; return true;
} }
@@ -288,28 +296,20 @@ bool Workbook::copyWorksheet(int index, const QString &newName)
QString worksheetName = newName; QString worksheetName = newName;
if (!newName.isEmpty()) { if (!newName.isEmpty()) {
//If user given an already in-used name, we should not continue any more! //If user given an already in-used name, we should not continue any more!
for (int i=0; i<d->worksheets.size(); ++i) { if (d->worksheetNames.contains(newName))
if (d->worksheets[i]->sheetName() == newName) { return false;
return 0;
}
}
} else { } else {
int copy_index = 1; int copy_index = 1;
bool exists;
do { do {
++copy_index; ++copy_index;
exists = false;
worksheetName = QStringLiteral("%1(%2)").arg(d->worksheets[index]->sheetName()).arg(copy_index); worksheetName = QStringLiteral("%1(%2)").arg(d->worksheets[index]->sheetName()).arg(copy_index);
for (int i=0; i<d->worksheets.size(); ++i) { } while (d->worksheetNames.contains(worksheetName));
if (d->worksheets[i]->sheetName() == worksheetName)
exists = true;
}
} while (exists);
} }
++d->last_sheet_id; ++d->last_sheet_id;
QSharedPointer<Worksheet> sheet = d->worksheets[index]->copy(worksheetName, d->last_sheet_id); QSharedPointer<Worksheet> sheet = d->worksheets[index]->copy(worksheetName, d->last_sheet_id);
d->worksheets.append(sheet); d->worksheets.append(sheet);
d->worksheetNames.append(sheet->sheetName());
return false; return false;
} }
+1
View File
@@ -93,6 +93,7 @@ private:
QList<QImage> images(); QList<QImage> images();
QList<Drawing *> drawings(); QList<Drawing *> drawings();
void prepareDrawings(); void prepareDrawings();
QStringList worksheetNames() const;
Worksheet *addWorksheet(const QString &name, int sheetId); Worksheet *addWorksheet(const QString &name, int sheetId);
WorkbookPrivate * const d_ptr; WorkbookPrivate * const d_ptr;
}; };
+1
View File
@@ -80,6 +80,7 @@ public:
QSharedPointer<SharedStrings> sharedStrings; QSharedPointer<SharedStrings> sharedStrings;
QList<QSharedPointer<Worksheet> > worksheets; QList<QSharedPointer<Worksheet> > worksheets;
QStringList worksheetNames;
QSharedPointer<Styles> styles; QSharedPointer<Styles> styles;
QSharedPointer<Theme> theme; QSharedPointer<Theme> theme;
QList<QImage> images; QList<QImage> images;
+1 -1
View File
@@ -126,7 +126,6 @@ public:
void setWhiteSpaceVisible(bool visible); void setWhiteSpaceVisible(bool visible);
QString sheetName() const; QString sheetName() const;
void setSheetName(const QString &sheetName);
Workbook *workbook() const; Workbook *workbook() const;
~Worksheet(); ~Worksheet();
@@ -136,6 +135,7 @@ private:
friend class ::WorksheetTest; friend class ::WorksheetTest;
Worksheet(const QString &sheetName, int sheetId, Workbook *book); Worksheet(const QString &sheetName, int sheetId, Workbook *book);
QSharedPointer<Worksheet> copy(const QString &distName, int distId) const; QSharedPointer<Worksheet> copy(const QString &distName, int distId) const;
void setSheetName(const QString &sheetName);
void saveToXmlFile(QIODevice *device); void saveToXmlFile(QIODevice *device);
QByteArray saveToXmlData(); QByteArray saveToXmlData();