#include "qmljsinspector.h"
#include "qmljsclientproxy.h"
#include "qmljsinspectorcontext.h"
-#include "qmljsdelta.h"
#include "qmljslivetextpreview.h"
#include "qmljsprivateapi.h"
#include <qmljs/qmljsmodelmanagerinterface.h>
#include <qmljs/qmljsdocument.h>
+#include <qmljs/qmljsdelta.h>
#include <debugger/debuggerrunner.h>
#include <debugger/debuggerconstants.h>
ConnectionAttemptSimultaneousInterval = 500
};
+bool Inspector::m_showExperimentalWarning = true;
+
Inspector::Inspector(QObject *parent)
: QObject(parent),
m_connectionTimer(new QTimer(this)),
m_connectionAttempts(0),
m_cppDebuggerState(0),
m_simultaneousCppAndQmlDebugMode(false),
- m_debugMode(StandaloneMode)
+ m_debugMode(StandaloneMode),
+ m_listeningToEditorManager(false)
{
m_clientProxy = ClientProxy::instance();
connect(m_clientProxy, SIGNAL(aboutToReloadEngines()), SLOT(aboutToReloadEngines()));
connect(m_clientProxy, SIGNAL(enginesChanged()), SLOT(updateEngineList()));
connect(m_clientProxy, SIGNAL(aboutToDisconnect()), SLOT(disconnectWidgets()));
+ connect(m_clientProxy, SIGNAL(serverReloaded()), this, SLOT(serverReloaded()));
connect(Debugger::DebuggerPlugin::instance(),
SIGNAL(stateChanged(int)), this, SLOT(debuggerStateChanged(int)));
void Inspector::disconnected()
{
- Core::EditorManager *em = Core::EditorManager::instance();
- disconnect(em, SIGNAL(editorAboutToClose(Core::IEditor*)), this, SLOT(removePreviewForEditor(Core::IEditor*)));
- disconnect(em, SIGNAL(editorOpened(Core::IEditor*)), this, SLOT(createPreviewForEditor(Core::IEditor*)));
resetViews();
updateMenuActions();
+
+ applyChangesToQmlObserverHelper(false);
}
void Inspector::aboutToReloadEngines()
if (!modelManager())
return;
- QmlJS::Snapshot snapshot = modelManager()->snapshot();
Core::EditorManager *em = Core::EditorManager::instance();
- connect(em, SIGNAL(editorAboutToClose(Core::IEditor*)), SLOT(removePreviewForEditor(Core::IEditor*)));
- connect(em, SIGNAL(editorOpened(Core::IEditor*)), SLOT(createPreviewForEditor(Core::IEditor*)));
+ m_loadedSnapshot = modelManager()->snapshot();
+
+ if (!m_listeningToEditorManager) {
+ m_listeningToEditorManager = true;
+ connect(em, SIGNAL(editorAboutToClose(Core::IEditor*)), SLOT(removePreviewForEditor(Core::IEditor*)));
+ connect(em, SIGNAL(editorOpened(Core::IEditor*)), SLOT(createPreviewForEditor(Core::IEditor*)));
+ }
// initial update
- foreach (QmlJS::Document::Ptr doc, snapshot) {
- QmlJSLiveTextPreview *preview = new QmlJSLiveTextPreview(doc, this);
- connect(preview,
- SIGNAL(selectedItemsChanged(QList<QDeclarativeDebugObjectReference>)),
- SLOT(changeSelectedItems(QList<QDeclarativeDebugObjectReference>)));
- m_textPreviews.insert(doc->fileName(), preview);
+ foreach (Core::IEditor *editor, em->openedEditors()) {
+ createPreviewForEditor(editor);
+ }
+
+ applyChangesToQmlObserverHelper(true);
+}
+
+void Inspector::serverReloaded()
+{
+ QmlJS::Snapshot snapshot = modelManager()->snapshot();
+ m_loadedSnapshot = snapshot;
+ for (QHash<QString, QmlJSLiveTextPreview *>::const_iterator it = m_textPreviews.constBegin();
+ it != m_textPreviews.constEnd(); ++it) {
+ Document::Ptr doc = snapshot.document(it.key());
+ it.value()->resetInitialDoc(doc);
}
+ ClientProxy::instance()->queryEngineContext(0);
+ //ClientProxy::instance()->refreshObjectTree();
}
+
void Inspector::removePreviewForEditor(Core::IEditor *oldEditor)
{
if (QmlJSLiveTextPreview *preview = m_textPreviews.value(oldEditor->file()->fileName())) {
void Inspector::createPreviewForEditor(Core::IEditor *newEditor)
{
- if (newEditor && newEditor->id() == QmlJSEditor::Constants::C_QMLJSEDITOR_ID) {
+ if (newEditor && newEditor->id() == QmlJSEditor::Constants::C_QMLJSEDITOR_ID
+ && m_clientProxy->isConnected())
+ {
QString filename = newEditor->file()->fileName();
QmlJS::Document::Ptr doc = modelManager()->snapshot().document(filename);
+ if (!doc || !doc->qmlProgram())
+ return;
+ QmlJS::Document::Ptr initdoc = m_loadedSnapshot.document(filename);
+ if (!initdoc)
+ initdoc = doc;
if (m_textPreviews.contains(filename)) {
m_textPreviews.value(filename)->associateEditor(newEditor);
} else {
-
- QmlJSLiveTextPreview *preview = new QmlJSLiveTextPreview(doc, this);
+ QmlJSLiveTextPreview *preview = new QmlJSLiveTextPreview(doc, initdoc, this);
connect(preview,
SIGNAL(selectedItemsChanged(QList<QDeclarativeDebugObjectReference>)),
SLOT(changeSelectedItems(QList<QDeclarativeDebugObjectReference>)));
+ connect(preview, SIGNAL(reloadQmlViewerRequested()), m_clientProxy, SLOT(reloadQmlViewer()));
+ connect(preview, SIGNAL(disableLivePreviewRequested()), SLOT(disableLivePreview()));
+
m_textPreviews.insert(newEditor->file()->fileName(), preview);
+ preview->associateEditor(newEditor);
+ preview->updateDebugIds(m_clientProxy->rootObjectReference());
}
}
}
return false;
}
+
+bool Inspector::showExperimentalWarning()
+{
+ return m_showExperimentalWarning;
+}
+
+void Inspector::setShowExperimentalWarning(bool value)
+{
+ m_showExperimentalWarning = value;
+}
+
+void Inspector::setApplyChangesToQmlObserver(bool applyChanges)
+{
+ emit livePreviewActivated(applyChanges);
+ applyChangesToQmlObserverHelper(applyChanges);
+}
+
+void Inspector::applyChangesToQmlObserverHelper(bool applyChanges)
+{
+ QHashIterator<QString, QmlJSLiveTextPreview *> iter(m_textPreviews);
+ while(iter.hasNext()) {
+ iter.next();
+ iter.value()->setApplyChangesToQmlObserver(applyChanges);
+ }
+}
+
+void Inspector::disableLivePreview()
+{
+ setApplyChangesToQmlObserver(false);
+}