diff dbus-d-javatests/jsrc/testapp/FileBrowserSample.java @ 0:a5576806d36d

recreate repository without any libs for lightweight repository
author Frank Benoit <benoit@tionex.de>
date Sat, 20 Oct 2007 18:07:18 +0200
parents
children 65fb7ef02c50
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dbus-d-javatests/jsrc/testapp/FileBrowserSample.java	Sat Oct 20 18:07:18 2007 +0200
@@ -0,0 +1,231 @@
+/*******************************************************************************
+ * All Right Reserved. Copyright (c) 1998, 2004 Jackwind Li Guojie
+ * 
+ * Created on Mar 9, 2004 7:07:16 PM by JACK $Id$
+ *  
+ ******************************************************************************/
+
+package testapp;
+
+import java.io.File;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ToolBarManager;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.TreeEditor;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.events.TreeEvent;
+import org.eclipse.swt.events.TreeListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.ImageData;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.program.Program;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeItem;
+
+public class FileBrowserSample {
+  Display display = new Display();
+  Shell shell = new Shell(display);
+
+  Tree tree;
+
+  File rootDir;
+
+  public FileBrowserSample() {
+    Action actionSetRootDir = new Action("Set Root Dir") {
+      public void run() {
+        DirectoryDialog dialog = new DirectoryDialog(shell);
+        String path = dialog.open();
+        if (path != null) {
+          setRootDir(new File(path));
+        }
+      }
+    };
+
+
+    ToolBar toolBar = new ToolBar(shell, SWT.FLAT);
+    ToolBarManager manager = new ToolBarManager(toolBar);
+    manager.add(actionSetRootDir);
+
+    manager.update(true);
+
+    shell.setLayout(new GridLayout());
+
+    tree = new Tree(shell, SWT.BORDER);
+    tree.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+    setRootDir(new File("C:/"));
+
+    tree.addTreeListener(new TreeListener() {
+      public void treeCollapsed(TreeEvent e) {
+      }
+
+      public void treeExpanded(TreeEvent e) {
+        TreeItem item = (TreeItem) e.item;
+        TreeItem[] children = item.getItems();
+
+        for (int i = 0; i < children.length; i++)
+          if (children[i].getData() == null)
+            children[i].dispose();
+          else // Child files already added to the tree.
+            return;
+
+        File[] files = ((File) item.getData()).listFiles();
+        for (int i = 0; files != null && i < files.length; i++)
+          addFileToTree(item, files[i]);
+      }
+    });
+
+    tree.addSelectionListener(new SelectionListener() {
+      public void widgetSelected(SelectionEvent e) {
+      }
+      // Gets called when a tree item is double-clicked.
+      public void widgetDefaultSelected(SelectionEvent e) {
+        TreeItem item = (TreeItem) e.item;
+        File file = (File) item.getData();
+        if (Program.launch(file.getAbsolutePath())) {
+          System.out.println("File has been launched: " + file);
+        } else {
+          System.out.println("Unable to launch file: " + file);
+        }
+      }
+    });
+
+    shell.setSize(400, 260);
+    shell.open();
+    //textUser.forceFocus();
+
+    // Set up the event loop.
+    while (!shell.isDisposed()) {
+      if (!display.readAndDispatch()) {
+        // If no more entries in event queue
+        display.sleep();
+      }
+    }
+
+    display.dispose();
+  }
+
+  /**
+   * Sets the root directory to browse from.
+   * 
+   * @param root
+   */
+  private void setRootDir(File root) {
+    // validates the root first. 
+    if( (!root.isDirectory()) || (!root.exists()))
+      throw new IllegalArgumentException("Invalid root: " + root);
+    
+    this.rootDir = root;
+    shell.setText("Now browsing: " + root.getAbsolutePath());
+
+    // Remove all the items in the tree.
+    if (tree.getItemCount() > 0) {
+      TreeItem[] items = tree.getItems();
+      for (int i = 0; i < items.length; i++) {
+        items[i].dispose();
+        // Dispose itself and all of its descendants.
+      }
+    }
+
+    // Adds files under the root to the tree. 
+    File[] files = root.listFiles();
+    for(int i=0; files != null && i < files.length; i++)
+      addFileToTree(tree, files[i]);
+  }
+
+  /**
+   * Adds the given file to the tree.
+   * 
+   * @param parent
+   * @param file
+   */
+  private void addFileToTree(Object parent, File file) {
+    TreeItem item = null;
+
+    if (parent instanceof Tree)
+      item = new TreeItem((Tree) parent, SWT.NULL);
+    else if (parent instanceof TreeItem)
+      item = new TreeItem((TreeItem) parent, SWT.NULL);
+    else
+      throw new IllegalArgumentException(
+        "parent should be a tree or a tree item: " + parent);
+
+    item.setText(file.getName());
+    item.setImage(getIcon(file));
+
+    item.setData(file);
+
+    if (file.isDirectory()) {
+      //      // recursively adds all the children of this file.
+      //      File[] files = file.listFiles();
+      //      for(int i=0; i<files.length; i++)
+      //        buildTree(item, files[i]);
+      if (file.list() != null && file.list().length > 0)
+        new TreeItem(item, SWT.NULL);
+    }
+  }
+
+  private ImageRegistry imageRegistry;
+  Image iconFolder = new Image(shell.getDisplay(), "icons/java2s.gif");
+  Image iconFile = new Image(shell.getDisplay(), "icons/java2s.gif");
+
+  /**
+   * Returns an icon representing the specified file.
+   * 
+   * @param file
+   * @return
+   */
+  private Image getIcon(File file) {
+    if (file.isDirectory())
+      return iconFolder;
+
+    int lastDotPos = file.getName().indexOf('.');
+    if (lastDotPos == -1)
+      return iconFile;
+
+    Image image = getIcon(file.getName().substring(lastDotPos + 1));
+    return image == null ? iconFile : image;
+  }
+
+  /**
+   * Returns the icon for the file type with the specified extension.
+   * 
+   * @param extension
+   * @return
+   */
+  private Image getIcon(String extension) {
+    if (imageRegistry == null)
+      imageRegistry = new ImageRegistry();
+    Image image = imageRegistry.get(extension);
+    if (image != null)
+      return image;
+
+    Program program = Program.findProgram(extension);
+    ImageData imageData = (program == null ? null : program.getImageData());
+    if (imageData != null) {
+      image = new Image(shell.getDisplay(), imageData);
+      imageRegistry.put(extension, image);
+    } else {
+      image = iconFile;
+    }
+
+    return image;
+  }
+
+  public static void main(String[] args) {
+    new FileBrowserSample();
+  }
+}
+