1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173
| package test;
import java.io.File;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
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.Tree;
import org.eclipse.swt.widgets.TreeItem;
public class TestTreeWithFilter {
static boolean showFile = false;
static TreeViewer treeViewer = null;
static void checkPath(final TreeItem item, boolean checked, boolean grayed) {
if (item == null) {
return;
}
if (grayed) {
checked = true;
} else {
int index = 0;
TreeItem[] items = item.getItems();
while (index < items.length) {
TreeItem child = items[index];
if (child.getGrayed() || (checked != child.getChecked())) {
checked = grayed = true;
break;
}
index++;
}
}
item.setChecked(checked);
item.setGrayed(grayed);
checkPath(item.getParentItem(), checked, grayed);
}
static void checkItems(final TreeItem item, final boolean checked) {
item.setGrayed(false);
item.setChecked(checked);
TreeItem[] items = item.getItems();
for (TreeItem item2 : items) {
checkItems(item2, checked);
}
}
public static void main(final String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
Composite composite = new Composite(shell, SWT.None);
composite.setLayout(new GridLayout(1, false));
treeViewer = new TreeViewer(composite, SWT.BORDER | SWT.CHECK);
treeViewer.setContentProvider(new ITreeContentProvider() {
@Override
public void inputChanged(final Viewer viewer, final Object oldInput, final Object newInput) {
}
@Override
public void dispose() {
}
@Override
public Object[] getElements(final Object inputElement) {
return ((File) inputElement).listFiles();
}
@Override
public boolean hasChildren(final Object element) {
if (element != null) {
File file = (File) element;
File[] fileChildren = file.listFiles();
if (fileChildren != null) {
return fileChildren.length != 0;
}
}
return false;
}
@Override
public Object getParent(final Object element) {
return null;
}
@Override
public Object[] getChildren(final Object parentElement) {
if (parentElement != null) {
File file = (File) parentElement;
return file.listFiles();
}
return null;
}
});
treeViewer.setLabelProvider(new LabelProvider() {
@Override
public String getText(final Object element) {
File file = (File) element;
return file.getName();
}
});
treeViewer.setFilters(new ViewerFilter[] { new ViewerFilter() {
@Override
public boolean select(final Viewer viewer, final Object parentElement, final Object element) {
if (element != null) {
File file = (File) element;
return ((showFile && file.isFile()) || file.isDirectory());
}
return false;
}
} });
Tree tree = treeViewer.getTree();
tree.addListener(SWT.Selection, new Listener() {
public void handleEvent(final Event event) {
if (event.detail == SWT.CHECK) {
TreeItem item = (TreeItem) event.item;
boolean checked = item.getChecked();
checkItems(item, checked);
checkPath(item.getParentItem(), checked, false);
}
}
});
tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
Button filtrer = new Button(composite, SWT.CHECK);
filtrer.setText("Afficher les fichiers");
filtrer.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(final SelectionEvent e) {
showFile = ((Button) e.getSource()).getSelection();
treeViewer.refresh();
}
@Override
public void widgetDefaultSelected(final SelectionEvent e) {
}
});
filtrer.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false, 1, 1));
treeViewer.setInput(new File("C:\\"));
tree.setSize(200, 200);
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
} |
Partager