Import "views" plugins
[deliverable/tracecompass.git] / tmf / org.lttng.scope.tmf2.views.ui / src / org / lttng / scope / tmf2 / views / ui / timeline / widgets / timegraph / toolbar / nav / NavigationButtons.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.nav;
11
12 import java.util.List;
13 import java.util.stream.Collectors;
14
15 import org.lttng.scope.tmf2.views.ui.timeline.widgets.timegraph.TimeGraphWidget;
16
17 import com.google.common.collect.ImmutableList;
18
19 import javafx.scene.control.Button;
20 import javafx.scene.control.MenuButton;
21 import javafx.scene.control.RadioMenuItem;
22 import javafx.scene.control.ToggleGroup;
23 import javafx.scene.image.ImageView;
24 import javafx.scene.layout.HBox;
25
26 /**
27 * Class encapsulating the fowards/backwards navigation buttons, with support
28 * for different "modes" of navigation.
29 *
30 * @author Alexandre Montplaisir
31 */
32 public class NavigationButtons {
33
34 // ------------------------------------------------------------------------
35 // Inner classes
36 // ------------------------------------------------------------------------
37
38 private static class BackButton extends Button {
39
40 private final TimeGraphWidget fViewer;
41
42 public BackButton(TimeGraphWidget viewer, NavigationMode initialNavMode) {
43 fViewer = viewer;
44 setNavMode(initialNavMode);
45 }
46
47 public void setNavMode(NavigationMode navMode) {
48 setGraphic(new ImageView(navMode.getBackIcon()));
49 setOnAction(e -> {
50 navMode.navigateBackwards(fViewer);
51 });
52 }
53 }
54
55 private static class ForwardButton extends Button {
56
57 private final TimeGraphWidget fViewer;
58
59 public ForwardButton(TimeGraphWidget viewer, NavigationMode initialNavMode) {
60 fViewer = viewer;
61 setNavMode(initialNavMode);
62 }
63
64 public void setNavMode(NavigationMode navMode) {
65 setGraphic(new ImageView(navMode.getForwardIcon()));
66 setOnAction(e -> {
67 navMode.navigateForwards(fViewer);
68 });
69 }
70 }
71
72 // ------------------------------------------------------------------------
73 // Pre-defined navigation modes
74 // ------------------------------------------------------------------------
75
76 private static final List<NavigationMode> NAVIGATION_MODES = ImmutableList.of(
77 new NavigationModeFollowStateChanges(),
78 new NavigationModeFollowEvents(),
79 new NavigationModeFollowArrows(),
80 new NavigationModeFollowBookmarks());
81
82 // ------------------------------------------------------------------------
83 // Class components
84 // ------------------------------------------------------------------------
85
86 private final Button fBackButton;
87 private final Button fForwardButton;
88 private final MenuButton fMenuButton;
89
90 /**
91 * Constructor. This will prepare the buttons, which can then be retrieved
92 * with {@link #getBackButton()}, {@link #getForwardButton()} and
93 * {@link #getMenuButton()}.
94 *
95 * @param viewer
96 * The viewer to which the buttons will belong
97 */
98 public NavigationButtons(TimeGraphWidget viewer) {
99 List<NavigationMode> navModes = NAVIGATION_MODES;
100 NavigationMode initialMode = navModes.get(0);
101
102 BackButton backButton = new BackButton(viewer, initialMode);
103 ForwardButton forwardButton = new ForwardButton(viewer, initialMode);
104 MenuButton menuButton = new MenuButton();
105
106 ToggleGroup tg = new ToggleGroup();
107 List<RadioMenuItem> items = NAVIGATION_MODES.stream()
108 .map(nm -> {
109 RadioMenuItem item = new RadioMenuItem();
110 item.setText(nm.getModeName());
111 item.setGraphic(new HBox(new ImageView(nm.getBackIcon()), new ImageView(nm.getForwardIcon())));
112 item.setToggleGroup(tg);
113 item.setOnAction(e -> {
114 backButton.setNavMode(nm);
115 forwardButton.setNavMode(nm);
116 });
117 item.setDisable(!nm.isEnabled());
118 return item;
119 })
120 .collect(Collectors.toList());
121
122 items.get(0).setSelected(true);
123 menuButton.getItems().addAll(items);
124
125 fBackButton = backButton;
126 fForwardButton = forwardButton;
127 fMenuButton = menuButton;
128 }
129
130 /**
131 * Get the "back" button.
132 *
133 * @return The back button
134 */
135 public Button getBackButton() {
136 return fBackButton;
137 }
138
139 /**
140 * Get the "forward" button.
141 *
142 * @return The forward button
143 */
144 public Button getForwardButton() {
145 return fForwardButton;
146 }
147
148 /**
149 * Get the drop-down menu button, which allows switching between the
150 * available navigation modes.
151 *
152 * @return The drop-down menu button
153 */
154 public MenuButton getMenuButton() {
155 return fMenuButton;
156 }
157 }
This page took 0.034059 seconds and 5 git commands to generate.