blob: 74b6bf793bc8351749deaa076f839a7163d36445 [file] [log] [blame]
/******************************************************************************
* 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);
}
}