Changed most component classnames to public. Added a new method hasVariable to UIDL class. Client now uses POST for requests and has some drafting methods for locale loading. svn changeset:1767/svn branch:trunktags/6.7.0.beta1
private void makeUidlRequest(String requestData) { | private void makeUidlRequest(String requestData) { | ||||
console.log("Making UIDL Request with params: " + requestData); | console.log("Making UIDL Request with params: " + requestData); | ||||
rb = new RequestBuilder(RequestBuilder.GET, appUri | |||||
rb = new RequestBuilder(RequestBuilder.POST, appUri | |||||
+ "/UIDL/?requestId=" + (Math.random()) + "&" + requestData); | + "/UIDL/?requestId=" + (Math.random()) + "&" + requestData); | ||||
try { | try { | ||||
rb.sendRequest(requestData, new RequestCallback() { | rb.sendRequest(requestData, new RequestCallback() { | ||||
return (String) resourcesMap.get(name); | return (String) resourcesMap.get(name); | ||||
} | } | ||||
public JSONObject getLocale(String locale) { | |||||
// TODO should perform synchronous call to server to fetch | |||||
// locale specific strings | |||||
// (GWT only supports synchrounous requests from v. 1.4) | |||||
console.log("Loading a new locale: " + locale); | |||||
rb = new RequestBuilder(RequestBuilder.POST, appUri | |||||
+ "/locale/?requestId=" + (Math.random()) + "&" + locale); | |||||
/*try { | |||||
rb.sendRequest(locale, new RequestCallback() { | |||||
public void onError(Request request, Throwable exception) { | |||||
console.error("Got error"); | |||||
} | |||||
public void onResponseReceived(Request request, | |||||
Response response) { | |||||
handleReceivedJSONMessage(response); | |||||
} | |||||
}); | |||||
} catch (RequestException e) { | |||||
console.error(e.getMessage()); | |||||
}*/ | |||||
// TODO | |||||
return null; | |||||
} | |||||
} | } |
package com.itmill.toolkit.terminal.gwt.client; | |||||
/** | |||||
* This class provides date/time parsing services to all components. | |||||
* | |||||
* @author Jouni Koivuviita | |||||
* | |||||
*/ | |||||
public class DateTimeService { | |||||
private LocaleService localeService; | |||||
private String currentLocale; | |||||
public DateTimeService(Client client) { | |||||
localeService = new LocaleService(client); | |||||
} | |||||
public DateTimeService(Client client, String locale) { | |||||
this(client); | |||||
setLocale(locale); | |||||
} | |||||
public void setLocale(String locale) { | |||||
currentLocale = locale; | |||||
} | |||||
public String getLocale() { | |||||
return currentLocale; | |||||
} | |||||
public String getMonth(int month) throws Exception { | |||||
if(currentLocale != null) | |||||
return localeService.getMonthNames(currentLocale)[month]; | |||||
else throw new Exception("No locale specified."); | |||||
} | |||||
public String getShortMonth(int month) throws Exception { | |||||
if(currentLocale != null) | |||||
return localeService.getShortMonthNames(currentLocale)[month]; | |||||
else throw new Exception("No locale specified."); | |||||
} | |||||
} |
import com.itmill.toolkit.terminal.gwt.client.ui.ICheckBox; | import com.itmill.toolkit.terminal.gwt.client.ui.ICheckBox; | ||||
import com.itmill.toolkit.terminal.gwt.client.ui.IComponent; | import com.itmill.toolkit.terminal.gwt.client.ui.IComponent; | ||||
import com.itmill.toolkit.terminal.gwt.client.ui.ICustomLayout; | import com.itmill.toolkit.terminal.gwt.client.ui.ICustomLayout; | ||||
import com.itmill.toolkit.terminal.gwt.client.ui.IDateField; | |||||
import com.itmill.toolkit.terminal.gwt.client.ui.IEmbedded; | import com.itmill.toolkit.terminal.gwt.client.ui.IEmbedded; | ||||
import com.itmill.toolkit.terminal.gwt.client.ui.IGridLayout; | import com.itmill.toolkit.terminal.gwt.client.ui.IGridLayout; | ||||
import com.itmill.toolkit.terminal.gwt.client.ui.IHorizontalLayout; | import com.itmill.toolkit.terminal.gwt.client.ui.IHorizontalLayout; | ||||
} | } | ||||
if ("table".equals(tag)) | if ("table".equals(tag)) | ||||
return new ITable(); | return new ITable(); | ||||
if("datefield".equals(tag)) | |||||
return new IDateField(); | |||||
return new IUnknownComponent(); | return new IUnknownComponent(); | ||||
} | } |
package com.itmill.toolkit.terminal.gwt.client; | |||||
import java.util.HashMap; | |||||
import java.util.Map; | |||||
import com.google.gwt.json.client.JSONObject; | |||||
/** | |||||
* Date / time etc. localisation service for all widgets. | |||||
* Should cache all loaded locales as JSON strings. | |||||
* | |||||
* @author Jouni Koivuviita | |||||
* | |||||
*/ | |||||
public class LocaleService { | |||||
private Client client; | |||||
private Map cache = new HashMap(); | |||||
public LocaleService(Client client){ | |||||
this.client = client; | |||||
} | |||||
private void loadLocale(String locale) { | |||||
JSONObject resp = client.getLocale(locale); | |||||
cache.put(locale, resp); | |||||
} | |||||
public String[] getMonthNames(String locale) { | |||||
// TODO | |||||
//if(cache.containsKey(locale)) | |||||
//else loadLocale(locale); | |||||
String[] temp = new String[12]; | |||||
temp[0] = "tammi"; temp[1] = "helmi"; temp[2] = "maalis"; temp[3] = "huhti"; | |||||
temp[4] = "touko"; temp[5] = "kesä"; temp[6] = "heinä"; temp[7] = "elo"; | |||||
temp[8] = "syys"; temp[9] = "loka"; temp[10] = "marras"; temp[11] = "joulu"; | |||||
return temp; | |||||
} | |||||
public String[] getShortMonthNames(String locale) { | |||||
// TODO | |||||
//if(cache.containsKey(locale)) | |||||
//else loadLocale(locale); | |||||
String[] temp = new String[12]; | |||||
temp[0] = "tam"; temp[1] = "hel"; temp[2] = "maa"; temp[3] = "huh"; | |||||
temp[4] = "tou"; temp[5] = "kes"; temp[6] = "hei"; temp[7] = "elo"; | |||||
temp[8] = "syy"; temp[9] = "lok"; temp[10] = "mar"; temp[11] = "jou"; | |||||
return temp; | |||||
} | |||||
public String[] getDayNames(String locale) { | |||||
// TODO | |||||
//if(cache.containsKey(locale)) | |||||
//else loadLocale(locale); | |||||
String[] temp = new String[7]; | |||||
temp[1] = "maanatai"; temp[2] = "tiistai"; temp[3] = "keskiviikko"; | |||||
temp[4] = "torstai"; temp[5] = "perjantai"; temp[6] = "lauantai"; | |||||
temp[0] = "sunnuntai"; | |||||
return temp; | |||||
} | |||||
public String[] getShortDayNames(String locale) { | |||||
// TODO | |||||
//if(cache.containsKey(locale)) | |||||
//else loadLocale(locale); | |||||
String[] temp = new String[7]; | |||||
temp[1] = "ma"; temp[2] = "ti"; temp[3] = "ke"; | |||||
temp[4] = "to"; temp[5] = "pe"; temp[6] = "la"; | |||||
temp[0] = "su"; | |||||
return temp; | |||||
} | |||||
public int getFirstDayOfWeek(String locale) { | |||||
// TODO | |||||
//if(cache.containsKey(locale)) | |||||
//else loadLocale(locale); | |||||
return 1; | |||||
} | |||||
} |
throw new IllegalArgumentException("No variables defined in tag."); | throw new IllegalArgumentException("No variables defined in tag."); | ||||
return v; | return v; | ||||
} | } | ||||
public boolean hasVariable(String name) { | |||||
Object v = null; | |||||
try { | |||||
v = getVariableHash().get(name); | |||||
} catch(IllegalArgumentException e) {} | |||||
return v != null; | |||||
} | |||||
public String getStringVariable(String name) { | public String getStringVariable(String name) { | ||||
JSONString t = (JSONString) getVariableHash().get(name); | JSONString t = (JSONString) getVariableHash().get(name); |
public class IButton extends Button implements Paintable { | public class IButton extends Button implements Paintable { | ||||
private static final String CLASSNAME = "i-button"; | |||||
public static final String CLASSNAME = "i-button"; | |||||
String id; | String id; | ||||
package com.itmill.toolkit.terminal.gwt.client.ui; | |||||
import java.util.Date; | |||||
import com.google.gwt.user.client.ui.ChangeListener; | |||||
import com.google.gwt.user.client.ui.Composite; | |||||
import com.google.gwt.user.client.ui.FlowPanel; | |||||
import com.google.gwt.user.client.ui.ListBox; | |||||
import com.google.gwt.user.client.ui.Widget; | |||||
import com.itmill.toolkit.terminal.gwt.client.Client; | |||||
import com.itmill.toolkit.terminal.gwt.client.Paintable; | |||||
import com.itmill.toolkit.terminal.gwt.client.UIDL; | |||||
public class IDateField extends Composite implements Paintable, ChangeListener { | |||||
/* | |||||
* This implementation is old already. | |||||
* We should use the DateTimeService class (which is a draft) to get | |||||
* locale specific strings and use them to build the datefield | |||||
* and its different styles (with inheritance of course). | |||||
* | |||||
* Drafting usage patterns: | |||||
* | |||||
* DateTimeService dts = new DateTimeService(client, "fi_FI"); | |||||
* String month = dts.getMonth(0); // Returns "January" | |||||
* String day = dts.getDay(19); // Returns e.g. "sunday" | |||||
* String dateformat = dts.getDateFormat(); // Returns something like MM_/_DD_/_YYYY | |||||
* String timeformat = dts.getTimeFormat(); // Returns something like HH_:_MM | |||||
* String date = dts.parseDate(new Date()); // Returns e.g. 6/19/2007 14:32 | |||||
* String date = dts.parseFullDate(new Date()); // Returns e.g. Tuesday 6th June 2007 14:32 | |||||
*/ | |||||
public static final String CLASSNAME = "i-datefield"; | |||||
String id; | |||||
Client client; | |||||
private boolean immediate; | |||||
private FlowPanel container; | |||||
private ListBox year; | |||||
private static int RESOLUTION_YEAR = 0; | |||||
private static int RESOLUTION_MONTH = 1; | |||||
private static int RESOLUTION_DAY = 2; | |||||
private static int RESOLUTION_HOUR = 3; | |||||
private static int RESOLUTION_MIN = 4; | |||||
private static int RESOLUTION_SEC = 5; | |||||
private static int RESOLUTION_MSEC = 6; | |||||
private int currentResolution = RESOLUTION_YEAR; | |||||
public IDateField() { | |||||
container = new FlowPanel(); | |||||
initWidget(container); | |||||
} | |||||
public void updateFromUIDL(UIDL uidl, Client client) { | |||||
// Ensure correct implementation and let layout manage caption | |||||
if (client.updateComponent(this, uidl, true)) | |||||
return; | |||||
// Save details | |||||
this.client = client; | |||||
id = uidl.getId(); | |||||
immediate = uidl.getBooleanAttribute("immediate"); | |||||
int newResolution = RESOLUTION_YEAR; | |||||
if(uidl.hasAttribute("month")) | |||||
newResolution = RESOLUTION_MONTH; | |||||
if(uidl.hasAttribute("day")) | |||||
newResolution = RESOLUTION_DAY; | |||||
if(uidl.hasAttribute("hour")) | |||||
newResolution = RESOLUTION_HOUR; | |||||
if(uidl.hasAttribute("min")) | |||||
newResolution = RESOLUTION_MIN; | |||||
if(uidl.hasAttribute("sec")) | |||||
newResolution = RESOLUTION_SEC; | |||||
if(uidl.hasAttribute("msec")) | |||||
newResolution = RESOLUTION_MSEC; | |||||
if(currentResolution > newResolution) | |||||
container.clear(); | |||||
if(uidl.hasVariable("year")) { | |||||
int selectedYear = uidl.getIntVariable("year"); | |||||
int y = container.getWidgetIndex(year); | |||||
if(y > -1) { | |||||
year = (ListBox) container.getWidget(y); | |||||
// Deselect old value | |||||
year.setItemSelected(year.getSelectedIndex(), false); | |||||
// and select new | |||||
for(int i=0; i < year.getItemCount(); i++) | |||||
if(year.getValue(i).equals(""+selectedYear)) { | |||||
year.setSelectedIndex(i); | |||||
break; | |||||
} | |||||
} else { | |||||
year = new ListBox(); | |||||
year.setStyleName(ISelect.CLASSNAME); | |||||
int today = 1900 + (new Date()).getYear(); | |||||
for(int i=1970; i<today+400; i++) { | |||||
year.addItem(""+i, ""+i); | |||||
if(i == selectedYear) | |||||
year.setSelectedIndex(year.getItemCount()-1); | |||||
} | |||||
year.addChangeListener(this); | |||||
container.add(year); | |||||
} | |||||
} | |||||
currentResolution = newResolution; | |||||
} | |||||
public void onChange(Widget sender) { | |||||
if(sender == year && client != null) | |||||
client.updateVariable(id, "year", year.getValue(year.getSelectedIndex()), immediate); | |||||
} | |||||
} |
package com.itmill.toolkit.terminal.gwt.client.ui; | package com.itmill.toolkit.terminal.gwt.client.ui; | ||||
import com.google.gwt.user.client.ui.HTML; | import com.google.gwt.user.client.ui.HTML; | ||||
import com.google.gwt.user.client.ui.Label; | |||||
import com.itmill.toolkit.terminal.gwt.client.Client; | import com.itmill.toolkit.terminal.gwt.client.Client; | ||||
import com.itmill.toolkit.terminal.gwt.client.Paintable; | import com.itmill.toolkit.terminal.gwt.client.Paintable; | ||||
import com.itmill.toolkit.terminal.gwt.client.UIDL; | import com.itmill.toolkit.terminal.gwt.client.UIDL; | ||||
public class ILabel extends HTML implements Paintable { | public class ILabel extends HTML implements Paintable { | ||||
public static final String CLASSNAME = "i-label"; | |||||
public void updateFromUIDL(UIDL uidl, Client client) { | public void updateFromUIDL(UIDL uidl, Client client) { | ||||
setStyleName(CLASSNAME); | |||||
if (client.updateComponent(this, uidl, true)) | if (client.updateComponent(this, uidl, true)) | ||||
return; | return; |
public class IOptionGroup extends IOptionGroupBase { | public class IOptionGroup extends IOptionGroupBase { | ||||
private static final String CLASSNAME = "i-select-optiongroup"; | |||||
public static final String CLASSNAME = "i-select-optiongroup"; | |||||
private Panel panel; | private Panel panel; | ||||
abstract class IOptionGroupBase extends Composite implements Paintable, ClickListener, ChangeListener, KeyboardListener { | abstract class IOptionGroupBase extends Composite implements Paintable, ClickListener, ChangeListener, KeyboardListener { | ||||
static final String CLASSNAME_OPTION = "i-select-option"; | |||||
public static final String CLASSNAME_OPTION = "i-select-option"; | |||||
Client client; | Client client; | ||||
public class IPanel extends FlowPanel implements Paintable { | public class IPanel extends FlowPanel implements Paintable { | ||||
private static final String CLASSNAME = "i-panel"; | |||||
public static final String CLASSNAME = "i-panel"; | |||||
Client client; | Client client; | ||||
public class ISelect extends IOptionGroupBase { | public class ISelect extends IOptionGroupBase { | ||||
private static final String CLASSNAME = "i-select"; | |||||
public static final String CLASSNAME = "i-select"; | |||||
private static final int VISIBLE_COUNT = 10; | private static final int VISIBLE_COUNT = 10; | ||||
import java.util.Iterator; | import java.util.Iterator; | ||||
import com.google.gwt.user.client.ui.DeckPanel; | import com.google.gwt.user.client.ui.DeckPanel; | ||||
import com.google.gwt.user.client.ui.HorizontalPanel; | |||||
import com.google.gwt.user.client.ui.Label; | import com.google.gwt.user.client.ui.Label; | ||||
import com.google.gwt.user.client.ui.SourcesTabEvents; | import com.google.gwt.user.client.ui.SourcesTabEvents; | ||||
import com.google.gwt.user.client.ui.TabBar; | import com.google.gwt.user.client.ui.TabBar; | ||||
public class ITabsheet extends TabPanel implements Paintable { | public class ITabsheet extends TabPanel implements Paintable { | ||||
private static final String CLASSNAME = "i-tabsheet"; | |||||
public static final String CLASSNAME = "i-tabsheet"; | |||||
String id; | String id; | ||||
/** | /** | ||||
* The input node CSS classname. | * The input node CSS classname. | ||||
*/ | */ | ||||
private static final String CLASSNAME = "i-textfield"; | |||||
public static final String CLASSNAME = "i-textfield"; | |||||
/** | /** | ||||
* This CSS classname is added to the input node on hover. | * This CSS classname is added to the input node on hover. | ||||
*/ | */ | ||||
private static final String CLASSNAME_FOCUS = "i-textfield-focus"; | |||||
public static final String CLASSNAME_FOCUS = "i-textfield-focus"; | |||||
protected String id; | protected String id; | ||||
public class ITree extends Tree implements Paintable { | public class ITree extends Tree implements Paintable { | ||||
private static final String CLASSNAME = "i-tree"; | |||||
public static final String CLASSNAME = "i-tree"; | |||||
Set selectedIds = new HashSet(); | Set selectedIds = new HashSet(); | ||||
Client client; | Client client; |
package com.itmill.toolkit.terminal.gwt.client.ui; | package com.itmill.toolkit.terminal.gwt.client.ui; | ||||
import com.google.gwt.user.client.ui.FlowPanel; | |||||
import com.itmill.toolkit.terminal.gwt.client.Client; | import com.itmill.toolkit.terminal.gwt.client.Client; | ||||
import com.itmill.toolkit.terminal.gwt.client.Paintable; | import com.itmill.toolkit.terminal.gwt.client.Paintable; | ||||
import com.itmill.toolkit.terminal.gwt.client.UIDL; | import com.itmill.toolkit.terminal.gwt.client.UIDL; |