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:trunk
private void makeUidlRequest(String 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);
try {
rb.sendRequest(requestData, new RequestCallback() {
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;
+ }
}
--- /dev/null
+package com.itmill.toolkit.terminal.gwt.client;\r
+\r
+/**\r
+ * This class provides date/time parsing services to all components.\r
+ * \r
+ * @author Jouni Koivuviita\r
+ *\r
+ */\r
+public class DateTimeService {\r
+ \r
+ private LocaleService localeService;\r
+ \r
+ private String currentLocale;\r
+ \r
+ public DateTimeService(Client client) {\r
+ localeService = new LocaleService(client);\r
+ }\r
+ \r
+ public DateTimeService(Client client, String locale) {\r
+ this(client);\r
+ setLocale(locale);\r
+ }\r
+ \r
+ public void setLocale(String locale) {\r
+ currentLocale = locale;\r
+ }\r
+ \r
+ public String getLocale() {\r
+ return currentLocale;\r
+ }\r
+ \r
+ public String getMonth(int month) throws Exception {\r
+ if(currentLocale != null)\r
+ return localeService.getMonthNames(currentLocale)[month];\r
+ else throw new Exception("No locale specified.");\r
+ }\r
+ \r
+ public String getShortMonth(int month) throws Exception {\r
+ if(currentLocale != null)\r
+ return localeService.getShortMonthNames(currentLocale)[month];\r
+ else throw new Exception("No locale specified.");\r
+ }\r
+\r
+}\r
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.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.IGridLayout;
import com.itmill.toolkit.terminal.gwt.client.ui.IHorizontalLayout;
}
if ("table".equals(tag))
return new ITable();
+ if("datefield".equals(tag))
+ return new IDateField();
return new IUnknownComponent();
}
--- /dev/null
+package com.itmill.toolkit.terminal.gwt.client;\r
+\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+\r
+import com.google.gwt.json.client.JSONObject;\r
+\r
+/**\r
+ * Date / time etc. localisation service for all widgets.\r
+ * Should cache all loaded locales as JSON strings.\r
+ * \r
+ * @author Jouni Koivuviita\r
+ *\r
+ */\r
+public class LocaleService {\r
+ \r
+ private Client client;\r
+ \r
+ private Map cache = new HashMap();\r
+ \r
+ public LocaleService(Client client){\r
+ this.client = client;\r
+ }\r
+ \r
+ private void loadLocale(String locale) {\r
+ JSONObject resp = client.getLocale(locale);\r
+ cache.put(locale, resp);\r
+ }\r
+ \r
+ public String[] getMonthNames(String locale) {\r
+ // TODO\r
+ //if(cache.containsKey(locale))\r
+ //else loadLocale(locale);\r
+ String[] temp = new String[12];\r
+ temp[0] = "tammi"; temp[1] = "helmi"; temp[2] = "maalis"; temp[3] = "huhti";\r
+ temp[4] = "touko"; temp[5] = "kesä"; temp[6] = "heinä"; temp[7] = "elo";\r
+ temp[8] = "syys"; temp[9] = "loka"; temp[10] = "marras"; temp[11] = "joulu";\r
+ return temp;\r
+ }\r
+ \r
+ public String[] getShortMonthNames(String locale) {\r
+ // TODO\r
+ //if(cache.containsKey(locale))\r
+ //else loadLocale(locale);\r
+ String[] temp = new String[12];\r
+ temp[0] = "tam"; temp[1] = "hel"; temp[2] = "maa"; temp[3] = "huh";\r
+ temp[4] = "tou"; temp[5] = "kes"; temp[6] = "hei"; temp[7] = "elo";\r
+ temp[8] = "syy"; temp[9] = "lok"; temp[10] = "mar"; temp[11] = "jou";\r
+ return temp;\r
+ }\r
+ \r
+ public String[] getDayNames(String locale) {\r
+ // TODO\r
+ //if(cache.containsKey(locale))\r
+ //else loadLocale(locale);\r
+ String[] temp = new String[7];\r
+ temp[1] = "maanatai"; temp[2] = "tiistai"; temp[3] = "keskiviikko";\r
+ temp[4] = "torstai"; temp[5] = "perjantai"; temp[6] = "lauantai";\r
+ temp[0] = "sunnuntai";\r
+ return temp;\r
+ }\r
+ \r
+ public String[] getShortDayNames(String locale) {\r
+ // TODO\r
+ //if(cache.containsKey(locale))\r
+ //else loadLocale(locale);\r
+ String[] temp = new String[7];\r
+ temp[1] = "ma"; temp[2] = "ti"; temp[3] = "ke";\r
+ temp[4] = "to"; temp[5] = "pe"; temp[6] = "la";\r
+ temp[0] = "su";\r
+ return temp;\r
+ }\r
+ \r
+ public int getFirstDayOfWeek(String locale) {\r
+ // TODO\r
+ //if(cache.containsKey(locale))\r
+ //else loadLocale(locale);\r
+ return 1;\r
+ }\r
+\r
+}\r
throw new IllegalArgumentException("No variables defined in tag.");
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) {
JSONString t = (JSONString) getVariableHash().get(name);
public class IButton extends Button implements Paintable {
- private static final String CLASSNAME = "i-button";
+ public static final String CLASSNAME = "i-button";
String id;
--- /dev/null
+package com.itmill.toolkit.terminal.gwt.client.ui;\r
+\r
+import java.util.Date;\r
+\r
+import com.google.gwt.user.client.ui.ChangeListener;\r
+import com.google.gwt.user.client.ui.Composite;\r
+import com.google.gwt.user.client.ui.FlowPanel;\r
+import com.google.gwt.user.client.ui.ListBox;\r
+import com.google.gwt.user.client.ui.Widget;\r
+import com.itmill.toolkit.terminal.gwt.client.Client;\r
+import com.itmill.toolkit.terminal.gwt.client.Paintable;\r
+import com.itmill.toolkit.terminal.gwt.client.UIDL;\r
+\r
+public class IDateField extends Composite implements Paintable, ChangeListener {\r
+ \r
+ \r
+ /*\r
+ * This implementation is old already.\r
+ * We should use the DateTimeService class (which is a draft) to get \r
+ * locale specific strings and use them to build the datefield \r
+ * and its different styles (with inheritance of course).\r
+ * \r
+ * Drafting usage patterns:\r
+ * \r
+ * DateTimeService dts = new DateTimeService(client, "fi_FI");\r
+ * String month = dts.getMonth(0); // Returns "January"\r
+ * String day = dts.getDay(19); // Returns e.g. "sunday"\r
+ * String dateformat = dts.getDateFormat(); // Returns something like MM_/_DD_/_YYYY\r
+ * String timeformat = dts.getTimeFormat(); // Returns something like HH_:_MM\r
+ * String date = dts.parseDate(new Date()); // Returns e.g. 6/19/2007 14:32\r
+ * String date = dts.parseFullDate(new Date()); // Returns e.g. Tuesday 6th June 2007 14:32\r
+ */\r
+ \r
+ \r
+ public static final String CLASSNAME = "i-datefield";\r
+ \r
+ String id;\r
+ \r
+ Client client;\r
+ \r
+ private boolean immediate;\r
+ \r
+ private FlowPanel container;\r
+ \r
+ private ListBox year;\r
+ \r
+ private static int RESOLUTION_YEAR = 0;\r
+ private static int RESOLUTION_MONTH = 1;\r
+ private static int RESOLUTION_DAY = 2;\r
+ private static int RESOLUTION_HOUR = 3;\r
+ private static int RESOLUTION_MIN = 4;\r
+ private static int RESOLUTION_SEC = 5;\r
+ private static int RESOLUTION_MSEC = 6;\r
+\r
+ private int currentResolution = RESOLUTION_YEAR;\r
+ \r
+ public IDateField() {\r
+ container = new FlowPanel();\r
+ initWidget(container);\r
+ }\r
+ \r
+ public void updateFromUIDL(UIDL uidl, Client client) {\r
+ // Ensure correct implementation and let layout manage caption\r
+ if (client.updateComponent(this, uidl, true))\r
+ return;\r
+\r
+ // Save details\r
+ this.client = client;\r
+ id = uidl.getId();\r
+ immediate = uidl.getBooleanAttribute("immediate");\r
+ \r
+ int newResolution = RESOLUTION_YEAR;\r
+ if(uidl.hasAttribute("month"))\r
+ newResolution = RESOLUTION_MONTH;\r
+ if(uidl.hasAttribute("day"))\r
+ newResolution = RESOLUTION_DAY;\r
+ if(uidl.hasAttribute("hour"))\r
+ newResolution = RESOLUTION_HOUR;\r
+ if(uidl.hasAttribute("min"))\r
+ newResolution = RESOLUTION_MIN;\r
+ if(uidl.hasAttribute("sec"))\r
+ newResolution = RESOLUTION_SEC;\r
+ if(uidl.hasAttribute("msec"))\r
+ newResolution = RESOLUTION_MSEC;\r
+ \r
+ if(currentResolution > newResolution)\r
+ container.clear();\r
+ \r
+ if(uidl.hasVariable("year")) {\r
+ int selectedYear = uidl.getIntVariable("year");\r
+ int y = container.getWidgetIndex(year);\r
+ if(y > -1) {\r
+ year = (ListBox) container.getWidget(y);\r
+ // Deselect old value\r
+ year.setItemSelected(year.getSelectedIndex(), false);\r
+ // and select new\r
+ for(int i=0; i < year.getItemCount(); i++)\r
+ if(year.getValue(i).equals(""+selectedYear)) {\r
+ year.setSelectedIndex(i);\r
+ break;\r
+ }\r
+ } else {\r
+ year = new ListBox();\r
+ year.setStyleName(ISelect.CLASSNAME);\r
+ int today = 1900 + (new Date()).getYear();\r
+ for(int i=1970; i<today+400; i++) {\r
+ year.addItem(""+i, ""+i);\r
+ if(i == selectedYear)\r
+ year.setSelectedIndex(year.getItemCount()-1);\r
+ }\r
+ year.addChangeListener(this);\r
+ container.add(year);\r
+ }\r
+ }\r
+ \r
+ \r
+ currentResolution = newResolution;\r
+ }\r
+\r
+ public void onChange(Widget sender) {\r
+ if(sender == year && client != null)\r
+ client.updateVariable(id, "year", year.getValue(year.getSelectedIndex()), immediate);\r
+ \r
+ }\r
+\r
+}\r
package com.itmill.toolkit.terminal.gwt.client.ui;
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.Paintable;
import com.itmill.toolkit.terminal.gwt.client.UIDL;
public class ILabel extends HTML implements Paintable {
+
+ public static final String CLASSNAME = "i-label";
public void updateFromUIDL(UIDL uidl, Client client) {
+
+ setStyleName(CLASSNAME);
if (client.updateComponent(this, uidl, true))
return;
\r
public class IOptionGroup extends IOptionGroupBase {\r
\r
- private static final String CLASSNAME = "i-select-optiongroup";\r
+ public static final String CLASSNAME = "i-select-optiongroup";\r
\r
private Panel panel;\r
\r
\r
abstract class IOptionGroupBase extends Composite implements Paintable, ClickListener, ChangeListener, KeyboardListener {\r
\r
- static final String CLASSNAME_OPTION = "i-select-option";\r
+ public static final String CLASSNAME_OPTION = "i-select-option";\r
\r
Client client;\r
\r
public class IPanel extends FlowPanel implements Paintable {
- private static final String CLASSNAME = "i-panel";
+ public static final String CLASSNAME = "i-panel";
Client client;
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;
import java.util.Iterator;
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.SourcesTabEvents;
import com.google.gwt.user.client.ui.TabBar;
public class ITabsheet extends TabPanel implements Paintable {
- private static final String CLASSNAME = "i-tabsheet";
+ public static final String CLASSNAME = "i-tabsheet";
String id;
/**
* 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.
*/
- private static final String CLASSNAME_FOCUS = "i-textfield-focus";
+ public static final String CLASSNAME_FOCUS = "i-textfield-focus";
protected String id;
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();
Client client;
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.Paintable;
import com.itmill.toolkit.terminal.gwt.client.UIDL;