package org.schmivits.airball.display.speed; import android.content.res.AssetManager; import android.content.res.Resources; import android.graphics.BitmapFactory; import android.graphics.Canvas; import org.schmivits.airball.airdata.Aircraft; import org.schmivits.airball.base.R; import org.schmivits.airball.display.DisplayConfiguration; import org.schmivits.airball.util.ValueModel; import org.schmivits.airball.widget.Container; import org.schmivits.airball.widget.FilledPolygon; import org.schmivits.airball.widget.Rectangle; import org.schmivits.airball.widget.TiledImage; import org.schmivits.airball.widget.Widget; public class SpeedTape extends Container { public interface Model { ValueModel<Float> getSpeed(); ValueModel<Aircraft> getAircraft(); } private final Model mModel; private final Widget mTape; private final Widget mInvalidImage; /** * Create a SpeedTape. */ public SpeedTape( DisplayConfiguration config, Resources res, AssetManager assets, float x, float y, float w, float h, final Model model) { moveTo(x, y); sizeTo(w, h); mModel = model; float invalidWidth = (float) Math.floor(w / 8); mTape = new SpeedTapeCore( config, assets, 0, 0, w - config.mPointerToScaleOffset, h, new SpeedTapeCore.Model() { @Override public float getSpeed() { return model.getSpeed().isValid() ? model.getSpeed().getValue() : 0f; } @Override public float getVs0() { return model.getAircraft().isValid() ? model.getAircraft().getValue() .getVs0() : 0f; } @Override public float getVfe() { return model.getAircraft().isValid() ? model.getAircraft().getValue() .getVfe() : 0f; } @Override public float getVs1() { return model.getAircraft().isValid() ? model.getAircraft().getValue() .getVs1() : 0f; } @Override public float getVno() { return model.getAircraft().isValid() ? model.getAircraft().getValue() .getVno() : 0f; } @Override public float getVne() { return model.getAircraft().isValid() ? model.getAircraft().getValue() .getVne() : 0f; } }); Widget pointerSymbol = new FilledPolygon( new float[][]{ {1.0f, 0.0f}, {0.0f, 0.5f}, {1.0f, 1.0f}, }, config.mPointerColor); pointerSymbol.moveTo(0f, 0f); pointerSymbol.sizeTo(config.mPointerShapeSize, config.mPointerShapeSize); Widget pointerLine = new Rectangle(config.mPointerColor); pointerLine.moveTo(0f, 0f); pointerLine.sizeTo(w, config.mThickLineThickness); pointerSymbol.moveTo( getWidth() - pointerSymbol.getWidth(), (getHeight() - pointerSymbol.getHeight()) / 2f); pointerLine.moveTo( getWidth() - pointerLine.getWidth(), (getHeight() - pointerLine.getHeight()) / 2f); mInvalidImage = new TiledImage(BitmapFactory.decodeResource(res, R.drawable.error_texture)); mInvalidImage.moveTo(getWidth() - invalidWidth - config.mPointerToScaleOffset, 0f); mInvalidImage.sizeTo(invalidWidth, h); mInvalidImage.setVisible(false); mChildren.add(mTape); mChildren.add(mInvalidImage); mChildren.add(pointerSymbol); mChildren.add(pointerLine); } @Override protected void drawContents(Canvas canvas) { if (!mModel.getSpeed().isValid() || !mModel.getAircraft().isValid()) { mInvalidImage.setVisible(true); mTape.setVisible(false); } else { mInvalidImage.setVisible(false); mTape.setVisible(true); } super.drawContents(canvas); } }