package org.wheelmap.android.tango.mode; import android.support.annotation.DrawableRes; import android.support.annotation.StringRes; import org.wheelmap.android.model.api.MeasurementInfo; import org.wheelmap.android.online.R; import org.wheelmap.android.tango.renderer.WheelmapModeRenderer; public enum Mode { DOOR, STAIR, RAMP, TOILET; @StringRes public int title() { switch (this) { case DOOR: return R.string.tango_mode_door; case STAIR: return R.string.tango_mode_stair; case RAMP: return R.string.tango_mode_ramp; case TOILET: return R.string.tango_mode_toilet; default: throw new IllegalStateException("unimplemented renderer"); } } @DrawableRes public int icon() { switch (this) { case DOOR: return R.drawable.ic_door; case STAIR: return R.drawable.ic_stair; case RAMP: return R.drawable.ic_ramp; case TOILET: return R.drawable.ic_tango_wc; default: throw new IllegalStateException("unimplemented renderer"); } } @StringRes public int tutorialTitle() { switch (this) { case DOOR: return R.string.tango_tutorial_door_title; case STAIR: return R.string.tango_tutorial_stair_title; case RAMP: return R.string.tango_tutorial_ramp_title; case TOILET: return R.string.tango_tutorial_wc_title; default: throw new IllegalStateException("unimplemented renderer"); } } @StringRes public int tutorialText() { switch (this) { case DOOR: return R.string.tango_tutorial_door_text; case STAIR: return R.string.tango_tutorial_stair_text; case RAMP: return R.string.tango_tutorial_ramp_text; case TOILET: return R.string.tango_tutorial_wc_text; default: throw new IllegalStateException("unimplemented renderer"); } } @DrawableRes public int tutorialImage() { switch (this) { case DOOR: return R.drawable.img_tango_door; case STAIR: return R.drawable.img_tango_stairs; case RAMP: return R.drawable.img_tango_ramp; case TOILET: return R.drawable.img_tango_wc; default: throw new IllegalStateException("unimplemented renderer"); } } public WheelmapModeRenderer newRenderer() { final Mode mode = this; switch (this) { case DOOR: return new MeasureDistanceModeRenderer() { @Override public MeasurementInfo.MetaData createMetaData() { return MeasurementInfo.DoorMetaData.create(getDistance()); } @Override public Mode getMode() { return mode; } }; case STAIR: return new MeasureDistanceModeRenderer() { @Override public MeasurementInfo.MetaData createMetaData() { return MeasurementInfo.StairMetaData.create(getDistance()); } @Override public Mode getMode() { return mode; } }; case RAMP: return new MeasureSlopeAngleModeRenderer() { @Override public MeasurementInfo.MetaData createMetaData() { return MeasurementInfo.RampMetaData.create(getAngleDegree()); } @Override public Mode getMode() { return mode; } }; case TOILET: return new MeasureAreaModeRenderer() { @Override public MeasurementInfo.MetaData createMetaData() { return MeasurementInfo.ToiletMetaData.create(getWidth(), getLength(), getArea()); } @Override public Mode getMode() { return mode; } }; default: throw new IllegalStateException("unimplemented renderer"); } } }