Simon Hunt
Committed by Gerrit Code Review

GUI -- Pan/Zoom now activated when either Meta (command) key OR Alt (option) key is pressed.

 - cleanup of keyIn() function.
 - preparation for more control over formatting of Quick Help pane.
 (oops - filter out _helpFormat entry...)

Change-Id: I605589ab992b5ef3a4d2531973a08a31f399b855
...@@ -485,19 +485,21 @@ ...@@ -485,19 +485,21 @@
485 var event = d3.event, 485 var event = d3.event,
486 keyCode = event.keyCode, 486 keyCode = event.keyCode,
487 key = whatKey(keyCode), 487 key = whatKey(keyCode),
488 - gk = keyHandler.globalKeys[key], 488 + kh = keyHandler,
489 + gk = kh.globalKeys[key],
489 gcb = isF(gk) || (isA(gk) && isF(gk[0])), 490 gcb = isF(gk) || (isA(gk) && isF(gk[0])),
490 - vk = keyHandler.viewKeys[key], 491 + vk = kh.viewKeys[key],
491 - vcb = isF(vk) || (isA(vk) && isF(vk[0])) || isF(keyHandler.viewFn); 492 + vcb = isF(vk) || (isA(vk) && isF(vk[0])) || isF(kh.viewFn),
493 + token = current.view.token();
492 494
493 // global callback? 495 // global callback?
494 - if (gcb && gcb(current.view.token(), key, keyCode, event)) { 496 + if (gcb && gcb(token, key, keyCode, event)) {
495 // if the event was 'handled', we are done 497 // if the event was 'handled', we are done
496 return; 498 return;
497 } 499 }
498 // otherwise, let the view callback have a shot 500 // otherwise, let the view callback have a shot
499 if (vcb) { 501 if (vcb) {
500 - vcb(current.view.token(), key, keyCode, event); 502 + vcb(token, key, keyCode, event);
501 } 503 }
502 } 504 }
503 505
......
...@@ -138,13 +138,19 @@ ...@@ -138,13 +138,19 @@
138 } 138 }
139 139
140 function aggregateData(bindings) { 140 function aggregateData(bindings) {
141 - var gmap = d3.map(bindings.globalKeys), 141 + var hf = '_helpFormat',
142 + gmap = d3.map(bindings.globalKeys),
142 vmap = d3.map(bindings.viewKeys), 143 vmap = d3.map(bindings.viewKeys),
143 - gkeys = gmap.keys(), 144 + fmt = vmap.get(hf),
144 - vkeys = vmap.keys(),
145 vgest = bindings.viewGestures, 145 vgest = bindings.viewGestures,
146 + gkeys = gmap.keys(),
147 + vkeys,
146 sep = 0; 148 sep = 0;
147 149
150 + // filter out help format entry
151 + vmap.remove(hf);
152 + vkeys = vmap.keys(),
153 +
148 gkeys.sort(); 154 gkeys.sort();
149 vkeys.sort(); 155 vkeys.sort();
150 156
......
...@@ -134,26 +134,37 @@ ...@@ -134,26 +134,37 @@
134 equals: injectStartupEvents, 134 equals: injectStartupEvents,
135 dash: injectTestEvent, 135 dash: injectTestEvent,
136 136
137 - E: [equalizeMasters, 'Equalize mastership roles'],
138 O: [toggleSummary, 'Toggle ONOS summary pane'], 137 O: [toggleSummary, 'Toggle ONOS summary pane'],
139 I: [toggleInstances, 'Toggle ONOS instances pane'], 138 I: [toggleInstances, 'Toggle ONOS instances pane'],
140 D: [toggleDetails, 'Disable / enable details pane'], 139 D: [toggleDetails, 'Disable / enable details pane'],
141 - B: [toggleBg, 'Toggle background image'], 140 +
142 H: [toggleHosts, 'Toggle host visibility'], 141 H: [toggleHosts, 'Toggle host visibility'],
143 M: [toggleOffline, 'Toggle offline visibility'], 142 M: [toggleOffline, 'Toggle offline visibility'],
144 - L: [cycleLabels, 'Cycle device labels'], 143 + B: [toggleBg, 'Toggle background image'],
145 P: togglePorts, 144 P: togglePorts,
145 +
146 + X: [toggleNodeLock, 'Lock / unlock node positions'],
147 + Z: [toggleOblique, 'Toggle oblique view (Experimental)'],
148 + L: [cycleLabels, 'Cycle device labels'],
146 U: [unpin, 'Unpin node (hover mouse over)'], 149 U: [unpin, 'Unpin node (hover mouse over)'],
147 R: [resetPanZoom, 'Reset pan / zoom'], 150 R: [resetPanZoom, 'Reset pan / zoom'],
151 +
148 V: [showRelatedIntentsAction, 'Show all related intents'], 152 V: [showRelatedIntentsAction, 'Show all related intents'],
149 rightArrow: [showNextIntentAction, 'Show next related intent'], 153 rightArrow: [showNextIntentAction, 'Show next related intent'],
150 leftArrow: [showPrevIntentAction, 'Show previous related intent'], 154 leftArrow: [showPrevIntentAction, 'Show previous related intent'],
151 W: [showSelectedIntentTrafficAction, 'Monitor traffic of selected intent'], 155 W: [showSelectedIntentTrafficAction, 'Monitor traffic of selected intent'],
152 A: [showAllTrafficAction, 'Monitor all traffic'], 156 A: [showAllTrafficAction, 'Monitor all traffic'],
153 F: [showDeviceLinkFlowsAction, 'Show device link flows'], 157 F: [showDeviceLinkFlowsAction, 'Show device link flows'],
154 - X: [toggleNodeLock, 'Lock / unlock node positions'], 158 +
155 - Z: [toggleOblique, 'Toggle oblique view (Experimental)'], 159 + E: [equalizeMasters, 'Equalize mastership roles'],
156 - esc: handleEscape 160 +
161 + esc: handleEscape,
162 +
163 + _helpFormat: [
164 + ['O', 'I', 'D', '-', 'H', 'M', 'B', 'P' ],
165 + ['X', 'Z', 'L', 'U', 'R' ],
166 + ['V', 'rightArrow', 'leftArrow', 'W', 'A', 'F', '-', 'E' ]
167 + ]
157 }; 168 };
158 169
159 // mouse gestures 170 // mouse gestures
...@@ -2565,12 +2576,10 @@ ...@@ -2565,12 +2576,10 @@
2565 2576
2566 function selectObject(obj, el) { 2577 function selectObject(obj, el) {
2567 var n, 2578 var n,
2568 - srcEv = d3.event.sourceEvent, 2579 + ev = d3.event.sourceEvent;
2569 - meta = srcEv.metaKey,
2570 - shift = srcEv.shiftKey;
2571 2580
2572 - // if the meta key is pressed, we are panning/zooming, so ignore 2581 + // if the meta or alt key is pressed, we are panning/zooming, so ignore
2573 - if (meta) { 2582 + if (ev.metaKey || ev.altKey) {
2574 return; 2583 return;
2575 } 2584 }
2576 2585
...@@ -2585,13 +2594,13 @@ ...@@ -2585,13 +2594,13 @@
2585 } 2594 }
2586 if (!n) return; 2595 if (!n) return;
2587 2596
2588 - if (shift && n.classed('selected')) { 2597 + if (ev.shiftKey && n.classed('selected')) {
2589 deselectObject(obj.id); 2598 deselectObject(obj.id);
2590 updateDetailPane(); 2599 updateDetailPane();
2591 return; 2600 return;
2592 } 2601 }
2593 2602
2594 - if (!shift) { 2603 + if (!ev.shiftKey) {
2595 deselectAll(); 2604 deselectAll();
2596 } 2605 }
2597 2606
...@@ -2805,8 +2814,9 @@ ...@@ -2805,8 +2814,9 @@
2805 2814
2806 function setupPanZoom() { 2815 function setupPanZoom() {
2807 function zoomed() { 2816 function zoomed() {
2808 - // pan zoom active when meta key is pressed... 2817 + var ev = d3.event.sourceEvent;
2809 - if (d3.event.sourceEvent.metaKey) { 2818 + // pan/zoom active when meta or alt key is pressed...
2819 + if (ev.metaKey || ev.altKey) {
2810 panZoom(d3.event.translate, d3.event.scale); 2820 panZoom(d3.event.translate, d3.event.scale);
2811 } 2821 }
2812 } 2822 }
...@@ -2943,8 +2953,10 @@ ...@@ -2943,8 +2953,10 @@
2943 2953
2944 // predicate that indicates when dragging is active 2954 // predicate that indicates when dragging is active
2945 function dragEnabled() { 2955 function dragEnabled() {
2946 - // meta key pressed means we are zooming/panning (so disable drag) 2956 + var ev = d3.event.sourceEvent;
2947 - return !nodeLock && !d3.event.sourceEvent.metaKey; 2957 + // nodeLock means we aren't allowing nodes to be dragged...
2958 + // meta or alt key pressed means we are zooming/panning...
2959 + return !nodeLock && !(ev.metaKey || ev.altKey);
2948 } 2960 }
2949 2961
2950 // predicate that indicates when clicking is active 2962 // predicate that indicates when clicking is active
......