diff --git a/src/plugins/duieditor/duieditor.cpp b/src/plugins/duieditor/duieditor.cpp index 2d37da2534095ae51e12f87fe52e818347048b0c..ba36654f33e2b886c511fe61b6a5f4ac1c0ae358 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 7dd25ac1107a892d1099ce720d883c83274652ea..a02768c73e2035d25a8dcc531e1dbdacb58b6112 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 fd4db20c975c160870216c40686bb36be0fdef5e..a8b8d60b11d0f261a4d3ab6d7fe1c71e8fed1a32 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 92fc7ca046528e9f2174d134e3b2547bae86b55d..cfbe6757cd5c296272f774f78afe8bd8483d8318 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 b4923418f2c007413f2533a35f7ddde89d62d366..53fa98d1abc66e5646a9a0f858b9e530fc2c9186 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 9d8b1b49d539ca275d4d8bc4a0d16046cecfb543..54c947040ef84dcf3949702768b9f0e48d340615 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 0000000000000000000000000000000000000000..1529908ce72fe515e796bc49250d0aa29d3bb3a4 --- /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 0000000000000000000000000000000000000000..cb040bceaa797fc4834ff13578e8e8f4c45fd648 --- /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 1847f35536179aa335b2b709c7d23e876cfb1c51..199737293c031de34ee26e486e3af13e1844241e 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 4813f37e30cbea332daf8cf68ea86a8d9e2bd3ec..bf3817a0b689b66ff5b486749db67ae270bbd320 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);