forked from qt-creator/qt-creator
		
	
		
			
				
	
	
		
			262 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			262 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /****************************************************************************
 | |
| **
 | |
| ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
 | |
| ** All rights reserved.
 | |
| ** Contact: Nokia Corporation (qt-info@nokia.com)
 | |
| **
 | |
| ** This file is part of the QtDeclarative module of the Qt Toolkit.
 | |
| **
 | |
| ** $QT_BEGIN_LICENSE:LGPL$
 | |
| ** No Commercial Usage
 | |
| ** This file contains pre-release code and may not be distributed.
 | |
| ** You may use this file in accordance with the terms and conditions
 | |
| ** contained in the Technology Preview License Agreement accompanying
 | |
| ** this package.
 | |
| **
 | |
| ** GNU Lesser General Public License Usage
 | |
| ** 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, Nokia gives you certain additional
 | |
| ** rights.  These rights are described in the Nokia Qt LGPL Exception
 | |
| ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
 | |
| **
 | |
| ** If you have questions regarding the use of this file, please contact
 | |
| ** Nokia at qt-info@nokia.com.
 | |
| **
 | |
| **
 | |
| **
 | |
| **
 | |
| **
 | |
| **
 | |
| **
 | |
| **
 | |
| ** $QT_END_LICENSE$
 | |
| **
 | |
| ****************************************************************************/
 | |
| 
 | |
| #include "qdeclarativeobserverservice.h"
 | |
| 
 | |
| #include <QStringList>
 | |
| #include <QColor>
 | |
| 
 | |
| #include <QDebug>
 | |
| 
 | |
