package org.goko.tools.viewer.jogl.preferences.rotaryaxis;
import javax.inject.Inject;
import org.eclipse.e4.core.di.extensions.Preference;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.goko.common.GkUiUtils;
import org.goko.common.preferences.GkFieldEditorPreferencesPage;
import org.goko.common.preferences.fieldeditor.preference.BooleanFieldEditor;
import org.goko.common.preferences.fieldeditor.preference.ComboFieldEditor;
import org.goko.common.preferences.fieldeditor.preference.quantity.LengthFieldEditor;
import org.goko.core.common.exception.GkException;
import org.goko.core.common.measure.quantity.Length;
import org.goko.core.common.measure.units.Unit;
import org.goko.core.config.GokoPreference;
import org.goko.tools.viewer.jogl.preferences.JoglViewerPreference;
import org.goko.tools.viewer.jogl.preferences.JoglViewerPreference.EnumRotaryAxisDirection;
public class JoglRotaryAxisPreferencePage extends GkFieldEditorPreferencesPage{
private BooleanFieldEditor booleanFieldEditor;
private Group grpSettings;
private LengthFieldEditor xPositionField;
private LengthFieldEditor yPositionField;
private LengthFieldEditor zPositionField;
public JoglRotaryAxisPreferencePage() {
setTitle("4th axis");
setDescription("Configure the 4th axis display");
setPreferenceStore(JoglViewerPreference.getInstance());
}
/** (inheritDoc)
* @see org.goko.common.preferences.GkPreferencesPage#propertyChangle(org.eclipse.jface.util.PropertyChangeEvent)
*/
@Override
public void propertyChange(PropertyChangeEvent event) {
super.propertyChange(event);
GkUiUtils.setEnabled(grpSettings, booleanFieldEditor.getControl().getSelection());
}
/** (inheritDoc)
* @see org.goko.common.preferences.GkPreferencesPage#createPreferencePage(org.eclipse.swt.widgets.Composite)
*/
@Override
protected void createPreferencePage(Composite parent) throws GkException {
booleanFieldEditor = new BooleanFieldEditor(parent, SWT.NONE);
booleanFieldEditor.setPreferenceName("rotaryAxisEnabled");
booleanFieldEditor.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1));
booleanFieldEditor.setLabel("Enable rotary axis display");
booleanFieldEditor.setPropertyChangeListener(this);
grpSettings = new Group(parent, SWT.NONE);
grpSettings.setText("Settings");
grpSettings.setLayout(new GridLayout(1, false));
grpSettings.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
ComboFieldEditor comboFieldEditor = new ComboFieldEditor(grpSettings, SWT.READ_ONLY);
comboFieldEditor.setPreferenceName("rotaryAxisDirection");
String[][] axisDirection = new String[][]{{ "X Axis", EnumRotaryAxisDirection.X.toString()},
{"Y Axis", EnumRotaryAxisDirection.Y.toString()},
{"Z Axis", EnumRotaryAxisDirection.Z.toString()}};
comboFieldEditor.setLabelWidthInChar(16);
comboFieldEditor.setLabel("Rotary axis direction");
comboFieldEditor.setEntry(axisDirection);
Composite composite = new Composite(grpSettings, SWT.NONE);
GridLayout gl_composite = new GridLayout(2, false);
gl_composite.verticalSpacing = 0;
gl_composite.marginWidth = 0;
gl_composite.marginHeight = 0;
composite.setLayout(gl_composite);
composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
Label lblNewLabel = new Label(composite, SWT.NONE);
lblNewLabel.setText("Rotary axis position");
xPositionField = new LengthFieldEditor(composite, SWT.NONE);
xPositionField.setPreferenceName("rotaryAxisPositionX");
xPositionField.setWidthInChars(6);
xPositionField.setLabel("X");
new Label(composite, SWT.NONE);
yPositionField = new LengthFieldEditor(composite, SWT.NONE);
yPositionField.setPreferenceName("rotaryAxisPositionY");
yPositionField.setWidthInChars(6);
yPositionField.setLabel("Y");
new Label(composite, SWT.NONE);
zPositionField = new LengthFieldEditor(composite, SWT.NONE);
zPositionField.setPreferenceName("rotaryAxisPositionZ");
zPositionField.setWidthInChars(6);
zPositionField.setLabel("Z");
Unit<Length> lengthUnit = GokoPreference.getInstance().getLengthUnit();
xPositionField.setUnit(lengthUnit);
yPositionField.setUnit(lengthUnit);
zPositionField.setUnit(lengthUnit);
addField(comboFieldEditor);
addField(xPositionField);
addField(yPositionField);
addField(zPositionField);
addField(booleanFieldEditor);
}
/** (inheritDoc)
* @see org.goko.common.preferences.GkFieldEditorPreferencesPage#postInitialize()
*/
@Override
protected void postInitialize() throws GkException {
GkUiUtils.setEnabled(grpSettings, booleanFieldEditor.getControl().getSelection());
}
@Inject
public void onUnitPreferenceChange(@Preference(nodePath = GokoPreference.NODE_ID, value = GokoPreference.KEY_DISTANCE_UNIT) String unit) throws GkException{
Unit<Length> lengthUnit = GokoPreference.getInstance().getLengthUnit();
if(xPositionField != null && yPositionField != null && zPositionField != null){
xPositionField.setUnit(lengthUnit);
yPositionField.setUnit(lengthUnit);
zPositionField.setUnit(lengthUnit);
}
}
}