Merge lp:~marcustomlinson/unity-js-scopes/filters into lp:unity-js-scopes
- filters
- Merge into trunk
Proposed by
Marcus Tomlinson
Status: | Work in progress |
---|---|
Proposed branch: | lp:~marcustomlinson/unity-js-scopes/filters |
Merge into: | lp:unity-js-scopes |
Diff against target: |
832 lines (+725/-0) 10 files modified
src/bindings/src/addon.cc (+63/-0) src/bindings/src/filter-group.cc (+39/-0) src/bindings/src/filter-group.h (+40/-0) src/bindings/src/range-input-filter.cc (+180/-0) src/bindings/src/range-input-filter.h (+65/-0) src/bindings/src/search-reply.cc (+10/-0) src/bindings/src/value-slider-filter.cc (+131/-0) src/bindings/src/value-slider-filter.h (+61/-0) src/bindings/src/value-slider-labels.cc (+90/-0) src/bindings/src/value-slider-labels.h (+46/-0) |
To merge this branch: | bzr merge lp:~marcustomlinson/unity-js-scopes/filters |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
WebApps | Pending | ||
Review via email: mp+294489@code.launchpad.net |
Commit message
Added filters support
Description of the change
To post a comment you must log in.
Unmerged revisions
- 150. By Marcus Tomlinson
-
ValueSliderFilter complete
- 149. By Marcus Tomlinson
-
RangeInputFilter complete
- 148. By Marcus Tomlinson
-
FilterGroup complete
- 147. By Marcus Tomlinson
-
ValueSliderLabels complete
- 146. By Marcus Tomlinson
-
Fix ValueSliderLabels
- 145. By Marcus Tomlinson
-
Fix ValueSliderFilter
- 144. By Marcus Tomlinson
-
Fix RangeInputFilter
- 143. By Marcus Tomlinson
-
Minimal classes to build
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'src/bindings/src/addon.cc' |
2 | --- src/bindings/src/addon.cc 2016-02-25 13:48:52 +0000 |
3 | +++ src/bindings/src/addon.cc 2016-05-12 12:10:04 +0000 |
4 | @@ -37,11 +37,13 @@ |
5 | #include "canned-query.h" |
6 | #include "categorised-result.h" |
7 | #include "department.h" |
8 | +#include "filter-group.h" |
9 | #include "online-account-client.h" |
10 | #include "option-selector-filter.h" |
11 | #include "preview-query.h" |
12 | #include "preview-reply.h" |
13 | #include "preview-widget.h" |
14 | +#include "range-input-filter.h" |
15 | #include "scope-base.h" |
16 | #include "scope.h" |
17 | #include "search-query.h" |
18 | @@ -49,6 +51,8 @@ |
19 | #include "search-metadata.h" |
20 | #include "registry.h" |
21 | #include "result.h" |
22 | +#include "value-slider-filter.h" |
23 | +#include "value-slider-labels.h" |
24 | #include "variant.h" |
25 | |
26 | // TODO static |
27 | @@ -456,6 +460,61 @@ |
28 | .add_member("token_secret", &unity::scopes::OnlineAccountClient::ServiceStatus::token_secret) |
29 | .add_member("error", &unity::scopes::OnlineAccountClient::ServiceStatus::error); |
30 | |
31 | + v8cpp::Class<FilterGroup> filter_group(isolate); |
32 | + filter_group |
33 | + .set_constructor<std::string, std::string>() |
34 | + .add_method("id", &FilterGroup::id) |
35 | + .add_method("label", &FilterGroup::label); |
36 | + |
37 | + v8cpp::Class<RangeInputFilter> range_input_filter(isolate); |
38 | + range_input_filter |
39 | + .set_constructor<v8::FunctionCallbackInfo<v8::Value>>() |
40 | + .add_method("set_display_hints", &RangeInputFilter::set_display_hints) |
41 | + .add_method("display_hints", &RangeInputFilter::display_hints) |
42 | + .add_method("id", &RangeInputFilter::id) |
43 | + .add_method("filter_type", &RangeInputFilter::filter_type) |
44 | + .add_method("set_title", &RangeInputFilter::set_title) |
45 | + .add_method("title", &RangeInputFilter::title) |
46 | + .add_method("filter_group", &RangeInputFilter::filter_group) |
47 | + .add_method("start_prefix_label", &RangeInputFilter::start_prefix_label) |
48 | + .add_method("start_postfix_label", &RangeInputFilter::start_postfix_label) |
49 | + .add_method("end_prefix_label", &RangeInputFilter::end_prefix_label) |
50 | + .add_method("end_postfix_label", &RangeInputFilter::end_postfix_label) |
51 | + .add_method("central_label", &RangeInputFilter::central_label) |
52 | + .add_method("default_start_value", &RangeInputFilter::default_start_value) |
53 | + .add_method("default_end_value", &RangeInputFilter::default_end_value) |
54 | + .add_method("has_start_value", &RangeInputFilter::has_start_value) |
55 | + .add_method("has_end_value", &RangeInputFilter::has_end_value) |
56 | + .add_method("start_value", &RangeInputFilter::start_value) |
57 | + .add_method("end_value", &RangeInputFilter::end_value) |
58 | + .add_method("update_state", &RangeInputFilter::update_state); |
59 | + |
60 | + v8cpp::Class<ValueSliderFilter> value_slider_filter(isolate); |
61 | + value_slider_filter |
62 | + .set_constructor<v8::FunctionCallbackInfo<v8::Value>>() |
63 | + .add_method("set_display_hints", &ValueSliderFilter::set_display_hints) |
64 | + .add_method("display_hints", &ValueSliderFilter::display_hints) |
65 | + .add_method("id", &ValueSliderFilter::id) |
66 | + .add_method("filter_type", &ValueSliderFilter::filter_type) |
67 | + .add_method("set_title", &ValueSliderFilter::set_title) |
68 | + .add_method("title", &ValueSliderFilter::title) |
69 | + .add_method("filter_group", &ValueSliderFilter::filter_group) |
70 | + .add_method("set_default_value", &ValueSliderFilter::set_default_value) |
71 | + .add_method("default_value", &ValueSliderFilter::default_value) |
72 | + .add_method("min", &ValueSliderFilter::min) |
73 | + .add_method("max", &ValueSliderFilter::max) |
74 | + .add_method("has_value", &ValueSliderFilter::has_value) |
75 | + .add_method("value", &ValueSliderFilter::value) |
76 | + .add_method("labels", &ValueSliderFilter::labels) |
77 | + .add_method("update_state", &ValueSliderFilter::update_state); |
78 | + |
79 | + v8cpp::Class<ValueSliderLabels> value_slider_labels(isolate); |
80 | + value_slider_labels |
81 | + .set_constructor<v8::FunctionCallbackInfo<v8::Value>>() |
82 | + .add_method("min_label", &ValueSliderLabels::min_label) |
83 | + .add_method("max_label", &ValueSliderLabels::max_label) |
84 | + .add_method("extra_labels", &ValueSliderLabels::extra_labels); |
85 | + |
86 | v8cpp::Module module(isolate); |
87 | module.add_class("js_scope", js_scope); |
88 | module.add_class("scope_base", scope_base); |
89 | @@ -468,6 +527,7 @@ |
90 | module.add_class("CategoryRenderer", category_renderer); |
91 | module.add_class("ColumnLayout", column_layout); |
92 | module.add_class("Department", department); |
93 | + module.add_class("FilterGroup", filter_group); |
94 | module.add_class("FilterOption", filter_option); |
95 | module.add_class("FilterState", filter_state); |
96 | module.add_class("Location", location); |
97 | @@ -478,12 +538,15 @@ |
98 | module.add_class("PreviewWidget", preview_widget); |
99 | module.add_class("PreviewQuery", preview_query); |
100 | module.add_class("PreviewReply", preview_reply); |
101 | + module.add_class("RangeInputFilter", range_input_filter); |
102 | module.add_class("Registry", registry); |
103 | module.add_class("Result", result); |
104 | module.add_class("ScopeMetadata", scope_metadata); |
105 | module.add_class("SearchReply", search_reply); |
106 | module.add_class("SearchQuery", search_query); |
107 | module.add_class("SearchMetadata", search_metadata); |
108 | + module.add_class("ValueSliderFilter", value_slider_filter); |
109 | + module.add_class("ValueSliderLabels", value_slider_labels); |
110 | module.add_class("Variant", variant); |
111 | module.add_class("VariantBase", variant_base); |
112 | |
113 | |
114 | === added file 'src/bindings/src/filter-group.cc' |
115 | --- src/bindings/src/filter-group.cc 1970-01-01 00:00:00 +0000 |
116 | +++ src/bindings/src/filter-group.cc 2016-05-12 12:10:04 +0000 |
117 | @@ -0,0 +1,39 @@ |
118 | +/* |
119 | + * Copyright 2016 Canonical Ltd. |
120 | + * |
121 | + * This file is part of unity-js-scopes. |
122 | + * |
123 | + * unity-js-scopes is free software; you can redistribute it and/or modify |
124 | + * it under the terms of the GNU General Public License as published by |
125 | + * the Free Software Foundation; version 3. |
126 | + * |
127 | + * unity-js-scopes is distributed in the hope that it will be useful, |
128 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
129 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
130 | + * GNU General Public License for more details. |
131 | + * |
132 | + * You should have received a copy of the GNU General Public License |
133 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
134 | + */ |
135 | + |
136 | +#include "filter-group.h" |
137 | + |
138 | + |
139 | +FilterGroup::FilterGroup(std::string const& id, std::string const& label) |
140 | + : filter_group_(unity::scopes::FilterGroup::create(id, label)){ |
141 | +} |
142 | + |
143 | +std::string FilterGroup::id() const |
144 | +{ |
145 | + return filter_group_->id(); |
146 | +} |
147 | + |
148 | +std::string FilterGroup::label() const |
149 | +{ |
150 | + return filter_group_->label(); |
151 | +} |
152 | + |
153 | +unity::scopes::FilterGroup::SCPtr FilterGroup::get_filter_group() const |
154 | +{ |
155 | + return filter_group_; |
156 | +} |
157 | |
158 | === added file 'src/bindings/src/filter-group.h' |
159 | --- src/bindings/src/filter-group.h 1970-01-01 00:00:00 +0000 |
160 | +++ src/bindings/src/filter-group.h 2016-05-12 12:10:04 +0000 |
161 | @@ -0,0 +1,40 @@ |
162 | +/* |
163 | + * Copyright 2016 Canonical Ltd. |
164 | + * |
165 | + * This file is part of unity-js-scopes. |
166 | + * |
167 | + * unity-js-scopes is free software; you can redistribute it and/or modify |
168 | + * it under the terms of the GNU General Public License as published by |
169 | + * the Free Software Foundation; version 3. |
170 | + * |
171 | + * unity-js-scopes is distributed in the hope that it will be useful, |
172 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
173 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
174 | + * GNU General Public License for more details. |
175 | + * |
176 | + * You should have received a copy of the GNU General Public License |
177 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
178 | + */ |
179 | + |
180 | +#ifndef _UNITY_JS_FILTER_GROUP_H_ |
181 | +#define _UNITY_JS_FILTER_GROUP_H_ |
182 | + |
183 | +#include <unity/scopes/FilterGroup.h> |
184 | + |
185 | +class FilterGroup |
186 | +{ |
187 | +public: |
188 | + FilterGroup(std::string const& id, std::string const& label); |
189 | + |
190 | + std::string id() const; |
191 | + std::string label() const; |
192 | + |
193 | + unity::scopes::FilterGroup::SCPtr get_filter_group() const; |
194 | + |
195 | +private: |
196 | + unity::scopes::FilterGroup::SCPtr filter_group_; |
197 | +}; |
198 | + |
199 | +#endif // _UNITY_JS_FILTER_GROUP_H_ |
200 | + |
201 | + |
202 | |
203 | === added file 'src/bindings/src/range-input-filter.cc' |
204 | --- src/bindings/src/range-input-filter.cc 1970-01-01 00:00:00 +0000 |
205 | +++ src/bindings/src/range-input-filter.cc 2016-05-12 12:10:04 +0000 |
206 | @@ -0,0 +1,180 @@ |
207 | +/* |
208 | + * Copyright 2016 Canonical Ltd. |
209 | + * |
210 | + * This file is part of unity-js-scopes. |
211 | + * |
212 | + * unity-js-scopes is free software; you can redistribute it and/or modify |
213 | + * it under the terms of the GNU General Public License as published by |
214 | + * the Free Software Foundation; version 3. |
215 | + * |
216 | + * unity-js-scopes is distributed in the hope that it will be useful, |
217 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
218 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
219 | + * GNU General Public License for more details. |
220 | + * |
221 | + * You should have received a copy of the GNU General Public License |
222 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
223 | + */ |
224 | + |
225 | +#include "common.h" |
226 | +#include "range-input-filter.h" |
227 | + |
228 | +RangeInputFilter::RangeInputFilter(v8::FunctionCallbackInfo<v8::Value> const& args) |
229 | +{ |
230 | + if (args.Length() == 6) |
231 | + { |
232 | + auto a = v8cpp::from_v8<std::string>(args.GetIsolate(), args[0]); |
233 | + auto b = v8cpp::from_v8<std::string>(args.GetIsolate(), args[1]); |
234 | + auto c = v8cpp::from_v8<std::string>(args.GetIsolate(), args[2]); |
235 | + auto d = v8cpp::from_v8<std::string>(args.GetIsolate(), args[3]); |
236 | + auto e = v8cpp::from_v8<std::string>(args.GetIsolate(), args[4]); |
237 | + auto f = v8cpp::from_v8<std::string>(args.GetIsolate(), args[5]); |
238 | + |
239 | + filter_ = unity::scopes::RangeInputFilter::create(a, b, c, d, e, f); |
240 | + } |
241 | + else if (args.Length() == 7) |
242 | + { |
243 | + auto a = v8cpp::from_v8<std::string>(args.GetIsolate(), args[0]); |
244 | + auto b = v8cpp::from_v8<std::string>(args.GetIsolate(), args[1]); |
245 | + auto c = v8cpp::from_v8<std::string>(args.GetIsolate(), args[2]); |
246 | + auto d = v8cpp::from_v8<std::string>(args.GetIsolate(), args[3]); |
247 | + auto e = v8cpp::from_v8<std::string>(args.GetIsolate(), args[4]); |
248 | + auto f = v8cpp::from_v8<std::string>(args.GetIsolate(), args[5]); |
249 | + auto g = v8cpp::from_v8<std::shared_ptr<FilterGroup>>(args.GetIsolate(), args[6]); |
250 | + |
251 | + filter_ = unity::scopes::RangeInputFilter::create(a, b, c, d, e, f, g->get_filter_group()); |
252 | + filter_group_ = g; |
253 | + } |
254 | + else if (args.Length() == 8) |
255 | + { |
256 | + auto a = v8cpp::from_v8<std::string>(args.GetIsolate(), args[0]); |
257 | + auto b = unity::scopesjs::to_variant(args[1]); |
258 | + auto c = unity::scopesjs::to_variant(args[2]); |
259 | + auto d = v8cpp::from_v8<std::string>(args.GetIsolate(), args[3]); |
260 | + auto e = v8cpp::from_v8<std::string>(args.GetIsolate(), args[4]); |
261 | + auto f = v8cpp::from_v8<std::string>(args.GetIsolate(), args[5]); |
262 | + auto g = v8cpp::from_v8<std::string>(args.GetIsolate(), args[6]); |
263 | + auto h = v8cpp::from_v8<std::string>(args.GetIsolate(), args[7]); |
264 | + |
265 | + filter_ = unity::scopes::RangeInputFilter::create(a, b, c, d, e, f, g, h); |
266 | + } |
267 | + else if (args.Length() == 9) |
268 | + { |
269 | + auto a = v8cpp::from_v8<std::string>(args.GetIsolate(), args[0]); |
270 | + auto b = unity::scopesjs::to_variant(args[1]); |
271 | + auto c = unity::scopesjs::to_variant(args[2]); |
272 | + auto d = v8cpp::from_v8<std::string>(args.GetIsolate(), args[3]); |
273 | + auto e = v8cpp::from_v8<std::string>(args.GetIsolate(), args[4]); |
274 | + auto f = v8cpp::from_v8<std::string>(args.GetIsolate(), args[5]); |
275 | + auto g = v8cpp::from_v8<std::string>(args.GetIsolate(), args[6]); |
276 | + auto h = v8cpp::from_v8<std::string>(args.GetIsolate(), args[7]); |
277 | + auto i = v8cpp::from_v8<std::shared_ptr<FilterGroup>>(args.GetIsolate(), args[8]); |
278 | + |
279 | + filter_ = unity::scopes::RangeInputFilter::create(a, b, c, d, e, f, g, h, i->get_filter_group()); |
280 | + filter_group_ = i; |
281 | + } |
282 | + else |
283 | + { |
284 | + throw std::runtime_error("Invalid number of arguments"); |
285 | + } |
286 | +} |
287 | + |
288 | +void RangeInputFilter::set_display_hints(int hints) |
289 | +{ |
290 | + filter_->set_display_hints(hints); |
291 | +} |
292 | + |
293 | +int RangeInputFilter::display_hints() const |
294 | +{ |
295 | + return filter_->display_hints(); |
296 | +} |
297 | + |
298 | +std::string RangeInputFilter::id() const |
299 | +{ |
300 | + return filter_->id(); |
301 | +} |
302 | + |
303 | +std::string RangeInputFilter::filter_type() const |
304 | +{ |
305 | + return filter_->filter_type(); |
306 | +} |
307 | + |
308 | +void RangeInputFilter::set_title(std::string const& title) |
309 | +{ |
310 | + filter_->set_title(title); |
311 | +} |
312 | + |
313 | +std::string RangeInputFilter::title() const |
314 | +{ |
315 | + return filter_->title(); |
316 | +} |
317 | + |
318 | +std::shared_ptr<FilterGroup> RangeInputFilter::filter_group() const |
319 | +{ |
320 | + return filter_group_; |
321 | +} |
322 | + |
323 | +std::string RangeInputFilter::start_prefix_label() const |
324 | +{ |
325 | + return filter_->start_prefix_label(); |
326 | +} |
327 | + |
328 | +std::string RangeInputFilter::start_postfix_label() const |
329 | +{ |
330 | + return filter_->start_postfix_label(); |
331 | +} |
332 | + |
333 | +std::string RangeInputFilter::end_prefix_label() const |
334 | +{ |
335 | + return filter_->end_prefix_label(); |
336 | +} |
337 | + |
338 | +std::string RangeInputFilter::end_postfix_label() const |
339 | +{ |
340 | + return filter_->end_postfix_label(); |
341 | +} |
342 | + |
343 | +std::string RangeInputFilter::central_label() const |
344 | +{ |
345 | + return filter_->central_label(); |
346 | +} |
347 | + |
348 | +unity::scopes::Variant RangeInputFilter::default_start_value() const |
349 | +{ |
350 | + return filter_->default_start_value(); |
351 | +} |
352 | + |
353 | +unity::scopes::Variant RangeInputFilter::default_end_value() const |
354 | +{ |
355 | + return filter_->default_end_value(); |
356 | +} |
357 | + |
358 | +bool RangeInputFilter::has_start_value(unity::scopes::FilterState const& filter_state) const |
359 | +{ |
360 | + return filter_->has_start_value(filter_state); |
361 | +} |
362 | + |
363 | +bool RangeInputFilter::has_end_value(unity::scopes::FilterState const& filter_state) const |
364 | +{ |
365 | + return filter_->has_end_value(filter_state); |
366 | +} |
367 | + |
368 | +double RangeInputFilter::start_value(unity::scopes::FilterState const& filter_state) const |
369 | +{ |
370 | + return filter_->start_value(filter_state); |
371 | +} |
372 | + |
373 | +double RangeInputFilter::end_value(unity::scopes::FilterState const& filter_state) const |
374 | +{ |
375 | + return filter_->end_value(filter_state); |
376 | +} |
377 | + |
378 | +void RangeInputFilter::update_state(unity::scopes::FilterState& filter_state, unity::scopes::Variant const& start_value, unity::scopes::Variant const& end_value) const |
379 | +{ |
380 | + return filter_->update_state(filter_state, start_value, end_value); |
381 | +} |
382 | + |
383 | +unity::scopes::RangeInputFilter::SPtr RangeInputFilter::get_filter() |
384 | +{ |
385 | + return filter_; |
386 | +} |
387 | |
388 | === added file 'src/bindings/src/range-input-filter.h' |
389 | --- src/bindings/src/range-input-filter.h 1970-01-01 00:00:00 +0000 |
390 | +++ src/bindings/src/range-input-filter.h 2016-05-12 12:10:04 +0000 |
391 | @@ -0,0 +1,65 @@ |
392 | +/* |
393 | + * Copyright 2016 Canonical Ltd. |
394 | + * |
395 | + * This file is part of unity-js-scopes. |
396 | + * |
397 | + * unity-js-scopes is free software; you can redistribute it and/or modify |
398 | + * it under the terms of the GNU General Public License as published by |
399 | + * the Free Software Foundation; version 3. |
400 | + * |
401 | + * unity-js-scopes is distributed in the hope that it will be useful, |
402 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
403 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
404 | + * GNU General Public License for more details. |
405 | + * |
406 | + * You should have received a copy of the GNU General Public License |
407 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
408 | + */ |
409 | + |
410 | +#ifndef _UNITY_JS_RANGE_INPUT_FILTER_H_ |
411 | +#define _UNITY_JS_RANGE_INPUT_FILTER_H_ |
412 | + |
413 | +#include "filter-group.h" |
414 | + |
415 | +#include <unity/scopes/RangeInputFilter.h> |
416 | + |
417 | +#include <v8-cpp.h> |
418 | + |
419 | +class RangeInputFilter |
420 | +{ |
421 | +public: |
422 | + RangeInputFilter(v8::FunctionCallbackInfo<v8::Value> const& args); |
423 | + |
424 | + // FilterBase |
425 | + void set_display_hints(int hints); |
426 | + int display_hints() const; |
427 | + std::string id() const; |
428 | + std::string filter_type() const; |
429 | + void set_title(std::string const& title); |
430 | + std::string title() const; |
431 | + std::shared_ptr<FilterGroup> filter_group() const; |
432 | + |
433 | + // RangeInputFilter |
434 | + std::string start_prefix_label() const; |
435 | + std::string start_postfix_label() const; |
436 | + std::string end_prefix_label() const; |
437 | + std::string end_postfix_label() const; |
438 | + std::string central_label() const; |
439 | + unity::scopes::Variant default_start_value() const; |
440 | + unity::scopes::Variant default_end_value() const; |
441 | + bool has_start_value(unity::scopes::FilterState const& filter_state) const; |
442 | + bool has_end_value(unity::scopes::FilterState const& filter_state) const; |
443 | + double start_value(unity::scopes::FilterState const& filter_state) const; |
444 | + double end_value(unity::scopes::FilterState const& filter_state) const; |
445 | + void update_state(unity::scopes::FilterState& filter_state, unity::scopes::Variant const& start_value, unity::scopes::Variant const& end_value) const; |
446 | + |
447 | + unity::scopes::RangeInputFilter::SPtr get_filter(); |
448 | + |
449 | +private: |
450 | + unity::scopes::RangeInputFilter::SPtr filter_; |
451 | + std::shared_ptr<FilterGroup> filter_group_; |
452 | +}; |
453 | + |
454 | +#endif // _UNITY_JS_RANGE_INPUT_FILTER_H_ |
455 | + |
456 | + |
457 | |
458 | === modified file 'src/bindings/src/search-reply.cc' |
459 | --- src/bindings/src/search-reply.cc 2015-11-08 15:49:12 +0000 |
460 | +++ src/bindings/src/search-reply.cc 2016-05-12 12:10:04 +0000 |
461 | @@ -20,6 +20,8 @@ |
462 | |
463 | #include "categorised-result.h" |
464 | #include "option-selector-filter.h" |
465 | +#include "range-input-filter.h" |
466 | +#include "value-slider-filter.h" |
467 | |
468 | #include <stdexcept> |
469 | |
470 | @@ -42,6 +44,14 @@ |
471 | auto f = v8cpp::from_v8<std::shared_ptr<OptionSelectorFilter>>(isolate, fv); |
472 | filter_bases.push_back(f->get_filter()); |
473 | } catch(...) { } |
474 | + try { |
475 | + auto f = v8cpp::from_v8<std::shared_ptr<RangeInputFilter>>(isolate, fv); |
476 | + filter_bases.push_back(f->get_filter()); |
477 | + } catch(...) { } |
478 | + try { |
479 | + auto f = v8cpp::from_v8<std::shared_ptr<ValueSliderFilter>>(isolate, fv); |
480 | + filter_bases.push_back(f->get_filter()); |
481 | + } catch(...) { } |
482 | } |
483 | return filter_bases; |
484 | } |
485 | |
486 | === added file 'src/bindings/src/value-slider-filter.cc' |
487 | --- src/bindings/src/value-slider-filter.cc 1970-01-01 00:00:00 +0000 |
488 | +++ src/bindings/src/value-slider-filter.cc 2016-05-12 12:10:04 +0000 |
489 | @@ -0,0 +1,131 @@ |
490 | +/* |
491 | + * Copyright 2016 Canonical Ltd. |
492 | + * |
493 | + * This file is part of unity-js-scopes. |
494 | + * |
495 | + * unity-js-scopes is free software; you can redistribute it and/or modify |
496 | + * it under the terms of the GNU General Public License as published by |
497 | + * the Free Software Foundation; version 3. |
498 | + * |
499 | + * unity-js-scopes is distributed in the hope that it will be useful, |
500 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
501 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
502 | + * GNU General Public License for more details. |
503 | + * |
504 | + * You should have received a copy of the GNU General Public License |
505 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
506 | + */ |
507 | + |
508 | +#include "value-slider-filter.h" |
509 | + |
510 | +ValueSliderFilter::ValueSliderFilter(v8::FunctionCallbackInfo<v8::Value> const& args) |
511 | +{ |
512 | + if (args.Length() == 5) |
513 | + { |
514 | + auto a = v8cpp::from_v8<std::string>(args.GetIsolate(), args[0]); |
515 | + auto b = v8cpp::from_v8<double>(args.GetIsolate(), args[1]); |
516 | + auto c = v8cpp::from_v8<double>(args.GetIsolate(), args[2]); |
517 | + auto d = v8cpp::from_v8<double>(args.GetIsolate(), args[3]); |
518 | + auto e = v8cpp::from_v8<std::shared_ptr<ValueSliderLabels>>(args.GetIsolate(), args[4]); |
519 | + |
520 | + filter_ = unity::scopes::ValueSliderFilter::create(a, b, c, d, e->get_labels()); |
521 | + labels_ = e; |
522 | + } |
523 | + else if (args.Length() == 6) |
524 | + { |
525 | + auto a = v8cpp::from_v8<std::string>(args.GetIsolate(), args[0]); |
526 | + auto b = v8cpp::from_v8<double>(args.GetIsolate(), args[1]); |
527 | + auto c = v8cpp::from_v8<double>(args.GetIsolate(), args[2]); |
528 | + auto d = v8cpp::from_v8<double>(args.GetIsolate(), args[3]); |
529 | + auto e = v8cpp::from_v8<std::shared_ptr<ValueSliderLabels>>(args.GetIsolate(), args[4]); |
530 | + auto f = v8cpp::from_v8<std::shared_ptr<FilterGroup>>(args.GetIsolate(), args[5]); |
531 | + |
532 | + filter_ = unity::scopes::ValueSliderFilter::create(a, b, c, d, e->get_labels(), f->get_filter_group()); |
533 | + labels_ = e; |
534 | + filter_group_ = f; |
535 | + } |
536 | + else |
537 | + { |
538 | + throw std::runtime_error("Invalid number of arguments"); |
539 | + } |
540 | +} |
541 | + |
542 | +void ValueSliderFilter::set_display_hints(int hints) |
543 | +{ |
544 | + filter_->set_display_hints(hints); |
545 | +} |
546 | + |
547 | +int ValueSliderFilter::display_hints() const |
548 | +{ |
549 | + return filter_->display_hints(); |
550 | +} |
551 | + |
552 | +std::string ValueSliderFilter::id() const |
553 | +{ |
554 | + return filter_->id(); |
555 | +} |
556 | + |
557 | +std::string ValueSliderFilter::filter_type() const |
558 | +{ |
559 | + return filter_->filter_type(); |
560 | +} |
561 | + |
562 | +void ValueSliderFilter::set_title(std::string const& title) |
563 | +{ |
564 | + return filter_->set_title(title); |
565 | +} |
566 | + |
567 | +std::string ValueSliderFilter::title() const |
568 | +{ |
569 | + return filter_->title(); |
570 | +} |
571 | + |
572 | +std::shared_ptr<FilterGroup> ValueSliderFilter::filter_group() const |
573 | +{ |
574 | + return filter_group_; |
575 | +} |
576 | + |
577 | +void ValueSliderFilter::set_default_value(double val) |
578 | +{ |
579 | + return filter_->set_default_value(val); |
580 | +} |
581 | + |
582 | +double ValueSliderFilter::default_value() const |
583 | +{ |
584 | + return filter_->default_value(); |
585 | +} |
586 | + |
587 | +double ValueSliderFilter::min() const |
588 | +{ |
589 | + return filter_->min(); |
590 | +} |
591 | + |
592 | +double ValueSliderFilter::max() const |
593 | +{ |
594 | + return filter_->max(); |
595 | +} |
596 | + |
597 | +bool ValueSliderFilter::has_value(unity::scopes::FilterState const& filter_state) const |
598 | +{ |
599 | + return filter_->has_value(filter_state); |
600 | +} |
601 | + |
602 | +double ValueSliderFilter::value(unity::scopes::FilterState const& filter_state) const |
603 | +{ |
604 | + return filter_->value(filter_state); |
605 | +} |
606 | + |
607 | +std::shared_ptr<ValueSliderLabels> ValueSliderFilter::labels() const |
608 | +{ |
609 | + return labels_; |
610 | +} |
611 | + |
612 | +void ValueSliderFilter::update_state(unity::scopes::FilterState& filter_state, double value) const |
613 | +{ |
614 | + return filter_->update_state(filter_state, value); |
615 | +} |
616 | + |
617 | +unity::scopes::ValueSliderFilter::SPtr ValueSliderFilter::get_filter() |
618 | +{ |
619 | + return filter_; |
620 | +} |
621 | |
622 | === added file 'src/bindings/src/value-slider-filter.h' |
623 | --- src/bindings/src/value-slider-filter.h 1970-01-01 00:00:00 +0000 |
624 | +++ src/bindings/src/value-slider-filter.h 2016-05-12 12:10:04 +0000 |
625 | @@ -0,0 +1,61 @@ |
626 | +/* |
627 | + * Copyright 2016 Canonical Ltd. |
628 | + * |
629 | + * This file is part of unity-js-scopes. |
630 | + * |
631 | + * unity-js-scopes is free software; you can redistribute it and/or modify |
632 | + * it under the terms of the GNU General Public License as published by |
633 | + * the Free Software Foundation; version 3. |
634 | + * |
635 | + * unity-js-scopes is distributed in the hope that it will be useful, |
636 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
637 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
638 | + * GNU General Public License for more details. |
639 | + * |
640 | + * You should have received a copy of the GNU General Public License |
641 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
642 | + */ |
643 | + |
644 | +#ifndef _UNITY_JS_VALUE_SLIDER_FILTER_H_ |
645 | +#define _UNITY_JS_VALUE_SLIDER_FILTER_H_ |
646 | + |
647 | +#include "value-slider-labels.h" |
648 | +#include "filter-group.h" |
649 | + |
650 | +#include <unity/scopes/ValueSliderFilter.h> |
651 | + |
652 | +class ValueSliderFilter |
653 | +{ |
654 | +public: |
655 | + ValueSliderFilter(v8::FunctionCallbackInfo<v8::Value> const& args); |
656 | + |
657 | + // FilterBase |
658 | + void set_display_hints(int hints); |
659 | + int display_hints() const; |
660 | + std::string id() const; |
661 | + std::string filter_type() const; |
662 | + void set_title(std::string const& title); |
663 | + std::string title() const; |
664 | + std::shared_ptr<FilterGroup> filter_group() const; |
665 | + |
666 | + // ValueSliderFilter |
667 | + void set_default_value(double val); |
668 | + double default_value() const; |
669 | + double min() const; |
670 | + double max() const; |
671 | + bool has_value(unity::scopes::FilterState const& filter_state) const; |
672 | + double value(unity::scopes::FilterState const& filter_state) const; |
673 | + std::shared_ptr<ValueSliderLabels> labels() const; |
674 | + void update_state(unity::scopes::FilterState& filter_state, double value) const; |
675 | + |
676 | + unity::scopes::ValueSliderFilter::SPtr get_filter(); |
677 | + |
678 | +private: |
679 | + unity::scopes::ValueSliderFilter::SPtr filter_; |
680 | + std::shared_ptr<FilterGroup> filter_group_; |
681 | + std::shared_ptr<ValueSliderLabels> labels_; |
682 | +}; |
683 | + |
684 | +#endif // _UNITY_JS_VALUE_SLIDER_FILTER_H_ |
685 | + |
686 | + |
687 | |
688 | === added file 'src/bindings/src/value-slider-labels.cc' |
689 | --- src/bindings/src/value-slider-labels.cc 1970-01-01 00:00:00 +0000 |
690 | +++ src/bindings/src/value-slider-labels.cc 2016-05-12 12:10:04 +0000 |
691 | @@ -0,0 +1,90 @@ |
692 | +/* |
693 | + * Copyright 2016 Canonical Ltd. |
694 | + * |
695 | + * This file is part of unity-js-scopes. |
696 | + * |
697 | + * unity-js-scopes is free software; you can redistribute it and/or modify |
698 | + * it under the terms of the GNU General Public License as published by |
699 | + * the Free Software Foundation; version 3. |
700 | + * |
701 | + * unity-js-scopes is distributed in the hope that it will be useful, |
702 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
703 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
704 | + * GNU General Public License for more details. |
705 | + * |
706 | + * You should have received a copy of the GNU General Public License |
707 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
708 | + */ |
709 | + |
710 | +#include "value-slider-labels.h" |
711 | + |
712 | +#include "common.h" |
713 | + |
714 | +//std::string const& min_label, std::string const& max_label, ValueLabelPairList const& extra_labels |
715 | + |
716 | +ValueSliderLabels::ValueSliderLabels(v8::FunctionCallbackInfo<v8::Value> const& args) |
717 | +{ |
718 | + if (args.Length() != 2 && args.Length() != 3) { |
719 | + throw std::runtime_error("Invalid number of arguments"); |
720 | + } |
721 | + if (!args[0]->IsString()) { |
722 | + throw std::runtime_error("Invalid argument type"); |
723 | + } |
724 | + if (!args[1]->IsString()) { |
725 | + throw std::runtime_error("Invalid argument type"); |
726 | + } |
727 | + |
728 | + std::string min_label = |
729 | + *(v8::String::Utf8Value(args[0]->ToString())); |
730 | + |
731 | + std::string max_label = |
732 | + *(v8::String::Utf8Value(args[1]->ToString())); |
733 | + |
734 | + if (args.Length() == 3) |
735 | + { |
736 | + ValueLabelPairList extra_labels; |
737 | + |
738 | + try |
739 | + { |
740 | + auto extra_labels_a = unity::scopesjs::to_variant(args[2]).get_array(); |
741 | + |
742 | + for (auto const& label : extra_labels_a) |
743 | + { |
744 | + auto label_pair = label.get_array(); |
745 | + if (label_pair.size() == 2) |
746 | + { |
747 | + extra_labels.push_back(ValueLabelPair(label_pair[0].get_double(), label_pair[1].get_string())); |
748 | + } |
749 | + } |
750 | + } catch(...) |
751 | + { |
752 | + throw std::runtime_error("ValueSliderLabels::ValueSliderLabels: Malformed 'extra_labels' argument! Expected format: [[2, \"2\"], [4, \"4\"]]"); |
753 | + } |
754 | + |
755 | + labels_ = std::make_shared<unity::scopes::ValueSliderLabels>(unity::scopes::ValueSliderLabels(min_label, max_label, extra_labels)); |
756 | + } |
757 | + else |
758 | + { |
759 | + labels_ = std::make_shared<unity::scopes::ValueSliderLabels>(unity::scopes::ValueSliderLabels(min_label, max_label)); |
760 | + } |
761 | +} |
762 | + |
763 | +std::string ValueSliderLabels::min_label() const |
764 | +{ |
765 | + return labels_->min_label(); |
766 | +} |
767 | + |
768 | +std::string ValueSliderLabels::max_label() const |
769 | +{ |
770 | + return labels_->max_label(); |
771 | +} |
772 | + |
773 | +ValueLabelPairList ValueSliderLabels::extra_labels() const |
774 | +{ |
775 | + return labels_->extra_labels(); |
776 | +} |
777 | + |
778 | +unity::scopes::ValueSliderLabels ValueSliderLabels::get_labels() const |
779 | +{ |
780 | + return *labels_; |
781 | +} |
782 | |
783 | === added file 'src/bindings/src/value-slider-labels.h' |
784 | --- src/bindings/src/value-slider-labels.h 1970-01-01 00:00:00 +0000 |
785 | +++ src/bindings/src/value-slider-labels.h 2016-05-12 12:10:04 +0000 |
786 | @@ -0,0 +1,46 @@ |
787 | +/* |
788 | + * Copyright 2016 Canonical Ltd. |
789 | + * |
790 | + * This file is part of unity-js-scopes. |
791 | + * |
792 | + * unity-js-scopes is free software; you can redistribute it and/or modify |
793 | + * it under the terms of the GNU General Public License as published by |
794 | + * the Free Software Foundation; version 3. |
795 | + * |
796 | + * unity-js-scopes is distributed in the hope that it will be useful, |
797 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
798 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
799 | + * GNU General Public License for more details. |
800 | + * |
801 | + * You should have received a copy of the GNU General Public License |
802 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
803 | + */ |
804 | + |
805 | +#ifndef _UNITY_JS_VALUE_SLIDER_LABELS_H_ |
806 | +#define _UNITY_JS_VALUE_SLIDER_LABELS_H_ |
807 | + |
808 | +#include <unity/scopes/ValueSliderLabels.h> |
809 | + |
810 | +#include <v8-cpp.h> |
811 | + |
812 | +typedef std::pair<double, std::string> ValueLabelPair; |
813 | +typedef std::vector<ValueLabelPair> ValueLabelPairList; |
814 | + |
815 | +class ValueSliderLabels |
816 | +{ |
817 | +public: |
818 | + ValueSliderLabels(v8::FunctionCallbackInfo<v8::Value> const& args); |
819 | + |
820 | + std::string min_label() const; |
821 | + std::string max_label() const; |
822 | + ValueLabelPairList extra_labels() const; |
823 | + |
824 | + unity::scopes::ValueSliderLabels get_labels() const; |
825 | + |
826 | +private: |
827 | + std::shared_ptr<unity::scopes::ValueSliderLabels> labels_; |
828 | +}; |
829 | + |
830 | +#endif // _UNITY_JS_VALUE_SLIDER_LABELS_H_ |
831 | + |
832 | + |