blob: 7b23aebd893300767601750447a50cd5df471ad1 [file] [log] [blame]
/**********************************************************************
* Copyright (c) 2005, 2014 IBM Corporation, 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:
* IBM - Initial API and implementation
* Bernd Hufmann - Updated for TMF
**********************************************************************/
package org.eclipse.tracecompass.tmf.ui.views.uml2sd.handlers;
import org.eclipse.jface.action.ActionContributionItem;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Cursor;
import org.eclipse.swt.widgets.Display;
import org.eclipse.tracecompass.internal.tmf.ui.Activator;
import org.eclipse.tracecompass.internal.tmf.ui.ITmfImageConstants;
import org.eclipse.tracecompass.tmf.ui.views.uml2sd.SDView;
import org.eclipse.tracecompass.tmf.ui.views.uml2sd.SDWidget;
import org.eclipse.tracecompass.tmf.ui.views.uml2sd.util.Messages;
import org.eclipse.ui.IActionBars;
/**
* Action class implementation for zooming in, out or reset of zoom.
*
* @version 1.0
* @author sveyrier
*
*/
public class Zoom extends BaseSDAction {
// ------------------------------------------------------------------------
// Constants
// ------------------------------------------------------------------------
/**
* The Action ID for zooming in.
*/
public static final String ZOOM_IN_ID = "org.eclipse.linuxtools.tmf.ui.views.uml2sd.handlers.ZoomInCoolBar"; //$NON-NLS-1$
/**
* The Action ID for zooming out.
*/
public static final String ZOOM_OUT_ID = "org.eclipse.linuxtools.tmf.ui.views.uml2sd.handlers.ZoomOutCoolBar"; //$NON-NLS-1$
/**
* The Action ID for reset zooming.
*/
public static final String RESET_ZOOM_ID = "org.eclipse.linuxtools.tmf.ui.views.uml2sd.handlers.ResetZoom"; //$NON-NLS-1$
/**
* The Action ID for no zoominf.
*/
public static final String NO_ZOOM_ID = "org.eclipse.linuxtools.tmf.ui.views.uml2sd.handlers.NoZoom"; //$NON-NLS-1$
// ------------------------------------------------------------------------
// Attributes
// ------------------------------------------------------------------------
/**
* Flag to indicate last zoom in.
*/
private boolean fLastZoomIn = false;
/**
* Flag to indicate last zoom out.
*/
private boolean fLastZoomOut = false;
/**
* The cursor used when zooming in.
*/
private final Cursor fZoomInCursor;
/**
* The cursor used when zooming out.
*/
private final Cursor fZoomOutCursor;
/**
* The different zoom actions
*/
public static enum ZoomType {
/** No zoom information */
ZOOM_NONE,
/** Zoom in */
ZOOM_IN,
/** Zoom out */
ZOOM_OUT,
/** Reset to the default zoom level */
ZOOM_RESET
}
// ------------------------------------------------------------------------
// Constructors
// ------------------------------------------------------------------------
/**
* Constructor
* @param view The view reference
* @param type The type of zoom.
*/
public Zoom(SDView view, ZoomType type) {
super(view, "", AS_RADIO_BUTTON); //$NON-NLS-1$
// Pre-create zooming cursors
fZoomInCursor = new Cursor(Display.getCurrent(),
Activator.getDefault().getImageFromImageRegistry(ITmfImageConstants.IMG_UI_ZOOM_IN).getImageData(),
Activator.getDefault().getImageFromImageRegistry(ITmfImageConstants.IMG_UI_ZOOM).getImageData(), 0, 0);
fZoomOutCursor = new Cursor(Display.getCurrent(),
Activator.getDefault().getImageFromImageRegistry(ITmfImageConstants.IMG_UI_ZOOM_OUT).getImageData(),
Activator.getDefault().getImageFromImageRegistry(ITmfImageConstants.IMG_UI_ZOOM).getImageData(), 0, 0);
switch (type) {
case ZOOM_IN:
setText(Messages.SequenceDiagram_ZoomIn);
setToolTipText(Messages.SequenceDiagram_ZoomInTheDiagram);
setId(ZOOM_IN_ID);
setImageDescriptor(Activator.getDefault().getImageDescripterFromPath(ITmfImageConstants.IMG_UI_ZOOM_IN_MENU));
break;
case ZOOM_OUT:
setText(Messages.SequenceDiagram_ZoomOut);
setToolTipText(Messages.SequenceDiagram_ZoomOutTheDiagram);
setId(ZOOM_OUT_ID);
setImageDescriptor(Activator.getDefault().getImageDescripterFromPath(ITmfImageConstants.IMG_UI_ZOOM_OUT_MENU));
break;
case ZOOM_RESET:
setText(Messages.SequenceDiagram_ResetZoomFactor);
setToolTipText(Messages.SequenceDiagram_ResetZoomFactor);
setId(RESET_ZOOM_ID);
setImageDescriptor(Activator.getDefault().getImageDescripterFromPath(ITmfImageConstants.IMG_UI_HOME_MENU));
break;
case ZOOM_NONE:
default:
setText(Messages.SequenceDiagram_Select);
setToolTipText(Messages.SequenceDiagram_Select);
setId(NO_ZOOM_ID);
setImageDescriptor(Activator.getDefault().getImageDescripterFromPath(ITmfImageConstants.IMG_UI_SELECT_MENU));
break;
}
}
// ------------------------------------------------------------------------
// Methods
// ------------------------------------------------------------------------
@Override
public void run() {
if ((getView() == null) || (getView().getSDWidget() == null)) {
return;
}
SDWidget viewer = getView().getSDWidget();
if (getId().equals(ZOOM_OUT_ID)) {
// Eclipse 3.0 M7 workaround
if (fLastZoomOut == isChecked()) {
setChecked(!isChecked());
}
viewer.setZoomOutMode(isChecked());
fLastZoomOut = isChecked();
if (isChecked()) {
viewer.setCursor(fZoomOutCursor);
setActionChecked(NO_ZOOM_ID, false);
} else {
viewer.setCursor(new Cursor(Display.getDefault(), SWT.CURSOR_ARROW));
setActionChecked(NO_ZOOM_ID, true);
}
} else if (getId().equals(ZOOM_IN_ID)) {
// Eclipse 3.0 M7 workaround
if (fLastZoomIn == isChecked()) {
setChecked(!isChecked());
}
viewer.setZoomInMode(isChecked());
fLastZoomIn = isChecked();
if (isChecked()) {
viewer.setCursor(fZoomInCursor);
setActionChecked(NO_ZOOM_ID, false);
} else {
viewer.setCursor(new Cursor(Display.getDefault(), SWT.CURSOR_ARROW));
setActionChecked(NO_ZOOM_ID, true);
}
} else if (getId().equals(RESET_ZOOM_ID)) {
viewer.resetZoomFactor();
// The reset action is a radio button only to uncheck the zoom in and out button
// when it is clicked. This avoid adding code to do it manually
// We only have to force it to false every time
setChecked(false);
setActionChecked(NO_ZOOM_ID, true);
} else if (getId().equals(NO_ZOOM_ID)) {
setChecked(true);
viewer.setZoomInMode(false);
viewer.setZoomInMode(false);
viewer.setCursor(new Cursor(Display.getDefault(), SWT.CURSOR_ARROW));
}
}
/**
* Set action check state of a view action for a given action ID.
*
* @param id The action ID
* @param checked true to check the action, false to uncheck the action
*/
protected void setActionChecked(String id, boolean checked) {
if (getView() != null) {
IActionBars bar = getView().getViewSite().getActionBars();
if (bar == null) {
return;
}
IToolBarManager barManager = bar.getToolBarManager();
if (barManager == null) {
return;
}
IContributionItem nextPage = barManager.find(id);
if (nextPage instanceof ActionContributionItem) {
IAction action = ((ActionContributionItem) nextPage).getAction();
if (action != null) {
action.setChecked(checked);
}
}
}
}
/**
* Dispose the action and its resources
*/
public void dispose() {
fZoomInCursor.dispose();
fZoomOutCursor.dispose();
}
}