You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Time.java 7.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. package com.itmill.toolkit.terminal.gwt.client.ui;
  2. import com.google.gwt.user.client.ui.ChangeListener;
  3. import com.google.gwt.user.client.ui.FlowPanel;
  4. import com.google.gwt.user.client.ui.ListBox;
  5. import com.google.gwt.user.client.ui.Widget;
  6. public class Time extends FlowPanel implements ChangeListener {
  7. private IDateField datefield;
  8. private ListBox hours;
  9. private ListBox mins;
  10. private ListBox sec;
  11. private ListBox msec;
  12. private ListBox ampm;
  13. private int resolution = IDateField.RESOLUTION_HOUR;
  14. private boolean readonly;
  15. public Time(IDateField parent) {
  16. super();
  17. datefield = parent;
  18. setStyleName(IDateField.CLASSNAME + "-time");
  19. }
  20. private void buildTime(boolean redraw) {
  21. boolean thc = datefield.getDateTimeService().isTwelveHourClock();
  22. if (redraw) {
  23. clear();
  24. int numHours = thc ? 12 : 24;
  25. hours = new ListBox();
  26. hours.setStyleName(ISelect.CLASSNAME);
  27. for (int i = 0; i < numHours; i++)
  28. hours.addItem((i < 10) ? "0" + i : "" + i);
  29. hours.addChangeListener(this);
  30. if (thc) {
  31. ampm = new ListBox();
  32. ampm.setStyleName(ISelect.CLASSNAME);
  33. String[] ampmText = datefield.getDateTimeService()
  34. .getAmPmStrings();
  35. ampm.addItem(ampmText[0]);
  36. ampm.addItem(ampmText[1]);
  37. ampm.addChangeListener(this);
  38. }
  39. if (datefield.getCurrentResolution() >= IDateField.RESOLUTION_MIN) {
  40. mins = new ListBox();
  41. mins.setStyleName(ISelect.CLASSNAME);
  42. for (int i = 0; i < 60; i++)
  43. mins.addItem((i < 10) ? "0" + i : "" + i);
  44. mins.addChangeListener(this);
  45. }
  46. if (datefield.getCurrentResolution() >= IDateField.RESOLUTION_SEC) {
  47. sec = new ListBox();
  48. sec.setStyleName(ISelect.CLASSNAME);
  49. for (int i = 0; i < 60; i++)
  50. sec.addItem((i < 10) ? "0" + i : "" + i);
  51. sec.addChangeListener(this);
  52. }
  53. if (datefield.getCurrentResolution() == IDateField.RESOLUTION_MSEC) {
  54. msec = new ListBox();
  55. msec.setStyleName(ISelect.CLASSNAME);
  56. for (int i = 0; i < 1000; i++) {
  57. if (i < 10)
  58. msec.addItem("00" + i);
  59. else if (i < 100)
  60. msec.addItem("0" + i);
  61. else
  62. msec.addItem("" + i);
  63. }
  64. msec.addChangeListener(this);
  65. }
  66. String delimiter = datefield.getDateTimeService()
  67. .getClockDelimeter();
  68. boolean ro = datefield.isReadonly();
  69. if (ro) {
  70. int h = 0;
  71. if (datefield.getCurrentDate() != null)
  72. h = datefield.getCurrentDate().getHours();
  73. if (thc)
  74. h -= h < 12 ? 0 : 12;
  75. add(new ILabel(h < 10 ? "0" + h : "" + h));
  76. } else
  77. add(hours);
  78. if (datefield.getCurrentResolution() >= IDateField.RESOLUTION_MIN) {
  79. add(new ILabel(delimiter));
  80. if (ro) {
  81. int m = mins.getSelectedIndex();
  82. add(new ILabel(m < 10 ? "0" + m : "" + m));
  83. } else
  84. add(mins);
  85. }
  86. if (datefield.getCurrentResolution() >= IDateField.RESOLUTION_SEC) {
  87. add(new ILabel(delimiter));
  88. if (ro) {
  89. int s = sec.getSelectedIndex();
  90. add(new ILabel(s < 10 ? "0" + s : "" + s));
  91. } else
  92. add(sec);
  93. }
  94. if (datefield.getCurrentResolution() == IDateField.RESOLUTION_MSEC) {
  95. add(new ILabel("."));
  96. if (ro) {
  97. int m = datefield.getMilliseconds();
  98. String ms = m < 100 ? "0" + m : "" + m;
  99. add(new ILabel(m < 10 ? "0" + ms : ms));
  100. } else
  101. add(msec);
  102. }
  103. if (datefield.getCurrentResolution() == IDateField.RESOLUTION_HOUR) {
  104. add(new ILabel(delimiter + "00")); // o'clock
  105. }
  106. if (thc) {
  107. add(new ILabel("&nbsp;"));
  108. if (ro)
  109. add(new ILabel(ampm.getItemText(datefield.getCurrentDate()
  110. .getHours() < 12 ? 0 : 1)));
  111. else
  112. add(ampm);
  113. }
  114. if (ro)
  115. return;
  116. }
  117. // Update times
  118. if (thc) {
  119. int h = datefield.getCurrentDate().getHours();
  120. ampm.setSelectedIndex(h < 12 ? 0 : 1);
  121. h -= ampm.getSelectedIndex() * 12;
  122. hours.setSelectedIndex(h);
  123. } else
  124. hours.setSelectedIndex(datefield.getCurrentDate().getHours());
  125. if (datefield.getCurrentResolution() >= IDateField.RESOLUTION_MIN)
  126. mins.setSelectedIndex(datefield.getCurrentDate().getMinutes());
  127. if (datefield.getCurrentResolution() >= IDateField.RESOLUTION_SEC)
  128. sec.setSelectedIndex(datefield.getCurrentDate().getSeconds());
  129. if (datefield.getCurrentResolution() == IDateField.RESOLUTION_MSEC)
  130. msec.setSelectedIndex(datefield.getMilliseconds());
  131. if (thc)
  132. ampm
  133. .setSelectedIndex(datefield.getCurrentDate().getHours() < 12 ? 0
  134. : 1);
  135. if (datefield.isReadonly() && !redraw) {
  136. // Do complete redraw when in read-only status
  137. clear();
  138. String delimiter = datefield.getDateTimeService()
  139. .getClockDelimeter();
  140. int h = datefield.getCurrentDate().getHours();
  141. if (thc)
  142. h -= h < 12 ? 0 : 12;
  143. add(new ILabel(h < 10 ? "0" + h : "" + h));
  144. if (datefield.getCurrentResolution() >= IDateField.RESOLUTION_MIN) {
  145. add(new ILabel(delimiter));
  146. int m = mins.getSelectedIndex();
  147. add(new ILabel(m < 10 ? "0" + m : "" + m));
  148. }
  149. if (datefield.getCurrentResolution() >= IDateField.RESOLUTION_SEC) {
  150. add(new ILabel(delimiter));
  151. int s = sec.getSelectedIndex();
  152. add(new ILabel(s < 10 ? "0" + s : "" + s));
  153. }
  154. if (datefield.getCurrentResolution() == IDateField.RESOLUTION_MSEC) {
  155. add(new ILabel("."));
  156. int m = datefield.getMilliseconds();
  157. String ms = m < 100 ? "0" + m : "" + m;
  158. add(new ILabel(m < 10 ? "0" + ms : ms));
  159. }
  160. if (datefield.getCurrentResolution() == IDateField.RESOLUTION_HOUR) {
  161. add(new ILabel(delimiter + "00")); // o'clock
  162. }
  163. if (thc) {
  164. add(new ILabel("&nbsp;"));
  165. add(new ILabel(ampm.getItemText(datefield.getCurrentDate()
  166. .getHours() < 12 ? 0 : 1)));
  167. }
  168. }
  169. boolean enabled = datefield.isEnabled();
  170. hours.setEnabled(enabled);
  171. if (mins != null)
  172. mins.setEnabled(enabled);
  173. if (sec != null)
  174. sec.setEnabled(enabled);
  175. if (msec != null)
  176. msec.setEnabled(enabled);
  177. if (ampm != null)
  178. ampm.setEnabled(enabled);
  179. }
  180. public void updateTime(boolean redraw) {
  181. buildTime(redraw || resolution != datefield.getCurrentResolution()
  182. || readonly != datefield.isReadonly());
  183. if (datefield instanceof ITextualDate)
  184. ((ITextualDate) datefield).buildDate();
  185. resolution = datefield.getCurrentResolution();
  186. readonly = datefield.isReadonly();
  187. }
  188. public void onChange(Widget sender) {
  189. if (sender == hours) {
  190. int h = hours.getSelectedIndex();
  191. if (datefield.getDateTimeService().isTwelveHourClock())
  192. h = h + ampm.getSelectedIndex() * 12;
  193. datefield.getCurrentDate().setHours(h);
  194. datefield.getClient().updateVariable(datefield.getId(), "hour", h,
  195. datefield.isImmediate());
  196. updateTime(false);
  197. } else if (sender == mins) {
  198. int m = mins.getSelectedIndex();
  199. datefield.getCurrentDate().setMinutes(m);
  200. datefield.getClient().updateVariable(datefield.getId(), "min", m,
  201. datefield.isImmediate());
  202. updateTime(false);
  203. } else if (sender == sec) {
  204. int s = sec.getSelectedIndex();
  205. datefield.getCurrentDate().setSeconds(s);
  206. datefield.getClient().updateVariable(datefield.getId(), "sec", s,
  207. datefield.isImmediate());
  208. updateTime(false);
  209. } else if (sender == msec) {
  210. int ms = msec.getSelectedIndex();
  211. datefield.setMilliseconds(ms);
  212. datefield.getClient().updateVariable(datefield.getId(), "msec", ms,
  213. datefield.isImmediate());
  214. updateTime(false);
  215. } else if (sender == ampm) {
  216. int h = hours.getSelectedIndex() + ampm.getSelectedIndex() * 12;
  217. datefield.getCurrentDate().setHours(h);
  218. datefield.getClient().updateVariable(datefield.getId(), "hour", h,
  219. datefield.isImmediate());
  220. updateTime(false);
  221. }
  222. }
  223. }