toolentryeditpart.java
来自「mywork是rcp开发的很好的例子」· Java 代码 · 共 555 行 · 第 1/2 页
JAVA
555 行
/*******************************************************************************
* Copyright (c) 2000, 2008 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.gef.internal.ui.palette.editparts;
import org.eclipse.swt.SWT;
import org.eclipse.swt.accessibility.ACC;
import org.eclipse.swt.accessibility.AccessibleControlEvent;
import org.eclipse.swt.accessibility.AccessibleEvent;
import org.eclipse.swt.dnd.DragSourceEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.ui.IMemento;
import org.eclipse.draw2d.ActionEvent;
import org.eclipse.draw2d.ActionListener;
import org.eclipse.draw2d.Border;
import org.eclipse.draw2d.ButtonBorder;
import org.eclipse.draw2d.ButtonModel;
import org.eclipse.draw2d.Clickable;
import org.eclipse.draw2d.ColorConstants;
import org.eclipse.draw2d.Graphics;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.MarginBorder;
import org.eclipse.draw2d.Toggle;
import org.eclipse.draw2d.geometry.Insets;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gef.AccessibleEditPart;
import org.eclipse.gef.DragTracker;
import org.eclipse.gef.Request;
import org.eclipse.gef.RequestConstants;
import org.eclipse.gef.internal.ui.palette.PaletteColorUtil;
import org.eclipse.gef.palette.PaletteEntry;
import org.eclipse.gef.palette.PaletteStack;
import org.eclipse.gef.palette.ToolEntry;
import org.eclipse.gef.ui.palette.PaletteViewerPreferences;
import org.eclipse.gef.ui.palette.editparts.IPinnableEditPart;
import org.eclipse.gef.ui.palette.editparts.PaletteEditPart;
/**
* @author Administrator
* 使图集 工具栏始终为 ICONS_ONLY
*/
public class ToolEntryEditPart
extends PaletteEditPart
{
class MenuTimer implements Runnable {
public static final int MENU_TIMER_DELAY = 400;
private boolean enabled = true;
public void disable() {
enabled = false;
}
public void run() {
if (enabled) {
getButtonModel().setArmed(false);
getButtonModel().setPressed(false);
((IPaletteStackEditPart)getParent()).openMenu();
getViewer().getEditDomain().loadDefaultTool();
}
}
}
abstract class ToggleButtonTracker extends SingleSelectionTracker {
private MenuTimer timer = null;
protected void enableTimer() {
timer = new MenuTimer();
getViewer().getControl().getDisplay().timerExec(MenuTimer.MENU_TIMER_DELAY,
timer);
}
protected void disableTimer() {
if (timer != null) {
timer.disable();
timer = null;
}
}
protected boolean handleButtonDown(int button) {
if (getParent() instanceof IPaletteStackEditPart)
enableTimer();
if (button == 2 && isInState(STATE_INITIAL))
performConditionalSelection();
super.handleButtonDown(button);
if (button == 1) {
getFigure().internalGetEventDispatcher().requestRemoveFocus(getFigure());
getButtonModel().setArmed(true);
getButtonModel().setPressed(true);
}
return true;
}
protected boolean handleDrag() {
org.eclipse.draw2d.geometry.Point point = getLocation().getCopy();
getFigure().translateToRelative(point);
if (!getFigure().containsPoint(point)) {
getButtonModel().setArmed(false);
getButtonModel().setMouseOver(false);
disableTimer();
} else {
getButtonModel().setArmed(true);
getButtonModel().setMouseOver(true);
}
return true;
}
protected boolean handleNativeDragFinished(DragSourceEvent event) {
getPaletteViewer().setActiveTool(null);
return true;
}
}
class GTKToggleButtonTracker extends ToggleButtonTracker {
int gtkState = 0;
public void deactivate() {
disableTimer();
super.deactivate();
}
protected boolean handleButtonUp(int button) {
disableTimer();
// Workaround for Bug 96351. It should be removed when Bug 35585 is fixed.
if (gtkState == 1) {
handleNativeDragFinished(null);
return true;
}
if (button == 1) {
getButtonModel().setPressed(false);
getButtonModel().setArmed(false);
}
return super.handleButtonUp(button);
}
protected boolean handleNativeDragStarted(DragSourceEvent event) {
disableTimer();
gtkState = 1;
return true;
}
}
class OtherToggleButtonTracker extends ToggleButtonTracker {
private static final int WIN_THRESHOLD = 3;
private Point mouseDownLoc = null;
public void deactivate() {
disableTimer();
getButtonModel().setPressed(false);
getButtonModel().setArmed(false);
super.deactivate();
}
protected boolean handleButtonDown(int button) {
mouseDownLoc = new Point(getLocation().x, getLocation().y);
return super.handleButtonDown(button);
}
protected boolean handleButtonUp(int button) {
disableTimer();
if (button == 1) {
getButtonModel().setPressed(false);
getButtonModel().setArmed(false);
}
return super.handleButtonUp(button);
}
protected boolean handleNativeDragStarted(DragSourceEvent event) {
disableTimer();
// win hack because button down is delayed
if (getParent() instanceof IPaletteStackEditPart && SWT.getPlatform().equals("win32")) { //$NON-NLS-1$
Point nds = getPaletteViewer().getControl().toControl(event.display.getCursorLocation());
if (mouseDownLoc != null && (Math.abs(nds.x - mouseDownLoc.x)
+ Math.abs(nds.y - mouseDownLoc.y)) < WIN_THRESHOLD) {
getButtonModel().setArmed(false);
getButtonModel().setPressed(false);
((IPaletteStackEditPart)getParent()).openMenu();
getViewer().getEditDomain().loadDefaultTool();
event.doit = false;
return false;
}
}
getButtonModel().setPressed(false);
getButtonModel().setArmed(false);
return true;
}
}
/**
* The figure for for a <code>ToolEntryEditPart</code>.
*/
class ToolEntryToggle
extends Toggle {
private boolean showHoverFeedback = false;
ToolEntryToggle(IFigure contents) {
super(contents);
setOpaque(false);
setEnabled(true);
if (isToolbarItem()) {
setStyle(Clickable.STYLE_BUTTON | Clickable.STYLE_TOGGLE);
setBorder(TOOLBAR_ITEM_BORDER);
}
}
public boolean containsPoint(int x, int y) {
Rectangle rect = getBounds().getCopy();
if (customLabel.getBorder() == ICON_BORDER) {
rect.width -= PinnablePaletteStackFigure.ARROW_WIDTH;
} else if (customLabel.getBorder() == LIST_BORDER) {
rect.width -= PinnablePaletteStackFigure.ARROW_WIDTH;
rect.x += PinnablePaletteStackFigure.ARROW_WIDTH;
}
return rect.contains(x, y);
}
public IFigure findMouseEventTargetAt(int x, int y) {
return null;
}
public IFigure getToolTip() {
return createToolTip();
}
public void setEnabled(boolean value) {
super.setEnabled(value);
if (isEnabled()) {
setRolloverEnabled(true);
if (getFlag(STYLE_BUTTON)) {
setBorder(TOOLBAR_ITEM_BORDER);
}
setForegroundColor(null);
} else {
if (getFlag(STYLE_BUTTON)) {
setBorder(null);
}
setRolloverEnabled(false);
setForegroundColor(ColorConstants.gray);
}
}
protected void paintFigure(Graphics graphics) {
super.paintFigure(graphics);
if (!isToolbarItem() && isEnabled() && isRolloverEnabled()) {
ButtonModel model = getModel();
if (model.isSelected()) {
graphics.setBackgroundColor(PaletteColorUtil.getSelectedColor());
graphics.fillRoundRectangle(getSelectionRectangle(
getLayoutSetting(), customLabel), 3, 3);
} else if (model.isMouseOver() || showHoverFeedback) {
graphics.setBackgroundColor(PaletteColorUtil.getHoverColor());
graphics.fillRoundRectangle(getSelectionRectangle(
getLayoutSetting(), customLabel), 3, 3);
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?