/* 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.editor.controller.PropertyChange.Location;
import static edu.buffalo.cse.green.editor.controller.PropertyChange.Note;
import static edu.buffalo.cse.green.editor.controller.PropertyChange.Size;
import static edu.buffalo.cse.green.preferences.PreferenceInitializer.P_COLOR_NOTE;
import static edu.buffalo.cse.green.preferences.PreferenceInitializer.P_COLOR_NOTE_BORDER;
import static edu.buffalo.cse.green.preferences.PreferenceInitializer.P_COLOR_NOTE_TEXT;
import static edu.buffalo.cse.green.preferences.PreferenceInitializer.P_FONT;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.LineBorder;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gef.EditPolicy;
import org.eclipse.gef.GraphicalEditPart;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.widgets.Display;
import edu.buffalo.cse.green.PlugIn;
import edu.buffalo.cse.green.editor.action.EditNoteAction;
import edu.buffalo.cse.green.editor.controller.policies.GreenSelectionEditPolicy;
import edu.buffalo.cse.green.editor.model.NoteModel;
import edu.buffalo.cse.green.editor.model.commands.DeleteCommand;
import edu.buffalo.cse.green.editor.model.commands.DeleteNoteCommand;
import edu.buffalo.cse.green.editor.view.INoteFigure;
/**
* @author bcmartin
* @author zgwang
*
* The controller part corresponding to a <code>NoteModel</code>
*/
public class NotePart extends AbstractPart {
/**
* @see edu.buffalo.cse.green.editor.controller.AbstractPart#doCreateFigure()
*/
protected IFigure doCreateFigure() {
INoteFigure label = (INoteFigure) generateFigure();
label.setLocation(model().getLocation());
label.setSize(model().getSize());
label.setText(model().getLabel());
label.setFont(PlugIn.getFontPreference(P_FONT, false));
label.setVisible(true);
return label;
}
/**
* @see org.eclipse.gef.editparts.AbstractEditPart#refreshVisuals()
*/
protected void refreshVisuals() {
updateFont();
Point loc = ((NoteModel) getModel()).getLocation();
Dimension size = ((NoteModel) getModel()).getSize();
Rectangle r = new Rectangle(loc, size);
figure().setText(((NoteModel) getModel()).getLabel());
((GraphicalEditPart) getParent()).setLayoutConstraint(this,
getFigure(), r);
}
/**
* @see org.eclipse.gef.editparts.AbstractEditPart#createEditPolicies()
*/
protected void createEditPolicies() {
super.createEditPolicies();
installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE,
new GreenSelectionEditPolicy());
}
/**
* @see edu.buffalo.cse.green.editor.controller.AbstractPart#getDeleteCommand()
*/
public DeleteCommand getDeleteCommand() {
return new DeleteNoteCommand((NoteModel) getModel());
}
/**
* @see edu.buffalo.cse.green.editor.controller.AbstractPart#addPropertyListeners()
*/
protected void addPropertyListeners() {
addListener(Location, new VisualsUpdater());
addListener(Note, new VisualsUpdater());
addListener(Size, new VisualsUpdater());
}
/**
* @see edu.buffalo.cse.green.editor.controller.AbstractPart#onDoubleClick()
*/
protected void onDoubleClick() {
EditNoteAction action = new EditNoteAction();
action.setSelectionProvider(getEditor());
action.run();
}
/**
* Auxiliary method; makes reading easier.
*/
private INoteFigure figure() {
return (INoteFigure) getFigure();
}
/**
* Auxiliary method; makes reading easier.
*/
private NoteModel model() {
return (NoteModel) getModel();
}
/**
* @see edu.buffalo.cse.green.editor.controller.AbstractPart#updateColors(org.eclipse.draw2d.IFigure)
*/
protected void updateColors(IFigure f) {
f.setBorder(new LineBorder(
PlugIn.getColorPreference(P_COLOR_NOTE_BORDER), 2));
f.setBackgroundColor(PlugIn.getColorPreference(P_COLOR_NOTE));
f.setForegroundColor(PlugIn.getColorPreference(P_COLOR_NOTE_TEXT));
}
/**
* @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#setInitialBackgroundColor()
*/
public void setInitialBackgroundColor() {
getFigure().setBackgroundColor(PlugIn.getColorPreference(P_COLOR_NOTE));
}
}