viewlogger.cpp 11.4 KB
Newer Older
hjk's avatar
hjk committed
1
/****************************************************************************
2
**
3
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
hjk's avatar
hjk committed
4
** Contact: http://www.qt-project.org/legal
5
**
hjk's avatar
hjk committed
6
** This file is part of Qt Creator.
7
**
hjk's avatar
hjk committed
8 9 10 11 12 13 14
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia.  For licensing terms and
** conditions see http://qt.digia.com/licensing.  For further information
** use the contact form at http://qt.digia.com/contact-us.
15 16
**
** GNU Lesser General Public License Usage
hjk's avatar
hjk committed
17 18 19 20 21 22 23 24 25
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file.  Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Digia gives you certain additional
** rights.  These rights are described in the Digia Qt LGPL Exception
con's avatar
con committed
26 27
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
hjk's avatar
hjk committed
28
****************************************************************************/
29 30 31 32 33

#include "viewlogger.h"
#include <QDebug>
#include <QTemporaryFile>
#include <QDir>
Thomas Hartmann's avatar
Thomas Hartmann committed
34
#include <QUrl>
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
#include <variantproperty.h>
#include <bindingproperty.h>
#include <nodeabstractproperty.h>
#include <nodelistproperty.h>

namespace QmlDesigner {
namespace Internal {

static QString serialize(AbstractView::PropertyChangeFlags change)
{
    QStringList tokenList;

    if (change.testFlag(AbstractView::PropertiesAdded))
        tokenList.append(QLatin1String("PropertiesAdded"));

    if (change.testFlag(AbstractView::EmptyPropertiesRemoved))
        tokenList.append(QLatin1String("EmptyPropertiesRemoved"));

    return tokenList.join(" ");
}

static QString indent(const QString &name = QString()) {
    return name.leftJustified(30, ' ');
}

QString ViewLogger::time() const
{
    return QString::number(m_timer.elapsed()).leftJustified(7, ' ');
}

ViewLogger::ViewLogger(QObject *parent)
    : AbstractView(parent)
{
68 69 70 71 72 73
    m_timer.start();
}

void ViewLogger::modelAttached(Model *model)
{
    static const QString path = QDir::tempPath() + QString("/qmldesigner-logger-%1-XXXXXX.txt").
74 75
                         arg(QDateTime::currentDateTime().toString(Qt::ISODate).
                         replace(':', '-'));
76
    static QTemporaryFile *temporaryFile = new QTemporaryFile(path, this);
77
    temporaryFile->setAutoRemove(false);
78 79
    static bool fileOpen = temporaryFile->open();
    if (fileOpen) {
80
        qDebug() << "QmlDesigner: Log file is:" << temporaryFile->fileName();
81
        m_output.setDevice(temporaryFile);
82
    } else {
83
        qDebug() << "QmlDesigner: failed to open:" << temporaryFile->fileName();
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
    }

    m_output << time() << indent("modelAttached:") << model << endl;
    AbstractView::modelAttached(model);
}

void ViewLogger::modelAboutToBeDetached(Model *model)
{
    m_output << time() << indent("modelAboutToBeDetached:") << model << endl;
    AbstractView::modelAboutToBeDetached(model);
}

void ViewLogger::nodeCreated(const ModelNode &createdNode)
{
    m_output << time() << indent("nodeCreated:") << createdNode << endl;
}

void ViewLogger::nodeAboutToBeRemoved(const ModelNode &removedNode)
{
    m_output << time() << indent("nodeAboutToBeRemoved:") << removedNode << endl;
}

void ViewLogger::nodeRemoved(const ModelNode &removedNode, const NodeAbstractProperty &parentProperty, PropertyChangeFlags propertyChange)
{
    m_output << time() << indent("nodeRemoved:") << removedNode << parentProperty << serialize(propertyChange) << endl;
}

111 112 113 114 115 116
void ViewLogger::nodeAboutToBeReparented(const ModelNode &node, const NodeAbstractProperty &newPropertyParent, const NodeAbstractProperty &oldPropertyParent, AbstractView::PropertyChangeFlags propertyChange)
{
    m_output << time() << indent("nodeAboutToBeReparented:") << node << "\t" << newPropertyParent << "\t" << oldPropertyParent << "\t" << serialize(propertyChange) << endl;
}


117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
void ViewLogger::nodeReparented(const ModelNode &node, const NodeAbstractProperty &newPropertyParent, const NodeAbstractProperty &oldPropertyParent, AbstractView::PropertyChangeFlags propertyChange)
{
    m_output << time() << indent("nodeReparented:") << node << "\t" << newPropertyParent << "\t" << oldPropertyParent << "\t" << serialize(propertyChange) << endl;
}

void ViewLogger::nodeIdChanged(const ModelNode& node, const QString& newId, const QString& oldId)
{
    m_output << time() << indent("nodeIdChanged:") << node << "\t" << newId << "\t" << oldId << endl;
}

void ViewLogger::propertiesAboutToBeRemoved(const QList<AbstractProperty>& propertyList)
{
    m_output << time() << indent("propertiesAboutToBeRemoved:") << endl;
    foreach (const AbstractProperty &property, propertyList)
        m_output << time() << indent() << property << endl;
}

void ViewLogger::propertiesRemoved(const QList<AbstractProperty> &propertyList)
{
    m_output << time() << indent("propertiesRemoved:") << endl;
    foreach (const AbstractProperty &property, propertyList)
        m_output << time() << indent() << property << endl;
}

void ViewLogger::variantPropertiesChanged(const QList<VariantProperty>& propertyList, PropertyChangeFlags propertyChange)
{
    m_output << time() << indent("variantPropertiesChanged:") << serialize(propertyChange) << endl;
144
    foreach (const VariantProperty &property, propertyList)
145 146 147 148 149 150
        m_output << time() << indent() << property << endl;
}

void ViewLogger::bindingPropertiesChanged(const QList<BindingProperty>& propertyList, PropertyChangeFlags propertyChange)
{
    m_output << time() << indent("bindingPropertiesChanged:") << serialize(propertyChange) << endl;
151
    foreach (const BindingProperty &property, propertyList)
152 153 154
        m_output << time() << indent() << property << endl;
}

155
void ViewLogger::rootNodeTypeChanged(const QString &type, int majorVersion, int minorVersion)
156
{
157
    m_output << time() << indent("rootNodeTypeChanged:") << rootModelNode() << type << majorVersion << minorVersion << endl;
158 159 160 161 162 163
}

void ViewLogger::selectedNodesChanged(const QList<ModelNode> &selectedNodeList,
                                  const QList<ModelNode> &lastSelectedNodeList)
{
    m_output << time() << indent("selectedNodesChanged:") << endl;
164
    foreach (const ModelNode &node, selectedNodeList)
165
        m_output << time() << indent("new: ") << node << endl;
166
    foreach (const ModelNode &node, lastSelectedNodeList)
167 168 169 170 171 172 173 174
        m_output << time() << indent("old: ") << node << endl;
}

void ViewLogger::fileUrlChanged(const QUrl &oldUrl, const QUrl &newUrl)
{
    m_output << time() << indent("fileUrlChanged:") << oldUrl.toString() << "\t" << newUrl.toString() << endl;
}

175
void ViewLogger::nodeOrderChanged(const NodeListProperty &listProperty, const ModelNode &movedNode, int oldIndex)
176
{
177
    m_output << time() << indent("nodeOrderChanged:") << listProperty << movedNode << oldIndex << endl;
178 179
}

180
void ViewLogger::auxiliaryDataChanged(const ModelNode &node, const PropertyName &name, const QVariant &data)
181
{
182
    m_output << time() << indent("auxiliaryDataChanged:") << node << "\t" << name << "\t" << data.toString() << endl;
183 184
}

185
void ViewLogger::importsChanged(const QList<Import> &addedImports, const QList<Import> &removedImports)
186
{
187
    m_output << time() << indent("importsChanged:") << endl;
188
    foreach (const Import &import, addedImports)
189
        m_output << time() << indent("import added: ") << import.toString() << endl;
190
    foreach (const Import &import, removedImports)
191
        m_output << time() << indent("import removed: ") << import.toString() << endl;
192 193 194 195 196
}

void ViewLogger::customNotification(const AbstractView *view, const QString &identifier, const QList<ModelNode> &nodeList, const QList<QVariant> &data)
{
    m_output << time() << indent("customNotification:") << view << identifier << endl;
197
    foreach (const ModelNode &node, nodeList)
198
        m_output << time() << indent("node: ") << node << endl;
199
    foreach (const QVariant &variant, data)
200 201 202
        m_output << time() << indent("data: ") << variant.toString() << endl;
}

Marco Bubke's avatar
Marco Bubke committed
203 204 205
void ViewLogger::scriptFunctionsChanged(const ModelNode &node, const QStringList &/*scriptFunctionList*/)
{
    m_output << time() << indent("function scripts changed:") << node << endl;
206 207
}

208
void ViewLogger::instancePropertyChange(const QList<QPair<ModelNode, PropertyName> > &propertyList)
209
{
210
    typedef QPair<ModelNode, PropertyName> PropertyPair;
211
    m_output << time() << indent("instancePropertyChange:") << endl;
Marco Bubke's avatar
Marco Bubke committed
212

213
    foreach (const PropertyPair &propertyPair, propertyList)
214
        m_output << time() << indent("property: ") << propertyPair.first << propertyPair.second << endl;
Marco Bubke's avatar
Marco Bubke committed
215 216
}

217 218 219 220
void ViewLogger::instancesCompleted(const QVector<ModelNode> &completedNodeList)
{
     m_output << time() << indent("instancesCompleted:") << endl;

221
     foreach (const ModelNode &node, completedNodeList)
222 223 224
         m_output << time() << indent("node: ") << node << endl;

}
225

226
void ViewLogger::instanceInformationsChange(const QMultiHash<ModelNode, InformationName> &informationChangeHash)
227 228 229
{
    m_output << time() << indent("instanceInformationsChange:") << endl;

230 231 232 233 234 235
    QHashIterator<ModelNode, InformationName> informationChangeHashIterator(informationChangeHash);

    while (informationChangeHashIterator.hasNext()) {
        informationChangeHashIterator.next();
        m_output << time() << indent("node: ") << informationChangeHashIterator.key() << "\tinformation: " << informationChangeHashIterator.value() << endl;
    }
236 237 238 239 240 241
}

void ViewLogger::instancesRenderImageChanged(const QVector<ModelNode> &nodeList)
{
    m_output << time() << indent("instancesRenderImageChanged:") << endl;

242
    foreach (const ModelNode &node, nodeList)
243 244 245 246 247 248 249
        m_output << time() << indent("node: ") << node << endl;
}

void ViewLogger::instancesPreviewImageChanged(const QVector<ModelNode> &nodeList)
{
    m_output << time() << indent("instancesPreviewImageChanged:") << endl;

250
    foreach (const ModelNode &node, nodeList)
251 252 253 254 255 256 257
        m_output << time() << indent("node: ") << node << endl;
}

void ViewLogger::instancesChildrenChanged(const QVector<ModelNode> &nodeList)
{
    m_output << time() << indent("instancesChildrenChanged:") << endl;

258
    foreach (const ModelNode &node, nodeList)
259 260 261
        m_output << time() << indent("node: ") << node << endl;
}

262 263 264 265 266 267 268
void ViewLogger::instancesToken(const QString &tokenName, int tokenNumber, const QVector<ModelNode> &nodeVector)
{
    m_output << time() << indent("instancesToken:") << tokenName << tokenNumber << endl;
    foreach (const ModelNode &node, nodeVector)
        m_output << time() << indent("node: ") << node << endl;
}

269
void ViewLogger::nodeSourceChanged(const ModelNode &node, const QString & /*newNodeSource*/)
270
{
271
    m_output << time() << indent("nodeSourceChanged:") << endl;
272 273 274
    m_output << time() << indent("node: ") << node << endl;
}

275 276 277 278 279 280 281 282 283 284
void ViewLogger::rewriterBeginTransaction()
{
    m_output << time() << indent("rewriterBeginTransaction:") << endl;
}

void ViewLogger::rewriterEndTransaction()
{
    m_output << time() << indent("rewriterEndTransaction:") << endl;
}

285 286 287 288
void ViewLogger::actualStateChanged(const ModelNode &node)
{
    m_output << time() << indent("actualStateChanged:") << node << endl;
}
Marco Bubke's avatar
Marco Bubke committed
289 290 291 292 293

QWidget *ViewLogger::widget()
{
    return 0;
}
294 295
} // namespace Internal
} // namespace QmlDesigner