/******************************************************************************* | |
* <copyright> | |
* | |
* Copyright (c) 2013, 2013 SAP AG. | |
* 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: | |
* SAP AG - initial API, implementation and documentation | |
* | |
* </copyright> | |
* | |
*******************************************************************************/ | |
package org.eclipse.fmc.blockdiagram.editor.property; | |
import java.util.Iterator; | |
import org.eclipse.fmc.blockdiagram.editor.algorithm.node.FMCNodeAlgorithm; | |
import org.eclipse.fmc.blockdiagram.editor.algorithm.node.FMCNodeAlgorithmFactory; | |
import org.eclipse.graphiti.mm.pictograms.Diagram; | |
import org.eclipse.graphiti.mm.pictograms.PictogramElement; | |
import org.eclipse.graphiti.mm.pictograms.Shape; | |
import org.eclipse.swt.SWT; | |
import org.eclipse.swt.events.ModifyEvent; | |
import org.eclipse.swt.events.ModifyListener; | |
import org.eclipse.swt.events.SelectionEvent; | |
import org.eclipse.swt.events.SelectionListener; | |
import org.eclipse.swt.layout.GridLayout; | |
import org.eclipse.swt.widgets.Button; | |
import org.eclipse.swt.widgets.Composite; | |
import org.eclipse.swt.widgets.Spinner; | |
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage; | |
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory; | |
/** | |
* This property section shows actions and properties when the diagram is | |
* selected in the editor. | |
* | |
* @author Benjamin Schmeling | |
* | |
*/ | |
public class DiagramPropertySection extends FMCPropertySection { | |
private FMCNodeAlgorithmFactory factory = FMCNodeAlgorithmFactory | |
.getInstance(); | |
private Spinner gridUnit; | |
private Button anchorsVisible; | |
private Button anchorsEnabled; | |
/** | |
* Getter for anchorsVisible | |
* | |
* @return anchorsVisible button | |
*/ | |
Button getAnchorsVisible() { | |
return anchorsVisible; | |
} | |
@Override | |
/* | |
* (non-Javadoc) | |
* | |
* @see | |
* org.eclipse.ui.views.properties.tabbed.AbstractPropertySection#createControls | |
* (org.eclipse.swt.widgets.Composite, | |
* org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage) | |
*/ | |
public void createControls(Composite parent, | |
TabbedPropertySheetPage aTabbedPropertySheetPage) { | |
super.createControls(parent, aTabbedPropertySheetPage); | |
TabbedPropertySheetWidgetFactory fac = getWidgetFactory(); | |
comp = fac.createComposite(parent, SWT.NONE); | |
comp.setLayout(new GridLayout(2, false)); | |
createDiagramControls(fac); | |
refresh(); | |
} | |
/** | |
* | |
* @param fac | |
*/ | |
protected void createGridUnit(TabbedPropertySheetWidgetFactory fac) { | |
fac.createLabel(comp, "GridUnit:"); | |
gridUnit = new Spinner(comp, SWT.BORDER); | |
gridUnit.addModifyListener(new ModifyListener() { | |
@Override | |
public void modifyText(final ModifyEvent e) { | |
int unit = ((Spinner) e.getSource()).getSelection(); | |
PictogramElement el = getSingleInput(); | |
if (el != null && el instanceof Diagram) { | |
Diagram diagram = (Diagram) el; | |
if (unit != diagram.getGridUnit()) | |
getActions().changeGridUnit(diagram, unit); | |
} | |
} | |
}); | |
} | |
/** | |
* | |
* @param fac | |
*/ | |
protected void createAnchorsVisible(TabbedPropertySheetWidgetFactory fac) { | |
fac.createLabel(comp, "Anchors visible:"); | |
anchorsVisible = new Button(comp, SWT.CHECK); | |
anchorsVisible.addSelectionListener(new SelectionListener() { | |
@Override | |
public void widgetSelected(SelectionEvent e) { | |
getActions().visualizeAnchors(getDiagram(), | |
anchorsVisible.getSelection()); | |
} | |
@Override | |
public void widgetDefaultSelected(SelectionEvent e) { | |
} | |
}); | |
} | |
/** | |
* | |
* @param fac | |
*/ | |
protected void createAnchorsEnabled(TabbedPropertySheetWidgetFactory fac) { | |
fac.createLabel(comp, "Anchors enabled:"); | |
anchorsEnabled = new Button(comp, SWT.CHECK); | |
anchorsEnabled.addSelectionListener(new SelectionListener() { | |
@Override | |
public void widgetSelected(SelectionEvent e) { | |
getActions().enableAnchors(getDiagram(), | |
anchorsEnabled.getSelection()); | |
if (anchorsEnabled.getSelection() | |
&& anchorsVisible.getSelection()) | |
getActions().visualizeAnchors(getDiagram(), | |
anchorsVisible.getSelection()); | |
} | |
@Override | |
public void widgetDefaultSelected(SelectionEvent e) { | |
} | |
}); | |
} | |
/** | |
* Creates all controls for this property section. | |
* | |
* @param fac | |
*/ | |
protected void createDiagramControls(TabbedPropertySheetWidgetFactory fac) { | |
// Canot be changed until diagram is reopened | |
// createGridUnit(fac); | |
createAnchorsVisible(fac); | |
createAnchorsEnabled(fac); | |
} | |
@Override | |
/* | |
* (non-Javadoc) | |
* | |
* @see | |
* org.eclipse.ui.views.properties.tabbed.AbstractPropertySection#refresh() | |
*/ | |
public void refresh() { | |
super.refresh(); | |
boolean visible = false; | |
boolean enabled = false; | |
if (getSingleInput() instanceof Diagram) { | |
Diagram diag = (Diagram) getSingleInput(); | |
for (Iterator<Shape> iterator = diag.getChildren().iterator(); !visible | |
&& iterator.hasNext();) { | |
Shape shape = iterator.next(); | |
FMCNodeAlgorithm nodeAlgorithm = factory.getShape(shape); | |
if (nodeAlgorithm != null) { | |
if (nodeAlgorithm.isBoxAnchorsVisible(shape)) | |
visible = true; | |
if (nodeAlgorithm.hasUnusedAnchors(shape)) | |
enabled = true; | |
} | |
} | |
anchorsVisible.setSelection(visible); | |
anchorsEnabled.setSelection(enabled); | |
} | |
// gridUnit.setSelection(getDiagram().getGridUnit()); | |
} | |
} |