summaryrefslogtreecommitdiff
path: root/src/plugins/texteditor/snippets/snippetscollection.cpp
diff options
context:
space:
mode:
authorLeandro Melo <leandro.melo@nokia.com>2010-11-24 11:04:24 +0100
committerLeandro Melo <leandro.melo@nokia.com>2010-12-08 17:22:11 +0100
commitb87861f9b487cc26dd9030604dee0af98afdff4c (patch)
tree1cd9a55cd919a9cd08a81d1dfec475666a6b4e2c /src/plugins/texteditor/snippets/snippetscollection.cpp
parent22c9b652b0cc7fe4aafd68a620c7bada5ff0a5d9 (diff)
downloadqt-creator-b87861f9b487cc26dd9030604dee0af98afdff4c.tar.gz
Snippets: Add more use-cases
- Restored removed built-in snippets. - Revert a built-in snippet. - Reset the snippets collection.
Diffstat (limited to 'src/plugins/texteditor/snippets/snippetscollection.cpp')
-rw-r--r--src/plugins/texteditor/snippets/snippetscollection.cpp94
1 files changed, 68 insertions, 26 deletions
diff --git a/src/plugins/texteditor/snippets/snippetscollection.cpp b/src/plugins/texteditor/snippets/snippetscollection.cpp
index 1aad27644c..731f062603 100644
--- a/src/plugins/texteditor/snippets/snippetscollection.cpp
+++ b/src/plugins/texteditor/snippets/snippetscollection.cpp
@@ -221,10 +221,14 @@ int SnippetsCollection::totalSnippets(Snippet::Group group) const
void SnippetsCollection::clear()
{
- for (Snippet::Group group = Snippet::Cpp; group < Snippet::GroupSize; ++group) {
- m_snippets[group].clear();
- m_activeSnippetsEnd[group] = m_snippets[group].end();
- }
+ for (Snippet::Group group = Snippet::Cpp; group < Snippet::GroupSize; ++group)
+ clear(group);
+}
+
+void SnippetsCollection::clear(Snippet::Group group)
+{
+ m_snippets[group].clear();
+ m_activeSnippetsEnd[group] = m_snippets[group].end();
}
void SnippetsCollection::updateActiveSnippetsEnd(Snippet::Group group)
@@ -234,6 +238,41 @@ void SnippetsCollection::updateActiveSnippetsEnd(Snippet::Group group)
removedSnippetPred);
}
+void SnippetsCollection::restoreRemovedSnippets(Snippet::Group group)
+{
+ // The version restored contains the last modifications (if any) by the user.
+ // Reverting the snippet can still bring it to the original version.
+ QVector<Snippet> toRestore(std::distance(m_activeSnippetsEnd[group], m_snippets[group].end()));
+ qCopy(m_activeSnippetsEnd[group], m_snippets[group].end(), toRestore.begin());
+ m_snippets[group].erase(m_activeSnippetsEnd[group], m_snippets[group].end());
+ foreach (Snippet snippet, toRestore) {
+ snippet.setIsRemoved(false);
+ insertSnippet(snippet, group);
+ }
+}
+
+Snippet SnippetsCollection::revertedSnippet(int index, Snippet::Group group) const
+{
+ const Snippet &candidate = snippet(index, group);
+ Q_ASSERT(candidate.isBuiltIn());
+
+ const QList<Snippet> &builtIn =
+ readXML(m_builtInSnippetsPath + m_snippetsFileName, candidate.id());
+ if (builtIn.size() == 1)
+ return builtIn.at(0);
+ return Snippet();
+}
+
+void SnippetsCollection::reset(Snippet::Group group)
+{
+ clear(group);
+
+ const QList<Snippet> &builtInSnippets = readXML(m_builtInSnippetsPath + m_snippetsFileName);
+ foreach (const Snippet &snippet, builtInSnippets)
+ if (group == snippet.group())
+ insertSnippet(snippet, snippet.group());
+}
+
void SnippetsCollection::reload()
{
clear();
@@ -268,10 +307,8 @@ void SnippetsCollection::synchronize()
const int size = totalSnippets(group);
for (int i = 0; i < size; ++i) {
const Snippet &current = snippet(i, group);
- if (!current.isBuiltIn() ||
- (current.isBuiltIn() && (current.isRemoved() || current.isModified()))) {
+ if (!current.isBuiltIn() || current.isRemoved() || current.isModified())
writeSnippetXML(current, &writer);
- }
}
}
writer.writeEndElement();
@@ -296,7 +333,7 @@ void SnippetsCollection::writeSnippetXML(const Snippet &snippet, QXmlStreamWrite
writer->writeEndElement();
}
-QList<Snippet> SnippetsCollection::readXML(const QString &fileName)
+QList<Snippet> SnippetsCollection::readXML(const QString &fileName, const QString &snippetId)
{
QList<Snippet> snippets;
QFile file(fileName);
@@ -307,31 +344,36 @@ QList<Snippet> SnippetsCollection::readXML(const QString &fileName)
while (xml.readNextStartElement()) {
if (xml.name() == kSnippet) {
const QXmlStreamAttributes &atts = xml.attributes();
+ const QString &id = atts.value(kId).toString();
+ if (snippetId.isEmpty() || snippetId == id) {
+ Snippet snippet(id);
+ snippet.setTrigger(atts.value(kTrigger).toString());
+ snippet.setComplement(atts.value(kComplement).toString());
+ snippet.setGroup(toSnippetGroup(atts.value(kGroup).toString()));
+ snippet.setIsRemoved(toBool(atts.value(kRemoved).toString()));
+ snippet.setIsModified(toBool(atts.value(kModified).toString()));
+
+ QString content;
+ while (!xml.atEnd()) {
+ xml.readNext();
+ if (xml.isCharacters()) {
+ content += xml.text();
+ } else if (xml.isEndElement()) {
+ snippet.setContent(content);
+ snippets.append(snippet);
+ break;
+ }
+ }
- Snippet snippet(atts.value(kId).toString());
- snippet.setTrigger(atts.value(kTrigger).toString());
- snippet.setComplement(atts.value(kComplement).toString());
- snippet.setGroup(toSnippetGroup(atts.value(kGroup).toString()));
- snippet.setIsRemoved(toBool(atts.value(kRemoved).toString()));
- snippet.setIsModified(toBool(atts.value(kModified).toString()));
-
- QString content;
- while (!xml.atEnd()) {
- xml.readNext();
- if (xml.isCharacters()) {
- content += xml.text();
- } else if (xml.isEndElement()) {
- snippet.setContent(content);
- snippets.append(snippet);
+ if (!snippetId.isEmpty())
break;
- }
+ } else {
+ xml.skipCurrentElement();
}
} else {
xml.skipCurrentElement();
}
}
- } else {
- xml.skipCurrentElement();
}
}
if (xml.hasError())