/* 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 java.util.AbstractList; import java.util.List; import org.eclipse.draw2d.IFigure; import org.eclipse.gef.EditPolicy; import org.eclipse.jdt.core.dom.FieldDeclaration; import org.eclipse.jdt.core.dom.VariableDeclarationFragment; 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.FieldModel; import edu.buffalo.cse.green.editor.model.commands.DeleteCommand; import edu.buffalo.cse.green.editor.model.commands.DeleteFieldCommand; import edu.buffalo.cse.green.editor.view.IIconHolder; /** * The controller part that corresponds to a <code>FieldModel</code>. * * @author bcmartin */ public class FieldPart extends MemberPart { /** * @see edu.buffalo.cse.green.editor.controller.AbstractPart#doCreateFigure() */ protected IFigure doCreateFigure() { IIconHolder iFigure = (IIconHolder) generateFigure(); iFigure.setText(model().getDisplayName()); iFigure.setIcon(model().getIcon()); iFigure.setFont(PlugIn.getFontPreference(P_FONT, false)); // map the model to its appropriate type EditPart RootPart root = (RootPart) getRootPart(); root.mapModelToEditPart(model(), this); iFigure.setOpaque(true); return iFigure; } /** * @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()); figure().setText(model().getDisplayName()); } /** * @see edu.buffalo.cse.green.editor.controller.AbstractPart#getDeleteCommand() */ public DeleteCommand getDeleteCommand() { return new DeleteFieldCommand(model()); } /** * @see edu.buffalo.cse.green.editor.controller.MemberPart#updateIcon() */ public void updateIcon() { super.updateIcon(figure()); } /** * @see edu.buffalo.cse.green.editor.controller.AbstractPart#onDoubleClick() */ protected void onDoubleClick() { getOpenElementAction().run(); } /** * Auxiliary method; makes reading easier. */ private FieldModel model() { return (FieldModel) getModel(); } /** * Auxiliary method; makes reading easier. */ private IIconHolder figure() { return (IIconHolder) getFigure(); } /** * @see edu.buffalo.cse.green.editor.controller.MemberPart#updateFont() */ public void updateFont() { if (Display.getCurrent() != null) { updateFontHelper(); } else { Display.getDefault().asyncExec(new Runnable() { /** * @see java.lang.Runnable#run() */ public void run() { updateFontHelper(); } }); } } /** * Gets rid of the old font, installing a fresh one. */ private void updateFontHelper() { // get rid of the old font Font font = figure().getFont(); font.dispose(); // create the new font figure().setFont(PlugIn.getFontPreference(P_FONT, false)); } /** * @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#getLabel() */ protected IIconHolder getNameLabel() { return 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(FieldDeclaration node) { if (!_alive) return false; for (VariableDeclarationFragment vdf : (AbstractList<VariableDeclarationFragment>) (List) node.fragments()) { if (compareElements( vdf.resolveBinding().getJavaElement())) { _alive = false; _doc = getDoc(node.getJavadoc()); break; } } return _alive; } }; } }