--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<snippets>
+<snippet group="C++" trigger="class" id="cpp_genericclass">class $name$
+{
+public:
+ $name$() {}
+};</snippet>
+<snippet group="C++" trigger="class" id="cpp_qobjectclass" complement="derived from QObject">class $name$ : public QObject
+{
+ Q_OBJECT
+public:
+ $name$() {}
+ virtual ~$name$() {}
+};</snippet>
+<snippet group="C++" trigger="class" id="cpp_qwidgetclass" complement="derived from QWidget">class $name$ : public QWidget
+{
+ Q_OBJECT
+public:
+ $name$() {}
+ virtual ~$name$() {}
+};</snippet>
+<snippet group="C++" trigger="class" id="cpp_classtemplate" complement="template">template <typename $T$>
+class $name$
+{
+public:
+ $name$() {}
+};</snippet>
+<snippet group="C++" trigger="do" id="cpp_do">do {
+
+} while ($condition$);</snippet>
+<snippet group="C++" trigger="else" id="cpp_else" >else {
+
+}</snippet>
+<snippet group="C++" trigger="else" id="cpp_elsewithif" complement="with if">else if ($condition$) {
+
+}</snippet>
+<snippet group="C++" trigger="for" id="cpp_for">for (int $var$ = 0; $var$ < $total$; ++$var$) {
+
+}</snippet>
+<snippet group="C++" trigger="foreach" id="cpp_foreach">foreach ($var$, $container$) {
+
+}</snippet>
+<snippet group="C++" trigger="if" id="cpp_if">if ($condition$) {
+
+}</snippet>
+<snippet group="C++" trigger="if" id="cpp_ifandelse" complement="and else">if ($condition$) {
+
+} else {
+
+}</snippet>
+<snippet group="C++" trigger="namespace" id="cpp_namespace">namespace $name$ {
+
+}</snippet>
+<snippet group="C++" trigger="try" id="cpp_trycatch" complement="and catch">try {
+
+} catch (...) {
+
+}</snippet>
+<snippet group="C++" trigger="using" id="cpp_usingnamespace" complement="namespace">using namespace $name$;</snippet>
+<snippet group="C++" trigger="while" id="cpp_while">while ($condition$) {
+
+}</snippet>
+</snippets>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<snippets>
+<snippet group="QML" trigger="property" id="qml_property">property $type$ $name$: $value$</snippet>
+<snippet group="QML" trigger="Item" id="qml_item">Item {
+ id: $name$
+}</snippet>
+<snippet group="QML" trigger="BorderImage" id="qml_borderimage">BorderImage {
+ id: $name$
+ source: "$file$"
+ width: $100$; height: $100$
+ border.left: $5$; border.top: $5$
+ border.right: $5$; border.bottom: $5$
+}</snippet>
+<snippet group="QML" trigger="Image" id="qml_image">Image {
+ id: $name$
+ source: "$file$"
+}</snippet>
+<snippet group="QML" trigger="Text" id="qml_text">Text {
+ id: $name$
+ text: "$text$"
+}</snippet>
+<snippet group="QML" trigger="states" id="qml_states">states: [
+ State {
+ name: "$name$"
+ PropertyChanges {
+ target: $name$
+ $$
+ }
+ }
+]</snippet>
+<snippet group="QML" trigger="State" id="qml_state">State {
+ name: "$name$"
+ PropertyChanges {
+ target: $name$
+ $$
+ }
+}</snippet>
+<snippet group="QML" trigger="transitions" id="qml_transitions">transitions: [
+ Transition {
+ from: "$name$"
+ to: "$name$"
+ $$
+ }
+]</snippet>
+<snippet group="QML" trigger="Transition" id="qml_transition">Transition {
+ from: "$name$"
+ to: "$name$"
+ $$
+}</snippet>
+<snippet group="QML" trigger="PropertyChanges" id="qml_propertychanges">PropertyChanges {
+ target: $name$
+ $$
+}</snippet>
+<snippet group="QML" trigger="NumberAnimation" id="qml_numberanimationwithtargets" complement="with targets">NumberAnimation { targets: [$name$]; properties: "$name$"; duration: $200$ }</snippet>
+<snippet group="QML" trigger="NumberAnimation" id="qml_numberanimationwithtarget" complement="with target">NumberAnimation { target: $name$; property: "$name$"; to: $value$; duration: $200$ }</snippet>
+<snippet group="QML" trigger="PropertyAction" id="qml_propertyactionwithtargets" complement="with targets">PropertyAction { targets: [$name$]; properties: "$name$" }</snippet>
+<snippet group="QML" trigger="PropertyAction" id="qml_propertyactionwithtarget" complement="with target">PropertyAction { target: $name$; property: "$name$"; value: $value$ }</snippet>
+<snippet group="QML" trigger="PauseAnimation" id="qml_pauseanimation">PauseAnimation { duration: $200$ }</snippet>
+<snippet group="QML" trigger="ColorAnimation" id="qml_coloranimation">ColorAnimation { from: $"white"$; to: $"black"$; duration: $200$ }</snippet>
+</snippets>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<snippets>
+<snippet group="Text" trigger="global" id="text_global" complement="example">// This is available in all editors.</snippet>
+</snippets>
DATA_DIRS = \
examplebrowser \
+ snippets \
templates \
designer \
schemes \
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<snippets>
-<snippet group="C++" trigger="class" id="genericclass">class $name$
-{
-public:
- $name$() {}
-};</snippet>
-<snippet group="C++" trigger="class" id="qobjectclass" complement="derived from QObject">class $name$ : public QObject
-{
- Q_OBJECT
-public:
- $name$() {}
- virtual ~$name$() {}
-};</snippet>
-<snippet group="C++" trigger="class" id="qwidgetclass" complement="derived from QWidget">class $name$ : public QWidget
-{
- Q_OBJECT
-public:
- $name$() {}
- virtual ~$name$() {}
-};</snippet>
-<snippet group="C++" trigger="class" id="classtemplate" complement="template">template <typename $T$>
-class $name$
-{
-public:
- $name$() {}
-};</snippet>
-<snippet group="C++" trigger="do" id="do">do {
-
-} while ($condition$);</snippet>
-<snippet group="C++" trigger="else" id="else" >else {
-
-}</snippet>
-<snippet group="C++" trigger="else" id="elsewithif" complement="with if">else if ($condition$) {
-
-}</snippet>
-<snippet group="C++" trigger="for" id="for">for (int $var$ = 0; $var$ < $total$; ++$var$) {
-
-}</snippet>
-<snippet group="C++" trigger="foreach" id="foreach">foreach ($var$, $container$) {
-
-}</snippet>
-<snippet group="C++" trigger="if" id="if">if ($condition$) {
-
-}</snippet>
-<snippet group="C++" trigger="if" id="ifandelse" complement="and else">if ($condition$) {
-
-} else {
-
-}</snippet>
-<snippet group="C++" trigger="namespace" id="namespace">namespace $name$ {
-
-}</snippet>
-<snippet group="C++" trigger="try" id="trycatch" complement="and catch">try {
-
-} catch (...) {
-
-}</snippet>
-<snippet group="C++" trigger="using" id="usingnamespace" complement="namespace">using namespace $name$;</snippet>
-<snippet group="C++" trigger="while" id="while">while ($condition$) {
-
-}</snippet>
-<snippet group="QML" trigger="property" id="property">property $type$ $name$: $value$</snippet>
-<snippet group="QML" trigger="Item" id="item">Item {
- id: $name$
-}</snippet>
-<snippet group="QML" trigger="BorderImage" id="borderimage">BorderImage {
- id: $name$
- source: "$file$"
- width: $100$; height: $100$
- border.left: $5$; border.top: $5$
- border.right: $5$; border.bottom: $5$
-}</snippet>
-<snippet group="QML" trigger="Image" id="image">Image {
- id: $name$
- source: "$file$"
-}</snippet>
-<snippet group="QML" trigger="Text" id="text">Text {
- id: $name$
- text: "$text$"
-}</snippet>
-<snippet group="QML" trigger="states" id="states">states: [
- State {
- name: "$name$"
- PropertyChanges {
- target: $name$
- $$
- }
- }
-]</snippet>
-<snippet group="QML" trigger="State" id="state">State {
- name: "$name$"
- PropertyChanges {
- target: $name$
- $$
- }
-}</snippet>
-<snippet group="QML" trigger="transitions" id="transitions">transitions: [
- Transition {
- from: "$name$"
- to: "$name$"
- $$
- }
-]</snippet>
-<snippet group="QML" trigger="Transition" id="transition">Transition {
- from: "$name$"
- to: "$name$"
- $$
-}</snippet>
-<snippet group="QML" trigger="PropertyChanges" id="propertychanges">PropertyChanges {
- target: $name$
- $$
-}</snippet>
-<snippet group="QML" trigger="NumberAnimation" id="numberanimationwithtargets" complement="with targets">NumberAnimation { targets: [$name$]; properties: "$name$"; duration: $200$ }</snippet>
-<snippet group="QML" trigger="NumberAnimation" id="numberanimationwithtarget" complement="with target">NumberAnimation { target: $name$; property: "$name$"; to: $value$; duration: $200$ }</snippet>
-<snippet group="QML" trigger="PropertyAction" id="propertyactionwithtargets" complement="with targets">PropertyAction { targets: [$name$]; properties: "$name$" }</snippet>
-<snippet group="QML" trigger="PropertyAction" id="propertyactionwithtarget" complement="with target">PropertyAction { target: $name$; property: "$name$"; value: $value$ }</snippet>
-<snippet group="QML" trigger="PauseAnimation" id="pauseanimation">PauseAnimation { duration: $200$ }</snippet>
-<snippet group="QML" trigger="ColorAnimation" id="coloranimation">ColorAnimation { from: $"white"$; to: $"black"$; duration: $200$ }</snippet>
-<snippet group="Text" trigger="global" id="global" complement="example">// This is available in all editors.</snippet>
-</snippets>
// SnippetsCollection
SnippetsCollection::SnippetsCollection() :
- m_builtInSnippetsPath(QLatin1String(":/texteditor/snippets/")),
m_userSnippetsPath(Core::ICore::instance()->userResourcePath() + QLatin1String("/snippets/")),
- m_snippetsFileName(QLatin1String("snippets.xml"))
+ m_userSnippetsFile(QLatin1String("snippets.xml"))
{
+ QDir dir(Core::ICore::instance()->resourcePath() + QLatin1String("/snippets/"));
+ dir.setNameFilters(QStringList(QLatin1String("*.xml")));
+ foreach (const QFileInfo &fi, dir.entryInfoList())
+ m_builtInSnippetsFiles.append(fi.absoluteFilePath());
+
connect(Core::ICore::instance(), SIGNAL(coreOpened()), this, SLOT(identifyGroups()));
}
const Snippet &candidate = snippet(index, groupId);
Q_ASSERT(candidate.isBuiltIn());
- const QList<Snippet> &builtIn =
- readXML(m_builtInSnippetsPath + m_snippetsFileName, candidate.id());
- if (builtIn.size() == 1)
- return builtIn.at(0);
+ foreach (const QString &fileName, m_builtInSnippetsFiles) {
+ const QList<Snippet> &builtIn = readXML(fileName, candidate.id());
+ if (builtIn.size() == 1)
+ return builtIn.at(0);
+ }
return Snippet(groupId);
}
{
clearSnippets(groupIndex(groupId));
- const QList<Snippet> &builtInSnippets = readXML(m_builtInSnippetsPath + m_snippetsFileName);
+ const QList<Snippet> &builtInSnippets = allBuiltInSnippets();
foreach (const Snippet &snippet, builtInSnippets)
if (groupId == snippet.groupId())
insertSnippet(snippet);
{
clearSnippets();
- const QList<Snippet> &builtInSnippets = readXML(m_builtInSnippetsPath + m_snippetsFileName);
+ const QList<Snippet> &builtInSnippets = allBuiltInSnippets();
QHash<QString, Snippet> activeBuiltInSnippets;
foreach (const Snippet &snippet, builtInSnippets)
activeBuiltInSnippets.insert(snippet.id(), snippet);
- const QList<Snippet> &userSnippets = readXML(m_userSnippetsPath + m_snippetsFileName);
+ const QList<Snippet> &userSnippets = readXML(m_userSnippetsPath + m_userSnippetsFile);
foreach (const Snippet &snippet, userSnippets) {
if (snippet.isBuiltIn())
// This user snippet overrides the corresponding built-in snippet.
void SnippetsCollection::synchronize()
{
if (QFile::exists(m_userSnippetsPath) || QDir().mkpath(m_userSnippetsPath)) {
- QFile file(m_userSnippetsPath + m_snippetsFileName);
+ QFile file(m_userSnippetsPath + m_userSnippetsFile);
if (file.open(QFile::WriteOnly | QFile::Truncate)) {
QXmlStreamWriter writer(&file);
writer.setAutoFormatting(true);
return snippets;
}
+QList<Snippet> SnippetsCollection::allBuiltInSnippets() const
+{
+ QList<Snippet> builtInSnippets;
+ foreach (const QString &fileName, m_builtInSnippetsFiles)
+ builtInSnippets.append(readXML(fileName));
+ return builtInSnippets;
+}
+
int SnippetsCollection::groupIndex(const QString &groupId) const
{
return m_groupIndexById.value(groupId);
#include "snippet.h"
#include <QtCore/QVector>
-#include <QtCore/QList>
+#include <QtCore/QStringList>
#include <QtCore/QHash>
QT_FORWARD_DECLARE_CLASS(QXmlStreamWriter)
private:
int groupIndex(const QString &groupId) const;
+ bool isGroupKnown(const QString &groupId) const;
void clearSnippets();
void clearSnippets(int groupIndex);
QList<Snippet> readXML(const QString &fileName, const QString &snippetId = QString()) const;
void writeSnippetXML(const Snippet &snippet, QXmlStreamWriter *writer) const;
+ QList<Snippet> allBuiltInSnippets() const;
+
static const QLatin1String kSnippet;
static const QLatin1String kSnippets;
static const QLatin1String kTrigger;
static const QLatin1String kRemoved;
static const QLatin1String kModified;
- bool isGroupKnown(const QString &groupId) const;
-
- // Built-in snippets are specified in an XML embedded as a resource. Snippets created/
- // modified/removed by the user are stored in another XML created dynamically in the
- // user's folder.
- QString m_builtInSnippetsPath;
+ // Built-in snippets are specified in XMLs distributed in a system's folder. Snippets
+ // created or modified/removed (if they are built-ins) by the user are stored in another
QString m_userSnippetsPath;
- QString m_snippetsFileName;
+ QString m_userSnippetsFile;
+ QStringList m_builtInSnippetsFiles;
// Snippets for each group are kept in a list. However, not all of them are necessarily
// active. Specifically, removed built-in snippets are kept as the last ones (for each
<file>TextEditor.mimetypes.xml</file>
<file>images/refactormarker.png</file>
<file>images/snippet.png</file>
- <file>snippets/snippets.xml</file>
</qresource>
</RCC>