From f358034f8bff6d953482d16d4396f864cd311af9 Mon Sep 17 00:00:00 2001 From: Erik Verbruggen <erik.verbruggen@nokia.com> Date: Thu, 24 Sep 2009 12:54:53 +0200 Subject: [PATCH] Fixed BAUHAUS-1. --- src/plugins/duieditor/duieditor.cpp | 2 +- src/plugins/duieditor/duieditor.pro | 6 ++- src/plugins/duieditor/duieditorconstants.h | 2 +- src/plugins/duieditor/duieditorfactory.cpp | 2 +- src/plugins/duieditor/duieditorplugin.cpp | 13 +++---- src/plugins/duieditor/duieditorplugin.h | 4 +- src/plugins/duieditor/qmlfilewizard.cpp | 45 ++++++++++++++++++++++ src/plugins/duieditor/qmlfilewizard.h | 29 ++++++++++++++ src/plugins/duieditor/qmllookupcontext.cpp | 37 ++++++++++++++++++ src/plugins/duieditor/qmllookupcontext.h | 3 ++ 10 files changed, 128 insertions(+), 15 deletions(-) create mode 100644 src/plugins/duieditor/qmlfilewizard.cpp create mode 100644 src/plugins/duieditor/qmlfilewizard.h diff --git a/src/plugins/duieditor/duieditor.cpp b/src/plugins/duieditor/duieditor.cpp index 2d37da25340..ba36654f33e 100644 --- a/src/plugins/duieditor/duieditor.cpp +++ b/src/plugins/duieditor/duieditor.cpp @@ -379,7 +379,7 @@ ScriptEditor::ScriptEditor(const Context &context, QWidget *parent) : setMarksVisible(true); setCodeFoldingSupported(true); setCodeFoldingVisible(true); - setMimeType(DuiEditor::Constants::C_DUIEDITOR_MIMETYPE); + setMimeType(DuiEditor::Constants::DUIEDITOR_MIMETYPE); m_updateDocumentTimer = new QTimer(this); m_updateDocumentTimer->setInterval(UPDATE_DOCUMENT_DEFAULT_INTERVAL); diff --git a/src/plugins/duieditor/duieditor.pro b/src/plugins/duieditor/duieditor.pro index 7dd25ac1107..a02768c73e2 100644 --- a/src/plugins/duieditor/duieditor.pro +++ b/src/plugins/duieditor/duieditor.pro @@ -26,7 +26,8 @@ HEADERS += duieditor.h \ qmlexpressionundercursor.h \ qmllookupcontext.h \ qmlresolveexpression.h \ - qmlsymbol.h + qmlsymbol.h \ + qmlfilewizard.h SOURCES += duieditor.cpp \ duieditorfactory.cpp \ duieditorplugin.cpp \ @@ -43,5 +44,6 @@ SOURCES += duieditor.cpp \ qmlexpressionundercursor.cpp \ qmllookupcontext.cpp \ qmlresolveexpression.cpp \ - qmlsymbol.cpp + qmlsymbol.cpp \ + qmlfilewizard.cpp RESOURCES += duieditor.qrc diff --git a/src/plugins/duieditor/duieditorconstants.h b/src/plugins/duieditor/duieditorconstants.h index fd4db20c975..a8b8d60b11d 100644 --- a/src/plugins/duieditor/duieditorconstants.h +++ b/src/plugins/duieditor/duieditorconstants.h @@ -38,7 +38,7 @@ const char * const RUN_SEP = "DuiEditor.Run.Separator"; const char * const C_DUIEDITOR = "QML Editor"; const char * const TASK_INDEX = "DuiEditor.TaskIndex"; -const char * const C_DUIEDITOR_MIMETYPE = "application/x-dui"; +const char * const DUIEDITOR_MIMETYPE = "application/x-dui"; } // namespace Constants } // namespace DuiEditor diff --git a/src/plugins/duieditor/duieditorfactory.cpp b/src/plugins/duieditor/duieditorfactory.cpp index 92fc7ca0465..cfbe6757cd5 100644 --- a/src/plugins/duieditor/duieditorfactory.cpp +++ b/src/plugins/duieditor/duieditorfactory.cpp @@ -44,7 +44,7 @@ using namespace DuiEditor::Constants; DuiEditorFactory::DuiEditorFactory(const Context &context, QObject *parent) : Core::IEditorFactory(parent), m_kind(QLatin1String(C_DUIEDITOR)), - m_mimeTypes(QLatin1String(DuiEditor::Constants::C_DUIEDITOR_MIMETYPE)), + m_mimeTypes(QLatin1String(DuiEditor::Constants::DUIEDITOR_MIMETYPE)), m_context(context), m_actionHandler(new DuiEditorActionHandler) { diff --git a/src/plugins/duieditor/duieditorplugin.cpp b/src/plugins/duieditor/duieditorplugin.cpp index b4923418f2c..53fa98d1abc 100644 --- a/src/plugins/duieditor/duieditorplugin.cpp +++ b/src/plugins/duieditor/duieditorplugin.cpp @@ -36,6 +36,7 @@ #include "duicodecompletion.h" #include "duihoverhandler.h" #include "duimodelmanager.h" +#include "qmlfilewizard.h" #include <coreplugin/icore.h> #include <coreplugin/coreconstants.h> @@ -57,6 +58,7 @@ #include <QtCore/QSettings> #include <QtGui/QAction> +using namespace DuiEditor; using namespace DuiEditor::Internal; using namespace DuiEditor::Constants; @@ -75,7 +77,6 @@ DuiEditorPlugin::DuiEditorPlugin() : DuiEditorPlugin::~DuiEditorPlugin() { removeObject(m_editor); - removeObject(m_wizard); delete m_actionHandler; m_instance = 0; } @@ -101,15 +102,11 @@ bool DuiEditorPlugin::initialize(const QStringList & /*arguments*/, QString *err addObject(m_editor); Core::BaseFileWizardParameters wizardParameters(Core::IWizard::FileWizard); - wizardParameters.setDescription(tr("Creates a Qt QML file.")); - wizardParameters.setName(tr("Qt QML File")); wizardParameters.setCategory(QLatin1String("Qt")); wizardParameters.setTrCategory(tr("Qt")); - m_wizard = new TextEditor::TextFileWizard(QLatin1String(DuiEditor::Constants::C_DUIEDITOR_MIMETYPE), - QLatin1String(DuiEditor::Constants::C_DUIEDITOR), - QLatin1String("dui$"), - wizardParameters, this); - addObject(m_wizard); + wizardParameters.setDescription(tr("Creates a Qt QML file.")); + wizardParameters.setName(tr("Qt QML File")); + addAutoReleasedObject(new QmlFileWizard(wizardParameters, core)); m_actionHandler = new TextEditor::TextEditorActionHandler(DuiEditor::Constants::C_DUIEDITOR, TextEditor::TextEditorActionHandler::Format diff --git a/src/plugins/duieditor/duieditorplugin.h b/src/plugins/duieditor/duieditorplugin.h index 9d8b1b49d53..54c947040ef 100644 --- a/src/plugins/duieditor/duieditorplugin.h +++ b/src/plugins/duieditor/duieditorplugin.h @@ -33,13 +33,13 @@ #include <extensionsystem/iplugin.h> namespace TextEditor { -class TextFileWizard; class TextEditorActionHandler; } // namespace TextEditor namespace DuiEditor { class DuiModelManagerInterface; +class QmlFileWizard; namespace Internal { @@ -74,7 +74,7 @@ private: Context m_scriptcontext; DuiModelManagerInterface *m_modelManager; - TextEditor::TextFileWizard *m_wizard; + QmlFileWizard *m_wizard; DuiEditorFactory *m_editor; TextEditor::TextEditorActionHandler *m_actionHandler; DuiCodeCompletion *m_completion; diff --git a/src/plugins/duieditor/qmlfilewizard.cpp b/src/plugins/duieditor/qmlfilewizard.cpp new file mode 100644 index 00000000000..1529908ce72 --- /dev/null +++ b/src/plugins/duieditor/qmlfilewizard.cpp @@ -0,0 +1,45 @@ +#include "duieditorconstants.h" +#include "qmlfilewizard.h" + +#include <QtCore/QFileInfo> +#include <QtCore/QTextStream> + +using namespace DuiEditor; + +QmlFileWizard::QmlFileWizard(const BaseFileWizardParameters ¶meters, + QObject *parent): + Core::StandardFileWizard(parameters, parent) +{ +} + +Core::GeneratedFiles QmlFileWizard::generateFilesFromPath(const QString &path, + const QString &name, + QString * /*errorMessage*/) const + +{ + const QString mimeType = QLatin1String(Constants::DUIEDITOR_MIMETYPE); + const QString fileName = Core::BaseFileWizard::buildFileName(path, name, preferredSuffix(mimeType)); + + Core::GeneratedFile file(fileName); + file.setEditorKind(QLatin1String(Constants::C_DUIEDITOR)); + file.setContents(fileContents(fileName)); + + return Core::GeneratedFiles() << file; +} + +QString QmlFileWizard::fileContents(const QString &fileName) const +{ + const QString baseName = QFileInfo(fileName).completeBaseName(); + QString contents; + QTextStream str(&contents); +// str << CppTools::AbstractEditorSupport::licenseTemplate(); + + str << QLatin1String("import Qt 4.6\n") + << QLatin1String("\n") + << QLatin1String("Rectangle {\n") + << QLatin1String(" width: 640\n") + << QLatin1String(" height: 480\n") + << QLatin1String("}\n"); + + return contents; +} diff --git a/src/plugins/duieditor/qmlfilewizard.h b/src/plugins/duieditor/qmlfilewizard.h new file mode 100644 index 00000000000..cb040bceaa7 --- /dev/null +++ b/src/plugins/duieditor/qmlfilewizard.h @@ -0,0 +1,29 @@ +#ifndef QMLFILEWIZARD_H +#define QMLFILEWIZARD_H + +#include <coreplugin/basefilewizard.h> + +namespace DuiEditor { + +class QmlFileWizard: public Core::StandardFileWizard +{ + Q_OBJECT + +public: + typedef Core::BaseFileWizardParameters BaseFileWizardParameters; + + QmlFileWizard(const BaseFileWizardParameters ¶meters, + QObject *parent = 0); + +protected: + QString fileContents(const QString &baseName) const; + +protected: + Core::GeneratedFiles generateFilesFromPath(const QString &path, + const QString &fileName, + QString *errorMessage) const; +}; + +} // namespace DuiEditor + +#endif // QMLFILEWIZARD_H diff --git a/src/plugins/duieditor/qmllookupcontext.cpp b/src/plugins/duieditor/qmllookupcontext.cpp index 1847f355361..199737293c0 100644 --- a/src/plugins/duieditor/qmllookupcontext.cpp +++ b/src/plugins/duieditor/qmllookupcontext.cpp @@ -168,3 +168,40 @@ QString QmlLookupContext::toString(UiQualifiedId *id) return str; } + +QList<QmlSymbol*> QmlLookupContext::visibleSymbols(QmlJS::AST::Node *scope) +{ + // FIXME +} + +QList<QmlSymbol*> QmlLookupContext::visibleTypes() +{ + QList<QmlSymbol*> result; + + UiProgram *program = _doc->program(); + if (!program) + return result; + + for (UiImportList *iter = program->imports; iter; iter = iter->next) { + UiImport *import = iter->import; + if (!import) + continue; + + if (!(import->fileName)) + continue; + const QString path = import->fileName->asString(); + + // TODO: handle "import as". + + const QMap<QString, DuiDocument::Ptr> types = _snapshot.componentsDefinedByImportedDocuments(_doc, path); + foreach (const DuiDocument::Ptr typeDoc, types) { + UiProgram *typeProgram = typeDoc->program(); + + if (typeProgram && typeProgram->members && typeProgram->members->member) { + result.append(createSymbol(typeDoc->fileName(), typeProgram->members->member)); + } + } + } + + return result; +} diff --git a/src/plugins/duieditor/qmllookupcontext.h b/src/plugins/duieditor/qmllookupcontext.h index 4813f37e30c..bf3817a0b68 100644 --- a/src/plugins/duieditor/qmllookupcontext.h +++ b/src/plugins/duieditor/qmllookupcontext.h @@ -27,6 +27,9 @@ public: DuiDocument::Ptr document() const { return _doc; } + QList<QmlSymbol*> visibleSymbols(QmlJS::AST::Node *scope); + QList<QmlSymbol*> visibleTypes(); + private: QmlSymbol *createSymbol(const QString &fileName, QmlJS::AST::UiObjectMember *node); -- GitLab