r23240 by jghali - #15841: When cloning a style, add a number instead of prepending "Clone of"
scribus-commit
scribus-commit at lists.scribus.net
Wed Oct 9 03:19:13 UTC 2019
Author: jghali
Date: Wed Oct 9 03:19:13 2019
New Revision: 23240
URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=23240
Log:
#15841: When cloning a style, add a number instead of prepending "Clone of"
Modified:
trunk/Scribus/scribus/plugins/fileloader/scribus12format/scribus12format.cpp
trunk/Scribus/scribus/plugins/fileloader/scribus134format/scribus134format.cpp
trunk/Scribus/scribus/plugins/fileloader/scribus13format/scribus13format.cpp
trunk/Scribus/scribus/plugins/fileloader/scribus150format/scribus150format.cpp
trunk/Scribus/scribus/styles/styleset.h
trunk/Scribus/scribus/ui/smcellstyle.cpp
trunk/Scribus/scribus/ui/smlinestyle.cpp
trunk/Scribus/scribus/ui/smtablestyle.cpp
trunk/Scribus/scribus/ui/smtextstyles.cpp
Modified: trunk/Scribus/scribus/plugins/fileloader/scribus12format/scribus12format.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=23240&path=/trunk/Scribus/scribus/plugins/fileloader/scribus12format/scribus12format.cpp
==============================================================================
--- trunk/Scribus/scribus/plugins/fileloader/scribus12format/scribus12format.cpp (original)
+++ trunk/Scribus/scribus/plugins/fileloader/scribus12format/scribus12format.cpp Wed Oct 9 03:19:13 2019
@@ -2252,8 +2252,9 @@
QString fColor, sColor;
QString tmpf;
double xf, xf2;
- bool fou = false;
+ bool found = false;
const StyleSet<ParagraphStyle> & docParagraphStyles(tempParagraphStyles? *tempParagraphStyles : doc->paragraphStyles());
+
vg->setName(pg->attribute("NAME"));
vg->setLineSpacingMode(static_cast<ParagraphStyle::LineSpacingMode>(pg->attribute("LINESPMode", "0").toInt()));
vg->setLineSpacing(ScCLocale::toDoubleC(pg->attribute("LINESP")));
@@ -2313,7 +2314,7 @@
tbs.append(tb);
}
vg->setTabValues(tbs);
- tmp = "";
+ tmp.clear();
}
else
{
@@ -2336,49 +2337,51 @@
tbs.append(tb);
}
vg->setTabValues(tbs);
- IT=IT.nextSibling();
- }
- }
- for (int xx=0; xx<docParagraphStyles.count(); ++xx)
- {
- if (vg->name() == docParagraphStyles[xx].name())
+ IT = IT.nextSibling();
+ }
+ }
+ for (int i = 0; i < docParagraphStyles.count(); ++i)
+ {
+ const ParagraphStyle& paraStyle = docParagraphStyles[i];
+ if (vg->name() == paraStyle.name())
{
//Compare the attributes of the pasted styles vs existing ones
- if (vg->equiv(docParagraphStyles[xx]))
+ if (vg->equiv(paraStyle))
{
if (fl)
{
- DoVorl[VorlC] = docParagraphStyles[xx].name();
+ DoVorl[VorlC] = paraStyle.name();
VorlC++;
}
- fou = true;
+ found = true;
}
else
{
- vg->setName("Copy of "+docParagraphStyles[xx].name());
- fou = false;
+ vg->setName(docParagraphStyles.getUniqueCopyName(paraStyle.name()));
+ found = false;
}
break;
}
}
- if (!fou)
- {
- for (int xx=0; xx< docParagraphStyles.count(); ++xx)
- {
- if (vg->equiv(docParagraphStyles[xx]))
+ if (!found)
+ {
+ for (int i = 0; i < docParagraphStyles.count(); ++i)
+ {
+ const ParagraphStyle& paraStyle = docParagraphStyles[i];
+ if (vg->equiv(paraStyle))
{
- vg->setName(docParagraphStyles[xx].name());
- fou = true;
+ vg->setName(paraStyle.name());
+ found = true;
if (fl)
{
- DoVorl[VorlC] = docParagraphStyles[xx].name();
+ DoVorl[VorlC] = paraStyle.name();
VorlC++;
}
break;
}
}
}
- if (!fou)
+ if (!found)
{
if (tempParagraphStyles)
tempParagraphStyles->create(*vg);
Modified: trunk/Scribus/scribus/plugins/fileloader/scribus134format/scribus134format.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=23240&path=/trunk/Scribus/scribus/plugins/fileloader/scribus134format/scribus134format.cpp
==============================================================================
--- trunk/Scribus/scribus/plugins/fileloader/scribus134format/scribus134format.cpp (original)
+++ trunk/Scribus/scribus/plugins/fileloader/scribus134format/scribus134format.cpp Wed Oct 9 03:19:13 2019
@@ -3493,13 +3493,14 @@
void Scribus134Format::getStyle(ParagraphStyle& style, ScXmlStreamReader& reader, StyleSet<ParagraphStyle> *tempStyles, ScribusDoc* doc, bool fl)
{
bool found(false);
- const StyleSet<ParagraphStyle> * docParagraphStyles = tempStyles? tempStyles : & doc->paragraphStyles();
+ const StyleSet<ParagraphStyle> &docParagraphStyles = tempStyles ? *tempStyles : doc->paragraphStyles();
readParagraphStyle(doc, reader, style);
- for (int xx=0; xx<docParagraphStyles->count(); ++xx)
- {
- if (style.name() == (*docParagraphStyles)[xx].name())
- {
- if (style.equiv((*docParagraphStyles)[xx]))
+ for (int i = 0; i < docParagraphStyles.count(); ++i)
+ {
+ const ParagraphStyle& paraStyle = docParagraphStyles[i];
+ if (style.name() == paraStyle.name())
+ {
+ if (style.equiv(paraStyle))
{
if (fl)
{
@@ -3510,7 +3511,7 @@
}
else
{
- style.setName("Copy of "+(*docParagraphStyles)[xx].name());
+ style.setName(docParagraphStyles.getUniqueCopyName(paraStyle.name()));
found = false;
}
break;
@@ -3518,12 +3519,13 @@
}
if (!found && fl)
{
- for (int xx=0; xx < docParagraphStyles->count(); ++xx)
- {
- if (style.equiv((*docParagraphStyles)[xx]))
- {
- parStyleMap[style.name()] = (*docParagraphStyles)[xx].name();
- style.setName((*docParagraphStyles)[xx].name());
+ for (int i = 0; i < docParagraphStyles.count(); ++i)
+ {
+ const ParagraphStyle& paraStyle = docParagraphStyles[i];
+ if (style.equiv(paraStyle))
+ {
+ parStyleMap[style.name()] = paraStyle.name();
+ style.setName(paraStyle.name());
legacyStyleMap[legacyStyleCount] = style.name();
legacyStyleCount++;
found = true;
Modified: trunk/Scribus/scribus/plugins/fileloader/scribus13format/scribus13format.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=23240&path=/trunk/Scribus/scribus/plugins/fileloader/scribus13format/scribus13format.cpp
==============================================================================
--- trunk/Scribus/scribus/plugins/fileloader/scribus13format/scribus13format.cpp (original)
+++ trunk/Scribus/scribus/plugins/fileloader/scribus13format/scribus13format.cpp Wed Oct 9 03:19:13 2019
@@ -2516,38 +2516,40 @@
void Scribus13Format::GetStyle(QDomElement *pg, ParagraphStyle *vg, StyleSet<ParagraphStyle> *tempParagraphStyles, ScribusDoc* doc, bool fl)
{
- bool fou = false;
+ bool found = false;
readParagraphStyle(*vg, *pg, doc);
- const StyleSet<ParagraphStyle> & docParagraphStyles(tempParagraphStyles? *tempParagraphStyles : doc->paragraphStyles());
- for (int xx=0; xx<docParagraphStyles.count(); ++xx)
- {
- if (vg->name() == docParagraphStyles[xx].name())
- {
- if (vg->equiv(docParagraphStyles[xx]))
+ const StyleSet<ParagraphStyle> & docParagraphStyles(tempParagraphStyles ? *tempParagraphStyles : doc->paragraphStyles());
+ for (int i = 0; i < docParagraphStyles.count(); ++i)
+ {
+ const ParagraphStyle& paraStyle = docParagraphStyles[i];
+ if (vg->name() == paraStyle.name())
+ {
+ if (vg->equiv(paraStyle))
{
if (fl)
{
DoVorl[VorlC] = vg->name();
++VorlC;
}
- fou = true;
+ found = true;
}
else
{
- vg->setName("Copy of "+docParagraphStyles[xx].name());
- fou = false;
+ vg->setName(docParagraphStyles.getUniqueCopyName(paraStyle.name()));
+ found = false;
}
break;
}
}
- if (!fou)
- {
- for (int xx=0; xx< docParagraphStyles.count(); ++xx)
- {
- if (vg->equiv(docParagraphStyles[xx]))
- {
- vg->setName(docParagraphStyles[xx].name());
- fou = true;
+ if (!found)
+ {
+ for (int i = 0; i < docParagraphStyles.count(); ++i)
+ {
+ const ParagraphStyle& paraStyle = docParagraphStyles[i];
+ if (vg->equiv(paraStyle))
+ {
+ vg->setName(paraStyle.name());
+ found = true;
if (fl)
{
DoVorl[VorlC] = vg->name();
@@ -2557,7 +2559,7 @@
}
}
}
- if (!fou)
+ if (!found)
{
if (tempParagraphStyles)
tempParagraphStyles->create(*vg);
Modified: trunk/Scribus/scribus/plugins/fileloader/scribus150format/scribus150format.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=23240&path=/trunk/Scribus/scribus/plugins/fileloader/scribus150format/scribus150format.cpp
==============================================================================
--- trunk/Scribus/scribus/plugins/fileloader/scribus150format/scribus150format.cpp (original)
+++ trunk/Scribus/scribus/plugins/fileloader/scribus150format/scribus150format.cpp Wed Oct 9 03:19:13 2019
@@ -6599,20 +6599,20 @@
void Scribus150Format::getStyle(ParagraphStyle& style, ScXmlStreamReader& reader, StyleSet<ParagraphStyle> *tempStyles, ScribusDoc* doc, bool fl)
{
bool found(false);
- const StyleSet<ParagraphStyle> * docParagraphStyles = tempStyles? tempStyles : & doc->paragraphStyles();
- //UNUSED: PrefsManager& prefsManager = PrefsManager::instance();
+ const StyleSet<ParagraphStyle> &docParagraphStyles = tempStyles ? *tempStyles : doc->paragraphStyles();
readParagraphStyle(doc, reader, style);
- for (int xx=0; xx<docParagraphStyles->count(); ++xx)
- {
- if (style.name() == (*docParagraphStyles)[xx].name())
- {
- if (style.equiv((*docParagraphStyles)[xx]))
+ for (int xx = 0; xx < docParagraphStyles.count(); ++xx)
+ {
+ const ParagraphStyle& paraStyle = docParagraphStyles[xx];
+ if (style.name() == paraStyle.name())
+ {
+ if (style.equiv(paraStyle))
{
found = true;
}
else
{
- style.setName("Copy of "+(*docParagraphStyles)[xx].name());
+ style.setName(docParagraphStyles.getUniqueCopyName(paraStyle.name()));
found = false;
}
break;
@@ -6620,12 +6620,13 @@
}
if (!found && fl)
{
- for (int xx=0; xx< docParagraphStyles->count(); ++xx)
- {
- if (style.equiv((*docParagraphStyles)[xx]))
- {
- parStyleMap[style.name()] = (*docParagraphStyles)[xx].name();
- style.setName((*docParagraphStyles)[xx].name());
+ for (int xx = 0; xx < docParagraphStyles.count(); ++xx)
+ {
+ const ParagraphStyle& paraStyle = docParagraphStyles[xx];
+ if (style.equiv(paraStyle))
+ {
+ parStyleMap[style.name()] = paraStyle.name();
+ style.setName(paraStyle.name());
found = true;
break;
}
Modified: trunk/Scribus/scribus/styles/styleset.h
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=23240&path=/trunk/Scribus/scribus/styles/styleset.h
==============================================================================
--- trunk/Scribus/scribus/styles/styleset.h (original)
+++ trunk/Scribus/scribus/styles/styleset.h Wed Oct 9 03:19:13 2019
@@ -4,6 +4,7 @@
#define STYLESET_H
#include <QList>
+#include <QRegExp>
#include <assert.h>
#include "style.h"
@@ -38,6 +39,8 @@
inline int find(const QString& name) const;
inline const BaseStyle* resolve(const QString& name) const;
+
+ QString getUniqueCopyName(const QString& originalName) const;
int count() const
{
@@ -124,7 +127,7 @@
template<class STYLE>
inline void StyleSet<STYLE>::remove(int index)
{
- assert(index>=0 && index < styles.count());
+ assert(index >= 0 && index < styles.count());
// QList<STYLE*> it = styles.at(index);
if (styles.at(index) == m_default)
return;
@@ -156,7 +159,7 @@
{
if (name.isEmpty())
return m_default;
- for (int i=0; i < styles.count(); ++i)
+ for (int i = 0; i < styles.count(); ++i)
{
if (styles[i]->name() == name)
return styles[i];
@@ -165,12 +168,49 @@
}
template<class STYLE>
+QString StyleSet<STYLE>::getUniqueCopyName(const QString& originalName) const
+{
+ if (!this->contains(originalName))
+ return originalName;
+
+ QString newName(originalName);
+
+ // Search the string for (number) at the end and capture
+ // both the number and the text leading up to it sans brackets.
+ // Copy of fred (5)
+ // ^^^^^^^^^^^^ ^ (where ^ means captured)
+ static QRegExp rx("^(.*)\\s+\\((\\d+)\\)$");
+ int numMatches = rx.lastIndexIn(originalName);
+ // Add a (number) suffix to the end of the name. We start at the
+ // old suffix's value if there was one, or at 2 if there was not.
+ int suffixNum = 1;
+ QString prefix(newName);
+ if (numMatches != -1)
+ {
+ // Already had a suffix; use the name w/o suffix for prefix and
+ // grab the old suffix value as a starting point.
+ QStringList matches = rx.capturedTexts();
+ prefix = matches[1];
+ suffixNum = matches[2].toInt();
+ }
+ // Keep on incrementing the suffix 'till we find a free name
+ do
+ {
+ suffixNum ++;
+ newName = prefix + " (" + QString::number(suffixNum) + ")";
+ }
+ while (this->contains(newName));
+
+ return newName;
+}
+
+template<class STYLE>
inline void StyleSet<STYLE>::redefine(const StyleSet<STYLE>& defs, bool removeUnused)
{
- for (int i=signed(styles.count())-1; i >= 0; --i)
+ for (int i = styles.count() - 1; i >= 0; --i)
{
bool found = false;
- for (int j=0; j < defs.count(); ++j)
+ for (int j = 0; j < defs.count(); ++j)
{
if (styles[i]->name() == defs[j].name())
{
@@ -189,7 +229,7 @@
remove(i);
}
}
- for (int j=0; j < defs.count(); ++j)
+ for (int j = 0; j < defs.count(); ++j)
{
if (find(defs[j].name()) < 0)
{
@@ -204,7 +244,7 @@
template<class STYLE>
inline void StyleSet<STYLE>::rename(const QMap<QString,QString>& newNames)
{
- for (int i=0; i < styles.count(); ++i)
+ for (int i = 0; i < styles.count(); ++i)
{
QMap<QString,QString>::ConstIterator it;
Modified: trunk/Scribus/scribus/ui/smcellstyle.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=23240&path=/trunk/Scribus/scribus/ui/smcellstyle.cpp
==============================================================================
--- trunk/Scribus/scribus/ui/smcellstyle.cpp (original)
+++ trunk/Scribus/scribus/ui/smcellstyle.cpp Wed Oct 9 03:19:13 2019
@@ -167,7 +167,7 @@
return QString();
// Copy the style with name constructed from the original name.
- QString styleName(getUniqueName(tr("Clone of %1").arg(fromStyle)));
+ QString styleName(getUniqueName(fromStyle));
CellStyle cellStyle(m_cachedStyles.get(fromStyleName));
cellStyle.setDefaultStyle(false);
cellStyle.setName(styleName);
@@ -379,29 +379,7 @@
QString SMCellStyle::getUniqueName(const QString &name)
{
- int id = 0;
- bool done = false;
- QString s(name);
-
- while (!done)
- {
-start:
- ++id;
- for (int i = 0; i < m_cachedStyles.count(); ++i)
- {
- if (m_cachedStyles[i].name() == s)
- {
- s = tr("%1 (%2)", "This for unique name when creating "
- "a new character style. %1 will be the name "
- "of the style and %2 will be a number forming "
- "a style name like: New Style (2)").arg(name).arg(id);
- goto start;
- }
- }
- done = true;
- }
-
- return s;
+ return m_cachedStyles.getUniqueCopyName(name);
}
void SMCellStyle::languageChange()
Modified: trunk/Scribus/scribus/ui/smlinestyle.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=23240&path=/trunk/Scribus/scribus/ui/smlinestyle.cpp
==============================================================================
--- trunk/Scribus/scribus/ui/smlinestyle.cpp (original)
+++ trunk/Scribus/scribus/ui/smlinestyle.cpp Wed Oct 9 03:19:13 2019
@@ -6,6 +6,7 @@
*/
#include <QEvent>
+#include <QRegExp>
#include "colorcombo.h"
#include "smlinestyle.h"
@@ -199,26 +200,46 @@
Q_ASSERT(m_tmpLines.contains(fromStyle));
multiLine ml(m_tmpLines[fromStyle]);
- QString name = getUniqueName( tr("Clone of %1").arg(fromStyle));
+ QString name = getUniqueName(fromStyle);
m_tmpLines[name] = ml;
return name;
}
QString SMLineStyle::getUniqueName(const QString &name)
{
- int id = 0;
- QString s = name;
-
- while (m_tmpLines.contains(s))
- {
- ++id;
- s = tr("%1 (%2)", "This for unique name when creating "
- "a new character style. %1 will be the name "
- "of the style and %2 will be a number forming "
- "a style name like: New Style (2)").arg(name).arg(id);
- }
-
- return s;
+ // Unfortunately we have to copy the logic from StyleSet::generateUniqueCopyName
+ if (!m_tmpLines.contains(name))
+ return name;
+
+ QString newName(name);
+
+ // Search the string for (number) at the end and capture
+ // both the number and the text leading up to it sans brackets.
+ // Copy of fred (5)
+ // ^^^^^^^^^^^^ ^ (where ^ means captured)
+ static QRegExp rx("^(.*)\\s+\\((\\d+)\\)$");
+ int numMatches = rx.lastIndexIn(name);
+ // Add a (number) suffix to the end of the name. We start at the
+ // old suffix's value if there was one, or at 2 if there was not.
+ int suffixNum = 1;
+ QString prefix(newName);
+ if (numMatches != -1)
+ {
+ // Already had a suffix; use the name w/o suffix for prefix and
+ // grab the old suffix value as a starting point.
+ QStringList matches = rx.capturedTexts();
+ prefix = matches[1];
+ suffixNum = matches[2].toInt();
+ }
+ // Keep on incrementing the suffix 'till we find a free name
+ do
+ {
+ suffixNum ++;
+ newName = prefix + " (" + QString::number(suffixNum) + ")";
+ }
+ while (m_tmpLines.contains(newName));
+
+ return newName;
}
void SMLineStyle::apply()
Modified: trunk/Scribus/scribus/ui/smtablestyle.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=23240&path=/trunk/Scribus/scribus/ui/smtablestyle.cpp
==============================================================================
--- trunk/Scribus/scribus/ui/smtablestyle.cpp (original)
+++ trunk/Scribus/scribus/ui/smtablestyle.cpp Wed Oct 9 03:19:13 2019
@@ -163,7 +163,7 @@
return QString();
// Copy the style with name constructed from the original name.
- QString styleName(getUniqueName(tr("Clone of %1").arg(fromStyle)));
+ QString styleName(getUniqueName(fromStyle));
TableStyle tableStyle(m_cachedStyles.get(fromStyleName));
tableStyle.setDefaultStyle(false);
tableStyle.setName(styleName);
@@ -375,29 +375,7 @@
QString SMTableStyle::getUniqueName(const QString &name)
{
- int id = 0;
- bool done = false;
- QString s(name);
-
- while (!done)
- {
-start:
- ++id;
- for (int i = 0; i < m_cachedStyles.count(); ++i)
- {
- if (m_cachedStyles[i].name() == s)
- {
- s = tr("%1 (%2)", "This for unique name when creating "
- "a new character style. %1 will be the name "
- "of the style and %2 will be a number forming "
- "a style name like: New Style (2)").arg(name).arg(id);
- goto start;
- }
- }
- done = true;
- }
-
- return s;
+ return m_cachedStyles.getUniqueCopyName(name);
}
void SMTableStyle::languageChange()
Modified: trunk/Scribus/scribus/ui/smtextstyles.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=23240&path=/trunk/Scribus/scribus/ui/smtextstyles.cpp
==============================================================================
--- trunk/Scribus/scribus/ui/smtextstyles.cpp (original)
+++ trunk/Scribus/scribus/ui/smtextstyles.cpp Wed Oct 9 03:19:13 2019
@@ -249,7 +249,7 @@
return QString();
//Copy the style with the original name
- QString s(getUniqueName( tr("Clone of %1").arg(fromStyle)));
+ QString s(getUniqueName(fromStyle));
ParagraphStyle p(m_tmpStyles.get(copiedStyleName));
p.setDefaultStyle(false);
p.setName(s);
@@ -262,29 +262,7 @@
// helper function to find a unique name to a new style or a clone
QString SMParagraphStyle::getUniqueName(const QString &name)
{
- int id = 0;
- bool done = false;
- QString s(name);
-
- while (!done)
- {
-start:
- ++id;
- for (int i = 0; i < m_tmpStyles.count(); ++i)
- {
- if (m_tmpStyles[i].name() == s)
- {
- s = tr("%1 (%2)", "This for unique name when creating "
- "a new character style. %1 will be the name "
- "of the style and %2 will be a number forming "
- "a style name like: New Style (2)").arg(name).arg(id);
- goto start;
- }
- }
- done = true;
- }
-
- return s;
+ return m_tmpStyles.getUniqueCopyName(name);
}
void SMParagraphStyle::apply()
@@ -2266,7 +2244,7 @@
if (!m_tmpStyles.resolve(copiedStyleName))
return QString();
//Copy the style with the original name
- QString s(getUniqueName( tr("Clone of %1").arg(fromStyle)));
+ QString s(getUniqueName(fromStyle));
CharStyle c(m_tmpStyles.get(copiedStyleName));
c.setDefaultStyle(false);
c.setName(s);
@@ -2278,29 +2256,7 @@
QString SMCharacterStyle::getUniqueName(const QString &name)
{
- int id = 0;
- bool done = false;
- QString s(name);
-
- while (!done)
- {
-start:
- ++id;
- for (int i = 0; i < m_tmpStyles.count(); ++i)
- {
- if (m_tmpStyles[i].name() == s)
- {
- s = tr("%1 (%2)", "This for unique name when creating "
- "a new character style. %1 will be the name "
- "of the style and %2 will be a number forming "
- "a style name like: New Style (2)").arg(name).arg(id);
- goto start;
- }
- }
- done = true;
- }
-
- return s;
+ return m_tmpStyles.getUniqueCopyName(name);
}
void SMCharacterStyle::apply()
More information about the scribus-commit
mailing list