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.

SimpleTree.java 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. /*
  2. @VaadinApache2LicenseForJavaFiles@
  3. */
  4. package com.vaadin.terminal.gwt.client;
  5. import com.google.gwt.dom.client.Document;
  6. import com.google.gwt.dom.client.SpanElement;
  7. import com.google.gwt.dom.client.Style;
  8. import com.google.gwt.dom.client.Style.BorderStyle;
  9. import com.google.gwt.dom.client.Style.Cursor;
  10. import com.google.gwt.dom.client.Style.Display;
  11. import com.google.gwt.dom.client.Style.Unit;
  12. import com.google.gwt.event.dom.client.ClickEvent;
  13. import com.google.gwt.event.dom.client.ClickHandler;
  14. import com.google.gwt.user.client.Element;
  15. import com.google.gwt.user.client.ui.ComplexPanel;
  16. import com.google.gwt.user.client.ui.Label;
  17. import com.google.gwt.user.client.ui.Widget;
  18. public class SimpleTree extends ComplexPanel {
  19. private Element children = Document.get().createDivElement().cast();
  20. private SpanElement handle = Document.get().createSpanElement();
  21. private SpanElement text = Document.get().createSpanElement();
  22. public SimpleTree() {
  23. setElement(Document.get().createDivElement());
  24. Style style = getElement().getStyle();
  25. style.setProperty("whiteSpace", "nowrap");
  26. style.setPadding(3, Unit.PX);
  27. style.setPaddingLeft(12, Unit.PX);
  28. style = handle.getStyle();
  29. style.setDisplay(Display.NONE);
  30. style.setProperty("textAlign", "center");
  31. style.setWidth(10, Unit.PX);
  32. style.setCursor(Cursor.POINTER);
  33. style.setBorderStyle(BorderStyle.SOLID);
  34. style.setBorderColor("#666");
  35. style.setBorderWidth(1, Unit.PX);
  36. style.setMarginRight(3, Unit.PX);
  37. style.setProperty("borderRadius", "4px");
  38. handle.setInnerHTML("+");
  39. getElement().appendChild(handle);
  40. getElement().appendChild(text);
  41. style = children.getStyle();
  42. style.setPaddingLeft(9, Unit.PX);
  43. style.setDisplay(Display.NONE);
  44. getElement().appendChild(children);
  45. addDomHandler(new ClickHandler() {
  46. @Override
  47. public void onClick(ClickEvent event) {
  48. if (event.getNativeEvent().getEventTarget().cast() == handle) {
  49. if (children.getStyle().getDisplay().intern() == Display.NONE
  50. .getCssName()) {
  51. open(event.getNativeEvent().getShiftKey());
  52. } else {
  53. close();
  54. }
  55. } else if (event.getNativeEvent().getEventTarget().cast() == text) {
  56. select(event);
  57. }
  58. }
  59. }, ClickEvent.getType());
  60. }
  61. protected void select(ClickEvent event) {
  62. }
  63. public void close() {
  64. children.getStyle().setDisplay(Display.NONE);
  65. handle.setInnerHTML("+");
  66. }
  67. public void open(boolean recursive) {
  68. handle.setInnerHTML("-");
  69. children.getStyle().setDisplay(Display.BLOCK);
  70. if (recursive) {
  71. for (Widget w : getChildren()) {
  72. if (w instanceof SimpleTree) {
  73. SimpleTree str = (SimpleTree) w;
  74. str.open(true);
  75. }
  76. }
  77. }
  78. }
  79. public SimpleTree(String caption) {
  80. this();
  81. setText(caption);
  82. }
  83. public void setText(String text) {
  84. this.text.setInnerText(text);
  85. }
  86. public void addItem(String text) {
  87. Label label = new Label(text);
  88. add(label, children);
  89. }
  90. @Override
  91. public void add(Widget child) {
  92. add(child, children);
  93. }
  94. @Override
  95. protected void add(Widget child, Element container) {
  96. super.add(child, container);
  97. handle.getStyle().setDisplay(Display.INLINE_BLOCK);
  98. getElement().getStyle().setPaddingLeft(3, Unit.PX);
  99. }
  100. }