2 * Copyright (C) 2017 EfficiOS Inc., Alexandre Montplaisir <alexmonthy@efficios.com>
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
10 package org
.lttng
.scope
.tmf2
.views
.ui
.timeline
.widgets
.timegraph
.toolbar
;
12 import java
.util
.Collection
;
13 import java
.util
.stream
.Collectors
;
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
;
22 import javafx
.scene
.control
.CheckMenuItem
;
23 import javafx
.scene
.control
.MenuButton
;
24 import javafx
.scene
.paint
.Color
;
27 * Menu-button for listing the available arrow series.
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
33 * @author Alexandre Montplaisir
35 class ArrowSeriesMenuButton
extends MenuButton
{
37 private static final double ARROW_GRAPHIC_LENGTH
= 10;
39 public ArrowSeriesMenuButton(TimeGraphWidget widget
) {
40 ITimeGraphModelProvider modelProvider
= widget
.getControl().getModelRenderProvider();
41 Collection
<ITimeGraphModelArrowProvider
> arrowProviders
= modelProvider
.getArrowProviders();
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());
52 .collect(Collectors
.toList());
54 setText(Messages
.arrowSeriesMenuButtonName
);
55 getItems().addAll(arrowSeriesItems
);
57 if (arrowSeriesItems
.isEmpty()) {
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
);