package org.goko.controller.grbl.v09.configuration.editors;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.goko.common.preferences.fieldeditor.preference.BooleanFieldEditor;
import org.goko.controller.grbl.v09.configuration.GrblConfiguration;
import org.goko.core.common.exception.GkException;
public class GrblBitMaskFieldEditor extends BooleanFieldEditor implements IGrblFieldEditor<Button> {
private GrblConfiguration cfg;
private int bitPosition;
public GrblBitMaskFieldEditor(Composite parent, int style) {
super(parent, style);
}
/** (inheritDoc)
* @see org.goko.common.preferences.fieldeditor.preference.PreferenceFieldEditor#loadValue()
*/
@Override
protected void loadValue() throws GkException {
boolean wasSelected = getControl().getSelection();
getControl().setSelection( getValue() );
fireStateChanged(VALUE, wasSelected, getControl().getSelection());
}
protected boolean getValue() throws GkException{
Integer value = cfg.findSetting(preferenceName, Integer.class);
return (value & (1 << bitPosition)) == (1 << bitPosition);
}
/** (inheritDoc)
* @see org.goko.common.preferences.fieldeditor.preference.PreferenceFieldEditor#setDefaultValue()
*/
@Override
protected void setDefaultValue() throws GkException {
boolean wasSelected = getControl().getSelection();
getControl().setSelection( false );
fireStateChanged(VALUE, wasSelected, getControl().getSelection());
}
/** (inheritDoc)
* @see org.goko.common.preferences.fieldeditor.preference.PreferenceFieldEditor#storeValue()
*/
@Override
protected void storeValue() throws GkException {
Integer value = cfg.findSetting(preferenceName, Integer.class);
if(getControl().getSelection()){
value |= 1 << bitPosition;
}else{
value &= ~(1 << bitPosition);
}
cfg.setSetting(preferenceName, value);
}
/** (inheritDoc)
* @see org.goko.controller.grbl.v09.configuration.editors.IGrblFieldEditor#setConfiguration(org.goko.controller.grbl.v09.configuration.GrblConfiguration)
*/
@Override
public void setConfiguration(GrblConfiguration cfg) {
this.cfg = cfg;
}
/**
* @return the bitPosition
*/
public int getBitPosition() {
return bitPosition;
}
/**
* @param bitPosition the bitPosition to set
*/
public void setBitPosition(int bitPosition) {
this.bitPosition = bitPosition;
}
}