This my code
package com.andika.sight.rcp.dialogs;
import java.util.LinkedList;
import java.util.List;
import java.util.HashMap;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT; //import org.eclipse.swt.events.SelectionAdapter;
//import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.swt.widgets.TreeItem;
import com.andika.sight.rcp.nel.Node;
import com.andika.sight.rcp.nel.NodeLibrary;
/*
may i chat with you?if i can please put your email.this may email muhamad*nizar@rocketmail*com
*/
public class NodesDialog extends Dialog {
private static final int CALCEL_ID = IDialogConstants.CLIENT_ID + 1;
private static final int OK_ID = IDialogConstants.CLIENT_ID + 2;
private String title = "Nodes";
private Tree tree;
private TreeItem root;
private TreeItem currentRegion = null;
private TreeItem currentType = null;
private LinkedList<Node> list;
private Composite composite;
private SelectionNodes nodes;
private String lastRegion = "";
private String lastType = "";
private String region, type, vendor, node;
private Text input;
private HashMap<Integer, Tree> treeCollection;
public NodesDialog(Shell parent, SelectionNodes nodes) {
super(parent);
this.nodes = nodes;
}
protected Point getInitialSize() {
return new Point(320, 360);
}
protected void createButtonsForButtonBar(Composite parent) {
createButton(parent, CALCEL_ID, "Cancel", false);
createButton(parent, OK_ID, "OK", true);
}
protected Control createDialogArea(final Composite parent) {
composite = (Composite) super.createDialogArea(parent);
composite.setLayoutData(new GridData(GridData.FILL_BOTH));
composite.setLayout(new GridLayout());
input = new Text(composite, SWT.SINGLE | SWT.BORDER | SWT.SEARCH);
input.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
tree = new Tree(composite, SWT.SINGLE | SWT.CHECK);
tree.setLayoutData(new GridData(GridData.FILL_BOTH));
tree.setHeaderVisible(true);
TreeColumn cnode = new TreeColumn(tree, SWT.NONE);
cnode.setText("Region/Type/Node");
TreeColumn vnode = new TreeColumn(tree, SWT.NONE);
vnode.setText("Vendor");
root = new TreeItem(tree, SWT.NONE);
root.setText("All");
boolean checked2 = false;
boolean checked3 = false;
for (int i = 0; i < nodes.getLength(); i++) {
region = nodes.getRegion(i);
// System.out.println("region " + region);
type = nodes.getType(i);
// System.out.println("type "+type);
vendor = nodes.getVendor(i);
// System.out.println("vendor "+vendor);
node = nodes.getName(i);
// System.out.println("node " + node);
if (!region.equals(lastRegion)) {
currentRegion = new TreeItem(root, SWT.SHADOW_OUT);
currentRegion.setText(region);
currentRegion.setChecked(false);
checked2 = currentRegion.getChecked();
lastRegion = region;
}
if (!type.equals(lastType)) {
currentType = new TreeItem(currentRegion, SWT.NONE);
currentType.setText(type);
currentType.setChecked(false);
checked3 = currentRegion.getChecked();
lastType = type;
}
TreeItem item = new TreeItem(currentType, SWT.NONE);
item.setText(new String[] { node, vendor });
currentRegion.setExpanded(false);
currentType.setExpanded(false);
item.setChecked(nodes.getSelected(i));
boolean checked = item.getChecked();
checkItems(item, checked);
checkPath(item.getParentItem(), checked, false);
TreeItem curReg = root;
System.out.println("curReg "+curReg.getText());
TreeItem curType = currentType;
TreeItem curName = item;
if (checked3 == true) {
System.out.println("checked2");
for (int k = 0; k < curType.getItemCount(); k++) {
curType.getItem(k).setExpanded(true);
curType.getItem(k).getParentItem().setExpanded(tru e);
curType.getItem(k).setExpanded(true);
// curType.getParentItem().setExpanded(true);
}
}
if (checked3 == true) {
System.out.println("checked2");
for (int k = 0; k < curType.getItemCount(); k++) {
curType.getItem(k).setExpanded(true);
curType.getItem(k).getParentItem().setExpanded(tru e);
curType.getItem(k).setExpanded(true);
// curType.getParentItem().setExpanded(true);
}
}
item.setData(i);
}
root.setExpanded(true);
tree.pack();
cnode.pack();
vnode.pack();
keyResponse(input);
tree.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
if (event.detail == SWT.CHECK) {
TreeItem item = (TreeItem) event.item;
boolean checked = item.getChecked();
checkItems(item, checked);
checkPath(item.getParentItem(), checked, false);
}
}
});
return composite;
}
private void keyResponse(final Text input) {
input.addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent e) {
// String search = input.getText();
if (e.character == '\u0008' || e.character == '\u007F') {
System.out.println(treeCollection.size());
for (int i = 0; i < treeCollection.size(); i++) {
System.out.println("AAA");
tree = treeCollection.get(i);
}
}
searchNode(input.getText());
}
});
}
private void searchNode(String search) {
int sign = 0;
int sign2 = 0;
int sign3 = 0;
for (int j = 0; j < nodes.getLength(); j++) {
TreeItem curReg = root;
TreeItem curGetType = root.getItem(j);
for (int i = 0; i < curReg.getItemCount(); i++) {
// System.out.println("curReg.getItemCount() "
// + curReg.getItemCount());
if (curReg.getItem(i).getText().toLowerCase().indexOf (
search.toLowerCase()) >= 0) {
curReg.getItem(i).setExpanded(true);
sign2 = 1;
treeCollection.put(i, tree);
System.out.println("treeCollection.put(i, tree) "
+ treeCollection.put(i, tree));
} else if (sign2 == 1) {
curReg.getItem(i).dispose();
// System.out.println("BBB");
sign2 = 0;
} else if (sign2 == 0) {
curReg.getItem(i).dispose();
} else if (curReg.getItem(i).getText().toLowerCase().indexOf (
search.toLowerCase()) <= 0) {
// System.out.println("CCC");
for (int k = 0; k < curGetType.getItemCount(); k++) {
if (curGetType.getItem(k).getText().toLowerCase()
.indexOf(search.toLowerCase()) >= 0) {
curGetType.getItem(k).setExpanded(true);
curGetType.getItem(k).getParentItem().setExpanded(
true);
sign = 1;
// for (int curDispose = 0; curDispose <
// curGetType.getItem(k).getItemCount();
// curDispose++) {
// System.out.println("DDD");
// if(curGetType.getItem(curDispose).getText().toLowe rCase()
// .indexOf(search.toLowerCase()) >= 0 &&
// curGetType.getItem(curDispose).getExpanded() ==
// false){
// System.out.println("FFF");
// curGetType.getItem(curDispose).getParentItem().dis pose();
// }
// }
} else if (sign == 1) {
curGetType.getItem(k).dispose();
// } else if (curGetType.getItem(k).getExpanded() ==
// false) {
// System.out.println("DDD");
// curGetType.getItem(k).getParentItem().dispose();
//
} else {
System.out.println("EEE");
curGetType.getItem(k).setExpanded(false);
TreeItem curName = curGetType.getItem(k);
for (int x = 0; x < curName.getItemCount(); x++) {
if (curName.getItem(x).getText().toLowerCase()
.indexOf(search.toLowerCase()) >= 0) {
curName.getItem(x).setExpanded(true);
curName.getItem(x).getParentItem()
.setExpanded(true);
// sign3 = 1;
} else if (curName.getItem(x).getText()
.toLowerCase().indexOf(
search.toLowerCase()) <= 0) {
curName.getItem(x).dispose();
} else if (curName.getItem(x).getExpanded() == true) {
curName.getItem(x).getParentItem()
.dispose();
}
}
}
}
}
}
}
}
private void checkPath(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];
// System.out.println("child " + child.getText() + "- "
// + child.getGrayed() + "- " + child.getChecked()+checked);
// if(checked != child.getChecked()){
// child.setExpanded(true);
// }
if (child.getGrayed() || checked != child.getChecked()) {
checked = grayed = true;
break;
}
index++;
}
}
item.setChecked(checked);
item.setGrayed(grayed);
checkPath(item.getParentItem(), checked, grayed);
}
private void checkItems(TreeItem item, boolean checked) {
item.setGrayed(false);
item.setChecked(checked);
TreeItem[] items = item.getItems();
// System.out.println("items " + items.length);
for (int i = 0; i < items.length; i++) {
checkItems(items[i], checked);
}
}
protected void configureShell(final Shell shell) {
super.configureShell(shell);
if (title != null) {
shell.setText(title);
}
}
protected void buttonPressed(final int buttonId) {
try {
if (buttonId == OK_ID) {
list = new LinkedList<Node>();
collectFrom(root);
setReturnCode(OK);
} else {
setReturnCode(CANCEL);
}
close();
super.buttonPressed(buttonId);
} catch (Exception e) {
e.printStackTrace();
}
}
private void collectFrom(TreeItem item) {
if (item.getItems().length > 0) {
for (TreeItem child : item.getItems()) {
collectFrom(child);
}
} else {
if (item.getData() != null) {
int i = ((Integer) item.getData()).intValue();
nodes.setSelected(i, item.getChecked());
if (item.getChecked()) {
String name = item.getText();
list.addLast(NodeLibrary.get(name));
}
}
}
}
public List<Node> getNodes() {
return list;
}
}
/*
thanx my man i'll be wait
*/
Last edited by i4ba1; 08-26-2008 at 01:23 PM.
|