// ============================================================================ // // Copyright (C) 2006-2012 Talend Inc. - www.talend.com // // This source code is available under agreement available at // %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt // // You should have received a copy of the agreement // along with this program; if not, write to Talend SA // 9 rue Pages 92150 Suresnes, France // // ============================================================================ package org.talend.designer.core.ui.editor.notes; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.PositionConstants; import org.eclipse.gef.EditPolicy; import org.eclipse.gef.Request; import org.eclipse.gef.RequestConstants; import org.eclipse.gef.commands.Command; import org.eclipse.gef.commands.CommandStack; import org.eclipse.gef.editparts.AbstractGraphicalEditPart; import org.eclipse.gef.tools.DirectEditManager; import org.eclipse.jface.viewers.TextCellEditor; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PlatformUI; import org.talend.core.model.utils.TalendTextUtils; import org.talend.designer.core.model.components.EParameterName; import org.talend.designer.core.ui.AbstractMultiPageTalendEditor; import org.talend.designer.core.ui.editor.cmd.ChangeNoteOpacityCommand; import org.talend.designer.core.ui.views.properties.ComponentSettingsView; /** */ public class NoteEditPart extends AbstractGraphicalEditPart implements PropertyChangeListener { private DirectEditManager directEditManager; @Override protected void unregisterVisuals() { ((NoteFigure) getFigure()).disposeColors(); this.disposeColors(); super.unregisterVisuals(); } private void disposeColors() { if (this.foreColor != null && !this.foreColor.isDisposed()) foreColor.dispose(); if (this.backColor != null && !this.backColor.isDisposed()) backColor.dispose(); if (this.labelColor != null && !this.labelColor.isDisposed()) labelColor.dispose(); } @Override protected IFigure createFigure() { return new NoteFigure(); } /* * (non-Javadoc) * * @see org.eclipse.gef.editparts.AbstractEditPart#setSelected(int) */ @Override public void setSelected(int value) { super.setSelected(value); if (value == SELECTED_PRIMARY) { ComponentSettingsView viewer = (ComponentSettingsView) PlatformUI.getWorkbench().getActiveWorkbenchWindow() .getActivePage().findView(ComponentSettingsView.ID); if (viewer != null) { viewer.setElement((Note) getModel()); } } else if (value == SELECTED_NONE) { ComponentSettingsView viewer = (ComponentSettingsView) PlatformUI.getWorkbench().getActiveWorkbenchWindow() .getActivePage().findView(ComponentSettingsView.ID); if (viewer == null) { return; } ComponentSettingsView compSettings = (ComponentSettingsView) viewer; compSettings.cleanDisplay(); } } @Override protected void createEditPolicies() { installEditPolicy(EditPolicy.GRAPHICAL_NODE_ROLE, new NoteGraphicalEditPolicy()); installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, new NoteDirectEditPolicy()); installEditPolicy(EditPolicy.COMPONENT_ROLE, new NoteEditPolicy()); installEditPolicy(EditPolicy.LAYOUT_ROLE, new NoteResizableEditPolicy()); } Color foreColor = null; Color backColor = null; Color labelColor = null; @Override protected void refreshVisuals() { Note note = (Note) getModel(); NoteFigure noteFigure = ((NoteFigure) getFigure()); noteFigure.disposeColors(); this.disposeColors(); noteFigure.setLocation(note.getLocation()); noteFigure.setSize(note.getSize()); noteFigure.setText(note.getText()); noteFigure.setOpaque(note.isOpaque()); foreColor = new Color(null, TalendTextUtils.stringToRGB((String) note.getPropertyValue(EParameterName.NOTE_LINECOLOR .getName()))); backColor = new Color(null, TalendTextUtils.stringToRGB((String) note.getPropertyValue(EParameterName.NOTE_COLOR .getName()))); labelColor = new Color(null, TalendTextUtils.stringToRGB((String) note.getPropertyValue(EParameterName.NOTETXT_COLOR .getName()))); noteFigure.setBackgroundColor(backColor); noteFigure.setForegroundColor(foreColor); noteFigure.getLabel().setForegroundColor(labelColor); if ((Boolean) note.getPropertyValue(EParameterName.NOTETXT_LEFT.getName())) { noteFigure.getLabel().setLabelAlignment(PositionConstants.LEFT); } if ((Boolean) note.getPropertyValue(EParameterName.NOTETXT_RIGHT.getName())) { noteFigure.getLabel().setLabelAlignment(PositionConstants.RIGHT); } if ((Boolean) note.getPropertyValue(EParameterName.NOTETXT_CENTER.getName())) { noteFigure.getLabel().setLabelAlignment(PositionConstants.CENTER); } if ((Boolean) note.getPropertyValue(EParameterName.NOTETXT_TOP.getName())) { noteFigure.getLabel().setTextAlignment(PositionConstants.TOP); } if ((Boolean) note.getPropertyValue(EParameterName.NOTETXT_BOTTOM.getName())) { noteFigure.getLabel().setTextAlignment(PositionConstants.BOTTOM); } if ((Boolean) note.getPropertyValue(EParameterName.NOTELABEL_CENTER.getName())) { noteFigure.getLabel().setTextAlignment(PositionConstants.CENTER); } if ((Boolean) note.getPropertyValue(EParameterName.FONT_BOLD.getName()) && (Boolean) note.getPropertyValue(EParameterName.FONT_ITALIC.getName())) { Font font = new Font(null, (String) note.getPropertyValue(EParameterName.NOTE_FONT.getName()), Integer.parseInt(note .getPropertyValue(EParameterName.FONT_SIZE.getName()).toString()), SWT.BOLD | SWT.ITALIC); noteFigure.getLabel().setFont(font); } else if ((Boolean) note.getPropertyValue(EParameterName.FONT_BOLD.getName())) { Font font = new Font(null, (String) note.getPropertyValue(EParameterName.NOTE_FONT.getName()), Integer.parseInt(note .getPropertyValue(EParameterName.FONT_SIZE.getName()).toString()), SWT.BOLD); noteFigure.getLabel().setFont(font); } else if ((Boolean) note.getPropertyValue(EParameterName.FONT_ITALIC.getName())) { Font font = new Font(null, (String) note.getPropertyValue(EParameterName.NOTE_FONT.getName()), Integer.parseInt(note .getPropertyValue(EParameterName.FONT_SIZE.getName()).toString()), SWT.ITALIC); noteFigure.getLabel().setFont(font); } else { Font font = new Font(null, (String) note.getPropertyValue(EParameterName.NOTE_FONT.getName()), Integer.parseInt(note .getPropertyValue(EParameterName.FONT_SIZE.getName()).toString()), SWT.NULL); noteFigure.getLabel().setFont(font); } } @Override public void activate() { if (!isActive()) { super.activate(); ((Note) getModel()).addPropertyChangeListener(this); } } @Override public void deactivate() { if (isActive()) { super.deactivate(); ((Note) getModel()).removePropertyChangeListener(this); directEditManager = null; } } public void propertyChange(final PropertyChangeEvent changeEvent) { refresh(); } @Override public void performRequest(Request request) { Note note = (Note) getModel(); if (note.isReadOnly()) { return; } if (request.getType() == RequestConstants.REQ_OPEN) { IWorkbenchPart part = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor(); if (part instanceof AbstractMultiPageTalendEditor) { CommandStack commandStack = (CommandStack) part.getAdapter(CommandStack.class); Command command = new ChangeNoteOpacityCommand(note, !note.isOpaque()); commandStack.execute(command); } } if (request.getType() == RequestConstants.REQ_DIRECT_EDIT) { if (directEditManager == null) { NoteFigure noteFigure = (NoteFigure) getFigure(); directEditManager = new NoteDirectEditManager(this, TextCellEditor.class, new NoteCellEditorLocator(noteFigure)); } directEditManager.show(); } } /** * yzhang Comment method "getNoteDirectEditManager". * * @return */ public NoteDirectEditManager getDirectEditManager() { return (NoteDirectEditManager) directEditManager; } }