001package polaris.sdk.ui.controls;
002import polaris.sdk.ui.*;
003public class ButtonGroup extends Panel {
004 protected int selected=-1;
005 private static final class Segment extends ToggleButton {
006  Segment(String text){super(text);}
007  float pressure(){return pressAmount();}
008  @Override protected void paint(Painter p){float fs=theme().fontSize;int weight=selected?500:400;p.textWeight(text,ax+(w-p.textWidth(text,fs,weight))/2,ay+(h-fs)/2,fs,selected?ink():theme().muted,weight);}
009 }
010 public ButtonGroup(){glass=false;flow=Layout.ROW;padding=Spacing.COMPACT_INSET;gap=Spacing.GAP;h=36;w=300;}
011 public ButtonGroup(String... labels){this();for(String s:labels)option(s);}
012 public ButtonGroup option(String name){final int index=children.size();ToggleButton b=new Segment(name);b.bounds(0,0,90,30);b.onClick(w->select(index));add(b);return this;}
013 public int selectedIndex(){return selected;}
014 public void select(int index){if(index<0||index>=children.size())throw new IllegalArgumentException("index");selected=index;for(int i=0;i<children.size();i++)if(children.get(i) instanceof ToggleButton)((ToggleButton)children.get(i)).selected(i==index);changed();}
015 @Override protected void layoutChildren(){if(!children.isEmpty()){float each=(w-2*padding-gap*(children.size()-1))/children.size();for(int i=0;i<children.size();i++)children.get(i).bounds(padding+i*(each+gap),padding,Math.max(1,each),h-2*padding);}}
016 @Override protected void paint(Painter p){glassPart(p,ax,ay,w,h,h/2,0,theme().surface,0,theme().blur);if(selected>=0&&selected<children.size()){Widget child=children.get(selected);float x=motion("segment",child.x(),26,.73f);float pressure=child instanceof Segment?((Segment)child).pressure():0,scale=1-.038f*pressure;float width=child.width()*scale,height=child.height()*scale;glassPart(p,ax+x+(child.width()-width)/2,ay+child.y()+(child.height()-height)/2,width,height,height/2,theme().selectedTint+theme().pressTint*pressure,theme().accent,.29f,theme().blur);}}
017}