blob: 7e2ad18fc38c276a57416382802d7bcbe780dde2 [file] [log] [blame]
Steven Burrows37549ee2016-09-21 14:41:39 +01001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002* Copyright 2016-present Open Networking Foundation
Steven Burrows37549ee2016-09-21 14:41:39 +01003*
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
Simon Hunt47f8fb72017-04-11 13:49:31 -070020 var $log, fs, ks, flash, wss, t2ps, t2bgs, ps, t2is, t2sp, t2vs, t2rs,
Steven Burrowsb8ebd402017-11-01 15:31:31 +000021 t2fs, t2tbs, t2dp;
Steven Burrows37549ee2016-09-21 14:41:39 +010022
23 // Commmands
Steven Burrowsc8468932017-03-17 16:13:41 +000024 function actionMap() {
25 return {
26 L: [cycleDeviceLabels, 'Cycle device labels'],
27 B: [toggleBackground, 'Toggle background'],
Steven Burrowsb8ebd402017-11-01 15:31:31 +000028 D: [toggleDetails, 'Toggle details panel'],
Steven Burrowsc8468932017-03-17 16:13:41 +000029 I: [toggleInstancePanel, 'Toggle ONOS Instance Panel'],
30 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: [resetNodeLocation, 'Reset Node Location'],
35 U: [unpinNode, 'Unpin node (mouse over)'],
Steven Burrowsaea509d2017-04-12 14:17:47 -070036 H: [toggleHosts, 'Toggle host visibility'],
Steven Burrows02e67f42017-04-13 13:59:43 -070037 M: [toggleOfflineDevices, 'Toggle offline visibility'],
Simon Hunt47f8fb72017-04-11 13:49:31 -070038 dot: [toggleToolbar, 'Toggle Toolbar'],
Steven Burrowscc6f6de2017-08-30 12:50:38 +010039 'shift-L': [cycleHostLabels, 'Cycle host labels'],
Steven Burrowsc0efbf02016-11-16 11:30:47 -060040
Steven Burrowsc8468932017-03-17 16:13:41 +000041 esc: handleEscape,
42
Steven Burrows1c2a9682017-07-14 16:52:46 +010043 _keyListener: t2tbs.keyListener.bind(t2tbs),
44 };
Simon Hunte6f64612017-04-28 00:01:48 -070045 }
Steven Burrows37549ee2016-09-21 14:41:39 +010046
Steven Burrowsc8468932017-03-17 16:13:41 +000047 function init(_t2fs_, _t2tbs_) {
Steven Burrows1c5c8612016-10-05 13:45:13 -050048 t2fs = _t2fs_;
Steven Burrowsc8468932017-03-17 16:13:41 +000049 t2tbs = _t2tbs_;
Steven Burrows37549ee2016-09-21 14:41:39 +010050 bindCommands();
51 }
52
Simon Hunte6f64612017-04-28 00:01:48 -070053 function bindCommands(additional) {
Steven Burrows37549ee2016-09-21 14:41:39 +010054
Simon Hunte6f64612017-04-28 00:01:48 -070055 var am = actionMap(),
56 add = fs.isO(additional);
57
58 if (add) {
59 _.each(add, function (value, key) {
60 // filter out meta properties (e.g. _keyOrder)
Steven Burrows202034f2017-08-11 12:08:01 +010061 if (!(_.startsWith(key, '_'))) {
Simon Hunte6f64612017-04-28 00:01:48 -070062 // don't allow re-definition of existing key bindings
63 if (am[key]) {
64 $log.warn('keybind: ' + key + ' already exists');
65 } else {
66 am[key] = [value.cb, value.tt];
67 }
68 }
69 });
70 }
71
72 ks.keyBindings(am);
Steven Burrows37549ee2016-09-21 14:41:39 +010073
74 ks.gestureNotes([
75 ['click', 'Select the item and show details'],
76 ['shift-click', 'Toggle selection state'],
77 ['drag', 'Reposition (and pin) device / host'],
78 ['cmd-scroll', 'Zoom in / out'],
Steven Burrows1c2a9682017-07-14 16:52:46 +010079 ['cmd-drag', 'Pan'],
Steven Burrows37549ee2016-09-21 14:41:39 +010080 ]);
81 }
82
Steven Burrowsc0efbf02016-11-16 11:30:47 -060083 function handleEscape() {
Steven Burrows1aa4f582016-12-13 15:05:41 -050084
85 if (false) {
86 // TODO: Cancel show mastership
87 // TODO: Cancel Active overlay
88
89 } else if (t2rs.deselectAllNodes()) {
90 // else if we have node selections, deselect them all
91 // (work already done)
92 } else if (t2rs.deselectLink()) {
93 // else if we have a link selection, deselect it
94 // (work already done)
Steven Burrowsc0efbf02016-11-16 11:30:47 -060095 } else if (t2is.isVisible()) {
Steven Burrows1aa4f582016-12-13 15:05:41 -050096 // If the instance panel is visible, close it
97 t2is.toggle();
98 } else if (t2sp.isVisible()) {
99 // If the summary panel is visible, close it
100 t2sp.toggle();
101 }
Steven Burrowsc0efbf02016-11-16 11:30:47 -0600102 }
103
Steven Burrows01ddf602016-09-28 14:21:00 -0700104 var prefsState = {};
105
106 function updatePrefsState(what, b) {
107 prefsState[what] = b ? 1 : 0;
Simon Hunt95f4b422017-03-03 13:49:05 -0800108 ps.setPrefs('topo2_prefs', prefsState);
Steven Burrows01ddf602016-09-28 14:21:00 -0700109 }
110
Steven Burrows583f4be2016-11-04 14:06:50 +0100111 function deviceLabelFlashMessage(index) {
Steven Burrows583f4be2016-11-04 14:06:50 +0100112 switch (index) {
113 case 0: return 'Hide device labels';
114 case 1: return 'Show friendly device labels';
115 case 2: return 'Show device ID labels';
116 }
117 }
118
Steven Burrowscc6f6de2017-08-30 12:50:38 +0100119 function hostLabelFlashMessage(index) {
120 switch (index) {
121 case 0: return 'Hide host labels';
122 case 1: return 'Show friendly host labels';
123 case 2: return 'Show host IP labels';
124 case 3: return 'Show host MAC Address labels';
125 }
126 }
127
Steven Burrows37549ee2016-09-21 14:41:39 +0100128 function cycleDeviceLabels() {
Steven Burrows583f4be2016-11-04 14:06:50 +0100129 var deviceLabelIndex = t2ps.get('dlbls') + 1,
Steven Burrowsaf96a212016-12-28 12:57:02 +0000130 newDeviceLabelIndex = deviceLabelIndex % 3;
Steven Burrows583f4be2016-11-04 14:06:50 +0100131
132 t2ps.set('dlbls', newDeviceLabelIndex);
Steven Burrows1c5c8612016-10-05 13:45:13 -0500133 t2fs.updateNodes();
Steven Burrows583f4be2016-11-04 14:06:50 +0100134 flash.flash(deviceLabelFlashMessage(newDeviceLabelIndex));
Steven Burrows37549ee2016-09-21 14:41:39 +0100135 }
136
Steven Burrowscc6f6de2017-08-30 12:50:38 +0100137 function cycleHostLabels() {
138 var hostLabelIndex = t2ps.get('hlbls') + 1,
139 newHostLabelIndex = hostLabelIndex % 4;
140
141 t2ps.set('hlbls', newHostLabelIndex);
142 t2fs.updateNodes();
143 flash.flash(hostLabelFlashMessage(newHostLabelIndex));
144 }
145
Steven Burrowsb43c1a92017-03-07 17:13:28 +0000146 function toggleBackground(x) {
147 t2bgs.toggle(x);
Steven Burrowse3a18842016-09-22 15:33:33 +0100148 }
149
Steven Burrowsb8ebd402017-11-01 15:31:31 +0000150 function toggleDetails(x) {
151 t2dp().toggleUseDetailsFlag(x);
152 }
153
Steven Burrows01ddf602016-09-28 14:21:00 -0700154 function toggleInstancePanel(x) {
155 updatePrefsState('insts', t2is.toggle(x));
156 }
157
Steven Burrows5570d1b2016-09-28 14:21:00 -0700158 function toggleSummary() {
159 t2sp.toggle();
160 }
161
Steven Burrows1c5c8612016-10-05 13:45:13 -0500162 function resetZoom() {
Steven Burrows3bbd9af2017-03-16 14:44:14 +0000163 t2bgs.resetZoom();
Steven Burrows1c5c8612016-10-05 13:45:13 -0500164 flash.flash('Pan and zoom reset');
165 }
166
167 function togglePorts(x) {
168 updatePrefsState('porthl', t2vs.togglePortHighlights(x));
169 t2fs.updateLinks();
170 }
171
172 function equalizeMasters() {
173 wss.sendEvent('equalizeMasters');
174 flash.flash('Equalizing master roles');
175 }
176
Steven Burrows892cba62017-03-10 16:31:48 +0000177 function resetNodeLocation() {
178 t2fs.resetNodeLocation();
Steven Burrows1c5c8612016-10-05 13:45:13 -0500179 flash.flash('Reset node locations');
180 }
181
182 function unpinNode() {
183 t2fs.unpin();
184 flash.flash('Unpin node');
185 }
186
Simon Hunt47f8fb72017-04-11 13:49:31 -0700187 function toggleToolbar() {
188 t2tbs.toggle();
189 }
190
Steven Burrows02e67f42017-04-13 13:59:43 -0700191 function actionedFlashed(action, message) {
192 flash.flash(action + ' ' + message);
193 }
194
Steven Burrowsaea509d2017-04-12 14:17:47 -0700195 function toggleHosts() {
Steven Burrows02e67f42017-04-13 13:59:43 -0700196 var on = t2rs.toggleHosts();
Steven Burrows1c2a9682017-07-14 16:52:46 +0100197 actionedFlashed(on ? 'Show': 'Hide', 'Hosts');
Steven Burrows02e67f42017-04-13 13:59:43 -0700198 }
199
200 function toggleOfflineDevices() {
201 var on = t2rs.toggleOfflineDevices();
Steven Burrows1c2a9682017-07-14 16:52:46 +0100202 actionedFlashed(on ? 'Show': 'Hide', 'offline devices');
Steven Burrowsaea509d2017-04-12 14:17:47 -0700203 }
204
Steven Burrowsc8468932017-03-17 16:13:41 +0000205 function notValid(what) {
206 $log.warn('topo.js getActionEntry(): Not a valid ' + what);
207 }
208
209 function getActionEntry(key) {
210 var entry;
211
212 if (!key) {
213 notValid('key');
214 return null;
215 }
216
217 entry = actionMap()[key];
218
219 if (!entry) {
220 notValid('actionMap (' + key + ') entry');
221 return null;
222 }
223 return fs.isA(entry) || [entry, ''];
224 }
225
Steven Burrows37549ee2016-09-21 14:41:39 +0100226 angular.module('ovTopo2')
Steven Burrowsaf96a212016-12-28 12:57:02 +0000227 .factory('Topo2KeyCommandService', [
Simon Hunt47f8fb72017-04-11 13:49:31 -0700228 '$log', 'FnService', 'KeyService', 'FlashService', 'WebSocketService',
229 'Topo2PrefsService', 'Topo2BackgroundService', 'PrefsService',
230 'Topo2InstanceService', 'Topo2SummaryPanelService', 'Topo2ViewService',
Steven Burrowsb8ebd402017-11-01 15:31:31 +0000231 'Topo2RegionService', 'Topo2DetailsPanelService',
Simon Hunt47f8fb72017-04-11 13:49:31 -0700232
233 function (_$log_, _fs_, _ks_, _flash_, _wss_, _t2ps_, _t2bgs_, _ps_,
Steven Burrowsb8ebd402017-11-01 15:31:31 +0000234 _t2is_, _t2sp_, _t2vs_, _t2rs_, _t2dp_) {
Steven Burrows1c5c8612016-10-05 13:45:13 -0500235
Steven Burrowsc8468932017-03-17 16:13:41 +0000236 $log = _$log_;
237 fs = _fs_;
Steven Burrows1c5c8612016-10-05 13:45:13 -0500238 ks = _ks_;
239 flash = _flash_;
240 wss = _wss_;
Steven Burrows37549ee2016-09-21 14:41:39 +0100241 t2ps = _t2ps_;
Steven Burrowsb43c1a92017-03-07 17:13:28 +0000242 t2bgs = _t2bgs_;
Steven Burrows01ddf602016-09-28 14:21:00 -0700243 t2is = _t2is_;
244 ps = _ps_;
Steven Burrows5570d1b2016-09-28 14:21:00 -0700245 t2sp = _t2sp_;
Steven Burrows1c5c8612016-10-05 13:45:13 -0500246 t2vs = _t2vs_;
Steven Burrows1aa4f582016-12-13 15:05:41 -0500247 t2rs = _t2rs_;
Steven Burrowsb8ebd402017-11-01 15:31:31 +0000248 t2dp = _t2dp_;
Steven Burrows37549ee2016-09-21 14:41:39 +0100249
250 return {
251 init: init,
Steven Burrowsc8468932017-03-17 16:13:41 +0000252 bindCommands: bindCommands,
Steven Burrows1c2a9682017-07-14 16:52:46 +0100253 getActionEntry: getActionEntry,
Steven Burrows37549ee2016-09-21 14:41:39 +0100254 };
Steven Burrows1c2a9682017-07-14 16:52:46 +0100255 },
Steven Burrows37549ee2016-09-21 14:41:39 +0100256 ]);
257})();