/****************************************************************************** * Copyright (c) 2004, 2006 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.properties.sections.appearance; import java.util.ArrayList; import java.util.Iterator; import org.eclipse.emf.ecore.ENamedElement; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.gef.editparts.AbstractEditPart; import org.eclipse.gmf.runtime.diagram.ui.editparts.ConnectionNodeEditPart; import org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart; import org.eclipse.gmf.runtime.diagram.ui.properties.sections.AbstractNotationPropertiesSection; import org.eclipse.gmf.runtime.emf.core.util.PackageUtil; import org.eclipse.gmf.runtime.notation.View; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CLabel; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.FormAttachment; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage; /** * @author dlander */ public abstract class AbstractLabeledCheckboxPropertySection extends AbstractNotationPropertiesSection { // Abstract methods to provide us with basic data. // Command info. Visible to user in undo/redo public abstract String getCommandName(); // Label string positioned left of control public abstract String getPrefixLabel(); // ID to use in communicating with model public abstract String getNameLabel(); // List of entries to populate with public abstract String getID(); // Controls private Button checkbox; private CLabel leftLabel; /** * @see org.eclipse.gmf.runtime.common.ui.properties.view.ITabbedPropertySection#refresh() */ public void refresh() { try { executeAsReadAction(new Runnable() { public void run() { // Update display from model if (getSingleInput() instanceof GraphicalEditPart) { GraphicalEditPart ep = (GraphicalEditPart) getSingleInput(); ENamedElement element = PackageUtil.getElement(getID()); if (element instanceof EStructuralFeature){ checkbox.setSelection(((Boolean)ep .getStructuralFeatureValue((EStructuralFeature)element)).booleanValue()); } } else if (getSingleInput() instanceof ConnectionNodeEditPart) { ENamedElement element = PackageUtil.getElement(getID()); ConnectionNodeEditPart ep = (ConnectionNodeEditPart) getSingleInput(); if (element instanceof EStructuralFeature){ checkbox.setSelection(((Boolean) ep .getStructuralFeatureValue((EStructuralFeature)element)).booleanValue()); } } } }); } catch (Exception e) { e.printStackTrace(); } finally { //blank } } /** * @see org.eclipse.gmf.runtime.common.ui.properties.ISection#createControls(org.eclipse.swt.widgets.Composite, * org.eclipse.gmf.runtime.common.ui.properties.TabbedPropertySheetPage) */ public void createControls(Composite parent, TabbedPropertySheetPage aTabbedPropertySheetPage) { super.createControls(parent, aTabbedPropertySheetPage); FormData data; // Create checkbox checkbox = getWidgetFactory().createButton(composite, getNameLabel(), SWT.CHECK); data = new FormData(); data.left = new FormAttachment(0, getStandardLabelWidth(parent)); data.top = new FormAttachment(0, 0); checkbox.setLayoutData(data); checkbox.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { if (isReadOnly()) { refresh(); return; } ArrayList commands = new ArrayList(); Iterator it = getInput().iterator(); while (it.hasNext()) { final AbstractEditPart aep = (AbstractEditPart) it.next(); Resource res = ((View)aep.getModel()).eResource(); commands.add(createCommand(getCommandName(), res, new Runnable() { public void run() { if (aep instanceof GraphicalEditPart) { GraphicalEditPart ep = (GraphicalEditPart) aep; ENamedElement element = PackageUtil.getElement(getID()); if (element instanceof EStructuralFeature) ep.setStructuralFeatureValue((EStructuralFeature)element, Boolean.valueOf( checkbox.getSelection())); } else if (aep instanceof ConnectionNodeEditPart) { ConnectionNodeEditPart ep = (ConnectionNodeEditPart) aep; ENamedElement element = PackageUtil.getElement(getID()); if (element instanceof EStructuralFeature) ep.setStructuralFeatureValue((EStructuralFeature)element, Boolean.valueOf( checkbox.getSelection())); } } })); } executeAsCompositeCommand(getCommandName(), commands); } }); // Create label leftLabel = getWidgetFactory() .createCLabel(composite, getPrefixLabel()); data = new FormData(); data.left = new FormAttachment(0, 0); data.top = new FormAttachment(checkbox, 0, SWT.CENTER); leftLabel.setLayoutData(data); } }