package org.goko.common.preferences.fieldeditor.ui; 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.Label; import org.goko.common.preferences.fieldeditor.ui.converter.BindingConverter; import org.goko.common.preferences.fieldeditor.ui.converter.QuantityToStringConverter; import org.goko.common.preferences.fieldeditor.ui.converter.StringToQuantityConverter; import org.goko.core.common.measure.quantity.Quantity; import org.goko.core.common.measure.units.Unit; import org.goko.core.log.GkLog; public abstract class UiQuantityFieldEditor<Q extends Quantity<Q>> extends UiBigDecimalFieldEditor { private static final GkLog LOG = GkLog.getLogger(UiQuantityFieldEditor.class); private Label labelUnit; private Unit<Q> unit; public UiQuantityFieldEditor(Composite parent, int style) { super(parent, style); } /** (inheritDoc) * @see org.goko.common.preferences.fieldeditor.ui.UiFieldEditor#createLayout(org.eclipse.swt.widgets.Composite) */ @Override protected void createLayout(Composite parent) { GridLayout layout = new GridLayout(3, false); layout.marginHeight = 2; layout.marginWidth = 2; setLayout(layout); } /** (inheritDoc) * @see org.goko.common.preferences.fieldeditor.ui.UiStringFieldEditor#createControls(org.eclipse.swt.widgets.Composite, int) */ @Override protected void createControls(Composite parent, int style) { super.createControls(parent, style); labelUnit = new Label(this, style); labelUnit.setText("--"); labelUnit.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1)); labelUnit.pack(); pack(); } /** * @return the unit */ public Unit<Q> getUnit() { return unit; } /** * @param unit the unit to set */ public void setUnit(Unit<Q> unit) { this.unit = unit; labelUnit.setText( unit.getSymbol() ); labelUnit.pack(); pack(); layout(); } /** (inheritDoc) * @see org.goko.common.preferences.fieldeditor.ui.UiBigDecimalFieldEditor#getConverter() */ @Override public IBindingConverter getConverter() { return new BindingConverter(getQuantityConverter(), new QuantityToStringConverter()); } protected abstract StringToQuantityConverter<Q> getQuantityConverter(); // class StringToQuantityConverter extends Converter{ // // public StringToQuantityConverter() { // super(String.class, BigDecimalQuantity.class); // } // // /** (inheritDoc) // * @see org.eclipse.core.databinding.conversion.IConverter#convert(java.lang.Object) // */ // @Override // public Object convert(Object fromObject) { // try { // return NumberQuantity.of(BigDecimalUtils.parse((String)fromObject), unit); // } catch (GkException e) { // return null; // } // } // // } // // class QuantityToStringConverter extends Converter{ // // public QuantityToStringConverter() { // super(BigDecimalQuantity.class, String.class); // } // // /** (inheritDoc) // * @see org.eclipse.core.databinding.conversion.IConverter#convert(java.lang.Object) // */ // @Override // public Object convert(Object fromObject) { // try { // return GokoPreference.getInstance().format((Quantity<Q>)fromObject,false, false, unit); // } catch (GkException e) { // LOG.error(e); // return "ERROR"; // } // } // // } }