/** * */ package org.goko.tools.viewer.jogl.preferences; import javax.inject.Inject; import org.apache.commons.lang3.StringUtils; import org.eclipse.e4.core.di.annotations.Optional; 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.ColorFieldEditor; import org.goko.common.preferences.fieldeditor.preference.IntegerFieldEditor; import org.goko.common.preferences.fieldeditor.preference.PreferenceFieldEditor; 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.core.controller.IWorkVolumeProvider; import org.goko.core.log.GkLog; /** * @author PsyKo * */ public class GridPreferencesPage extends GkFieldEditorPreferencesPage { private GkLog LOG = GkLog.getLogger(GridPreferencesPage.class); private LengthFieldEditor majorSpacingFieldEditor; private LengthFieldEditor minorSpacingFieldEditor; private LengthFieldEditor startXFieldEditor; private LengthFieldEditor startYFieldEditor; private LengthFieldEditor startZFieldEditor; private LengthFieldEditor endXFieldEditor; private LengthFieldEditor endYFieldEditor; private LengthFieldEditor endZFieldEditor; private LengthFieldEditor graduationSizeFieldEditor; @Inject @Optional private IWorkVolumeProvider workVolumeProvider; private Composite limitsComposite; public GridPreferencesPage() { setTitle("Grid"); setPreferenceStore(JoglViewerPreference.getInstance()); getPreferenceStore().addPropertyChangeListener(this); } /** (inheritDoc) * @see org.goko.common.preferences.GkFieldEditorPreferencesPage#createPreferencePage(org.eclipse.swt.widgets.Composite) */ @Override protected void createPreferencePage(Composite parent) throws GkException { Unit<Length> lengthUnit = GokoPreference.getInstance().getLengthUnit(); Group grpSettings = new Group(parent, SWT.NONE); grpSettings.setText("Settings"); grpSettings.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1)); grpSettings.setLayout(new GridLayout(2, false)); majorSpacingFieldEditor = new LengthFieldEditor(grpSettings, SWT.NONE); majorSpacingFieldEditor.setLabelWidthInChar(15); majorSpacingFieldEditor.setPreferenceName("grid.majorSpacing"); majorSpacingFieldEditor.setWidthInChars(5); majorSpacingFieldEditor.setLabel("Major grid spacing"); majorSpacingFieldEditor.setEmptyStringAllowed(false); majorSpacingFieldEditor.setPreferenceName(JoglViewerPreference.MAJOR_GRID_SPACING); majorSpacingFieldEditor.setUnit(lengthUnit); new Label(grpSettings, SWT.NONE); minorSpacingFieldEditor = new LengthFieldEditor(grpSettings, SWT.NONE); minorSpacingFieldEditor.setLabelWidthInChar(15); minorSpacingFieldEditor.setEmptyStringAllowed(false); minorSpacingFieldEditor.setPreferenceName("grid.minorSpacing"); minorSpacingFieldEditor.setWidthInChars(5); minorSpacingFieldEditor.setLabel("Minor grid spacing"); minorSpacingFieldEditor.setPreferenceName(JoglViewerPreference.MINOR_GRID_SPACING); minorSpacingFieldEditor.setUnit(lengthUnit); new Label(grpSettings, SWT.NONE); ColorFieldEditor majorColorFieldEditor = new ColorFieldEditor(grpSettings, SWT.NONE); majorColorFieldEditor.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); majorColorFieldEditor.setLabel("Major grid color"); majorColorFieldEditor.setPreferenceName(JoglViewerPreference.MAJOR_GRID_COLOR); IntegerFieldEditor majorGridOpacityFieldEditor = new IntegerFieldEditor(grpSettings, SWT.NONE); majorGridOpacityFieldEditor.setLabel("Opacity"); majorGridOpacityFieldEditor.setWidthInChars(4); majorGridOpacityFieldEditor.setLabelWidthInChar(6); majorGridOpacityFieldEditor.setPreferenceName(JoglViewerPreference.MAJOR_GRID_OPACITY); addField(majorGridOpacityFieldEditor); ColorFieldEditor minorColorFieldEditor = new ColorFieldEditor(grpSettings, SWT.NONE); minorColorFieldEditor.setLabel("Minor grid color"); minorColorFieldEditor.setPreferenceName(JoglViewerPreference.MINOR_GRID_COLOR); IntegerFieldEditor minorGridOpacityFieldEditor = new IntegerFieldEditor(grpSettings, SWT.NONE); minorGridOpacityFieldEditor.setWidthInChars(4); minorGridOpacityFieldEditor.setPreferenceName(JoglViewerPreference.MINOR_GRID_OPACITY); minorGridOpacityFieldEditor.setLabelWidthInChar(6); minorGridOpacityFieldEditor.setLabel("Opacity"); Group grpLimits = new Group(parent, SWT.NONE); grpLimits.setLayout(new GridLayout(1, false)); grpLimits.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); grpLimits.setText("Limits"); BooleanFieldEditor useWorkvolumeProvider = null; if(workVolumeProvider != null){ useWorkvolumeProvider = new BooleanFieldEditor(grpLimits, SWT.NONE); useWorkvolumeProvider.setLabel("Inherit from "+workVolumeProvider.getWorkVolumeProviderName()); useWorkvolumeProvider.setPreferenceName(JoglViewerPreference.GRID_USE_VOLUME_PROVIDER); addField(useWorkvolumeProvider); } limitsComposite = new Composite(grpLimits, SWT.NONE); GridLayout gl_composite = new GridLayout(5, false); limitsComposite.setLayout(gl_composite); limitsComposite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); Label lblStart = new Label(limitsComposite, SWT.NONE); GridData gd_lblStart = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); gd_lblStart.widthHint = 35; lblStart.setLayoutData(gd_lblStart); lblStart.setBounds(0, 0, 55, 15); lblStart.setText("Start"); startXFieldEditor = new LengthFieldEditor(limitsComposite, SWT.NONE); startXFieldEditor.setEmptyStringAllowed(false); startXFieldEditor.setWidthInChars(6); startXFieldEditor.setLabel("X"); startXFieldEditor.setPreferenceName(JoglViewerPreference.GRID_START_X); startXFieldEditor.setUnit(lengthUnit); Label lblNewLabel = new Label(limitsComposite, SWT.HORIZONTAL); lblNewLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1)); Label lblEnd = new Label(limitsComposite, SWT.NONE); lblEnd.setText("End"); endXFieldEditor = new LengthFieldEditor(limitsComposite, SWT.NONE); endXFieldEditor.setEmptyStringAllowed(false); endXFieldEditor.setWidthInChars(6); endXFieldEditor.setLabel("X"); endXFieldEditor.setPreferenceName(JoglViewerPreference.GRID_END_X); endXFieldEditor.setUnit(lengthUnit); new Label(limitsComposite, SWT.NONE); startYFieldEditor = new LengthFieldEditor(limitsComposite, SWT.NONE); startYFieldEditor.setEmptyStringAllowed(false); startYFieldEditor.setWidthInChars(6); startYFieldEditor.setLabel("Y"); startYFieldEditor.setPreferenceName(JoglViewerPreference.GRID_START_Y); startYFieldEditor.setUnit(lengthUnit); new Label(limitsComposite, SWT.NONE); new Label(limitsComposite, SWT.NONE); endYFieldEditor = new LengthFieldEditor(limitsComposite, SWT.NONE); endYFieldEditor.setEmptyStringAllowed(false); endYFieldEditor.setWidthInChars(6); endYFieldEditor.setLabel("Y"); endYFieldEditor.setPreferenceName(JoglViewerPreference.GRID_END_Y); endYFieldEditor.setUnit(lengthUnit); new Label(limitsComposite, SWT.NONE); startZFieldEditor = new LengthFieldEditor(limitsComposite, SWT.NONE); startZFieldEditor.setEmptyStringAllowed(false); startZFieldEditor.setWidthInChars(6); startZFieldEditor.setLabel("Z"); startZFieldEditor.setPreferenceName(JoglViewerPreference.GRID_START_Z); startZFieldEditor.setUnit(lengthUnit); new Label(limitsComposite, SWT.NONE); new Label(limitsComposite, SWT.NONE); endZFieldEditor = new LengthFieldEditor(limitsComposite, SWT.NONE); endZFieldEditor.setEmptyStringAllowed(false); endZFieldEditor.setWidthInChars(6); endZFieldEditor.setLabel("Z"); endZFieldEditor.setPreferenceName(JoglViewerPreference.GRID_END_Z); endZFieldEditor.setUnit(lengthUnit); IntegerFieldEditor axisGridOpacityFieldEditor = new IntegerFieldEditor(grpSettings, SWT.NONE); axisGridOpacityFieldEditor.setWidthInChars(4); axisGridOpacityFieldEditor.setPreferenceName(JoglViewerPreference.GRID_AXIS_OPACITY); axisGridOpacityFieldEditor.setLabelWidthInChar(13); axisGridOpacityFieldEditor.setLabel("Axis opacity"); // Adding fields addField(majorSpacingFieldEditor); addField(minorSpacingFieldEditor); addField(majorColorFieldEditor); addField(minorColorFieldEditor); addField(minorGridOpacityFieldEditor); addField(majorGridOpacityFieldEditor); addField(axisGridOpacityFieldEditor); new Label(grpSettings, SWT.NONE); graduationSizeFieldEditor = new LengthFieldEditor(grpSettings, SWT.NONE); graduationSizeFieldEditor.setWidthInChars(4); graduationSizeFieldEditor.setLabel("Graduation size"); graduationSizeFieldEditor.setLabelWidthInChar(13); graduationSizeFieldEditor.setUnit(lengthUnit); graduationSizeFieldEditor.setPreferenceName(JoglViewerPreference.GRID_GRADUATION_SIZE); boolean value = getPreferenceStore().getBoolean(JoglViewerPreference.GRID_USE_VOLUME_PROVIDER); GkUiUtils.setEnabled(limitsComposite, !value); new Label(grpSettings, SWT.NONE); addField(startXFieldEditor); addField(startYFieldEditor); addField(startZFieldEditor); addField(endXFieldEditor); addField(endYFieldEditor); addField(endZFieldEditor); addField(graduationSizeFieldEditor); } /** (inheritDoc) * @see org.goko.common.preferences.GkFieldEditorPreferencesPage#propertyChange(org.eclipse.jface.util.PropertyChangeEvent) */ @Override public void propertyChange(PropertyChangeEvent event) { super.propertyChange(event); if(StringUtils.equals(event.getProperty(), PreferenceFieldEditor.VALUE)){ PreferenceFieldEditor<?> sourceEditor = (PreferenceFieldEditor<?>) event.getSource(); if(StringUtils.equals(JoglViewerPreference.GRID_USE_VOLUME_PROVIDER, sourceEditor.getPreferenceName())){ boolean value = (boolean) event.getNewValue(); GkUiUtils.setEnabled(limitsComposite, !value); } } } @Inject public void onUnitPreferenceChange(@Preference(nodePath = GokoPreference.NODE_ID, value = GokoPreference.KEY_DISTANCE_UNIT) String unit) { try { Unit<Length> lengthUnit = GokoPreference.getInstance().getLengthUnit(); if(majorSpacingFieldEditor != null && minorSpacingFieldEditor != null){ majorSpacingFieldEditor.setUnit(lengthUnit); minorSpacingFieldEditor.setUnit(lengthUnit); startXFieldEditor.setUnit(lengthUnit); startYFieldEditor.setUnit(lengthUnit); startZFieldEditor.setUnit(lengthUnit); endXFieldEditor.setUnit(lengthUnit); endYFieldEditor.setUnit(lengthUnit); endZFieldEditor.setUnit(lengthUnit); graduationSizeFieldEditor.setUnit(lengthUnit); } } catch (GkException e) { LOG.error(e); } } }