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.

TreeFilesystemContainer.java 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. /*
  2. @ITMillApache2LicenseForJavaFiles@
  3. */
  4. package com.itmill.toolkit.demo;
  5. import java.io.File;
  6. import com.itmill.toolkit.data.util.FilesystemContainer;
  7. import com.itmill.toolkit.data.util.FilesystemContainer.FileItem;
  8. import com.itmill.toolkit.demo.util.SampleDirectory;
  9. import com.itmill.toolkit.terminal.Sizeable;
  10. import com.itmill.toolkit.ui.ExpandLayout;
  11. import com.itmill.toolkit.ui.Field;
  12. import com.itmill.toolkit.ui.Label;
  13. import com.itmill.toolkit.ui.Panel;
  14. import com.itmill.toolkit.ui.Tree;
  15. import com.itmill.toolkit.ui.Window;
  16. import com.itmill.toolkit.ui.Component.Event;
  17. import com.itmill.toolkit.ui.Component.Listener;
  18. /**
  19. * Browsable file explorer using Toolkit Tree component. Demonstrates: how to
  20. * use <code>com.itmill.toolkit.ui.Component.Tree</code> datasource container,
  21. * how to create <code>com.itmill.toolkit.data.util.FilesystemContainer</code>,
  22. * how to read <code>com.itmill.toolkit.ui.Component.Event</code> objects, how
  23. * to receive and handle any event by implementing
  24. * <code>com.itmill.toolkit.ui.Component.Listener</code>.
  25. *
  26. * @since 4.0.0
  27. *
  28. */
  29. public class TreeFilesystemContainer extends com.itmill.toolkit.Application
  30. implements Listener {
  31. // Filesystem explorer panel and it's components
  32. private final Panel explorerPanel = new Panel("Filesystem explorer");
  33. private final Tree filesystem = new Tree();
  34. // File properties panel and it's components
  35. private final Panel propertyPanel = new Panel("File properties");
  36. private final Label fileProperties = new Label();
  37. public void init() {
  38. final Window w = new Window("Tree FilesystemContainer demo");
  39. setMainWindow(w);
  40. final ExpandLayout main = new ExpandLayout();
  41. w.setLayout(main);
  42. main.setMargin(true);
  43. main.setSpacing(true);
  44. propertyPanel.setHeight(120);
  45. main.addComponent(propertyPanel);
  46. explorerPanel.setHeight(100);
  47. explorerPanel.setHeightUnits(Sizeable.UNITS_PERCENTAGE);
  48. main.addComponent(explorerPanel);
  49. main.expand(explorerPanel);
  50. // Explorer panel contains tree
  51. explorerPanel.addComponent(filesystem);
  52. // Property panel contains label
  53. propertyPanel.addComponent(fileProperties);
  54. fileProperties.setCaption("No file selected.");
  55. propertyPanel.setEnabled(false);
  56. // Get sample directory
  57. final File sampleDir = SampleDirectory.getDirectory(this);
  58. // Populate tree with FilesystemContainer
  59. final FilesystemContainer fsc = new FilesystemContainer(sampleDir, true);
  60. filesystem.setContainerDataSource(fsc);
  61. // "this" handles all filesystem events
  62. // e.g. node clicked, expanded etc.
  63. filesystem.addListener(this);
  64. // Value changes are immediate
  65. filesystem.setImmediate(true);
  66. }
  67. /**
  68. * Listener for any component events. This class has been registered as an
  69. * listener for component fsTree.
  70. */
  71. public void componentEvent(Event event) {
  72. // Check if event occured at fsTree component
  73. if (event.getSource() == filesystem) {
  74. // Check if event is about changing value
  75. if (event.getClass() == Field.ValueChangeEvent.class) {
  76. // Update property panel contents
  77. final FileItem fileItem = (FileItem) filesystem
  78. .getItem(filesystem.getValue());
  79. fileProperties.setIcon(fileItem.getIcon());
  80. fileProperties.setCaption(fileItem.getName() + ", size "
  81. + fileItem.getSize() + " bytes.");
  82. propertyPanel.setEnabled(true);
  83. }
  84. // here we could check for other type of events for filesystem
  85. // component
  86. }
  87. // here we could check for other component's events
  88. }
  89. }