package com.akjava.gwt.threejsexamples.client; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.CheckBox; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; /* * trying emulate dat.gui ,under construction */ public class DatGUI { public DatGUI gui; DatGUIListener listener; Map<String,Object> values=new HashMap<String, Object>(); public DatGUI(DatGUIListener listener){ this.gui=this;//dummy this.listener=listener; } public void put(String key,boolean value){ values.put(key, value); } public boolean getBoolean(String key){ return (Boolean)values.get(key); } public static void test(){ DatGUI controls=new DatGUI(null);//listener //initialize with xx DatFolder settings = controls.gui.addFolder( "Settings" ); settings.add( controls, "Lock Camera" ).onChange("lockCameraChanged"); settings.add( controls, "start" ); settings.add( controls, "idle", 0, 1, 0.01).listen().onChange( "weight" ); settings.open(); } public DatFolder addFolder(String name){ return new DatFolder(name); } public static class DatFolder implements DatWidget{ private String name; private List<DatWidget> childrens=new ArrayList<DatGUI.DatWidget>(); private boolean opend; public DatFolder(String name){ this.name=name; } public DatButton add(DatGUI datgui,String name){ return null; } public DatRange add(DatGUI datgui,String name,double min,double max,double step){ return null; } public void open(){ opend=true; } public void close(){ opend=false; } @Override public Widget createWidget() { VerticalPanel panel=new VerticalPanel(); Anchor anchor=new Anchor(name); panel.add(anchor); final VerticalPanel childPanel=new VerticalPanel(); panel.add(childPanel); childPanel.setVisible(opend); //not recursive yet. for(DatWidget dat:childrens){ panel.add(dat.createWidget()); } anchor.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { childPanel.setVisible(!childPanel.isVisible()); } }); return panel; } } public static class DatRange implements DatWidget{ private String name; private DatGUI dat; public DatRange(String name,DatGUI dat){ this.name=name; this.dat=dat; } //TODO this is more complex public DatRange listen(){ //TODO support get real time value return this; } public void onChange(String key){ //TODO this is dummy } @Override public Widget createWidget() { // TODO dummy return new Label(name); } } public static class DatButton implements DatWidget{ private String key; private String name; private boolean checkbox; private DatGUI dat; public DatButton(String name,DatGUI dat){ this.name=name; this.dat=dat; } public void onChange(String key){ //change as checkbox this.key=key; checkbox=true; } @Override public Widget createWidget() { if(checkbox){ CheckBox check= new CheckBox(name); check.addValueChangeHandler(new ValueChangeHandler<Boolean>() { @Override public void onValueChange(ValueChangeEvent<Boolean> event) { dat.put(name, event.getValue()); dat.listener.onChange(key); } }); return check; }else{ return new Button(name,new ClickHandler() { @Override public void onClick(ClickEvent event) { dat.listener.onChange(name); } }); } } } public VerticalPanel getPanel(){ //do create widget here //regist listener here return null; } public static interface DatWidget{ public Widget createWidget(); } public static interface DatGUIListener{ public void onChange(String key); } }