Committed by
Gerrit Code Review
GUI -- ButtonService - Fixed radio buttons selection bug.
Change-Id: Ibdf77e231ce58d4863b11daecb0b8106f8e979a6
Showing
3 changed files
with
98 additions
and
40 deletions
... | @@ -28,54 +28,66 @@ | ... | @@ -28,54 +28,66 @@ |
28 | .button, | 28 | .button, |
29 | .toggleButton, | 29 | .toggleButton, |
30 | .radioSet, | 30 | .radioSet, |
31 | +.radioButton, | ||
31 | .separator { | 32 | .separator { |
32 | display: inline-block; | 33 | display: inline-block; |
33 | } | 34 | } |
34 | .button, | 35 | .button, |
35 | -.toggleButton { | 36 | +.toggleButton, |
37 | +.radioSet { | ||
36 | padding: 0 4px 0 4px; | 38 | padding: 0 4px 0 4px; |
37 | } | 39 | } |
38 | -.radioSet .toggleButton { | 40 | +.radioButton { |
39 | - padding: 0 0 0 4px; | 41 | + padding: 0 4px 0 0; |
40 | } | 42 | } |
41 | 43 | ||
42 | .button svg.embeddedIcon, | 44 | .button svg.embeddedIcon, |
43 | -.toggleButton svg.embeddedIcon { | 45 | +.toggleButton svg.embeddedIcon, |
46 | +.radioButton svg.embeddedIcon { | ||
44 | cursor: pointer; | 47 | cursor: pointer; |
45 | } | 48 | } |
46 | .button svg.embeddedIcon .icon rect, | 49 | .button svg.embeddedIcon .icon rect, |
47 | -.toggleButton svg.embeddedIcon .icon rect { | 50 | +.toggleButton svg.embeddedIcon .icon rect, |
51 | +.radioButton svg.embeddedIcon .icon rect{ | ||
48 | stroke: none; | 52 | stroke: none; |
49 | } | 53 | } |
50 | 54 | ||
51 | /* Selected button color */ | 55 | /* Selected button color */ |
52 | .light .button svg.embeddedIcon, | 56 | .light .button svg.embeddedIcon, |
53 | -.light .toggleButton.selected svg.embeddedIcon { | 57 | +.light .toggleButton.selected svg.embeddedIcon, |
58 | +.light .radioButton.selected svg.embeddedIcon { | ||
54 | fill: #838383; | 59 | fill: #838383; |
55 | } | 60 | } |
56 | .light .button svg.embeddedIcon .glyph, | 61 | .light .button svg.embeddedIcon .glyph, |
57 | -.light .toggleButton.selected svg.embeddedIcon .glyph { | 62 | +.light .toggleButton.selected svg.embeddedIcon .glyph, |
63 | +.light .radioButton.selected svg.embeddedIcon .glyph { | ||
58 | fill: white; | 64 | fill: white; |
59 | } | 65 | } |
60 | .dark .button svg.embeddedIcon, | 66 | .dark .button svg.embeddedIcon, |
61 | -.dark .toggleButton.selected svg.embeddedIcon { | 67 | +.dark .toggleButton.selected svg.embeddedIcon, |
68 | +.dark .radioButton.selected svg.embeddedIcon{ | ||
62 | fill: #151515; | 69 | fill: #151515; |
63 | } | 70 | } |
64 | .dark .button svg.embeddedIcon .glyph, | 71 | .dark .button svg.embeddedIcon .glyph, |
65 | -.dark .toggleButton.selected svg.embeddedIcon .glyph { | 72 | +.dark .toggleButton.selected svg.embeddedIcon .glyph, |
73 | +.dark .radioButton.selected svg.embeddedIcon .glyph { | ||
66 | fill: #B2B2B2; | 74 | fill: #B2B2B2; |
67 | } | 75 | } |
68 | 76 | ||
69 | /* Unselected button color */ | 77 | /* Unselected button color */ |
70 | -.light .toggleButton svg.embeddedIcon { | 78 | +.light .toggleButton svg.embeddedIcon, |
79 | +.light .radioButton svg.embeddedIcon { | ||
71 | fill: #eee; | 80 | fill: #eee; |
72 | } | 81 | } |
73 | -.light .toggleButton svg.embeddedIcon .glyph { | 82 | +.light .toggleButton svg.embeddedIcon .glyph, |
83 | +.light .radioButton svg.embeddedIcon .glyph { | ||
74 | fill: #bbb; | 84 | fill: #bbb; |
75 | } | 85 | } |
76 | -.dark .toggleButton svg.embeddedIcon { | 86 | +.dark .toggleButton svg.embeddedIcon, |
87 | +.dark .radioButton svg.embeddedIcon { | ||
77 | fill: #303030; | 88 | fill: #303030; |
78 | } | 89 | } |
79 | -.dark .toggleButton svg.embeddedIcon .glyph { | 90 | +.dark .toggleButton svg.embeddedIcon .glyph, |
91 | +.dark .radioButton svg.embeddedIcon .glyph { | ||
80 | fill: #565656; | 92 | fill: #565656; |
81 | } | 93 | } | ... | ... |
... | @@ -85,7 +85,6 @@ | ... | @@ -85,7 +85,6 @@ |
85 | } | 85 | } |
86 | } | 86 | } |
87 | 87 | ||
88 | - // TODO: fix radio button on click selecting functionality | ||
89 | function radioSet(div, id, rset) { | 88 | function radioSet(div, id, rset) { |
90 | if (!div) { | 89 | if (!div) { |
91 | $log.warn('Radio buttons cannot append to div'); | 90 | $log.warn('Radio buttons cannot append to div'); |
... | @@ -100,34 +99,64 @@ | ... | @@ -100,34 +99,64 @@ |
100 | return null; | 99 | return null; |
101 | } | 100 | } |
102 | var rDiv = div.append('div').classed('radioSet', true), | 101 | var rDiv = div.append('div').classed('radioSet', true), |
103 | - sel = 0, | 102 | + rads = [], |
104 | - rads = []; | 103 | + sel; |
104 | + | ||
105 | + function _selected() { | ||
106 | + var curr = d3.select(this), | ||
107 | + currId = curr.attr('id'); | ||
108 | + | ||
109 | + // I have it going by id's because I couldn't think of a way | ||
110 | + // to get the radio button's index from the div element | ||
111 | + // We could look at the end of the radio button id for its number | ||
112 | + // but I didn't know how to get the end of the string's number | ||
113 | + if (sel !== currId) { | ||
114 | + var selIndex = _getIndex(), | ||
115 | + currIndex = _getIndex(currId); | ||
116 | + rads[selIndex].el.classed('selected', false); | ||
117 | + curr.classed('selected', true); | ||
118 | + rads[currIndex].cb(); | ||
119 | + sel = currId; | ||
120 | + } | ||
121 | + } | ||
122 | + | ||
123 | + // given the id, will get the index of element | ||
124 | + // without the id, will get the index of sel | ||
125 | + function _getIndex(id) { | ||
126 | + if (!id) { | ||
127 | + for (var i = 0; i < rads.length; i++) { | ||
128 | + if (rads[i].id === sel) { return i; } | ||
129 | + } | ||
130 | + } else { | ||
131 | + for (var j = 0; j < rads.length; j++) { | ||
132 | + if (rads[j].id === id) { return j; } | ||
133 | + } | ||
134 | + } | ||
135 | + } | ||
105 | 136 | ||
106 | rset.forEach(function (btn, index) { | 137 | rset.forEach(function (btn, index) { |
107 | var rid = {id: id + '-' + index}, | 138 | var rid = {id: id + '-' + index}, |
108 | rbtn = angular.extend({}, btn, rid), | 139 | rbtn = angular.extend({}, btn, rid), |
109 | istate = (index === 0), | 140 | istate = (index === 0), |
110 | - rtog = toggle(rDiv, rbtn.id, rbtn.gid, istate, | 141 | + rBtnDiv = createDiv(rDiv, 'radioButton', rbtn.id); |
111 | - rbtn.cb, rbtn.tooltip); | 142 | + |
143 | + if (istate) { rBtnDiv.classed('selected', true); } | ||
144 | + is.loadIcon(rBtnDiv, rbtn.gid, btnSize, true); | ||
145 | + rbtn.el = rBtnDiv; | ||
146 | + rbtn.cb = fs.isF(rbtn.cb) || noop; | ||
112 | 147 | ||
113 | - rtog.el.classed('radioButton', true); | 148 | + rBtnDiv.on('click', _selected); |
114 | - rads.push(rtog); | 149 | + |
150 | + rads.push(rbtn); | ||
115 | }); | 151 | }); |
152 | + sel = rads[0].id; | ||
153 | + rads[0].cb(); | ||
116 | 154 | ||
117 | return { | 155 | return { |
118 | rads: rads, | 156 | rads: rads, |
119 | selected: function (i) { | 157 | selected: function (i) { |
120 | - if (i === undefined) { return sel; } | 158 | + if (i === undefined) { _getIndex(); } |
121 | - else if (i < 0 || i >= rads.length) { | 159 | + else { _selected(); } |
122 | - $log.error('Cannot select radio button of index ' + i); | ||
123 | - } | ||
124 | - else { | ||
125 | - if (i !== sel) { | ||
126 | - rads[sel].toggle(false); | ||
127 | - rads[i].toggle(true); | ||
128 | - sel = i; | ||
129 | - } | ||
130 | - } | ||
131 | } | 160 | } |
132 | } | 161 | } |
133 | } | 162 | } | ... | ... |
... | @@ -21,14 +21,26 @@ | ... | @@ -21,14 +21,26 @@ |
21 | (function () { | 21 | (function () { |
22 | 'use strict'; | 22 | 'use strict'; |
23 | var $log, tbs, flash, | 23 | var $log, tbs, flash, |
24 | - sampleDiv; | 24 | + togFnDiv, radFnP; |
25 | 25 | ||
26 | function btnFn() { | 26 | function btnFn() { |
27 | flash.flash('Hi there friends!'); | 27 | flash.flash('Hi there friends!'); |
28 | } | 28 | } |
29 | function togFn(display) { | 29 | function togFn(display) { |
30 | - if (display) { sampleDiv.style('display', 'block'); } | 30 | + if (display) { togFnDiv.style('display', 'block'); } |
31 | - else { sampleDiv.style('display', 'none'); } | 31 | + else { togFnDiv.style('display', 'none'); } |
32 | + } | ||
33 | + function checkFn() { | ||
34 | + radFnP.text('Checkmark radio button active.') | ||
35 | + .style('color', 'green'); | ||
36 | + } | ||
37 | + function xMarkFn() { | ||
38 | + radFnP.text('Xmark radio button active.') | ||
39 | + .style('color', 'red'); | ||
40 | + } | ||
41 | + function birdFn() { | ||
42 | + radFnP.text('Bird radio button active.') | ||
43 | + .style('color', '#369'); | ||
32 | } | 44 | } |
33 | 45 | ||
34 | angular.module('ovSample', ['onosUtil']) | 46 | angular.module('ovSample', ['onosUtil']) |
... | @@ -41,7 +53,7 @@ | ... | @@ -41,7 +53,7 @@ |
41 | 53 | ||
42 | self.message = 'Hey there folks!'; | 54 | self.message = 'Hey there folks!'; |
43 | 55 | ||
44 | - sampleDiv = d3.select('#ov-sample') | 56 | + togFnDiv = d3.select('#ov-sample') |
45 | .append('div') | 57 | .append('div') |
46 | .text('Look at me!') | 58 | .text('Look at me!') |
47 | .style({ | 59 | .style({ |
... | @@ -49,14 +61,19 @@ | ... | @@ -49,14 +61,19 @@ |
49 | 'color': 'rgb(204, 89, 81)', | 61 | 'color': 'rgb(204, 89, 81)', |
50 | 'font-size': '20pt' | 62 | 'font-size': '20pt' |
51 | }); | 63 | }); |
64 | + radFnP = d3.select('#ov-sample') | ||
65 | + .append('p') | ||
66 | + .style('font-size', '16pt'); | ||
52 | 67 | ||
53 | var toolbar = tbs.createToolbar('sample'), | 68 | var toolbar = tbs.createToolbar('sample'), |
54 | - rset = [{ gid: 'switch', cb: function () {}}, | 69 | + rset = [{ gid: 'checkMark', cb: checkFn }, |
55 | - { gid: 'bird', cb: function () {}}]; | 70 | + { gid: 'xMark', cb: xMarkFn }, |
56 | - toolbar.addButton('hello-btn', 'crown', btnFn); | 71 | + { gid: 'bird', cb: birdFn } |
57 | - toolbar.addToggle('sample-tog', 'chain', false, togFn); | 72 | + ]; |
73 | + toolbar.addButton('hello-button', 'crown', btnFn); | ||
74 | + toolbar.addToggle('look-toggle', 'chain', false, togFn); | ||
58 | toolbar.addSeparator(); | 75 | toolbar.addSeparator(); |
59 | - toolbar.addRadioSet('some-rad', rset); | 76 | + toolbar.addRadioSet('something-radio', rset); |
60 | toolbar.hide(); | 77 | toolbar.hide(); |
61 | 78 | ||
62 | $log.log('OvSampleCtrl has been created'); | 79 | $log.log('OvSampleCtrl has been created'); | ... | ... |
-
Please register or login to post a comment