package org.archstudio.archipelago2;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
import org.archstudio.bna.BNACanvas;
import org.archstudio.bna.IBNAWorld;
import org.archstudio.bna.things.utility.GridThing;
import org.archstudio.bna.ui.IBNAUI;
import org.archstudio.bna.utils.BNARenderingSettings;
import org.archstudio.bna.utils.BNAUtils;
import org.archstudio.sysutils.Finally;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
/**
* The Archipelago editor for statecharts, as defined by the {@link Statechart} xADL type.
*
* @author sahendrickson@gmail.com (Scott A. Hendrickson)
*/
public abstract class AbstractArchipelago2BnaEditor extends AbstractArchipelago2Editor
implements IPropertyChangeListener {
/** The BNA world used for the editor. */
protected IBNAWorld bnaWorld;
/** The BNA canvas backing the editor. */
protected BNACanvas bnaCanvas;
public AbstractArchipelago2BnaEditor() {
super();
Archipelago2Utils
.weakListenToPropertyChanges(Archipelago2Preferences.getActivatorPreferenceStore(), this);
}
@Override
public void setFocus(List<Object> elementPath) {
Archipelago2Utils.focusOnObjRef(bnaCanvas.getBNAView(), elementPath);
}
@Override
public void propertyChange(PropertyChangeEvent event) {
if (bnaCanvas == null || bnaCanvas.isDisposed()) {
return;
}
try (Finally lock = BNAUtils.lock()) {
BNARenderingSettings.setAntialiasGraphics(bnaCanvas,
Archipelago2Preferences.getAntialiasGraphics());
BNARenderingSettings.setAntialiasText(bnaCanvas, Archipelago2Preferences.getAntialiasText());
BNARenderingSettings.setDecorativeGraphics(bnaCanvas,
Archipelago2Preferences.getDecorativeGraphics());
BNARenderingSettings.setDisplayShadows(bnaCanvas,
Archipelago2Preferences.getDisplayShadows());
GridThing gridThing = (GridThing) bnaWorld.getBNAModel().getThing(GridThing.class);
if (gridThing != null) {
gridThing.setGridSpacing(Archipelago2Preferences.getGridSpacing());
gridThing.setGridDisplayType(Archipelago2Preferences.getGridDisplayType());
}
IBNAUI.AvailableUI availableUI = Archipelago2Preferences.getBNAUI();
IBNAUI bnaUI = (IBNAUI) availableUI.getBNAUIClass().getConstructors()[0]
.newInstance(bnaCanvas.getBNAView());
bnaCanvas.setBNAUI(bnaUI);
} catch (InvocationTargetException | IllegalAccessException | InstantiationException e) {
e.printStackTrace();
} finally {
bnaCanvas.redraw();
}
}
}