001package polaris.sdk.ui.controls;
002import polaris.sdk.ui.*;
003
004import java.util.*;
005public class ComboSelect extends Button {
006 protected final java.util.List<String> options=new ArrayList<String>();protected int selected=-1;private PopupMenu openMenu;
007 public ComboSelect(){super("请选择  ▾");w=230;}public ComboSelect(String... values){this();items(values);}
008 public ComboSelect items(String... values){options.clear();Collections.addAll(options,values);if(!options.isEmpty())select(0);else{selected=-1;text="请选择  ▾";}return this;}
009 public int selectedIndex(){return selected;}public String value(){return selected>=0?options.get(selected):"";}
010 public void select(int index){if(index<0||index>=options.size())throw new IllegalArgumentException("index");selected=index;text=options.get(index)+"  ▾";changed();}
011 @Override public void activate(){if(ui==null)return;PopupMenu menu=new PopupMenu();menu.bounds(0,0,w,menu.height());for(int i=0;i<options.size();i++){final int index=i;menu.item(options.get(i),()->select(index));}openMenu=menu;ui.popup(menu,ax,ay+h+4);}
012 @Override protected void paint(Painter p){stateSurface(p,0,0);String label=selected>=0?value():"请选择";p.text(label,ax+15,ay+(h-14)/2,14,ink());float a=motion("open",ui!=null&&ui.topOverlay()==openMenu?1:0,26,.82f),cx=ax+w-19,cy=ay+h/2;p.line(cx-4,cy-2+4*a,cx,cy+2-4*a,1.4f,ink());p.line(cx,cy+2-4*a,cx+4,cy-2+4*a,1.4f,ink());}
013}