Author: scabanovich
Date: 2007-08-13 10:19:47 -0400 (Mon, 13 Aug 2007)
New Revision: 3087
Modified:
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/attribute/adapter/CheckListAdapter.java
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/attribute/adapter/CheckTreeAdapter.java
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/attribute/editor/CheckListFieldEditor.java
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/attribute/editor/CheckTreeFieldEditor.java
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/wizards/query/list/AbstractTreeWizardView.java
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/wizards/query/list/TreeItemSelectionManager.java
Log:
EXIN-256
Modified:
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/attribute/adapter/CheckListAdapter.java
===================================================================
---
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/attribute/adapter/CheckListAdapter.java 2007-08-13
12:44:41 UTC (rev 3086)
+++
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/attribute/adapter/CheckListAdapter.java 2007-08-13
14:19:47 UTC (rev 3087)
@@ -95,6 +95,8 @@
}
class STCPTreeLabelProvider extends LabelProvider {
+ /**
+ * Tree style SWT.CHECK is used instead.
public Image getImage(Object element) {
String s = getStringValue(true);
StringTokenizer st = new StringTokenizer(s, ";,");
@@ -103,6 +105,7 @@
}
return IMAGE_DISABLED;
}
+ */
}
class STCPSpecialHelperSupportHandler implements ITreeContentProvider {
Modified:
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/attribute/adapter/CheckTreeAdapter.java
===================================================================
---
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/attribute/adapter/CheckTreeAdapter.java 2007-08-13
12:44:41 UTC (rev 3086)
+++
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/attribute/adapter/CheckTreeAdapter.java 2007-08-13
14:19:47 UTC (rev 3087)
@@ -75,6 +75,7 @@
}
public int getState(Object element) {
+ if(element == null) return 0;
return ((CheckItem)element).getState();
}
@@ -207,6 +208,7 @@
}
public int getState(Object element) {
+ if(element == null) return state;
if (this.tree!=null) return tree.getState(element);
return ICheckable.STATE_UNCHECK;
}
@@ -394,6 +396,8 @@
}
protected class CheckLabelProvider extends LabelProvider {
+ /**
+ * Tree style SWT.CHECK is used instead.
public Image getImage(Object element) {
if (((CheckItem)element).getState() == ICheckable.STATE_UNCHECK) {
return IMAGE_UNCHECK;
@@ -403,6 +407,7 @@
return IMAGE_HALFCHECK;
}
}
+ */
public String getText(Object element) {
return ((CheckItem)element).getName();
}
Modified:
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/attribute/editor/CheckListFieldEditor.java
===================================================================
---
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/attribute/editor/CheckListFieldEditor.java 2007-08-13
12:44:41 UTC (rev 3086)
+++
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/attribute/editor/CheckListFieldEditor.java 2007-08-13
14:19:47 UTC (rev 3087)
@@ -22,9 +22,11 @@
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
import org.jboss.tools.common.model.ui.widgets.IWidgetSettings;
@@ -86,10 +88,11 @@
private Control getListControl(Composite parent) {
if(viewer != null && !viewer.getControl().isDisposed()) return
viewer.getControl();
- viewer = new TreeViewer(parent);
+ viewer = new TreeViewer(parent, SWT.CHECK);
viewer.setContentProvider(contentProvider);
viewer.setLabelProvider(labelProvider);
viewer.setInput(contentProvider);
+
new TreeItemSelectionManager(viewer, new Flipper());
return viewer.getControl();
}
@@ -129,6 +132,7 @@
init();
}
+ int lock = 0;
public void propertyChange(PropertyChangeEvent event) {
valueProvider.removeValueChangeListener(this);
if (IPropertyEditor.VALUE.equals(event.getPropertyName())) {
@@ -137,6 +141,23 @@
try {
if(!s.equals(stringValue)) {
stringValue = s;
+ if(lock == 0) {
+ lock++;
+ Tree tree = viewer.getTree();
+ TreeItem[] is = tree.getItems();
+ for (int i = 0; i < is.length; i++) {
+ Object d = is[i].getData();
+ StringTokenizer values = new StringTokenizer(stringValue, ";,");
+ while(values.hasMoreTokens()) {
+ String n = values.nextToken();
+ if(n.equals(d)) {
+ is[i].setChecked(true);
+ }
+ }
+ }
+ lock--;
+ }
+
viewer.refresh();
}
} catch (Exception e) {
@@ -175,7 +196,19 @@
class Flipper implements TreeItemSelectionManager.Listener {
public void flip(TreeItem item) {
+ if(lock > 0) return;
+ lock++;
flip0(item);
+ lock--;
+ }
+
+ public boolean isSelected(Object data) {
+ StringTokenizer values = new StringTokenizer(valueProvider.getStringValue(true),
";,");
+ while (values.hasMoreTokens()) {
+ String n = values.nextToken();
+ if(data != null && data.equals(n)) return true;
+ }
+ return false;
}
}
Modified:
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/attribute/editor/CheckTreeFieldEditor.java
===================================================================
---
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/attribute/editor/CheckTreeFieldEditor.java 2007-08-13
12:44:41 UTC (rev 3086)
+++
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/attribute/editor/CheckTreeFieldEditor.java 2007-08-13
14:19:47 UTC (rev 3087)
@@ -28,6 +28,7 @@
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.TreeItem;
+import org.jboss.tools.common.model.ui.attribute.adapter.CheckTreeAdapter;
import org.jboss.tools.common.model.ui.viewers.xpl.ICheckable;
import org.jboss.tools.common.model.ui.widgets.IWidgetSettings;
@@ -161,6 +162,13 @@
}
viewer.refresh();
}
+ public boolean isSelected(Object data) {
+ if(data instanceof ICheckable) {
+ ICheckable o = (ICheckable)data;
+ return o.getState(null) != 0;
+ }
+ return false;
+ }
}
protected void valueChanged(String newValue) {
Modified:
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/wizards/query/list/AbstractTreeWizardView.java
===================================================================
---
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/wizards/query/list/AbstractTreeWizardView.java 2007-08-13
12:44:41 UTC (rev 3086)
+++
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/wizards/query/list/AbstractTreeWizardView.java 2007-08-13
14:19:47 UTC (rev 3087)
@@ -93,12 +93,16 @@
GridData gd = new GridData(GridData.FILL_BOTH);
composite.setLayoutData(gd);
- treeViewer = new TreeViewer(composite, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
+ treeViewer = new TreeViewer(composite, SWT.CHECK | SWT.H_SCROLL | SWT.V_SCROLL |
SWT.BORDER);
treeViewer.setContentProvider(provider);
treeViewer.setLabelProvider(provider);
treeViewer.setInput(this);
+
+ Object[] os = provider.getChildren(this);
+
Control tc = treeViewer.getControl();
tc.setLayoutData(new GridData(GridData.FILL_BOTH));
+ initTree();
new TreeItemSelectionManager(treeViewer, new Flipper());
treeViewer.expandToLevel(expandingLevel);
Control bc = allBar.createControl(composite);
@@ -106,6 +110,18 @@
return composite;
}
+ private void initTree() {
+ Tree tree = treeViewer.getTree();
+ TreeItem[] is = tree.getItems();
+ for (int i = 0; i < is.length; i++) {
+ Object d = is[i].getData();
+ if(d instanceof CheckObject) {
+ CheckObject o = (CheckObject)d;
+ is[i].setChecked(!o.isDisabled());
+ }
+ }
+ }
+
public void action(String command) {
if(CANCEL.equals(command) ||
OK.equals(command) ||
@@ -146,6 +162,14 @@
CheckObject w = (CheckObject)item.getData();
w.flip();
treeViewer.refresh(w);
+ }
+
+ public boolean isSelected(Object data) {
+ if(data instanceof CheckObject) {
+ CheckObject o = (CheckObject)data;
+ return !o.isDisabled();
+ }
+ return false;
}
}
@@ -248,11 +272,14 @@
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}
+ /**
+ * Tree style SWT.CHECK is used instead.
public Image getImage(Object element) {
if(!(element instanceof CheckObject)) return null;
CheckObject w = (CheckObject)element;
return (!w.isDisabled()) ? IMAGE_ENABLED : IMAGE_DISABLED;
}
+ */
public Color getForeground(Object element) {
if(!(element instanceof CheckObject)) return null;
Modified:
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/wizards/query/list/TreeItemSelectionManager.java
===================================================================
---
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/wizards/query/list/TreeItemSelectionManager.java 2007-08-13
12:44:41 UTC (rev 3086)
+++
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/wizards/query/list/TreeItemSelectionManager.java 2007-08-13
14:19:47 UTC (rev 3087)
@@ -16,6 +16,10 @@
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseMoveListener;
+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.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.TreeItem;
@@ -23,6 +27,7 @@
public class TreeItemSelectionManager {
public interface Listener {
public void flip(TreeItem item);
+ public boolean isSelected(Object data);
}
TreeViewer treeViewer = null;
@@ -31,39 +36,71 @@
public TreeItemSelectionManager(TreeViewer treeViewer, Listener listener) {
this.listener = listener;
this.treeViewer = treeViewer;
- SL sl = new SL();
- treeViewer.getTree().addMouseListener(sl);
- treeViewer.getTree().addMouseMoveListener(sl);
+ update();
treeViewer.getTree().addKeyListener(new KL());
+ treeViewer.getTree().addSelectionListener(new SL());
+ treeViewer.getTree().addTreeListener(new EL());
}
- class SL extends MouseAdapter implements MouseMoveListener {
- TreeItem item = null;
- boolean out = false;
- public void mouseDown(MouseEvent e) {
- item = getItem(e);
- out = false;
+ int lock = 0;
+ class EL implements TreeListener {
+
+ public void treeCollapsed(TreeEvent e) {
}
- public void mouseUp(MouseEvent e) {
- if(item != null && item == getItem(e) && !out) {
- listener.flip(item);
+
+ public void treeExpanded(TreeEvent e) {
+ if(e.item instanceof TreeItem) {
+ TreeItem item = (TreeItem)e.item;
+ TreeItem[] is = item.getItems();
+ update(is);
+ }
+ }
+ }
+
+ public void update() {
+ update(treeViewer.getTree().getItems());
+ }
+
+ void update(TreeItem[] is) {
+ lock++;
+ try {
+ for (int i = 0; i < is.length; i++) {
+ Object d = is[i].getData();
+ is[i].setChecked(listener.isSelected(is[i].getData()));
+ update(is[i].getItems());
}
- item = null;
+ } finally {
+ lock--;
}
- public void mouseMove(MouseEvent e) {
- if(item == null) return;
- out = (item != getItem(e));
+ }
+
+ class SL implements SelectionListener {
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ widgetSelected(e);
}
- private TreeItem getItem(MouseEvent e) {
- if(e.button != 1) return null;
- TreeItem item = treeViewer.getTree().getItem(new Point(e.x, e.y));
- if(item == null) return null;
- Rectangle r = item.getBounds();
- if(e.x < r.x - 20 || e.x > r.x) return null;
- return item;
+
+ public void widgetSelected(SelectionEvent e) {
+ if(e.item instanceof TreeItem) {
+ if(lock > 0) return;
+ lock++;
+ try {
+ TreeItem item = (TreeItem)e.item;
+ if(listener.isSelected(item.getData()) != item.getChecked()) {
+ listener.flip(item);
+ }
+ if(listener.isSelected(item.getData()) != item.getChecked()) {
+ item.setChecked(listener.isSelected(item.getData()));
+ }
+ } finally {
+ lock--;
+ }
+ }
+
}
+
}
-
+
class KL extends KeyAdapter {
public void keyPressed(KeyEvent e) {
boolean flip = e.keyCode == (int)' ';