Home » Eclipse Projects » JFace » DialogCellEditor and Navigation
|
Re: DialogCellEditor and Navigation [message #22220 is a reply to message #22176] |
Tue, 21 July 2009 09:01 |
Murthy Bhat Messages: 159 Registered: July 2009 |
Senior Member |
|
|
Here is a runnable code snippet. The tabbing(Navigation via TAB) works
fine if I use any other editor other than the DialogCellEditor created at
line 174.
import java.util.ArrayList;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.resource.FontRegistry;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ColumnViewerEditor;
import org.eclipse.jface.viewers.ColumnViewerEditorActivationEvent;
import org.eclipse.jface.viewers.ColumnViewerEditorActivationStrate gy;
import org.eclipse.jface.viewers.DialogCellEditor;
import org.eclipse.jface.viewers.ICellModifier;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.TreeViewerEditor;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
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.TableItem;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.swt.widgets.TreeItem;
/**
* A simple TreeViewer to demonstrate usage of inline editing
*
* @author Tom Schindl <tom.schindl@bestsolution.at>
*
*/
public class Snippet038TreeViewerInlinelEditingOldAPI {
private class MyContentProvider implements ITreeContentProvider {
/*
* (non-Javadoc)
*
* @see
org.eclipse.jface.viewers.IStructuredContentProvider#getElem ents(java.lang.Object)
*/
public Object[] getElements(Object inputElement) {
return ((MyModel) inputElement).child.toArray();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.IContentProvider#dispose()
*/
public void dispose() {
}
/*
* (non-Javadoc)
*
* @see
org.eclipse.jface.viewers.IContentProvider#inputChanged(org. eclipse.jface.viewers.Viewer,
* java.lang.Object, java.lang.Object)
*/
public void inputChanged(Viewer viewer, Object oldInput, Object
newInput) {
}
/*
* (non-Javadoc)
*
* @see
org.eclipse.jface.viewers.ITreeContentProvider#getChildren(j ava.lang.Object)
*/
public Object[] getChildren(Object parentElement) {
return getElements(parentElement);
}
/*
* (non-Javadoc)
*
* @see
org.eclipse.jface.viewers.ITreeContentProvider#getParent(jav a.lang.Object)
*/
public Object getParent(Object element) {
if (element == null) {
return null;
}
return ((MyModel) element).parent;
}
/*
* (non-Javadoc)
*
* @see
org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(j ava.lang.Object)
*/
public boolean hasChildren(Object element) {
return ((MyModel) element).child.size() > 0;
}
}
public class MyModel {
public MyModel parent;
public ArrayList child = new ArrayList();
public int counter;
public MyModel(int counter, MyModel parent) {
this.parent = parent;
this.counter = counter;
}
public String toString() {
String rv = "Item ";
if (parent != null) {
rv = parent.toString() + ".";
}
rv += counter;
return rv;
}
}
public class MyLabelProvider extends LabelProvider implements
ITableLabelProvider {
FontRegistry registry = new FontRegistry();
public Image getColumnImage(Object element, int columnIndex) {
return null;
}
public String getColumnText(Object element, int columnIndex) {
return "Column " + columnIndex + " => " + element.toString();
}
}
public Snippet038TreeViewerInlinelEditingOldAPI(Shell shell) {
final TreeViewer v = new TreeViewer(shell,SWT.FULL_SELECTION);
ColumnViewerEditorActivationStrategy actSupport = new
ColumnViewerEditorActivationStrategy(
v) {
protected boolean isEditorActivationEvent(
ColumnViewerEditorActivationEvent event) {
return event.eventType == ColumnViewerEditorActivationEvent.TRAVERSAL
|| event.eventType ==
ColumnViewerEditorActivationEvent.MOUSE_DOUBLE_CLICK_SELECTI ON
|| (event.eventType == ColumnViewerEditorActivationEvent.KEY_PRESSED
&& event.keyCode == SWT.CR)
|| event.eventType == ColumnViewerEditorActivationEvent.PROGRAMMATIC;
}
};
int navigation = ColumnViewerEditor.TABBING_HORIZONTAL
| ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR
| ColumnViewerEditor.TABBING_VERTICAL
| ColumnViewerEditor.KEYBOARD_ACTIVATION;
TreeViewerEditor.create(v, actSupport,navigation);
//v.getTree().setCellSelectionEnabled(true);
addTableListener(v.getTree());
TreeColumn column = new TreeColumn(v.getTree(),SWT.NONE);
column.setWidth(200);
column.setText("Column 1");
column = new TreeColumn(v.getTree(),SWT.NONE);
column.setWidth(200);
column.setText("Column 2");
MyDialogEditor dlgEditor = new MyDialogEditor(v.getTree());
v.setCellEditors(new CellEditor[]{dlgEditor,new
TextCellEditor(v.getTree())});
v.setColumnProperties(new String[]{"col1","col2"});
v.setCellModifier(new ICellModifier() {
public boolean canModify(Object element, String property) {
return true;
}
public Object getValue(Object element, String property) {
return ((MyModel)element).counter+"";
}
public void modify(Object element, String property, Object value) {
((MyModel)((TreeItem)element).getData()).counter =
Integer.parseInt(value.toString());
v.update(((TreeItem)element).getData(), null);
}
});
v.setLabelProvider(new MyLabelProvider());
v.setContentProvider(new MyContentProvider());
v.setInput(createModel());
}
private void addTableListener(Tree tree) {
try {
/*
* NOTE: MeasureItem, PaintItem and EraseItem are called repeatedly.
* Therefore, it is critical for performance that these methods be as
* efficient as possible.
*/
Listener paintListener = new Listener() {
public void handleEvent(Event event) {
try {
switch (event.type) {
case SWT.MeasureItem: {
TreeItem item = (TreeItem) event.item;
String text = getText(item, event.index);
Point size = event.gc.textExtent(text);
event.width = size.x;
event.height =Math.max(25,Math.max(event.height, size.y));
break;
}
case SWT.PaintItem: {
TreeItem item = (TreeItem) event.item;
String text = getText(item, event.index);
Image img=null;
Point size = event.gc.textExtent(text);
int offset2 = event.index == 0 ? Math.max(0,
(event.height - size.y) / 2) : 0;
if(event.index==0)
{
event.gc.drawText(text, event.x+20, event.y + offset2, true);
img=item.getImage();
event.gc.drawImage(img,event.x, event.y + offset2);
}
else
event.gc.drawText(text, event.x, event.y + offset2, true);
break;
}
case SWT.EraseItem: {
event.detail &= ~SWT.FOREGROUND;
break;
}
}
} catch (Exception e) {
}
}
String getText(TreeItem item, int column) {
String text = item.getText(column);
return text;
}
};
tree.addListener(SWT.MeasureItem, paintListener);
tree.addListener(SWT.PaintItem, paintListener);
tree.addListener(SWT.EraseItem, paintListener);
} catch (RuntimeException e) {
e.printStackTrace();
}
}
private MyModel createModel() {
MyModel root = new MyModel(0, null);
root.counter = 0;
MyModel tmp;
for (int i = 1; i < 10; i++) {
tmp = new MyModel(i, root);
root.child.add(tmp);
for (int j = 1; j < i; j++) {
tmp.child.add(new MyModel(j, tmp));
}
}
return root;
}
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
new Snippet038TreeViewerInlinelEditingOldAPI(shell);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
public class MyDialogEditor extends DialogCellEditor
{
public MyDialogEditor(Composite parent) {
super(parent);
}
@Override
protected Object openDialogBox(Control cellEditorWindow) {
MessageDialog.openWarning(cellEditorWindow.getShell(), "Title",
"Message");
return 0;
}
}
}
Thanks,
Bhat
|
|
| | |
Goto Forum:
Current Time: Fri Sep 20 22:43:50 GMT 2024
Powered by FUDForum. Page generated in 0.03828 seconds
|