Radio Buttons
Created RadioButton and RadioManager.
They work together well I guess.
😄
This commit is contained in:
parent
4a1f1b7545
commit
a984333c3a
@ -0,0 +1,87 @@
|
|||||||
|
package ru.windcorp.progressia.client.graphics.gui;
|
||||||
|
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
import org.lwjgl.glfw.GLFW;
|
||||||
|
|
||||||
|
import glm.mat._4.Mat4;
|
||||||
|
import glm.vec._2.i.Vec2i;
|
||||||
|
import ru.windcorp.progressia.client.graphics.Colors;
|
||||||
|
import ru.windcorp.progressia.client.graphics.flat.RenderTarget;
|
||||||
|
import ru.windcorp.progressia.client.graphics.input.KeyEvent;
|
||||||
|
import ru.windcorp.progressia.client.graphics.input.bus.InputListener;
|
||||||
|
|
||||||
|
public class RadioButton extends Interactable {
|
||||||
|
private RadioManager manager;
|
||||||
|
private boolean isSelected;
|
||||||
|
|
||||||
|
public RadioButton(String name, Label textLabel, Consumer<RadioButton> onSelect, RadioManager myManager)
|
||||||
|
{
|
||||||
|
super(name, textLabel);
|
||||||
|
setPreferredSize(textLabel.getPreferredSize().x+23,textLabel.getPreferredSize().y);
|
||||||
|
manager = myManager;
|
||||||
|
manager.addOption(this);
|
||||||
|
|
||||||
|
addListener((Class<KeyEvent>) KeyEvent.class, (InputListener<KeyEvent>) e -> {if ((e.isLeftMouseButton() && containsCursor()) || (e.getKey()==GLFW.GLFW_KEY_ENTER && isFocused()) )
|
||||||
|
{
|
||||||
|
isClicked = e.isPress();
|
||||||
|
if (!isDisabled() && !isClicked)
|
||||||
|
{
|
||||||
|
onSelect.accept(this);
|
||||||
|
manager.selectSelf(this);
|
||||||
|
}
|
||||||
|
requestReassembly();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;});
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isSelected()
|
||||||
|
{
|
||||||
|
return isSelected;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSelected(boolean selected)
|
||||||
|
{
|
||||||
|
isSelected = selected;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void assembleSelf(RenderTarget target) {
|
||||||
|
if (isDisabled())
|
||||||
|
{
|
||||||
|
target.fill(getX()+getWidth()-getHeight(), getY(), getHeight(), getHeight(), 0xFFE5E5E5);
|
||||||
|
}
|
||||||
|
else if (isClicked() || isHovered() || isFocused())
|
||||||
|
{
|
||||||
|
target.fill(getX()+getWidth()-getHeight(), getY(), getHeight(), getHeight(), 0xFF37A2E6);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
target.fill(getX()+getWidth()-getHeight(), getY(), getHeight(), getHeight(), 0xFFCBCBD0);
|
||||||
|
}
|
||||||
|
//Inside area
|
||||||
|
if (!isClicked() && isHovered() && !isDisabled())
|
||||||
|
{
|
||||||
|
target.fill(getX()+getWidth()-getHeight()+2, getY()+2, getHeight()-4, getHeight()-4, 0xFFC3E4F7);
|
||||||
|
}
|
||||||
|
else if (!isClicked() || isDisabled())
|
||||||
|
{
|
||||||
|
target.fill(getX()+getWidth()-getHeight()+2, getY()+2, getHeight()-4, getHeight()-4, Colors.WHITE);
|
||||||
|
}
|
||||||
|
if (isSelected())
|
||||||
|
{
|
||||||
|
if (!isDisabled())
|
||||||
|
{
|
||||||
|
target.fill(getX()+getWidth()-getHeight()+4, getY()+4, getHeight()-8, getHeight()-8, 0xFF37A2E6);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
target.fill(getX()+getWidth()-getHeight()+4, getY()+4, getHeight()-8, getHeight()-8, 0xFFC3E4F7);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
target.pushTransform(new Mat4().identity().translate( getX(), getY(), 0));
|
||||||
|
label.assembleSelf(target);
|
||||||
|
target.popTransform();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,37 @@
|
|||||||
|
package ru.windcorp.progressia.client.graphics.gui;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
|
|
||||||
|
public class RadioManager {
|
||||||
|
private List<RadioButton> options;
|
||||||
|
private int selectedOption;
|
||||||
|
|
||||||
|
public RadioManager()
|
||||||
|
{
|
||||||
|
options = Collections.synchronizedList(new CopyOnWriteArrayList<>());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addOption(RadioButton option)
|
||||||
|
{
|
||||||
|
options.add(option);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSelected()
|
||||||
|
{
|
||||||
|
return selectedOption;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void selectSelf(RadioButton option)
|
||||||
|
{
|
||||||
|
if (!options.contains(option))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
options.get(selectedOption).setSelected(false);
|
||||||
|
selectedOption = options.indexOf(option);
|
||||||
|
option.takeFocus();
|
||||||
|
option.setSelected(true);
|
||||||
|
}
|
||||||
|
}
|
@ -33,6 +33,8 @@ import ru.windcorp.progressia.client.graphics.gui.GUILayer;
|
|||||||
import ru.windcorp.progressia.client.graphics.gui.Button;
|
import ru.windcorp.progressia.client.graphics.gui.Button;
|
||||||
import ru.windcorp.progressia.client.graphics.gui.Label;
|
import ru.windcorp.progressia.client.graphics.gui.Label;
|
||||||
import ru.windcorp.progressia.client.graphics.gui.Panel;
|
import ru.windcorp.progressia.client.graphics.gui.Panel;
|
||||||
|
import ru.windcorp.progressia.client.graphics.gui.RadioButton;
|
||||||
|
import ru.windcorp.progressia.client.graphics.gui.RadioManager;
|
||||||
import ru.windcorp.progressia.client.graphics.gui.layout.LayoutAlign;
|
import ru.windcorp.progressia.client.graphics.gui.layout.LayoutAlign;
|
||||||
import ru.windcorp.progressia.client.graphics.gui.layout.LayoutVertical;
|
import ru.windcorp.progressia.client.graphics.gui.layout.LayoutVertical;
|
||||||
import ru.windcorp.progressia.client.localization.Localizer;
|
import ru.windcorp.progressia.client.localization.Localizer;
|
||||||
@ -88,6 +90,26 @@ public class LayerTestGUI extends GUILayer {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
RadioManager manager = new RadioManager();
|
||||||
|
|
||||||
|
panel.addChild(
|
||||||
|
new RadioButton(
|
||||||
|
"Radio1,1",
|
||||||
|
new Label("RadioLabel1,1",font,"Option 1"),
|
||||||
|
rb -> {},
|
||||||
|
manager
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
panel.addChild(
|
||||||
|
new RadioButton(
|
||||||
|
"Radio1,2",
|
||||||
|
new Label("RadioLabel1,2",font,"Option 2"),
|
||||||
|
rb -> {},
|
||||||
|
manager
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
panel.addChild(
|
panel.addChild(
|
||||||
new Label(
|
new Label(
|
||||||
"IsFlyingDisplay",
|
"IsFlyingDisplay",
|
||||||
|
Reference in New Issue
Block a user