| /******************************************************************************* |
| * Copyright (c) 2013, 2019 Ericsson |
| * |
| * All rights reserved. This program and the accompanying materials are |
| * made available under the terms of the Eclipse Public License 2.0 which |
| * accompanies this distribution, and is available at |
| * https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Contributors: |
| * Bernd Hufmann - Initial API and implementation |
| *******************************************************************************/ |
| |
| package org.eclipse.tracecompass.tmf.ui.viewers.xycharts; |
| |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.events.MouseEvent; |
| import org.eclipse.swt.events.MouseWheelListener; |
| import org.eclipse.tracecompass.internal.tmf.ui.viewers.xycharts.TmfXyUiUtils; |
| import org.swtchart.Chart; |
| |
| /** |
| * Class for providing zooming and scrolling based on mouse wheel. For zooming, |
| * it centers the zoom on mouse position. For scrolling, it will move the zoom |
| * window to another position while maintaining the window size. It also |
| * notifies the viewer about a change of range. |
| * |
| * @author Bernd Hufmann |
| */ |
| public class TmfMouseWheelZoomProvider extends TmfBaseProvider implements MouseWheelListener { |
| |
| // ------------------------------------------------------------------------ |
| // Constructors |
| // ------------------------------------------------------------------------ |
| /** |
| * Standard constructor. |
| * |
| * @param tmfChartViewer |
| * The parent histogram object |
| */ |
| public TmfMouseWheelZoomProvider(ITmfChartTimeProvider tmfChartViewer) { |
| super(tmfChartViewer); |
| register(); |
| } |
| |
| // ------------------------------------------------------------------------ |
| // TmfBaseProvider |
| // ------------------------------------------------------------------------ |
| @Override |
| public void register() { |
| getChart().getPlotArea().addMouseWheelListener(this); |
| } |
| |
| @Override |
| public void deregister() { |
| if ((getChartViewer().getControl() != null) && !getChartViewer().getControl().isDisposed()) { |
| getChart().getPlotArea().removeMouseWheelListener(this); |
| } |
| } |
| |
| @Override |
| public void refresh() { |
| // nothing to do |
| } |
| |
| // ------------------------------------------------------------------------ |
| // MouseWheelListener |
| // ------------------------------------------------------------------------ |
| @Override |
| public synchronized void mouseScrolled(MouseEvent event) { |
| final int count = event.count; |
| if ((event.stateMask & SWT.CTRL) != 0) { |
| final int x = event.x; |
| zoom(count, x); |
| } else if ((event.stateMask & SWT.SHIFT) != 0) { |
| scroll(count); |
| } |
| } |
| |
| private void scroll(final int count) { |
| ITmfChartTimeProvider viewer = getChartViewer(); |
| Chart chart = getChart(); |
| if ((viewer != null) && (chart != null) && (count != 0)) { |
| TmfXyUiUtils.horizontalScroll(viewer, chart, count > 0); |
| } |
| } |
| |
| private void zoom(final int count, final int x) { |
| ITmfChartTimeProvider viewer = getChartViewer(); |
| Chart chart = getChart(); |
| if ((viewer != null) && (chart != null) && (count != 0)) { |
| TmfXyUiUtils.zoom(viewer, chart, count > 0, x); |
| } |
| } |
| } |