toolentryeditpart.java
来自「mywork是rcp开发的很好的例子」· Java 代码 · 共 555 行 · 第 1/2 页
JAVA
555 行
protected void paintBorder(Graphics graphics) {
if (isEnabled()) {
if (getBorder() != null)
getBorder().paint(this, graphics, NO_INSETS);
if (hasFocus()) {
graphics.setForegroundColor(ColorConstants.black);
graphics.setBackgroundColor(ColorConstants.white);
Rectangle area = isToolbarItem() ? getClientArea()
: getSelectionRectangle(getLayoutSetting(), customLabel);
if (isStyle(STYLE_BUTTON))
graphics.drawFocus(area.x, area.y, area.width, area.height);
else
graphics.drawFocus(area.x, area.y, area.width - 1,
area.height - 1);
}
} else {
super.paintBorder(graphics);
}
}
/**
* Should hover feedback be shown? Allows other palette entities to control when
* the hover feedback should be shown on this tool entry.
*
* @param showHoverFeedback
* true if the hover feedback is to be shown; false otherwise.
*/
public void setShowHoverFeedback(boolean showHoverFeedback) {
this.showHoverFeedback = showHoverFeedback;
repaint();
}
}
private static final String ACTIVE_STATE = "active"; //$NON-NLS-1$
private DetailedLabelFigure customLabel;
public ToolEntryEditPart(PaletteEntry paletteEntry) {
super(paletteEntry);
}
public Object getAdapter(Class key) {
if (key == IPinnableEditPart.class) {
if ((getParent() instanceof PinnablePaletteStackEditPart)
&& ((PinnablePaletteStackEditPart) getParent()).canBePinned()
&& ((PaletteStack) getParent().getModel()).getActiveEntry().equals(
getModel())) {
return getParent();
}
}
return super.getAdapter(key);
}
protected AccessibleEditPart createAccessible() {
return new AccessibleGraphicalEditPart () {
public void getDescription(AccessibleEvent e) {
e.result = getPaletteEntry().getDescription();
}
public void getName(AccessibleEvent e) {
e.result = getPaletteEntry().getLabel();
}
public void getRole(AccessibleControlEvent e) {
if (getParent() instanceof IPaletteStackEditPart
&& (ToolEntryEditPart.this == ((IPaletteStackEditPart) getParent())
.getActiveEntry())) {
e.detail = ACC.ROLE_COMBOBOX;
} else {
e.detail = ACC.ROLE_PUSHBUTTON;
}
}
public void getState(AccessibleControlEvent e) {
super.getState(e);
if (getButtonModel().isSelected())
e.detail |= ACC.STATE_CHECKED;
}
};
}
static final Border TOOLBAR_ITEM_BORDER = new ButtonBorder(
ButtonBorder.SCHEMES.TOOLBAR);
// The following are the insets that the bounds of the label figure should be
// cropped to paint the blue/orange select and hover feedback rectangles.
static final Insets LIST_HIGHLIGHT_INSETS = new Insets(1, 5, 2, 0);
static final Insets ICON_HIGHLIGHT_INSETS = new Insets(2, 1, 2, 1);
// The following are the borders that go around the entire tool figure to
// provide room to draw the arrow and outline of the palette stack figure if
// this tool happens to appear as the active tool of a stack.
static final Border LIST_BORDER = new MarginBorder(3,
PinnablePaletteStackFigure.ARROW_WIDTH + 7, 4, 0);
static final Border ICON_BORDER = new MarginBorder(4, 4, 3,
PinnablePaletteStackFigure.ARROW_WIDTH + 4);
public IFigure createFigure() {
customLabel = new DetailedLabelFigure();
Clickable button = new ToolEntryToggle(customLabel);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
getPaletteViewer().setActiveTool(getToolEntry());
}
});
return button;
}
/**
* @see org.eclipse.gef.ui.palette.editparts.PaletteEditPart#deactivate()
*/
public void deactivate() {
customLabel.dispose();
super.deactivate();
}
/**
* @see org.eclipse.gef.EditPart#eraseTargetFeedback(Request)
*/
public void eraseTargetFeedback(Request request) {
if (RequestConstants.REQ_SELECTION.equals(request.getType()))
getButtonModel().setMouseOver(false);
super.eraseTargetFeedback(request);
}
private ButtonModel getButtonModel() {
Clickable c = (Clickable)getFigure();
return c.getModel();
}
/**
* @see PaletteEditPart#getDragTracker(Request)
*/
public DragTracker getDragTracker(Request request) {
if (SWT.getPlatform().equals("gtk")) //$NON-NLS-1$
return new GTKToggleButtonTracker();
else
return new OtherToggleButtonTracker();
}
private ToolEntry getToolEntry() {
return (ToolEntry)getPaletteEntry();
}
/**
* @see org.eclipse.gef.ui.palette.editparts.PaletteEditPart#getToolTipText()
*/
protected String getToolTipText() {
String result = null;
if (getLayoutSetting() != PaletteViewerPreferences.LAYOUT_DETAILS) {
result = super.getToolTipText();
}
return result;
}
/**
* If this edit part's name is truncated in its label, the name should be prepended to
* the tooltip.
* @return whether the name needs to be included in the tooltip
*/
protected boolean nameNeededInToolTip() {
DetailedLabelFigure label = (DetailedLabelFigure)getFigure().getChildren().get(0);
return label.isNameTruncated() || super.nameNeededInToolTip();
}
/**
* @see org.eclipse.gef.editparts.AbstractEditPart#refreshVisuals()
*/
protected void refreshVisuals() {
PaletteEntry entry = getPaletteEntry();
customLabel.setName(entry.getLabel());
customLabel.setDescription(entry.getDescription());
if (getPreferenceSource().useLargeIcons())
setImageDescriptor(entry.getLargeIcon());
else
setImageDescriptor(entry.getSmallIcon());
int layoutMode = getLayoutSetting();
//levin 20080627
if(getModel() instanceof ToolEntry && "ICON_ONLY".equals(((ToolEntry)getModel()).getId()))
layoutMode=PaletteViewerPreferences.LAYOUT_ICONS;
customLabel.setLayoutMode(layoutMode);
if (layoutMode == PaletteViewerPreferences.LAYOUT_COLUMNS) {
customLabel.setBorder(ICON_BORDER);
} else if (layoutMode == PaletteViewerPreferences.LAYOUT_LIST
|| layoutMode == PaletteViewerPreferences.LAYOUT_DETAILS) {
customLabel.setBorder(LIST_BORDER);
} else if (layoutMode == PaletteViewerPreferences.LAYOUT_ICONS
&& !isToolbarItem()) {
customLabel.setBorder(ICON_BORDER);
} else {
customLabel.setBorder(null);
}
super.refreshVisuals();
}
/**
* @see org.eclipse.gef.EditPart#removeNotify()
*/
public void removeNotify() {
if (getButtonModel().isSelected())
getPaletteViewer().setActiveTool(null);
super.removeNotify();
}
public void setToolSelected(boolean value) {
getButtonModel().setSelected(value);
}
public void restoreState(IMemento memento) {
if (new Boolean(memento.getString(ACTIVE_STATE)).booleanValue())
getPaletteViewer().setActiveTool(getToolEntry());
super.restoreState(memento);
}
public void saveState(IMemento memento) {
memento.putString(ACTIVE_STATE, new Boolean(
getPaletteViewer().getActiveTool() == getToolEntry()).toString());
super.saveState(memento);
}
/**
* @see PaletteEditPart#setImageInFigure(Image)
*/
protected void setImageInFigure(Image image) {
DetailedLabelFigure fig = (DetailedLabelFigure)(getFigure().getChildren().get(0));
fig.setImage(image);
}
/**
* @see org.eclipse.gef.EditPart#setSelected(int)
*/
public void setSelected(int value) {
super.setSelected(value);
if (value == SELECTED_PRIMARY
&& getPaletteViewer().getControl() != null
&& !getPaletteViewer().getControl().isDisposed()
&& getPaletteViewer().getControl().isFocusControl())
getFigure().requestFocus();
}
/**
* @see org.eclipse.gef.EditPart#showTargetFeedback(Request)
*/
public void showTargetFeedback(Request request) {
if (RequestConstants.REQ_SELECTION.equals(request.getType()))
getButtonModel().setMouseOver(true);
super.showTargetFeedback(request);
}
static Rectangle getSelectionRectangle(int layoutMode, DetailedLabelFigure labelFigure) {
Rectangle rect = Rectangle.SINGLETON;
rect.setBounds(labelFigure.getBounds());
if (layoutMode == PaletteViewerPreferences.LAYOUT_LIST
|| layoutMode == PaletteViewerPreferences.LAYOUT_DETAILS) {
rect.x += PinnablePaletteStackFigure.ARROW_WIDTH;
rect.width -= PinnablePaletteStackFigure.ARROW_WIDTH;
int newWidth = labelFigure.getPreferredSize().width + 17;
if (newWidth < rect.width) {
rect.width = newWidth;
}
rect.crop(LIST_HIGHLIGHT_INSETS);
} else {
rect.width -= PinnablePaletteStackFigure.ARROW_WIDTH;
rect.crop(ICON_HIGHLIGHT_INSETS);
}
return rect;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?