forked from qt-creator/qt-creator
QmlProfiler: show notes in range details
Change-Id: Iaee0c3488e3eaa2c347e8533d57b16e47d1a9328 Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com>
This commit is contained in:
@@ -107,7 +107,7 @@ Rectangle {
|
|||||||
flick.contentWidth = 0;
|
flick.contentWidth = 0;
|
||||||
view.clearData();
|
view.clearData();
|
||||||
view.startTime = view.endTime = 0;
|
view.startTime = view.endTime = 0;
|
||||||
hideRangeDetails();
|
rangeDetails.hide();
|
||||||
selectionRangeMode = false;
|
selectionRangeMode = false;
|
||||||
buttonsBar.updateRangeButton(selectionRangeMode);
|
buttonsBar.updateRangeButton(selectionRangeMode);
|
||||||
zoomControl.setRange(0,0);
|
zoomControl.setRange(0,0);
|
||||||
@@ -151,16 +151,6 @@ Rectangle {
|
|||||||
Math.max(0, totalRowOffset - flick.height / 2));
|
Math.max(0, totalRowOffset - flick.height / 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
function hideRangeDetails() {
|
|
||||||
rangeDetails.visible = false;
|
|
||||||
rangeDetails.duration = "";
|
|
||||||
rangeDetails.label = "";
|
|
||||||
rangeDetails.file = "";
|
|
||||||
rangeDetails.line = -1;
|
|
||||||
rangeDetails.column = 0;
|
|
||||||
rangeDetails.isBindingLoop = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function selectBySelectionId(modelIndex, selectionId)
|
function selectBySelectionId(modelIndex, selectionId)
|
||||||
{
|
{
|
||||||
if (selectionId === -1 || (modelIndex === view.selectedModel && view.selectedItem !== -1 &&
|
if (selectionId === -1 || (modelIndex === view.selectedModel && view.selectedItem !== -1 &&
|
||||||
@@ -368,10 +358,7 @@ Rectangle {
|
|||||||
onSelectionChanged: {
|
onSelectionChanged: {
|
||||||
if (selectedItem !== -1) {
|
if (selectedItem !== -1) {
|
||||||
// display details
|
// display details
|
||||||
rangeDetails.showInfo(qmlProfilerModelProxy.details(selectedModel,
|
rangeDetails.showInfo(selectedModel, selectedItem);
|
||||||
selectedItem));
|
|
||||||
rangeDetails.setLocation(qmlProfilerModelProxy.location(selectedModel,
|
|
||||||
selectedItem));
|
|
||||||
|
|
||||||
// center view (horizontally)
|
// center view (horizontally)
|
||||||
recenterOnItem(selectedModel, selectedItem);
|
recenterOnItem(selectedModel, selectedItem);
|
||||||
@@ -388,7 +375,7 @@ Rectangle {
|
|||||||
lockItemSelection = false;
|
lockItemSelection = false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
root.hideRangeDetails();
|
rangeDetails.hide();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -42,6 +42,9 @@ Item {
|
|||||||
property int column
|
property int column
|
||||||
property bool isBindingLoop
|
property bool isBindingLoop
|
||||||
|
|
||||||
|
property int selectedModel: -1
|
||||||
|
property int selectedItem: -1
|
||||||
|
|
||||||
property bool locked: view.selectionLocked
|
property bool locked: view.selectionLocked
|
||||||
|
|
||||||
width: col.width + 25
|
width: col.width + 25
|
||||||
@@ -51,6 +54,19 @@ Item {
|
|||||||
x: 200
|
x: 200
|
||||||
y: 25
|
y: 25
|
||||||
|
|
||||||
|
function hide() {
|
||||||
|
noteEdit.focus = false;
|
||||||
|
visible = false;
|
||||||
|
selectedModel = selectedItem = -1;
|
||||||
|
noteEdit.text = "";
|
||||||
|
duration = "";
|
||||||
|
label = "";
|
||||||
|
file = "";
|
||||||
|
line = -1;
|
||||||
|
column = 0;
|
||||||
|
isBindingLoop = false;
|
||||||
|
}
|
||||||
|
|
||||||
// keep inside view
|
// keep inside view
|
||||||
Connections {
|
Connections {
|
||||||
target: root
|
target: root
|
||||||
@@ -62,7 +78,13 @@ Item {
|
|||||||
id: eventInfo
|
id: eventInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
function showInfo(eventData) {
|
function showInfo(model, item) {
|
||||||
|
// make sure we don't accidentally save the old text for the new event
|
||||||
|
noteEdit.focus = false;
|
||||||
|
|
||||||
|
selectedModel = model;
|
||||||
|
selectedItem = item;
|
||||||
|
var eventData = qmlProfilerModelProxy.details(selectedModel, selectedItem)
|
||||||
eventInfo.clear();
|
eventInfo.clear();
|
||||||
for (var k in eventData) {
|
for (var k in eventData) {
|
||||||
if (k === "displayName") {
|
if (k === "displayName") {
|
||||||
@@ -73,9 +95,8 @@ Item {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
rangeDetails.visible = true;
|
rangeDetails.visible = true;
|
||||||
}
|
|
||||||
|
|
||||||
function setLocation(location) {
|
var location = qmlProfilerModelProxy.location(selectedModel, selectedItem)
|
||||||
if (location.hasOwnProperty("file")) { // not empty
|
if (location.hasOwnProperty("file")) { // not empty
|
||||||
file = location.file;
|
file = location.file;
|
||||||
line = location.line;
|
line = location.line;
|
||||||
@@ -86,6 +107,9 @@ Item {
|
|||||||
line = 0;
|
line = 0;
|
||||||
column = -1;
|
column = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
noteEdit.focus = false;
|
||||||
|
noteEdit.text = qmlProfilerModelProxy.noteText(selectedModel, selectedItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
function fitInView() {
|
function fitInView() {
|
||||||
@@ -160,7 +184,7 @@ Item {
|
|||||||
Rectangle {
|
Rectangle {
|
||||||
color: "white"
|
color: "white"
|
||||||
width: parent.width
|
width: parent.width
|
||||||
height: col.height + 10
|
height: 10 + col.height + (noteEdit.visible ? (noteEdit.height + 5) : 0)
|
||||||
y: 20
|
y: 20
|
||||||
border.width: 1
|
border.width: 1
|
||||||
border.color: "#a0a0a0"
|
border.color: "#a0a0a0"
|
||||||
@@ -181,6 +205,40 @@ Item {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
TextEdit {
|
||||||
|
id: noteEdit
|
||||||
|
x: 10
|
||||||
|
anchors.topMargin: 5
|
||||||
|
anchors.bottomMargin: 5
|
||||||
|
anchors.top: col.bottom
|
||||||
|
|
||||||
|
visible: text.length > 0 || focus
|
||||||
|
width: col.width
|
||||||
|
wrapMode: Text.Wrap
|
||||||
|
color: "orange"
|
||||||
|
font.italic: true
|
||||||
|
renderType: Text.NativeRendering
|
||||||
|
selectByMouse: true
|
||||||
|
onTextChanged: saveTimer.restart()
|
||||||
|
onFocusChanged: {
|
||||||
|
if (!focus && selectedModel != -1 && selectedItem != -1) {
|
||||||
|
saveTimer.stop();
|
||||||
|
qmlProfilerModelProxy.setNoteText(selectedModel, selectedItem, text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Timer {
|
||||||
|
id: saveTimer
|
||||||
|
onTriggered: {
|
||||||
|
if (selectedModel != -1 && selectedItem != -1)
|
||||||
|
qmlProfilerModelProxy.setNoteText(selectedModel, selectedItem,
|
||||||
|
noteEdit.text);
|
||||||
|
}
|
||||||
|
interval: 1000
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
MouseArea {
|
MouseArea {
|
||||||
@@ -196,6 +254,20 @@ Item {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Image {
|
||||||
|
id: editIcon
|
||||||
|
source: "ico_edit.png"
|
||||||
|
anchors.top: closeIcon.top
|
||||||
|
anchors.right: lockIcon.left
|
||||||
|
anchors.rightMargin: 4
|
||||||
|
width: 8
|
||||||
|
height: 12
|
||||||
|
MouseArea {
|
||||||
|
anchors.fill: parent
|
||||||
|
onClicked: noteEdit.focus = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Image {
|
Image {
|
||||||
id: lockIcon
|
id: lockIcon
|
||||||
source: locked?"lock_closed.png" : "lock_open.png"
|
source: locked?"lock_closed.png" : "lock_open.png"
|
||||||
@@ -223,7 +295,7 @@ Item {
|
|||||||
MouseArea {
|
MouseArea {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
onClicked: {
|
onClicked: {
|
||||||
root.hideRangeDetails();
|
rangeDetails.hide();
|
||||||
view.selectFromEventIndex(view.selectedModel, -1);
|
view.selectFromEventIndex(view.selectedModel, -1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
src/plugins/qmlprofiler/qml/ico_edit.png
Normal file
BIN
src/plugins/qmlprofiler/qml/ico_edit.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 164 B |
@@ -11,6 +11,7 @@
|
|||||||
<file>recordOn.png</file>
|
<file>recordOn.png</file>
|
||||||
<file>lock_closed.png</file>
|
<file>lock_closed.png</file>
|
||||||
<file>lock_open.png</file>
|
<file>lock_open.png</file>
|
||||||
|
<file>ico_edit.png</file>
|
||||||
<file>TimeMarks.qml</file>
|
<file>TimeMarks.qml</file>
|
||||||
<file>Overview.qml</file>
|
<file>Overview.qml</file>
|
||||||
<file>Overview.js</file>
|
<file>Overview.js</file>
|
||||||
|
|||||||
Reference in New Issue
Block a user