summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Hartmann <Thomas.Hartmann@nokia.com>2010-09-30 14:25:20 +0200
committerThomas Hartmann <Thomas.Hartmann@nokia.com>2010-09-30 17:43:19 +0200
commit4c185a9ac4477686f01af42534c7d6f28f8598df (patch)
tree4995d5a86fffde737c6f4845387126aeab32288d
parent2d5049645c502b20c2a8c4c2ce800319d067cbd2 (diff)
downloadqt-creator-4c185a9ac4477686f01af42534c7d6f28f8598df.tar.gz
QmlDesigner.model: rename id is now a proper refactoring operation
I an id is now changed in the navaigator or property editor, we now use the qmljseditor to properly refactor. Also I changed dynamic_cast to qobject_cast Reviewed-by: Erik Verbruggen
-rw-r--r--src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp10
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp11
-rw-r--r--src/plugins/qmldesigner/designercore/filemanager/qmlrewriter.h2
-rw-r--r--src/plugins/qmldesigner/designercore/include/abstractview.h2
-rw-r--r--src/plugins/qmldesigner/designercore/include/basetexteditmodifier.h2
-rw-r--r--src/plugins/qmldesigner/designercore/include/componenttextmodifier.h2
-rw-r--r--src/plugins/qmldesigner/designercore/include/plaintexteditmodifier.h2
-rw-r--r--src/plugins/qmldesigner/designercore/include/rewriterview.h2
-rw-r--r--src/plugins/qmldesigner/designercore/include/textmodifier.h2
-rw-r--r--src/plugins/qmldesigner/designercore/model/abstractview.cpp9
-rw-r--r--src/plugins/qmldesigner/designercore/model/basetexteditmodifier.cpp15
-rw-r--r--src/plugins/qmldesigner/designercore/model/rewriterview.cpp8
-rw-r--r--src/plugins/qmljseditor/qmljseditor.cpp21
-rw-r--r--src/plugins/qmljseditor/qmljseditor.h2
14 files changed, 70 insertions, 20 deletions
diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
index df08b21bda..d58e9cbc2c 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
+++ b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
@@ -36,6 +36,7 @@
#include <propertymetainfo.h>
#include <qgraphicswidget.h>
#include <abstractview.h>
+#include <rewriterview.h>
#include <invalididexception.h>
#include <rewritingexception.h>
@@ -297,10 +298,11 @@ void NavigatorTreeModel::handleChangedItem(QStandardItem *item)
ItemRow itemRow = itemRowForNode(node);
if (item == itemRow.idItem) {
- try {
- node.setId(item->text());
- } catch (InvalidIdException &e) {
- QMessageBox::warning(0, tr("Invalid Id"), e.description());
+ if (node.isValidId(item->text())) {
+ if (node.view()->rewriterView())
+ node.view()->rewriterView()->renameId(node.id(), item->text());
+ } else {
+ QMessageBox::warning(0, tr("Invalid Id"), item->text() + tr(" is an invalid id"));
item->setText(node.id());
}
} else if (item == itemRow.visibilityItem) {
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp
index d368c5950c..061a1174c5 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp
@@ -43,6 +43,7 @@
#include <bindingproperty.h>
#include <nodeabstractproperty.h>
+#include <rewriterview.h>
#include "propertyeditorvalue.h"
#include "basiclayouts.h"
@@ -354,13 +355,13 @@ void PropertyEditor::changeValue(const QString &propertyName)
PropertyEditorValue *value = qobject_cast<PropertyEditorValue*>(QDeclarativeMetaType::toQObject(m_currentType->m_backendValuesPropertyMap.value(propertyName)));
const QString newId = value->value().toString();
- try {
- m_selectedNode.setId(newId);
- } catch (InvalidIdException &e) {
+ if (m_selectedNode.isValidId(newId)) {
+ if (rewriterView())
+ rewriterView()->renameId(m_selectedNode.id(), newId);
+ } else {
value->setValue(m_selectedNode.id());
- QMessageBox::warning(0, tr("Invalid Id"), e.description());
+ QMessageBox::warning(0, tr("Invalid Id"), newId + tr(" is an invalid id"));
}
-
return;
}
diff --git a/src/plugins/qmldesigner/designercore/filemanager/qmlrewriter.h b/src/plugins/qmldesigner/designercore/filemanager/qmlrewriter.h
index 435ad6d7e9..6ff913eb73 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/qmlrewriter.h
+++ b/src/plugins/qmldesigner/designercore/filemanager/qmlrewriter.h
@@ -77,7 +77,7 @@ protected:
{ return m_textModifier; }
bool includeSurroundingWhitespace(int &start, int &end) const;
- void includeLeadingEmptyLine(int &start) const;
+ void includeLeadingEmptyLine(int &start) const;
static QmlJS::AST::UiObjectMemberList *searchMemberToInsertAfter(QmlJS::AST::UiObjectMemberList *members, const QStringList &propertyOrder);
static QmlJS::AST::UiObjectMemberList *searchMemberToInsertAfter(QmlJS::AST::UiObjectMemberList *members, const QString &propertyName, const QStringList &propertyOrder);
diff --git a/src/plugins/qmldesigner/designercore/include/abstractview.h b/src/plugins/qmldesigner/designercore/include/abstractview.h
index 118ae560ac..09016ea663 100644
--- a/src/plugins/qmldesigner/designercore/include/abstractview.h
+++ b/src/plugins/qmldesigner/designercore/include/abstractview.h
@@ -55,6 +55,7 @@ namespace QmlDesigner {
class QmlModelView;
class NodeInstanceView;
+class RewriterView;
class CORESHARED_EXPORT AbstractView : public QObject
{
@@ -141,6 +142,7 @@ public:
void changeRootNodeType(const QString &type, int majorVersion, int minorVersion);
NodeInstanceView *nodeInstanceView() const;
+ RewriterView *rewriterView() const;
protected:
void setModel(Model * model);
diff --git a/src/plugins/qmldesigner/designercore/include/basetexteditmodifier.h b/src/plugins/qmldesigner/designercore/include/basetexteditmodifier.h
index 7c0f05de4c..cf2f540581 100644
--- a/src/plugins/qmldesigner/designercore/include/basetexteditmodifier.h
+++ b/src/plugins/qmldesigner/designercore/include/basetexteditmodifier.h
@@ -53,6 +53,8 @@ public:
virtual int indentDepth() const;
+ virtual bool renameId(const QString &oldId, const QString &newId);
+
virtual QmlJS::Snapshot getSnapshot() const;
virtual QStringList importPaths() const;
};
diff --git a/src/plugins/qmldesigner/designercore/include/componenttextmodifier.h b/src/plugins/qmldesigner/designercore/include/componenttextmodifier.h
index 4188007a6d..f60219acfd 100644
--- a/src/plugins/qmldesigner/designercore/include/componenttextmodifier.h
+++ b/src/plugins/qmldesigner/designercore/include/componenttextmodifier.h
@@ -61,6 +61,8 @@ public:
virtual QmlJS::Snapshot getSnapshot() const;
virtual QStringList importPaths() const;
+ virtual bool renameId(const QString & /* oldId */, const QString & /* newId */) { return false; }
+
public slots:
void contentsChange(int position, int charsRemoved, int charsAdded);
diff --git a/src/plugins/qmldesigner/designercore/include/plaintexteditmodifier.h b/src/plugins/qmldesigner/designercore/include/plaintexteditmodifier.h
index 2d64599c15..e2e28c1a97 100644
--- a/src/plugins/qmldesigner/designercore/include/plaintexteditmodifier.h
+++ b/src/plugins/qmldesigner/designercore/include/plaintexteditmodifier.h
@@ -78,6 +78,8 @@ public:
virtual QmlJS::Snapshot getSnapshot() const = 0;
virtual QStringList importPaths() const = 0;
+ virtual bool renameId(const QString & /* oldId */, const QString & /* newId */) { return false; }
+
protected:
QPlainTextEdit *plainTextEdit() const
{ return m_textEdit; }
diff --git a/src/plugins/qmldesigner/designercore/include/rewriterview.h b/src/plugins/qmldesigner/designercore/include/rewriterview.h
index 3b40ba0fcb..c53764c419 100644
--- a/src/plugins/qmldesigner/designercore/include/rewriterview.h
+++ b/src/plugins/qmldesigner/designercore/include/rewriterview.h
@@ -159,6 +159,8 @@ public:
int firstDefinitionInsideLength(const ModelNode &node) const;
bool modificationGroupActive();
+ bool renameId(const QString& oldId, const QString& newId);
+
signals:
void errorsChanged(const QList<RewriterView::Error> &errors);
diff --git a/src/plugins/qmldesigner/designercore/include/textmodifier.h b/src/plugins/qmldesigner/designercore/include/textmodifier.h
index affbaa4b29..241f0890c8 100644
--- a/src/plugins/qmldesigner/designercore/include/textmodifier.h
+++ b/src/plugins/qmldesigner/designercore/include/textmodifier.h
@@ -87,6 +87,8 @@ public:
virtual QmlJS::Snapshot getSnapshot() const = 0;
virtual QStringList importPaths() const = 0;
+ virtual bool renameId(const QString &oldId, const QString &newId) = 0;
+
signals:
void textChanged();
diff --git a/src/plugins/qmldesigner/designercore/model/abstractview.cpp b/src/plugins/qmldesigner/designercore/model/abstractview.cpp
index 99707bb651..2c8a58bb49 100644
--- a/src/plugins/qmldesigner/designercore/model/abstractview.cpp
+++ b/src/plugins/qmldesigner/designercore/model/abstractview.cpp
@@ -348,6 +348,15 @@ NodeInstanceView *AbstractView::nodeInstanceView() const
}
}
+RewriterView *AbstractView::rewriterView() const
+{
+ if (model()) {
+ return model()->m_d->rewriterView();
+ } else {
+ return 0;
+ }
+}
+
QList<ModelNode> AbstractView::allModelNodes()
{
return toModelNodeList(model()->m_d->allNodes());
diff --git a/src/plugins/qmldesigner/designercore/model/basetexteditmodifier.cpp b/src/plugins/qmldesigner/designercore/model/basetexteditmodifier.cpp
index 3127be6ead..113ee3b471 100644
--- a/src/plugins/qmldesigner/designercore/model/basetexteditmodifier.cpp
+++ b/src/plugins/qmldesigner/designercore/model/basetexteditmodifier.cpp
@@ -32,6 +32,7 @@
#include <extensionsystem/pluginmanager.h>
#include <qmljs/qmljsdocument.h>
#include <qmljs/qmljsmodelmanagerinterface.h>
+#include <qmljseditor/qmljseditor.h>
#include <texteditor/tabsettings.h>
using namespace QmlDesigner;
@@ -46,7 +47,7 @@ void BaseTextEditModifier::indent(int offset, int length)
if (length == 0 || offset < 0 || offset + length >= text().length())
return;
- if (TextEditor::BaseTextEditor *bte = dynamic_cast<TextEditor::BaseTextEditor*>(plainTextEdit())) {
+ if (TextEditor::BaseTextEditor *bte = qobject_cast<TextEditor::BaseTextEditor*>(plainTextEdit())) {
// find the applicable block:
QTextDocument *doc = bte->document();
QTextCursor tc(doc);
@@ -60,13 +61,23 @@ void BaseTextEditModifier::indent(int offset, int length)
int BaseTextEditModifier::indentDepth() const
{
- if (TextEditor::BaseTextEditor *bte = dynamic_cast<TextEditor::BaseTextEditor*>(plainTextEdit())) {
+ if (TextEditor::BaseTextEditor *bte = qobject_cast<TextEditor::BaseTextEditor*>(plainTextEdit())) {
return bte->tabSettings().m_indentSize;
} else {
return 0;
}
}
+bool BaseTextEditModifier::renameId(const QString &oldId, const QString &newId)
+{
+ if (QmlJSEditor::Internal::QmlJSTextEditor *qmljse = qobject_cast<QmlJSEditor::Internal::QmlJSTextEditor*>(plainTextEdit())) {
+ qmljse->renameId(oldId, newId);
+ return true;
+ } else {
+ return false;
+ }
+}
+
namespace {
static inline QmlJS::ModelManagerInterface *getModelManager()
{
diff --git a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
index f610f3f6b3..741e05884c 100644
--- a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
+++ b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
@@ -539,6 +539,14 @@ bool RewriterView::modificationGroupActive()
return m_modificationGroupActive;
}
+bool RewriterView::renameId(const QString& oldId, const QString& newId)
+{
+ if (textModifier())
+ return textModifier()->renameId(oldId, newId);
+
+ return false;
+}
+
void RewriterView::qmlTextChanged()
{
if (inErrorState())
diff --git a/src/plugins/qmljseditor/qmljseditor.cpp b/src/plugins/qmljseditor/qmljseditor.cpp
index 44f7976580..651586ee43 100644
--- a/src/plugins/qmljseditor/qmljseditor.cpp
+++ b/src/plugins/qmljseditor/qmljseditor.cpp
@@ -1045,6 +1045,18 @@ void QmlJSTextEditor::setUpdateSelectedElements(bool value)
m_updateSelectedElements = value;
}
+void QmlJSTextEditor::renameId(const QString &oldId, const QString &newId)
+{
+ Utils::ChangeSet changeSet;
+
+ foreach (const AST::SourceLocation &loc, m_semanticInfo.idLocations.value(oldId)) {
+ changeSet.replace(loc.begin(), loc.end(), newId);
+ }
+
+ QTextCursor tc = textCursor();
+ changeSet.apply(&tc);
+}
+
void QmlJSTextEditor::updateUsesNow()
{
if (document()->revision() != m_semanticInfo.revision()) {
@@ -1242,14 +1254,7 @@ void QmlJSTextEditor::renameIdUnderCursor()
QLineEdit::Normal,
id, &ok);
if (ok) {
- Utils::ChangeSet changeSet;
-
- foreach (const AST::SourceLocation &loc, m_semanticInfo.idLocations.value(id)) {
- changeSet.replace(loc.begin(), loc.end(), newId);
- }
-
- QTextCursor tc = textCursor();
- changeSet.apply(&tc);
+ renameId(id, newId);
}
}
diff --git a/src/plugins/qmljseditor/qmljseditor.h b/src/plugins/qmljseditor/qmljseditor.h
index d3db0e39db..6f5930d741 100644
--- a/src/plugins/qmljseditor/qmljseditor.h
+++ b/src/plugins/qmljseditor/qmljseditor.h
@@ -243,6 +243,8 @@ public:
bool updateSelectedElements() const;
void setUpdateSelectedElements(bool value);
+ void renameId(const QString &oldId, const QString &newId);
+
public slots:
void followSymbolUnderCursor();
void findUsages();