blob: f5281170734ed8bc9f21d2046fc05619901647f1 [file] [log] [blame]
/******************************************************************************
* Copyright (c) 2002, 2007 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
****************************************************************************/
package org.eclipse.gmf.runtime.diagram.ui.actions.internal;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.commands.CompoundCommand;
import org.eclipse.gmf.runtime.diagram.ui.actions.ActionIds;
import org.eclipse.gmf.runtime.diagram.ui.actions.internal.l10n.DiagramUIActionsMessages;
import org.eclipse.gmf.runtime.diagram.ui.actions.internal.l10n.DiagramUIActionsPluginImages;
import org.eclipse.gmf.runtime.diagram.ui.editparts.GroupEditPart;
import org.eclipse.gmf.runtime.diagram.ui.internal.actions.PropertyChangeAction;
import org.eclipse.gmf.runtime.diagram.ui.internal.properties.Properties;
import org.eclipse.gmf.runtime.diagram.ui.requests.ChangePropertyValueRequest;
import org.eclipse.gmf.runtime.draw2d.ui.figures.FigureUtilities;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.FontDialog;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IWorkbenchPage;
/**
* @author melaasar
* @canBeSeenBy %level1
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
public class FontDialogAction extends PropertyChangeAction {
/**
* @param workbenchPage
* @param propertyId
* @param propertyName
*/
public FontDialogAction(IWorkbenchPage workbenchPage) {
super(workbenchPage, Properties.ID_FONTCOLOR,
DiagramUIActionsMessages.PropertyDescriptorFactory_Font);
setId(ActionIds.ACTION_FONT_DIALOG);
setText(DiagramUIActionsMessages.FontAction_text);
setToolTipText(DiagramUIActionsMessages.FontAction_tooltip);
setImageDescriptor(DiagramUIActionsPluginImages.DESC_FONT_COLOR);
}
/**
* @see org.eclipse.gmf.runtime.diagram.ui.internal.actions.PropertyChangeAction#getNewPropertyValue()
*/
protected Object getNewPropertyValue() {
return null;
}
/**
* @see org.eclipse.gmf.runtime.common.ui.action.AbstractActionHandler#doRun(org.eclipse.core.runtime.IProgressMonitor)
*/
protected void doRun(IProgressMonitor progressMonitor) {
String name = (String) getOperationSetPropertyValue(Properties.ID_FONTNAME);
Integer height = (Integer) getOperationSetPropertyValue(Properties.ID_FONTSIZE);
Boolean bold = (Boolean) getOperationSetPropertyValue(Properties.ID_FONTBOLD);
Boolean italic = (Boolean) getOperationSetPropertyValue(Properties.ID_FONTITALIC);
int style = (bold.booleanValue()? SWT.BOLD : SWT.NORMAL) | (italic.booleanValue()? SWT.ITALIC : SWT.NORMAL);
FontData initFontData = new FontData(name, height.intValue(), style);
Integer color = (Integer) getOperationSetPropertyValue(Properties.ID_FONTCOLOR);
RGB initFontColor = FigureUtilities.integerToRGB(color);
Shell shell = getDiagramGraphicalViewer().getControl().getShell();
FontDialog fontDialog = new FontDialog(shell);
fontDialog.setFontList(new FontData[] {initFontData});
fontDialog.setRGB(initFontColor);
FontData fData = fontDialog.open();
RGB fColor = fontDialog.getRGB();
if (fData != null && fColor != null) {
CompoundCommand cc = new CompoundCommand(DiagramUIActionsMessages.PropertyDescriptorFactory_Font);
cc.add(getCommand(new ChangePropertyValueRequest(Properties.ID_FONTNAME, Properties.ID_FONTNAME, fData.getName())));
cc.add(getCommand(new ChangePropertyValueRequest(Properties.ID_FONTSIZE, Properties.ID_FONTSIZE, new Integer(fData.getHeight()))));
cc.add(getCommand(new ChangePropertyValueRequest(Properties.ID_FONTBOLD, Properties.ID_FONTBOLD, Boolean.valueOf((fData.getStyle() & SWT.BOLD) != 0))));
cc.add(getCommand(new ChangePropertyValueRequest(Properties.ID_FONTITALIC, Properties.ID_FONTITALIC, Boolean.valueOf((fData.getStyle() & SWT.ITALIC) != 0))));
cc.add(getCommand(new ChangePropertyValueRequest(Properties.ID_FONTCOLOR, Properties.ID_FONTCOLOR, FigureUtilities.RGBToInteger(fColor))));
execute(cc, progressMonitor);
}
}
protected List getTargetEditParts(EditPart editpart) {
if (editpart instanceof GroupEditPart) {
List targetedEPs = new ArrayList();
for (Iterator iter = ((GroupEditPart) editpart)
.getFlattenedChildren().iterator(); iter.hasNext();) {
EditPart childEP = (EditPart) iter.next();
targetedEPs.addAll(getTargetEditParts(childEP));
}
return targetedEPs;
} else {
return super.getTargetEditParts(editpart);
}
}
}