| namespace QmlJSDebugger {
 | |
| 
 | |
| Q_GLOBAL_STATIC(QDeclarativeObserverService, serviceInstance)
 | |
| 
 | |
| QDeclarativeObserverService::QDeclarativeObserverService()
 | |
|     : QDeclarativeDebugService(QLatin1String("QDeclarativeObserverMode"))
 | |
| {
 | |
| }
 | |
| 
 | |
| QDeclarativeObserverService *QDeclarativeObserverService::instance()
 | |
| {
 | |
|     return serviceInstance();
 | |
| }
 | |
| 
 | |
| void QDeclarativeObserverService::statusChanged(Status status)
 | |
| {
 | |
|     emit debuggingClientChanged((status == Enabled));
 | |
| }
 | |
| 
 | |
| void QDeclarativeObserverService::messageReceived(const QByteArray &message)
 | |
| {
 | |
|     QDataStream ds(message);
 | |
| 
 | |
|     QByteArray type;
 | |
|     ds >> type;
 | |
| 
 | |
|     if (type == "SET_CURRENT_OBJECTS") {
 | |
|         int itemCount = 0;
 | |
|         ds >> itemCount;
 | |
| 
 | |
|         QList<QObject*> selectedObjects;
 | |
|         for(int i = 0; i < itemCount; ++i) {
 | |
|             int debugId = -1;
 | |
|             ds >> debugId;
 | |
|             QObject *obj = objectForId(debugId);
 | |
| 
 | |
|             if (obj)
 | |
|                 selectedObjects << obj;
 | |
|         }
 | |
| 
 | |
|         emit currentObjectsChanged(selectedObjects);
 | |
| 
 | |
|     } else if (type == "RELOAD") {
 | |
|         emit reloadRequested();
 | |
|     } else if (type == "SET_ANIMATION_SPEED") {
 | |
|         qreal speed;
 | |
|         ds >> speed;
 | |
|         emit animationSpeedChangeRequested(speed);
 | |
|     } else if (type == "CHANGE_TOOL") {
 | |
|         QByteArray toolName;
 | |
|         ds >> toolName;
 | |
|         if (toolName == "COLOR_PICKER") {
 | |
|             emit colorPickerToolRequested();
 | |
|         } else if (toolName == "SELECT") {
 | |
|             emit selectToolRequested();
 | |
|         } else if (toolName == "SELECT_MARQUEE") {
 | |
|             emit selectMarqueeToolRequested();
 | |
|         } else if (toolName == "ZOOM") {
 | |
|             emit zoomToolRequested();
 | |
|         }
 | |
|     } else if (type == "SET_DESIGN_MODE") {
 | |
|         bool inDesignMode;
 | |
|         ds >> inDesignMode;
 | |
|         emit designModeBehaviorChanged(inDesignMode);
 | |
|     } else if (type == "SHOW_APP_ON_TOP") {
 | |
|         bool showOnTop;
 | |
|         ds >> showOnTop;
 | |
|         emit showAppOnTopChanged(showOnTop);
 | |
|     } else if (type == "CREATE_OBJECT") {
 | |
|         QString qml;
 | |
|         int parentId;
 | |
|         QString filename;
 | |
|         QStringList imports;
 | |
|         ds >> qml >> parentId >> imports >> filename;
 | |
|         emit objectCreationRequested(qml, objectForId(parentId), imports, filename);
 | |
|     } else if (type == "DESTROY_OBJECT") {
 | |
|         int debugId;
 | |
|         ds >> debugId;
 | |
|         if (QObject* obj = objectForId(debugId))
 | |
|             obj->deleteLater();
 | |
|     } else if (type == "MOVE_OBJECT") {
 | |
|         int debugId, newParent;
 | |
|         ds >> debugId >> newParent;
 | |
|         emit objectReparentRequested(objectForId(debugId), objectForId(newParent));
 | |
|     } else if (type == "OBJECT_ID_LIST") {
 | |
|         int itemCount;
 | |
|         ds >> itemCount;
 | |
|         m_stringIdForObjectId.clear();
 | |
|         for(int i = 0; i < itemCount; ++i) {
 | |
|             int itemDebugId;
 | |
|             QString itemIdString;
 | |
|             ds >> itemDebugId
 | |
|                >> itemIdString;
 | |
| 
 | |
|             m_stringIdForObjectId.insert(itemDebugId, itemIdString);
 | |
|         }
 | |
|     } else if (type == "SET_CONTEXT_PATH_IDX") {
 | |
|         int contextPathIndex;
 | |
|         ds >> contextPathIndex;
 | |
|         emit contextPathIndexChanged(contextPathIndex);
 | |
|     } else if (type == "CLEAR_COMPONENT_CACHE") {
 | |
|         emit clearComponentCacheRequested();
 | |
|     }
 | |
| }
 | |
| 
 | |
| void QDeclarativeObserverService::setDesignModeBehavior(bool inDesignMode)
 | |
| {
 | |
|     QByteArray message;
 | |
|     QDataStream ds(&message, QIODevice::WriteOnly);
 | |
| 
 | |
|     ds << QByteArray("SET_DESIGN_MODE")
 | |
|        << inDesignMode;
 | |
| 
 | |
|     sendMessage(message);
 | |
| }
 | |
| 
 | |
| void QDeclarativeObserverService::setCurrentObjects(QList<QObject*> objects)
 | |
| {
 | |
|     QByteArray message;
 | |
|     QDataStream ds(&message, QIODevice::WriteOnly);
 | |
| 
 | |
|     ds << QByteArray("CURRENT_OBJECTS_CHANGED")
 | |
|        << objects.length();
 | |
| 
 | |
|     foreach(QObject *object, objects) {
 | |
|         int id = idForObject(object);
 | |
|         ds << id;
 | |
|     }
 | |
| 
 | |
|     sendMessage(message);
 | |
| }
 | |
| 
 | |
| void QDeclarativeObserverService::setCurrentTool(QmlJSDebugger::Constants::DesignTool toolId)
 | |
| {
 | |
|     QByteArray message;
 | |
|     QDataStream ds(&message, QIODevice::WriteOnly);
 | |
| 
 | |
|     ds << QByteArray("TOOL_CHANGED")
 | |
|        << toolId;
 | |
| 
 | |
|     sendMessage(message);
 | |
| }
 | |
| 
 | |
| void QDeclarativeObserverService::setAnimationSpeed(qreal slowdownFactor)
 | |
| {
 | |
| 
 | |
|     QByteArray message;
 | |
|     QDataStream ds(&message, QIODevice::WriteOnly);
 | |
| 
 | |
|     ds << QByteArray("ANIMATION_SPEED_CHANGED")
 | |
|        << slowdownFactor;
 | |
| 
 | |
|     sendMessage(message);
 | |
| }
 | |
| 
 | |
| void QDeclarativeObserverService::reloaded()
 | |
| {
 | |
|     QByteArray message;
 | |
|     QDataStream ds(&message, QIODevice::WriteOnly);
 | |
| 
 | |
|     ds << QByteArray("RELOADED");
 | |
| 
 | |
|     sendMessage(message);
 | |
| }
 | |
| 
 | |
| void QDeclarativeObserverService::setShowAppOnTop(bool showAppOnTop)
 | |
| {
 | |
|     QByteArray message;
 | |
|     QDataStream ds(&message, QIODevice::WriteOnly);
 | |
| 
 | |
|     ds << QByteArray("SHOW_APP_ON_TOP") << showAppOnTop;
 | |
| 
 | |
|     sendMessage(message);
 | |
| }
 | |
| 
 | |
| void QDeclarativeObserverService::selectedColorChanged(const QColor &color)
 | |
| {
 | |
|     QByteArray message;
 | |
|     QDataStream ds(&message, QIODevice::WriteOnly);
 | |
| 
 | |
|     ds << QByteArray("COLOR_CHANGED")
 | |
|        << color;
 | |
| 
 | |
|     sendMessage(message);
 | |
| }
 | |
| 
 | |
| void QDeclarativeObserverService::contextPathUpdated(const QStringList &contextPath)
 | |
| {
 | |
|     QByteArray message;
 | |
|     QDataStream ds(&message, QIODevice::WriteOnly);
 | |
| 
 | |
|     ds << QByteArray("CONTEXT_PATH_UPDATED")
 | |
|        << contextPath;
 | |
| 
 | |
|     sendMessage(message);
 | |
| }
 | |
| 
 | |
| QString QDeclarativeObserverService::idStringForObject(QObject *obj) const
 | |
| {
 | |
|     int id = idForObject(obj);
 | |
|     QString idString = m_stringIdForObjectId.value(id, QString());
 | |
|     return idString;
 | |
| }
 | |
| 
 | |
| void QDeclarativeObserverService::sendMessage(const QByteArray &message)
 | |
| {
 | |
|     if (status() != Enabled)
 | |
|         return;
 | |
| 
 | |
|     QDeclarativeDebugService::sendMessage(message);
 | |
| }
 | |
| 
 | |
| } // namespace QmlJSDebugger
 |