blob: 2cc8570f8994bb0b8f492a518ad7decf3ccb2467 [file] [log] [blame]
Steven Burrows37549ee2016-09-21 14:41:39 +01001/*
2* Copyright 2016-present Open Networking Laboratory
3*
4* Licensed under the Apache License, Version 2.0 (the "License");
5* you may not use this file except in compliance with the License.
6* You may obtain a copy of the License at
7*
8* http://www.apache.org/licenses/LICENSE-2.0
9*
10* Unless required by applicable law or agreed to in writing, software
11* distributed under the License is distributed on an "AS IS" BASIS,
12* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13* See the License for the specific language governing permissions and
14* limitations under the License.
15*/
16
17(function () {
18
19 // Injected Services
Steven Burrows1c5c8612016-10-05 13:45:13 -050020 var ks, flash, wss, t2ps, t2ms, ps, t2is, t2sp, t2vs;
Steven Burrows5570d1b2016-09-28 14:21:00 -070021
Steven Burrows1c5c8612016-10-05 13:45:13 -050022 var t2fs;
Steven Burrows37549ee2016-09-21 14:41:39 +010023
24 // Commmands
25 var actionMap = {
Steven Burrowse3a18842016-09-22 15:33:33 +010026 L: [cycleDeviceLabels, 'Cycle device labels'],
27 G: [openMapSelection, 'Select background geo map'],
28 B: [toggleMap, 'Toggle background geo map'],
Steven Burrows5570d1b2016-09-28 14:21:00 -070029 I: [toggleInstancePanel, 'Toggle ONOS Instance Panel'],
Steven Burrows1c5c8612016-10-05 13:45:13 -050030 O: [toggleSummary, 'Toggle the Summary Panel'],
31 R: [resetZoom, 'Reset pan / zoom'],
32 P: [togglePorts, 'Toggle Port Highlighting'],
33 E: [equalizeMasters, 'Equalize mastership roles'],
34 X: [resetAllNodeLocations, 'Reset Node Location'],
Steven Burrowsc0efbf02016-11-16 11:30:47 -060035 U: [unpinNode, 'Unpin node (mouse over)'],
36
37 esc: handleEscape
Steven Burrows37549ee2016-09-21 14:41:39 +010038 };
39
Steven Burrows1c5c8612016-10-05 13:45:13 -050040 function init(_t2fs_) {
41 t2fs = _t2fs_;
Steven Burrows37549ee2016-09-21 14:41:39 +010042 bindCommands();
43 }
44
45 function bindCommands() {
46
47 ks.keyBindings(actionMap);
48
49 ks.gestureNotes([
50 ['click', 'Select the item and show details'],
51 ['shift-click', 'Toggle selection state'],
52 ['drag', 'Reposition (and pin) device / host'],
53 ['cmd-scroll', 'Zoom in / out'],
54 ['cmd-drag', 'Pan']
55 ]);
56 }
57
Steven Burrowsc0efbf02016-11-16 11:30:47 -060058 function handleEscape() {
59 if (t2ddp.isVisible()) {
60 t2ddp.toggle();
61 } else if (t2sp.isVisible()) {
62 t2sp.toggle();
63 } else if (t2is.isVisible()) {
64 t2is.toggle();
65 }
66 }
67
Steven Burrows01ddf602016-09-28 14:21:00 -070068 var prefsState = {};
69
70 function updatePrefsState(what, b) {
71 prefsState[what] = b ? 1 : 0;
72 ps.setPrefs('topo_prefs', prefsState);
73 }
74
Steven Burrows583f4be2016-11-04 14:06:50 +010075 function deviceLabelFlashMessage(index) {
Steven Burrows583f4be2016-11-04 14:06:50 +010076 switch (index) {
77 case 0: return 'Hide device labels';
78 case 1: return 'Show friendly device labels';
79 case 2: return 'Show device ID labels';
80 }
81 }
82
Steven Burrows37549ee2016-09-21 14:41:39 +010083 function cycleDeviceLabels() {
Steven Burrows583f4be2016-11-04 14:06:50 +010084 var deviceLabelIndex = t2ps.get('dlbls') + 1,
85 newDeviceLabelIndex = deviceLabelIndex % 3;
86
87 t2ps.set('dlbls', newDeviceLabelIndex);
Steven Burrows1c5c8612016-10-05 13:45:13 -050088 t2fs.updateNodes();
Steven Burrows583f4be2016-11-04 14:06:50 +010089 flash.flash(deviceLabelFlashMessage(newDeviceLabelIndex));
Steven Burrows37549ee2016-09-21 14:41:39 +010090 }
91
Steven Burrowse3a18842016-09-22 15:33:33 +010092 function openMapSelection() {
93 t2ms.openMapSelection();
94 }
95
96 function toggleMap(x) {
97 t2ms.toggle(x);
98 }
99
Steven Burrows01ddf602016-09-28 14:21:00 -0700100 function toggleInstancePanel(x) {
101 updatePrefsState('insts', t2is.toggle(x));
102 }
103
Steven Burrows5570d1b2016-09-28 14:21:00 -0700104 function toggleSummary() {
105 t2sp.toggle();
106 }
107
Steven Burrows1c5c8612016-10-05 13:45:13 -0500108 function resetZoom() {
109 t2ms.resetZoom();
110 flash.flash('Pan and zoom reset');
111 }
112
113 function togglePorts(x) {
114 updatePrefsState('porthl', t2vs.togglePortHighlights(x));
115 t2fs.updateLinks();
116 }
117
118 function equalizeMasters() {
119 wss.sendEvent('equalizeMasters');
120 flash.flash('Equalizing master roles');
121 }
122
123 function resetAllNodeLocations() {
124 t2fs.resetAllLocations();
125 flash.flash('Reset node locations');
126 }
127
128 function unpinNode() {
129 t2fs.unpin();
130 flash.flash('Unpin node');
131 }
132
Steven Burrows37549ee2016-09-21 14:41:39 +0100133 angular.module('ovTopo2')
134 .factory('Topo2KeyCommandService',
Steven Burrows1c5c8612016-10-05 13:45:13 -0500135 ['KeyService', 'FlashService', 'WebSocketService', 'Topo2PrefsService',
136 'Topo2MapService', 'PrefsService', 'Topo2InstanceService',
Steven Burrowsc0efbf02016-11-16 11:30:47 -0600137 'Topo2SummaryPanelService', 'Topo2DeviceDetailsPanel', 'Topo2ViewService',
138 function (_ks_, _flash_, _wss_, _t2ps_, _t2ms_, _ps_, _t2is_, _t2sp_, _t2ddp_, _t2vs_) {
Steven Burrows1c5c8612016-10-05 13:45:13 -0500139
140 ks = _ks_;
141 flash = _flash_;
142 wss = _wss_;
Steven Burrows37549ee2016-09-21 14:41:39 +0100143 t2ps = _t2ps_;
Steven Burrowse3a18842016-09-22 15:33:33 +0100144 t2ms = _t2ms_;
Steven Burrows01ddf602016-09-28 14:21:00 -0700145 t2is = _t2is_;
146 ps = _ps_;
Steven Burrows5570d1b2016-09-28 14:21:00 -0700147 t2sp = _t2sp_;
Steven Burrowsc0efbf02016-11-16 11:30:47 -0600148 t2ddp = _t2ddp_;
Steven Burrows1c5c8612016-10-05 13:45:13 -0500149 t2vs = _t2vs_;
Steven Burrows37549ee2016-09-21 14:41:39 +0100150
151 return {
152 init: init,
153 bindCommands: bindCommands
154 };
155 }
156 ]);
157})();