package com.integreight.onesheeld.shields.controller.utils.glcd; import com.integreight.onesheeld.shields.controller.GlcdShield; import com.integreight.onesheeld.shields.controller.utils.GlcdView; import java.util.ArrayList; import java.util.List; /** * Created by Mouso on 7/22/2015. */ public class RadioButton implements ButtonShape { // btnX , btnY are the center of the circle float btnX, btnY, btnRadius, btnWidth, btnHeight; RadioGroup radioGroup; int btnTouchId; String btnText = ""; byte size = 0; boolean isSelected = false, isPressed = false, visibility = true; public RadioButton(GlcdShield controller, float x, float y, byte size, int touchId, String text) { this.size = size; setSize(size); this.btnX = x + btnRadius; this.btnY = y + btnRadius; this.btnText = text; this.btnWidth = btnRadius + btnRadius + btnRadius + controller.getView().getStringWidth(text, GlcdShield.TEXT_SMALL, GlcdShield.FONT_ARIEL_REGULAR); this.btnHeight = btnRadius + btnRadius + btnRadius; this.btnTouchId = touchId; applyTouch(controller); isSelected = false; isPressed = false; } public void setRadioGroup(RadioGroup radioGroup) { this.radioGroup = radioGroup; } public RadioGroup getRadioGroup() { return radioGroup; } @Override public void applyTouch(GlcdShield controller) { if (controller != null) { List<Integer> params = new ArrayList<>(); params.add((int) (btnX - btnRadius)); params.add((int) (btnY - btnRadius)); params.add((int) (btnX + btnWidth)); params.add((int) (btnY + btnRadius)); params.add(btnTouchId); controller.doOrder(GlcdShield.ORDER_APPLYTOUCH, params); } } @Override public void clearTouch(GlcdShield controller) { if (controller != null) { List<Integer> params = new ArrayList<>(); params.add((int) (btnX - btnRadius)); params.add((int) (btnY - btnRadius)); params.add((int) (btnX + btnWidth)); params.add((int) (btnY + btnRadius)); params.add(null); controller.doOrder(GlcdShield.ORDER_APPLYTOUCH, params); } } @Override public void setBtnTouchId(GlcdShield controller, int btnTouchId) { this.btnTouchId = btnTouchId; applyTouch(controller); } @Override public boolean setIsPressed(boolean isPressed) { if (isPressed == true) { setSelected(!isSelected); if (isSelected) { if (radioGroup != null) radioGroup.select(this); } this.isPressed = isPressed; } if ((isPressed && isSelected) || (!isPressed && !isSelected)) { return true; } return false; } @Override public boolean setTouched(int touchX, int touchY) { return false; } public void setSelected(Boolean selected) { isSelected = selected; } public boolean getSelected() { return isSelected; } public void setSize(byte size) { this.size = size; switch (this.size) { case 0: this.btnRadius = 5; break; case 1: this.btnRadius = 10; break; case 2: this.btnRadius = 20; break; } } public void setText(GlcdView view, String text) { this.btnText = text; this.btnWidth = btnX + btnRadius + btnRadius + btnRadius + view.getStringWidth(text, GlcdShield.TEXT_SMALL, GlcdShield.FONT_ARIEL_REGULAR); this.btnHeight = btnY + btnRadius + btnRadius + btnRadius; ; } @Override public void draw(GlcdView view) { if (visibility) { view.fillCircle(btnX, btnY, btnRadius, GlcdShield.WHITE); view.drawCircle(btnX, btnY, btnRadius, GlcdShield.BLACK); if (isSelected) view.fillCircle(btnX, btnY, btnRadius - 2, GlcdShield.BLACK); view.drawString(btnText, btnX + btnRadius + 2, btnY - btnRadius + 2, GlcdShield.TEXT_SMALL, GlcdShield.FONT_ARIEL_REGULAR, GlcdShield.BLACK); } } @Override public void setVisibility(boolean visibility) { this.visibility = visibility; } @Override public void setPosition(float x, float y) { this.btnX = x; this.btnY = y; } }