Mercurial > projects > dbus-d
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(); + } +} +