package org.jnect.demo.incquery.gef3d.camera; import org.eclipse.draw3d.ui.preferences.Draw3DPreferenceDistributor; import org.eclipse.draw3d.ui.preferences.PrefNames; import org.eclipse.jface.bindings.keys.KeySequence; import org.eclipse.jface.bindings.keys.ParseException; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.resource.StringConverter; import org.eclipse.jface.util.PropertyChangeEvent; /** * Distributes Draw3D preferences to the camera and scene. * * @author Kristian Duske * @author istvanrath */ public class CustomCameraPreferenceDistributor extends Draw3DPreferenceDistributor implements PrefNames { private CustomCameraInputHandler m_handler; /** * Creates a new distributor and initializes the given camera input handler * and scene with the values from the preference store. * * @param i_handler * the camera input handler */ public CustomCameraPreferenceDistributor(CustomCameraInputHandler i_handler) { m_handler = i_handler; } private KeySequence getSequence(String i_string) { try { return KeySequence.getInstance(i_string); } catch (ParseException ex) { throw new RuntimeException("Error while updating from preferences", ex); } } /** * {@inheritDoc} * * @see org.eclipse.draw3d.ui.preferences.Draw3DPreferenceDistributor#init(IPreferenceStore) */ @Override public void init(IPreferenceStore i_store) { m_handler .setMoveForwardKey(getSequence(i_store.getString(KEY_FORWARD))); m_handler.setMoveBackwardKey(getSequence(i_store .getString(KEY_BACKWARD))); m_handler.setMoveUpKey(getSequence(i_store.getString(KEY_UP))); m_handler.setMoveDownKey(getSequence(i_store.getString(KEY_DOWN))); m_handler.setMoveLeftKey(getSequence(i_store.getString(KEY_LEFT))); m_handler.setMoveRightKey(getSequence(i_store.getString(KEY_RIGHT))); m_handler.setRollCCWKey(getSequence(i_store.getString(KEY_ROLL_CCW))); m_handler.setRollCWKey(getSequence(i_store.getString(KEY_ROLL_CW))); m_handler.setCenterKey(getSequence(i_store.getString(KEY_CENTER))); m_handler.setOrbitModifiers(i_store.getInt(MOD_ORBIT)); m_handler.setSensitivity(i_store.getInt(MOUSE_SENSITIVITY)); } /** * {@inheritDoc} * * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent) */ @Override public void propertyChange(PropertyChangeEvent i_event) { String name = i_event.getProperty(); String newValue = i_event.getNewValue().toString(); if (name == null || newValue == null) return; if (newValue.equals(i_event.getOldValue())) return; if (name.equals(KEY_FORWARD)) m_handler.setMoveForwardKey(getSequence(newValue)); else if (name.equals(KEY_BACKWARD)) m_handler.setMoveBackwardKey(getSequence(newValue)); else if (name.equals(KEY_UP)) m_handler.setMoveUpKey(getSequence(newValue)); else if (name.equals(KEY_DOWN)) m_handler.setMoveDownKey(getSequence(newValue)); else if (name.equals(KEY_LEFT)) m_handler.setMoveLeftKey(getSequence(newValue)); else if (name.equals(KEY_RIGHT)) m_handler.setMoveRightKey(getSequence(newValue)); else if (name.equals(KEY_ROLL_CCW)) m_handler.setRollCCWKey(getSequence(newValue)); else if (name.equals(KEY_ROLL_CW)) m_handler.setRollCWKey(getSequence(newValue)); else if (name.equals(KEY_CENTER)) m_handler.setCenterKey(getSequence(newValue)); else if (name.equals(MOD_ORBIT)) m_handler.setOrbitModifiers(StringConverter.asInt(newValue)); else if (name.equals(MOUSE_SENSITIVITY)) m_handler.setSensitivity(StringConverter.asInt(newValue)); } }