Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1473)

Unified Diff: Source/devtools/front_end/ui_lazy/FlameChart.js

Issue 1145053003: DevTools: Support keyboard arrows navigation on flame chart (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/devtools/front_end/timeline/TimelinePanel.js ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/devtools/front_end/ui_lazy/FlameChart.js
diff --git a/Source/devtools/front_end/ui_lazy/FlameChart.js b/Source/devtools/front_end/ui_lazy/FlameChart.js
index 8b588207ef5d3f4004e6fc61f62d9ebc149bb703..ca6f21316b7bacdd90fc580c030aa670d503c868 100644
--- a/Source/devtools/front_end/ui_lazy/FlameChart.js
+++ b/Source/devtools/front_end/ui_lazy/FlameChart.js
@@ -41,6 +41,11 @@ WebInspector.FlameChartDelegate.prototype = {
requestWindowTimes: function(startTime, endTime) { },
/**
+ * @param {number} entryIndex
+ */
+ requestSelectionChange: function(entryIndex) { },
caseq 2015/05/22 00:09:19 How is that different from FlameChart.Events.Entry
alph 2015/05/22 00:51:53 Ahh, thanks. Missed that.
+
+ /**
* @param {number} startTime
* @param {number} endTime
*/
@@ -767,6 +772,82 @@ WebInspector.FlameChart.prototype = {
*/
_onKeyDown: function(e)
{
+ this._handleZoomPanKeys(e);
+ this._handleSelectionNav(e);
+ },
+
+ /**
+ * @param {!Event} e
+ */
+ _handleSelectionNav: function(e)
caseq 2015/05/22 00:09:18 no abbreviations pls.
alph 2015/05/22 00:51:54 Done.
+ {
+ if (e.altKey || e.ctrlKey || e.metaKey)
+ return;
+ if (this._selectedEntryIndex === -1)
+ return;
+ var timelineData = this._timelineData();
+ if (!timelineData)
+ return;
+
+ /**
+ * @param {number} time
+ * @param {number} entryIndex
+ * @return {number}
+ */
+ function timeComparator(time, entryIndex)
+ {
+ return time - timelineData.entryStartTimes[entryIndex];
+ }
+
+ /**
+ * @param {number} entry1
+ * @param {number} entry2
+ * @return {boolean}
+ */
+ function entriesIntersect(entry1, entry2)
+ {
+ var start1 = timelineData.entryStartTimes[entry1];
+ var start2 = timelineData.entryStartTimes[entry2];
+ var end1 = start1 + timelineData.entryTotalTimes[entry1];
+ var end2 = start2 + timelineData.entryTotalTimes[entry2];
+ return start1 < end2 && start2 < end1;
+ }
+
+ if (e.keyIdentifier === "Left" || e.keyIdentifier === "Right") {
caseq 2015/05/22 00:09:18 Let's use constants from WebInspector.KeyboardShor
alph 2015/05/22 00:51:53 Done.
+ var level = timelineData.entryLevels[this._selectedEntryIndex];
+ var levelIndexes = this._timelineLevels[level];
+ var indexOnLevel = levelIndexes.lowerBound(this._selectedEntryIndex);
+ indexOnLevel += e.keyIdentifier === "Left" ? -1 : 1;
+ e.consume(true);
+ if (indexOnLevel < 0 || indexOnLevel >= levelIndexes.length)
+ return;
+ this._flameChartDelegate.requestSelectionChange(levelIndexes[indexOnLevel]);
+ } else if (e.keyIdentifier === "Up" || e.keyIdentifier === "Down") {
+ var level = timelineData.entryLevels[this._selectedEntryIndex];
+ var delta = e.keyIdentifier === "Up" ? 1 : -1;
+ e.consume(true);
+ if (this._isTopDown)
+ delta *= -1;
caseq 2015/05/22 00:09:18 delta = -delta perhaps?
alph 2015/05/22 00:51:53 Done.
+ level += delta;
+ if (level < 0 || level >= this._timelineLevels.length)
+ return;
+ var entryTime = timelineData.entryStartTimes[this._selectedEntryIndex];
+ var levelIndexes = this._timelineLevels[level];
+ var indexOnLevel = levelIndexes.upperBound(entryTime, timeComparator) - 1;
+ if (!entriesIntersect(this._selectedEntryIndex, levelIndexes[indexOnLevel])) {
+ ++indexOnLevel;
+ if (indexOnLevel >= levelIndexes.length || !entriesIntersect(this._selectedEntryIndex, levelIndexes[indexOnLevel]))
+ return;
+ }
+ this._flameChartDelegate.requestSelectionChange(levelIndexes[indexOnLevel]);
+ }
+ },
+
+ /**
+ * @param {!Event} e
+ */
+ _handleZoomPanKeys: function(e)
+ {
if (e.altKey || e.ctrlKey || e.metaKey)
return;
var zoomMultiplier = e.shiftKey ? 0.8 : 0.3;
« no previous file with comments | « Source/devtools/front_end/timeline/TimelinePanel.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698