QmlProfiler: copy event information to clipboard

Task-number: QTCREATORBUG-5033
Change-Id: I7424afc24a03c4094b01f8a4d424a21daa20ed4a
Reviewed-on: http://codereview.qt.nokia.com/3478
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Kai Koehne <kai.koehne@nokia.com>
This commit is contained in:
Christiaan Janssen
2011-08-24 11:18:48 +02:00
parent 27d0830698
commit 258727ab57
3 changed files with 87 additions and 0 deletions

View File

@@ -38,6 +38,9 @@
#include <QtGui/QStandardItem> #include <QtGui/QStandardItem>
#include <QtGui/QHeaderView> #include <QtGui/QHeaderView>
#include <QtGui/QApplication>
#include <QtGui/QClipboard>
#include <QtGui/QContextMenuEvent> #include <QtGui/QContextMenuEvent>
#include <QDebug> #include <QDebug>
@@ -84,6 +87,8 @@ public:
QString displayTime(double time) const; QString displayTime(double time) const;
QString nameForType(int typeNumber) const; QString nameForType(int typeNumber) const;
QString textForItem(QStandardItem *item, bool recursive) const;
QmlProfilerEventsView *q; QmlProfilerEventsView *q;
@@ -407,5 +412,70 @@ void QmlProfilerEventsView::contextMenuEvent(QContextMenuEvent *ev)
emit contextMenuRequested(ev->globalPos()); emit contextMenuRequested(ev->globalPos());
} }
QModelIndex QmlProfilerEventsView::selectedItem() const
{
QModelIndexList sel = selectedIndexes();
if (sel.isEmpty())
return QModelIndex();
else
return sel.first();
}
QString QmlProfilerEventsView::QmlProfilerEventsViewPrivate::textForItem(QStandardItem *item, bool recursive = true) const
{
QString str;
if (recursive) {
// indentation
QStandardItem *itemParent = item->parent();
while (itemParent) {
str += '\t';
itemParent = itemParent->parent();
}
}
// item's data
int colCount = m_model->columnCount();
for (int j = 0; j < colCount; ++j) {
QStandardItem *colItem = item->parent() ? item->parent()->child(item->row(),j) : m_model->item(item->row(),j);
str += colItem->data(Qt::DisplayRole).toString();
if (j < colCount-1) str += '\t';
}
str += '\n';
// recursively print children
if (recursive && item->child(0))
for (int j = 0; j != item->rowCount(); j++)
str += textForItem(item->child(j));
return str;
}
void QmlProfilerEventsView::copyTableToClipboard()
{
QString str;
int n = d->m_model->rowCount();
for (int i = 0; i != n; ++i) {
str += d->textForItem(d->m_model->item(i));
}
QClipboard *clipboard = QApplication::clipboard();
# ifdef Q_WS_X11
clipboard->setText(str, QClipboard::Selection);
# endif
clipboard->setText(str, QClipboard::Clipboard);
}
void QmlProfilerEventsView::copyRowToClipboard()
{
QString str;
str = d->textForItem(d->m_model->itemFromIndex(selectedItem()), false);
QClipboard *clipboard = QApplication::clipboard();
# ifdef Q_WS_X11
clipboard->setText(str, QClipboard::Selection);
# endif
clipboard->setText(str, QClipboard::Clipboard);
}
} // namespace Internal } // namespace Internal
} // namespace QmlProfiler } // namespace QmlProfiler

View File

@@ -85,6 +85,10 @@ public:
void setViewType(ViewTypes type); void setViewType(ViewTypes type);
void setShowAnonymousEvents( bool showThem ); void setShowAnonymousEvents( bool showThem );
QModelIndex selectedItem() const;
void copyTableToClipboard();
void copyRowToClipboard();
signals: signals:
void gotoSourceLocation(const QString &fileName, int lineNumber); void gotoSourceLocation(const QString &fileName, int lineNumber);
void contextMenuRequested(const QPoint &position); void contextMenuRequested(const QPoint &position);

View File

@@ -169,15 +169,28 @@ IAnalyzerTool::ToolMode QmlProfilerTool::toolMode() const
void QmlProfilerTool::showContextMenu(const QPoint &position) void QmlProfilerTool::showContextMenu(const QPoint &position)
{ {
QmlProfilerEventsView *senderView = qobject_cast<QmlProfilerEventsView *>(sender());
QMenu menu; QMenu menu;
QAction *loadAction = menu.addAction(tr("Load QML Trace")); QAction *loadAction = menu.addAction(tr("Load QML Trace"));
QAction *saveAction = menu.addAction(tr("Save QML Trace")); QAction *saveAction = menu.addAction(tr("Save QML Trace"));
QAction *copyRowAction;
QAction *copyTableAction;
if (senderView) {
if (senderView->selectedItem().isValid())
copyRowAction = menu.addAction(tr("Copy Row"));
copyTableAction = menu.addAction(tr("Copy Table"));
}
QAction *selectedAction = menu.exec(position); QAction *selectedAction = menu.exec(position);
if (selectedAction == loadAction) if (selectedAction == loadAction)
showLoadDialog(); showLoadDialog();
if (selectedAction == saveAction) if (selectedAction == saveAction)
showSaveDialog(); showSaveDialog();
if (selectedAction == copyRowAction)
senderView->copyRowToClipboard();
if (selectedAction == copyTableAction)
senderView->copyTableToClipboard();
} }
IAnalyzerEngine *QmlProfilerTool::createEngine(const AnalyzerStartParameters &sp, IAnalyzerEngine *QmlProfilerTool::createEngine(const AnalyzerStartParameters &sp,