Skip to content
Snippets Groups Projects
Commit a2b3a228 authored by Sylvain Mainguy's avatar Sylvain Mainguy
Browse files

No commit message

No commit message
parent 92e12b11
Branches
No related tags found
No related merge requests found
...@@ -23,9 +23,13 @@ package fr.soleil.comete.swt; ...@@ -23,9 +23,13 @@ package fr.soleil.comete.swt;
import java.io.File; import java.io.File;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.eclipse.swt.SWT; import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Composite;
...@@ -33,6 +37,7 @@ import org.eclipse.swt.widgets.Display; ...@@ -33,6 +37,7 @@ import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TreeItem; import org.eclipse.swt.widgets.TreeItem;
import fr.soleil.comete.definition.event.TreeNodeSelectionEvent;
import fr.soleil.comete.definition.listener.ITreeNodeSelectionListener; import fr.soleil.comete.definition.listener.ITreeNodeSelectionListener;
import fr.soleil.comete.definition.widget.ITree; import fr.soleil.comete.definition.widget.ITree;
import fr.soleil.comete.definition.widget.util.BasicTreeNode; import fr.soleil.comete.definition.widget.util.BasicTreeNode;
...@@ -44,10 +49,10 @@ import fr.soleil.comete.swt.util.TreeNodeTool; ...@@ -44,10 +49,10 @@ import fr.soleil.comete.swt.util.TreeNodeTool;
* *
* @author saintin * @author saintin
*/ */
public class Tree extends CometeComposite<org.eclipse.swt.widgets.Tree> implements ITree { public class Tree extends CometeComposite<org.eclipse.swt.widgets.Tree> implements ITree, SelectionListener {
protected static final Rectangle SHELL_BOUNDS = new Rectangle(0, 0, 800, 800);
protected final List<WeakReference<ITreeNodeSelectionListener>> selectionListeners; protected final List<WeakReference<ITreeNodeSelectionListener>> selectionListeners;
protected ITreeNode rootNode; protected ITreeNode rootNode;
/** /**
...@@ -56,24 +61,13 @@ public class Tree extends CometeComposite<org.eclipse.swt.widgets.Tree> implemen ...@@ -56,24 +61,13 @@ public class Tree extends CometeComposite<org.eclipse.swt.widgets.Tree> implemen
public Tree(Composite parent, int style) { public Tree(Composite parent, int style) {
super(parent, style); super(parent, style);
selectionListeners = new ArrayList<WeakReference<ITreeNodeSelectionListener>>(); selectionListeners = new ArrayList<WeakReference<ITreeNodeSelectionListener>>();
setLayout(new FillLayout());
} }
@Override @Override
protected org.eclipse.swt.widgets.Tree initControl() { protected org.eclipse.swt.widgets.Tree initControl() {
return new org.eclipse.swt.widgets.Tree(this, SWT.NONE); org.eclipse.swt.widgets.Tree tree = new org.eclipse.swt.widgets.Tree(this, SWT.MULTI);
} tree.addSelectionListener(this);
return tree;
@Override
public void setHorizontalAlignment(int halign) {
// TODO Auto-generated method stub
}
@Override
public int getHorizontalAlignment() {
// TODO Auto-generated method stub
return 0;
} }
@Override @Override
...@@ -84,72 +78,56 @@ public class Tree extends CometeComposite<org.eclipse.swt.widgets.Tree> implemen ...@@ -84,72 +78,56 @@ public class Tree extends CometeComposite<org.eclipse.swt.widgets.Tree> implemen
@Override @Override
public void setRootNode(ITreeNode rootNode) { public void setRootNode(ITreeNode rootNode) {
if (getControl() != null) { if (getControl() != null) {
// remove all nodes to keep a single root, as swt allows multiple roots
getControl().removeAll();
TreeNodeTool.createRootTreeNode(getControl(), rootNode); TreeNodeTool.createRootTreeNode(getControl(), rootNode);
this.rootNode = rootNode; this.rootNode = rootNode;
//TODO fire
} }
} }
@Override @Override
public ITreeNode getNodeAt(int x, int y) { public ITreeNode getNodeAt(int x, int y) {
return null; TreeItem item = getControl().getItem(new Point(x, y));
return TreeNodeTool.findTreeNodeForTreeItem(item, rootNode);
} }
@Override @Override
public void selectNodes(boolean keepPreviousSelection, ITreeNode... nodes) { public void selectNodes(boolean keepPreviousSelection, ITreeNode... nodes) {
}
@Override
public void deselectNodes(ITreeNode... nodes) {
TreeItem rootItem = getControl().getItem(0);
// find new items to select
List<TreeItem> itemsToSelect = new LinkedList<TreeItem>();
for (ITreeNode node : nodes) {
TreeItem item = TreeNodeTool.findTreeItemFromTreeNode(node, rootItem);
if (item != null && !itemsToSelect.contains(item)) {
itemsToSelect.add(item);
} }
@Override
public void clearSelection() {
TreeItem[] treeItem = getControl().getSelection();
} }
@Override // get previously selected items
public void removeAllTreeNodeSelectionListeners() { if (keepPreviousSelection) {
synchronized (selectionListeners) { TreeItem[] currentSelection = getControl().getSelection();
selectionListeners.clear(); for (TreeItem selectedItem : currentSelection) {
itemsToSelect.add(selectedItem);
} }
} }
public static void main(final String[] args) { getControl().setSelection((TreeItem[]) itemsToSelect.toArray());
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setBounds(SHELL_BOUNDS);
shell.setLayout(new FillLayout(SWT.VERTICAL));
Tree tree = new Tree(shell, SWT.NONE);
ITreeNode root = new BasicTreeNode();
root.setName("ROOT");
File[] roots = File.listRoots();
System.out.println("root length " + roots.length);
for (int i = 0; i < roots.length; i++) {
ITreeNode child = new BasicTreeNode();
child.setName(roots[i].toString());
child.setData(roots[i]);
root.addNodes(child);
} }
tree.setRootNode(root); @Override
public void deselectNodes(ITreeNode... nodes) {
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
} }
display.dispose(); @Override
System.exit(0); public void clearSelection() {
getControl().deselectAll();
// TODO fireSelectionChanged
} }
@Override @Override
...@@ -222,4 +200,115 @@ public class Tree extends CometeComposite<org.eclipse.swt.widgets.Tree> implemen ...@@ -222,4 +200,115 @@ public class Tree extends CometeComposite<org.eclipse.swt.widgets.Tree> implemen
} }
@Override
public void removeAllTreeNodeSelectionListeners() {
synchronized (selectionListeners) {
selectionListeners.clear();
}
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
// warnSelectionListeners(new EventObject(this));
}
@Override
public void widgetSelected(SelectionEvent e) {
// warnSelectionListeners(new EventObject(this));
}
// if (e != null) {
// TreePath[] paths = e.getPaths();
// if (paths != null) {
// List<TreePath> added = new ArrayList<TreePath>();
// List<TreePath> removed = new ArrayList<TreePath>();
// for (int i = 0; i < paths.length; i++) {
// if (e.isAddedPath(i)) {
// added.add(paths[i]);
// }
// else {
// removed.add(paths[i]);
// }
// }
// List<ITreeNode> nodes = extractNodes(removed);
// if (!nodes.isEmpty()) {
// warnSelectionListeners(new TreeNodeSelectionEvent(this, false,
// nodes.toArray(new ITreeNode[nodes.size()])));
// nodes.clear();
// }
// nodes = extractNodes(added);
// if (!nodes.isEmpty()) {
// warnSelectionListeners(new TreeNodeSelectionEvent(this, true,
// nodes.toArray(new ITreeNode[nodes.size()])));
// nodes.clear();
// }
// }
// }
protected void warnSelectionListeners(TreeNodeSelectionEvent event) {
if (event != null) {
synchronized (selectionListeners) {
List<WeakReference<ITreeNodeSelectionListener>> toRemove = new ArrayList<WeakReference<ITreeNodeSelectionListener>>();
for (WeakReference<ITreeNodeSelectionListener> ref : selectionListeners) {
ITreeNodeSelectionListener selectionListener = ref.get();
if (selectionListener == null) {
toRemove.add(ref);
}
else {
selectionListener.selectionChanged(event);
}
}
selectionListeners.removeAll(toRemove);
toRemove.clear();
}
}
}
@Override
public void setHorizontalAlignment(int halign) {
// TODO Auto-generated method stub
}
@Override
public int getHorizontalAlignment() {
// TODO Auto-generated method stub
return 0;
}
public static void main(final String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setBounds(new Rectangle(0, 0, 800, 800));
shell.setLayout(new FillLayout(SWT.VERTICAL));
Tree tree = new Tree(shell, SWT.NONE);
ITreeNode root = new BasicTreeNode();
root.setName("ROOT");
File[] roots = File.listRoots();
System.out.println("root length " + roots.length);
for (int i = 0; i < roots.length; i++) {
ITreeNode child = new BasicTreeNode();
child.setName(roots[i].toString());
child.setData(roots[i]);
root.addNodes(child);
}
tree.setRootNode(root);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
System.exit(0);
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment