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