/* This file is part of Green. * * Copyright (C) 2005 The Research Foundation of State University of New York * All Rights Under Copyright Reserved, The Research Foundation of S.U.N.Y. * * Green is free software, licensed under the terms of the Eclipse * Public License, version 1.0. The license is available at * http://www.eclipse.org/legal/epl-v10.html */ package edu.buffalo.cse.green.editor.controller; import static edu.buffalo.cse.green.preferences.PreferenceInitializer.P_COLOR_TYPE_TEXT; import static edu.buffalo.cse.green.preferences.PreferenceInitializer.P_FONT; import org.eclipse.draw2d.IFigure; import org.eclipse.gef.EditPolicy; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.core.dom.MethodDeclaration; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.widgets.Display; import edu.buffalo.cse.green.PlugIn; import edu.buffalo.cse.green.editor.controller.policies.GreenSelectionEditPolicy; import edu.buffalo.cse.green.editor.model.AbstractModel; import edu.buffalo.cse.green.editor.model.MethodModel; import edu.buffalo.cse.green.editor.model.TypeModel; import edu.buffalo.cse.green.editor.model.commands.DeleteCommand; import edu.buffalo.cse.green.editor.model.commands.DeleteMethodCommand; import edu.buffalo.cse.green.editor.view.IIconHolder; /** * The controller part that corresponds to a <code>MethodModel</code>. * * @author bcmartin */ public class MethodPart extends MemberPart { /** * @see edu.buffalo.cse.green.editor.controller.AbstractPart#doCreateFigure() */ protected IFigure doCreateFigure() { IIconHolder f = (IIconHolder) generateFigure(); f.setText(model().getDisplayName()); f.setIcon(model().getIcon()); f.setFont(PlugIn.getFontPreference(P_FONT, false)); // map the model to its appropriate type EditPart RootPart root = (RootPart) getRootPart(); root.mapModelToEditPart((AbstractModel) getModel(), this); f.setOpaque(true); return f; } /** * @see edu.buffalo.cse.green.editor.controller.MemberPart#getLabel() */ protected IIconHolder getNameLabel() { return figure(); } /** * @see org.eclipse.gef.editparts.AbstractEditPart#createEditPolicies() */ protected void createEditPolicies() { super.createEditPolicies(); installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, new GreenSelectionEditPolicy()); } /** * @see org.eclipse.gef.editparts.AbstractEditPart#refreshVisuals() */ protected void refreshVisuals() { super.refreshVisuals(figure()); if (figure() != null) figure().setText(model().getDisplayName()); } /** * @see edu.buffalo.cse.green.editor.controller.AbstractPart#getDeleteCommand() */ public DeleteCommand getDeleteCommand() { return new DeleteMethodCommand((MethodModel) getModel()); } /** * @see edu.buffalo.cse.green.editor.controller.FieldPart#updateIcon() */ public void updateIcon() { super.updateIcon(figure()); } /** * @see edu.buffalo.cse.green.editor.controller.AbstractPart#onDoubleClick() */ protected void onDoubleClick() { getOpenElementAction().run(); } /** * Updates the font used in the label. */ public void updateFont() { if (Display.getCurrent() != null) { updateFontHelper(); } else { Display.getDefault().asyncExec(new Runnable() { /** * @see java.lang.Runnable#run() */ public void run() { updateFontHelper(); } }); } } /** * edu.buffalo.cse.green.editor.controller.MethodPart#updateFont(final MethodModel model) */ private void updateFontHelper() { try { // get rid of the old font Font font = getFigure().getFont(); font.dispose(); // create the new font TypeModel typeModel = (TypeModel) model().getParent().getParent(); boolean italic = (model().isAbstract() && !typeModel.isInterface()); getFigure().setFont(PlugIn.getFontPreference(P_FONT, italic)); } catch (JavaModelException e) { e.printStackTrace(); } } /** * Auxiliary method; makes reading easier. */ private MethodModel model() { return (MethodModel) getModel(); } /** * Auxiliary method; makes reading easier. */ private IIconHolder figure() { return (IIconHolder) getFigure(); } /** * @see edu.buffalo.cse.green.editor.controller.AbstractPart#updateColors(org.eclipse.draw2d.IFigure) */ protected void updateColors(IFigure f) { f.setForegroundColor(PlugIn.getColorPreference(P_COLOR_TYPE_TEXT)); } /** * @see edu.buffalo.cse.green.editor.controller.MemberPart#updateLabel() */ public void updateLabel() { repaintLabel(figure()); } /** * @see edu.buffalo.cse.green.editor.controller.MemberPart#getJavadocGrabber() */ protected JavadocGrabber getJavadocGrabber() { return new JavadocGrabber() { private boolean _alive = true; /** * @see org.eclipse.jdt.core.dom.ASTVisitor#endVisit(org.eclipse.jdt.core.dom.FieldDeclaration) */ public boolean visit(MethodDeclaration node) { if (!_alive) return false; if (compareElements(node.resolveBinding().getJavaElement())) { _alive = false; _doc = getDoc(node.getJavadoc()); } return _alive; } }; } }