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 + -
显示快捷键?