Remove "All rights reserved" line from license headers.
[profile/ivi/qtdeclarative.git] / src / plugins / qmltooling / qmldbg_qtquick1 / abstractliveedittool.cpp
1 /****************************************************************************
2 **
3 ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/
5 **
6 ** This file is part of the QtDeclarative module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** GNU Lesser General Public License Usage
10 ** This file may be used under the terms of the GNU Lesser General Public
11 ** License version 2.1 as published by the Free Software Foundation and
12 ** appearing in the file LICENSE.LGPL included in the packaging of this
13 ** file. Please review the following information to ensure the GNU Lesser
14 ** General Public License version 2.1 requirements will be met:
15 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
16 **
17 ** In addition, as a special exception, Nokia gives you certain additional
18 ** rights. These rights are described in the Nokia Qt LGPL Exception
19 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
20 **
21 ** GNU General Public License Usage
22 ** Alternatively, this file may be used under the terms of the GNU General
23 ** Public License version 3.0 as published by the Free Software Foundation
24 ** and appearing in the file LICENSE.GPL included in the packaging of this
25 ** file. Please review the following information to ensure the GNU General
26 ** Public License version 3.0 requirements will be met:
27 ** http://www.gnu.org/copyleft/gpl.html.
28 **
29 ** Other Usage
30 ** Alternatively, this file may be used in accordance with the terms and
31 ** conditions contained in a signed written agreement between you and Nokia.
32 **
33 **
34 **
35 **
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41
42 #include "abstractliveedittool.h"
43 #include "qdeclarativeviewinspector_p.h"
44
45 #include <QDeclarativeEngine>
46
47 #include <QtDebug>
48 #include <QGraphicsItem>
49 #include <QDeclarativeItem>
50
51 namespace QmlJSDebugger {
52 namespace QtQuick1 {
53
54 AbstractLiveEditTool::AbstractLiveEditTool(QDeclarativeViewInspector *editorView)
55     : AbstractTool(editorView)
56 {
57 }
58
59
60 AbstractLiveEditTool::~AbstractLiveEditTool()
61 {
62 }
63
64 QDeclarativeViewInspector *AbstractLiveEditTool::inspector() const
65 {
66     return static_cast<QDeclarativeViewInspector*>(AbstractTool::inspector());
67 }
68
69 QDeclarativeView *AbstractLiveEditTool::view() const
70 {
71     return inspector()->declarativeView();
72 }
73
74 QGraphicsScene* AbstractLiveEditTool::scene() const
75 {
76     return view()->scene();
77 }
78
79 void AbstractLiveEditTool::updateSelectedItems()
80 {
81     selectedItemsChanged(items());
82 }
83
84 QList<QGraphicsItem*> AbstractLiveEditTool::items() const
85 {
86     return inspector()->selectedItems();
87 }
88
89 bool AbstractLiveEditTool::topItemIsMovable(const QList<QGraphicsItem*> & itemList)
90 {
91     QGraphicsItem *firstSelectableItem = topMovableGraphicsItem(itemList);
92     if (firstSelectableItem == 0)
93         return false;
94     if (toQDeclarativeItem(firstSelectableItem) != 0)
95         return true;
96
97     return false;
98
99 }
100
101 bool AbstractLiveEditTool::topSelectedItemIsMovable(const QList<QGraphicsItem*> &itemList)
102 {
103     QList<QGraphicsItem*> selectedItems = inspector()->selectedItems();
104
105     foreach (QGraphicsItem *item, itemList) {
106         QDeclarativeItem *declarativeItem = toQDeclarativeItem(item);
107         if (declarativeItem
108                 && selectedItems.contains(declarativeItem)
109                 /*&& (declarativeItem->qmlItemNode().hasShowContent() || selectNonContentItems)*/)
110             return true;
111     }
112
113     return false;
114
115 }
116
117 bool AbstractLiveEditTool::topItemIsResizeHandle(const QList<QGraphicsItem*> &/*itemList*/)
118 {
119     return false;
120 }
121
122 QDeclarativeItem *AbstractLiveEditTool::toQDeclarativeItem(QGraphicsItem *item)
123 {
124     return qobject_cast<QDeclarativeItem*>(item->toGraphicsObject());
125 }
126
127 QGraphicsItem *AbstractLiveEditTool::topMovableGraphicsItem(const QList<QGraphicsItem*> &itemList)
128 {
129     foreach (QGraphicsItem *item, itemList) {
130         if (item->flags().testFlag(QGraphicsItem::ItemIsMovable))
131             return item;
132     }
133     return 0;
134 }
135
136 QDeclarativeItem *AbstractLiveEditTool::topMovableDeclarativeItem(const QList<QGraphicsItem*>
137                                                                   &itemList)
138 {
139     foreach (QGraphicsItem *item, itemList) {
140         QDeclarativeItem *declarativeItem = toQDeclarativeItem(item);
141         if (declarativeItem /*&& (declarativeItem->qmlItemNode().hasShowContent())*/)
142             return declarativeItem;
143     }
144
145     return 0;
146 }
147
148 QList<QGraphicsObject*> AbstractLiveEditTool::toGraphicsObjectList(const QList<QGraphicsItem*>
149                                                                    &itemList)
150 {
151     QList<QGraphicsObject*> gfxObjects;
152     foreach (QGraphicsItem *item, itemList) {
153         QGraphicsObject *obj = item->toGraphicsObject();
154         if (obj)
155             gfxObjects << obj;
156     }
157
158     return gfxObjects;
159 }
160
161 QString AbstractLiveEditTool::titleForItem(QGraphicsItem *item)
162 {
163     QString className(QLatin1String("QGraphicsItem"));
164     QString objectStringId;
165
166     QString constructedName;
167
168     QGraphicsObject *gfxObject = item->toGraphicsObject();
169     if (gfxObject) {
170         className = QLatin1String(gfxObject->metaObject()->className());
171
172         className.remove(QRegExp(QLatin1String("_QMLTYPE_\\d+")));
173         className.remove(QRegExp(QLatin1String("_QML_\\d+")));
174         if (className.startsWith(QLatin1String("QDeclarative")))
175             className = className.remove(QLatin1String("QDeclarative"));
176
177         QDeclarativeItem *declarativeItem = qobject_cast<QDeclarativeItem*>(gfxObject);
178         if (declarativeItem) {
179             objectStringId = inspector()->idStringForObject(declarativeItem);
180         }
181
182         if (!objectStringId.isEmpty()) {
183             constructedName = objectStringId + QLatin1String(" (") + className + QLatin1Char(')');
184         } else {
185             if (!gfxObject->objectName().isEmpty()) {
186                 constructedName = gfxObject->objectName() + QLatin1String(" (") + className + QLatin1Char(')');
187             } else {
188                 constructedName = className;
189             }
190         }
191     }
192
193     return constructedName;
194 }
195
196 } // namespace QtQuick1
197 } // namespace QmlJSDebugger