summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristiaan Janssen <christiaan.janssen@nokia.com>2011-02-10 13:58:59 +0100
committerChristiaan Janssen <christiaan.janssen@nokia.com>2011-02-10 14:33:20 +0100
commit49fa40cf9e4b3ed5d26b38b2e7e8d884ae229ea9 (patch)
tree6bd09679c6070ead9429ded44020efb19e5e7cf3 /src
parent37686e6a15993406c6e87553524501d61c2b556b (diff)
downloadqt-creator-49fa40cf9e4b3ed5d26b38b2e7e8d884ae229ea9.tar.gz
QmlInspector: changed crumblepath appearance
Reviewed-by: Kai Koehne
Diffstat (limited to 'src')
-rw-r--r--src/libs/utils/crumblepath.cpp50
-rw-r--r--src/libs/utils/crumblepath.h5
-rw-r--r--src/libs/utils/images/triangle_vert.pngbin0 -> 216 bytes
-rw-r--r--src/libs/utils/utils.qrc1
-rw-r--r--src/plugins/qmljsinspector/qmljscontextcrumblepath.cpp15
-rw-r--r--src/plugins/qmljsinspector/qmljscontextcrumblepath.h3
-rw-r--r--src/plugins/qmljsinspector/qmljsinspector.cpp14
7 files changed, 55 insertions, 33 deletions
diff --git a/src/libs/utils/crumblepath.cpp b/src/libs/utils/crumblepath.cpp
index fc938c0c78..de5801217f 100644
--- a/src/libs/utils/crumblepath.cpp
+++ b/src/libs/utils/crumblepath.cpp
@@ -37,11 +37,14 @@
#include <QtCore/QList>
#include <QtGui/QHBoxLayout>
#include <QtGui/QPushButton>
+#include <QtGui/QMenu>
#include <QtGui/QStyle>
#include <QtGui/QResizeEvent>
#include <QtGui/QPainter>
#include <QtGui/QImage>
+#include <qtcassert.h>
+
namespace Utils {
static const int ArrowBorderSize = 12;
@@ -82,6 +85,7 @@ private:
QImage m_segmentSelectedEnd;
QImage m_segmentHover;
QImage m_segmentHoverEnd;
+ QImage m_triangleIcon;
QPoint m_textPos;
QVariant m_data;
@@ -105,6 +109,7 @@ CrumblePathButton::CrumblePathButton(const QString &title, QWidget *parent)
m_segmentEnd = QImage(":/utils/images/crumblepath-segment-end.png");
m_segmentSelectedEnd = QImage(":/utils/images/crumblepath-segment-selected-end.png");
m_segmentHoverEnd = QImage(":/utils/images/crumblepath-segment-hover-end.png");
+ m_triangleIcon = QImage(":/utils/images/triangle_vert.png");
tintImages();
}
@@ -141,6 +146,10 @@ void CrumblePathButton::paintEvent(QPaintEvent *)
QString textToDraw = fm.elidedText(text(), Qt::ElideRight, geom.width() - m_textPos.x());
p.drawText(QRectF(m_textPos.x(), 4, geom.width(), geom.height()), textToDraw);
+
+ if (menu()) {
+ p.drawImage(geom.width() - m_triangleIcon.width() - 6, geom.center().y() - m_triangleIcon.height()/2, m_triangleIcon);
+ }
}
void CrumblePathButton::tintImages()
@@ -204,6 +213,8 @@ QVariant CrumblePathButton::data() const
return m_data;
}
+///////////////////////////////////////////////////////////////////////////////
+
struct CrumblePathPrivate {
explicit CrumblePathPrivate(CrumblePath *q);
@@ -261,7 +272,6 @@ void CrumblePath::pushElement(const QString &title, const QVariant data)
CrumblePathButton *newButton = new CrumblePathButton(title, this);
newButton->hide();
connect(newButton, SIGNAL(clicked()), SLOT(mapClickToIndex()));
- connect(newButton, SIGNAL(customContextMenuRequested(QPoint)), SLOT(mapContextMenuRequestToIndex()));
int segType = CrumblePathButton::MiddleSegment;
if (!d->m_buttons.isEmpty()) {
@@ -278,6 +288,23 @@ void CrumblePath::pushElement(const QString &title, const QVariant data)
resizeButtons();
}
+void CrumblePath::addChild(const QString &title, const QVariant data)
+{
+ QTC_ASSERT(d->m_buttons.count()>0,return);
+
+ QPushButton *lastButton = d->m_buttons.last();
+
+ QMenu *childList = lastButton->menu();
+ if (childList == 0)
+ childList = new QMenu(lastButton);
+
+ QAction *childAction = new QAction(title, lastButton);
+ childAction->setData(data);
+ connect(childAction, SIGNAL(triggered()), this, SLOT(mapClickToIndex()));
+ childList->addAction(childAction);
+ lastButton->setMenu(childList);
+}
+
void CrumblePath::popElement()
{
QWidget *last = d->m_buttons.last();
@@ -358,23 +385,12 @@ void CrumblePath::resizeButtons()
void CrumblePath::mapClickToIndex()
{
QObject *element = sender();
- for (int i = 0; i < d->m_buttons.length(); ++i) {
- if (d->m_buttons[i] == element) {
- emit elementClicked(i);
- return;
- }
- }
-}
-
-void CrumblePath::mapContextMenuRequestToIndex()
-{
- QObject *element = sender();
- for (int i = 0; i < d->m_buttons.length(); ++i) {
- if (d->m_buttons[i] == element) {
- emit elementContextMenuRequested(i);
- return;
+ if (QString("QAction") == element->metaObject()->className()) {
+ emit elementClicked(static_cast<QAction *>(element)->data().toInt());
+ } else
+ if (QString("QPushButton") == element->metaObject()->className()) {
+ emit elementClicked(static_cast<CrumblePathButton *>(element)->data().toInt());
}
- }
}
void CrumblePath::paintEvent(QPaintEvent *event)
diff --git a/src/libs/utils/crumblepath.h b/src/libs/utils/crumblepath.h
index 46b9652e6c..0b1011e438 100644
--- a/src/libs/utils/crumblepath.h
+++ b/src/libs/utils/crumblepath.h
@@ -56,12 +56,12 @@ public:
public slots:
void pushElement(const QString &title, const QVariant data = QVariant());
+ void addChild(const QString &title, const QVariant data = QVariant());
void popElement();
void clear();
signals:
- void elementClicked(int index);
- void elementContextMenuRequested(int index);
+ void elementClicked(int debugId);
protected:
void resizeEvent(QResizeEvent *);
@@ -69,7 +69,6 @@ protected:
private slots:
void mapClickToIndex();
- void mapContextMenuRequestToIndex();
private:
void resizeButtons();
diff --git a/src/libs/utils/images/triangle_vert.png b/src/libs/utils/images/triangle_vert.png
new file mode 100644
index 0000000000..50b14458a4
--- /dev/null
+++ b/src/libs/utils/images/triangle_vert.png
Binary files differ
diff --git a/src/libs/utils/utils.qrc b/src/libs/utils/utils.qrc
index 43fbbd1096..52ec41382b 100644
--- a/src/libs/utils/utils.qrc
+++ b/src/libs/utils/utils.qrc
@@ -8,5 +8,6 @@
<file>images/crumblepath-segment-hover.png</file>
<file>images/crumblepath-segment-selected-end.png</file>
<file>images/crumblepath-segment-selected.png</file>
+ <file>images/triangle_vert.png</file>
</qresource>
</RCC>
diff --git a/src/plugins/qmljsinspector/qmljscontextcrumblepath.cpp b/src/plugins/qmljsinspector/qmljscontextcrumblepath.cpp
index 6ebefda882..1089b59837 100644
--- a/src/plugins/qmljsinspector/qmljscontextcrumblepath.cpp
+++ b/src/plugins/qmljsinspector/qmljscontextcrumblepath.cpp
@@ -56,19 +56,22 @@ void ContextCrumblePath::updateContextPath(const QStringList &path, const QList<
clear();
- for (int i=0; i<path.count(); i++) {
- pushElement(path[i],QVariant(debugIds[i]));
- }
-
m_isEmpty = path.isEmpty();
if (m_isEmpty) {
pushElement(tr("[no context]"));
+ } else {
+ for (int i=0; i<path.count(); i++) {
+ pushElement(path[i],QVariant(debugIds[i]));
+ }
}
}
-void ContextCrumblePath::selectIndex(int index)
+void ContextCrumblePath::addChildren(const QStringList &childrenNames, const QList<int> &childrenDebugIds)
{
- CrumblePath::selectIndex(index);
+ Q_ASSERT(childrenNames.count() == childrenDebugIds.count());
+ for (int i=0; i<childrenNames.count(); i++) {
+ addChild(childrenNames[i],QVariant(childrenDebugIds[i]));
+ }
}
bool ContextCrumblePath::isEmpty() const
diff --git a/src/plugins/qmljsinspector/qmljscontextcrumblepath.h b/src/plugins/qmljsinspector/qmljscontextcrumblepath.h
index dee2bb2347..9b20b8d2e4 100644
--- a/src/plugins/qmljsinspector/qmljscontextcrumblepath.h
+++ b/src/plugins/qmljsinspector/qmljscontextcrumblepath.h
@@ -50,7 +50,8 @@ public:
public slots:
void updateContextPath(const QStringList &path, const QList<int> &debugIds);
- void selectIndex(int index);
+ void addChildren(const QStringList &childrenNames, const QList<int> &childrenDebugIds);
+
private:
bool m_isEmpty;
};
diff --git a/src/plugins/qmljsinspector/qmljsinspector.cpp b/src/plugins/qmljsinspector/qmljsinspector.cpp
index 6ac4b92302..0a1f92ea9f 100644
--- a/src/plugins/qmljsinspector/qmljsinspector.cpp
+++ b/src/plugins/qmljsinspector/qmljsinspector.cpp
@@ -576,7 +576,9 @@ void InspectorUi::populateCrumblePath(const QDeclarativeDebugObjectReference &ob
crumbleStrings.push_front( displayName(ref) );
}
- int itemIndex = crumbleData.length()-1;
+ m_crumblePath->updateContextPath(crumbleStrings, crumbleData);
+ crumbleStrings.clear();
+ crumbleData.clear();
// now append the children
foreach (const QDeclarativeDebugObjectReference &child, objRef.children()) {
@@ -584,8 +586,7 @@ void InspectorUi::populateCrumblePath(const QDeclarativeDebugObjectReference &ob
crumbleStrings.push_back( displayName(child) );
}
- m_crumblePath->updateContextPath(crumbleStrings, crumbleData);
- m_crumblePath->selectIndex(itemIndex);
+ m_crumblePath->addChildren(crumbleStrings, crumbleData);
}
void InspectorUi::selectItems(const QList<int> &objectIds)
@@ -710,8 +711,9 @@ void InspectorUi::setupDockWidgets()
wlay->setSpacing(0);
observerWidget->setLayout(wlay);
wlay->addWidget(m_toolBar->widget());
- wlay->addWidget(m_propertyInspector);
wlay->addWidget(m_crumblePath);
+ wlay->addWidget(m_propertyInspector);
+
Debugger::DebuggerMainWindow *mw = Debugger::DebuggerPlugin::mainWindow();
QDockWidget *dock = mw->createDockWidget(Debugger::QmlLanguage, observerWidget);
@@ -719,10 +721,10 @@ void InspectorUi::setupDockWidgets()
dock->setTitleBarWidget(new QWidget(dock));
}
-void InspectorUi::crumblePathElementClicked(int pathIndex)
+void InspectorUi::crumblePathElementClicked(int debugId)
{
QList <int> l;
- l << m_crumblePath->debugIdForIndex(pathIndex);
+ l << debugId;
selectItems(l);
}