Import "views" plugins
[deliverable/tracecompass.git] / tmf / org.lttng.scope.tmf2.views.ui / src / org / lttng / scope / tmf2 / views / ui / timeline / widgets / timegraph / toolbar / ArrowSeriesMenuButton.java
1 /*
2 * Copyright (C) 2017 EfficiOS Inc., Alexandre Montplaisir <alexmonthy@efficios.com>
3 *
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
8 */
9
10 package org.lttng.scope.tmf2.views.ui.timeline.widgets.timegraph.toolbar;
11
12 import java.util.Collection;
13 import java.util.stream.Collectors;
14
15 import org.lttng.scope.tmf2.views.core.timegraph.model.provider.ITimeGraphModelProvider;
16 import org.lttng.scope.tmf2.views.core.timegraph.model.provider.arrows.ITimeGraphModelArrowProvider;
17 import org.lttng.scope.tmf2.views.core.timegraph.model.render.arrows.TimeGraphArrowSeries;
18 import org.lttng.scope.tmf2.views.ui.jfx.Arrow;
19 import org.lttng.scope.tmf2.views.ui.jfx.JfxColorFactory;
20 import org.lttng.scope.tmf2.views.ui.timeline.widgets.timegraph.TimeGraphWidget;
21
22 import javafx.scene.control.CheckMenuItem;
23 import javafx.scene.control.MenuButton;
24 import javafx.scene.paint.Color;
25
26 /**
27 * Menu-button for listing the available arrow series.
28 *
29 * The available arrow series come from the time graph model. More than one mode
30 * (or none) can be active at the same time, so we are using CheckMenuItems for
31 * the menu items.
32 *
33 * @author Alexandre Montplaisir
34 */
35 class ArrowSeriesMenuButton extends MenuButton {
36
37 private static final double ARROW_GRAPHIC_LENGTH = 10;
38
39 public ArrowSeriesMenuButton(TimeGraphWidget widget) {
40 ITimeGraphModelProvider modelProvider = widget.getControl().getModelRenderProvider();
41 Collection<ITimeGraphModelArrowProvider> arrowProviders = modelProvider.getArrowProviders();
42
43 Collection<CheckMenuItem> arrowSeriesItems = arrowProviders.stream()
44 .map(arrowProvider -> {
45 TimeGraphArrowSeries series = arrowProvider.getArrowSeries();
46 String name = series.getSeriesName();
47 Arrow graphic = getArrowGraphicForSeries(series);
48 CheckMenuItem cmi = new CheckMenuItem(name, graphic);
49 cmi.selectedProperty().bindBidirectional(arrowProvider.enabledProperty());
50 return cmi;
51 })
52 .collect(Collectors.toList());
53
54 setText(Messages.arrowSeriesMenuButtonName);
55 getItems().addAll(arrowSeriesItems);
56
57 if (arrowSeriesItems.isEmpty()) {
58 setDisable(true);
59 }
60 }
61
62 private static Arrow getArrowGraphicForSeries(TimeGraphArrowSeries series) {
63 Color color = JfxColorFactory.getColorFromDef(series.getColor());
64 Arrow arrow = new Arrow(0, 0, ARROW_GRAPHIC_LENGTH, 0);
65 arrow.setStroke(color);
66 return arrow;
67 }
68
69 }
This page took 0.031043 seconds and 5 git commands to generate.