Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Eclipse Projects » JFace » Tabletreeviewer scroll problem
Tabletreeviewer scroll problem [message #15578] Wed, 24 June 2009 12:26 Go to next message
byrebg Mising name is currently offline byrebg Mising nameFriend
Messages: 48
Registered: July 2009
Member
Hello,

I am having a problem with the TableTreeViewer's scrolling behaviour in
jface. The problem scenario is as below

I have created a tabletreeviewer with cell editors in it. The cell editing
works all fine except for those cells which is half visible within my
table. i.e if my cell editor needs scrolling of the table for it to be
completely visible, then the auto scrolling takes place and the cell
editing is taken to the next rows same celleditor. Any further user event
sets the correct value to the correct cell.

This issue is happening with a tableviewer as well, but the cell focus is
brought back to the desired cell within very less time.

Thanks in advance for help.

Regards,
BYG
Re: Tabletreeviewer scroll problem [message #15611 is a reply to message #15578] Wed, 24 June 2009 12:58 Go to previous messageGo to next message
Thomas Schindl is currently offline Thomas SchindlFriend
Messages: 6651
Registered: July 2009
Senior Member
You should use a TreeViewer with TreeColumns not a TableTreeViewer! We
also fixed problems with cell navigation in 3.5 so it might interesting
which version you are seeing this with TableViewer.

Tom

byrebg schrieb:
> Hello,
>
> I am having a problem with the TableTreeViewer's scrolling behaviour in
> jface. The problem scenario is as below
>
> I have created a tabletreeviewer with cell editors in it. The cell
> editing works all fine except for those cells which is half visible
> within my table. i.e if my cell editor needs scrolling of the table for
> it to be completely visible, then the auto scrolling takes place and the
> cell editing is taken to the next rows same celleditor. Any further user
> event sets the correct value to the correct cell.
>
> This issue is happening with a tableviewer as well, but the cell focus
> is brought back to the desired cell within very less time.
>
> Thanks in advance for help.
>
> Regards,
> BYG
>
Re: Tabletreeviewer scroll problem [message #15643 is a reply to message #15611] Wed, 24 June 2009 14:58 Go to previous messageGo to next message
byrebg Mising name is currently offline byrebg Mising nameFriend
Messages: 48
Registered: July 2009
Member
Thanks a lot for the reply.

But changing the code from TableTreeViewer to TreeViewer did not any
difference. The problem still persists. And I am currently using eclipse
3.3. The issue is only with the cells in the last row visible in my
viewer, the focus still seem to go the next row.
Re: Tabletreeviewer scroll problem [message #15673 is a reply to message #15643] Wed, 24 June 2009 15:11 Go to previous messageGo to next message
Thomas Schindl is currently offline Thomas SchindlFriend
Messages: 6651
Registered: July 2009
Senior Member
Hi,

Please provide a snippet so that we can try to reproduce it on 3.5.

There've been many changes to cell-editing since 3.3 so its hard to
guess what's going wrong. Scroll the cell into view you can use
Tree#showColumn() maybe this can fix the problem.

Tom

byrebg schrieb:
> Thanks a lot for the reply.
> But changing the code from TableTreeViewer to TreeViewer did not any
> difference. The problem still persists. And I am currently using eclipse
> 3.3. The issue is only with the cells in the last row visible in my
> viewer, the focus still seem to go the next row.
>
Re: Tabletreeviewer scroll problem [message #15701 is a reply to message #15673] Wed, 24 June 2009 16:03 Go to previous messageGo to next message
byrebg Mising name is currently offline byrebg Mising nameFriend
Messages: 48
Registered: July 2009
Member
Tree#showColumn was not of much help either. The creation of the
treeviewer is somthing like follows

/** Create Tree Viewer **/
int style = SWT.MULTI | SWT.BORDER | SWT.H_SCROLL |
SWT.V_SCROLL| SWT.FULL_SELECTION | SWT.HIDE_SELECTION;
treeViewer = new TreeViewer(composite,style);
treeViewer.setUseHashlookup(true);
treeViewer.setColumnProperties(columnNames);
/** Tree Viewer Created **/


/** Create Tree **/
tree=treeViewer.getTree();

tree.setLinesVisible(true);
tree.setHeaderVisible(true);

TreeColumn column = new TreeColumn(tree,SWT.CENTER,0);
column.setText("1");
column.pack();

column = new TreeColumn(tree, SWT.LEFT, 1);
column.setText("2");
column.pack();
/** Tree Created **/

/** Create the cell editors**/
CellEditor[] editors = new CellEditor
[columnNames.length];


editors[0] = new TextCellEditor(tree, SWT.WRAP | SWT.V_SCROLL);
editors[1] = new TextCellEditor(tree, SWT.WRAP | SWT.V_SCROLL);

treeViewer.setCellEditors(editors);
/** cell editors Created **/
Re: Tabletreeviewer scroll problem [message #15723 is a reply to message #15701] Wed, 24 June 2009 16:12 Go to previous messageGo to next message
Thomas Schindl is currently offline Thomas SchindlFriend
Messages: 6651
Registered: July 2009
Senior Member
Hi,

You need to provide me a completely runnable snippet (I can copy to my
workspace and run *without* any code changes) else I can't help you.

You can use a snippet from our collection [1] and modify it to show the
problem or naturally start from scratch.

Tom

[1]http://wiki.eclipse.org/JFaceSnippets

byrebg schrieb:
> Tree#showColumn was not of much help either. The creation of the
> treeviewer is somthing like follows
>
> /** Create Tree Viewer **/
> int style = SWT.MULTI | SWT.BORDER | SWT.H_SCROLL |
> SWT.V_SCROLL| SWT.FULL_SELECTION | SWT.HIDE_SELECTION;
> treeViewer = new TreeViewer(composite,style);
> treeViewer.setUseHashlookup(true);
> treeViewer.setColumnProperties(columnNames);
> /** Tree Viewer Created **/
>
>
> /** Create Tree **/
> tree=treeViewer.getTree();
>
> tree.setLinesVisible(true);
> tree.setHeaderVisible(true);
>
> TreeColumn column = new TreeColumn(tree,SWT.CENTER,0);
> column.setText("1");
> column.pack();
>
> column = new TreeColumn(tree, SWT.LEFT, 1);
> column.setText("2");
> column.pack();
> /** Tree Created **/
>
> /** Create the cell editors**/
> CellEditor[] editors = new CellEditor
> [columnNames.length];
>
>
> editors[0] = new TextCellEditor(tree, SWT.WRAP | SWT.V_SCROLL);
> editors[1] = new TextCellEditor(tree, SWT.WRAP | SWT.V_SCROLL);
>
> treeViewer.setCellEditors(editors);
> /** cell editors Created **/
>
Re: Tabletreeviewer scroll problem [message #16423 is a reply to message #15723] Wed, 24 June 2009 16:41 Go to previous messageGo to next message
byrebg Mising name is currently offline byrebg Mising nameFriend
Messages: 48
Registered: July 2009
Member
Hi Tom,

Please follow below steps to reproduce my problem in the snippet below.

1)Expand all the items in the tree
2)Scroll the viewer such that some row is semi visible.
3)Click and start editing the semi visible cell
4)The focus is onto the next row <Problem>

package org.eclipse.jface.snippets.viewers;

import java.util.ArrayList;

import org.eclipse.jface.resource.FontRegistry;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ICellModifier;
import org.eclipse.jface.viewers.ITableColorProvider;
import org.eclipse.jface.viewers.ITableFontProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableTreeViewer;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Item;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TableColumn;

/**
* A simple TreeViewer to demonstrate usage
*
* @author Tom Schindl <tom.schindl@bestsolution.at>
*
*/
public class Snippet032TableTreeViewer {
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, ITableFontProvider, ITableColorProvider {
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 Font getFont(Object element, int columnIndex) {
if (((MyModel) element).counter % 2 == 0) {
return registry.getBold(Display.getCurrent().getSystemFont()
.getFontData()[0].getName());
}
return null;
}

public Color getBackground(Object element, int columnIndex) {
if (((MyModel) element).counter % 2 == 0) {
return Display.getCurrent().getSystemColor(SWT.COLOR_RED);
}
return null;
}

public Color getForeground(Object element, int columnIndex) {
if (((MyModel) element).counter % 2 == 1) {
return Display.getCurrent().getSystemColor(SWT.COLOR_RED);
}
return null;
}

}

private class MyModifier implements ICellModifier {
private TableTreeViewer v;

public MyModifier(TableTreeViewer v) {
this.v = v;
}

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)((Item)element).getData()).counter =
Integer.parseInt(value.toString());
v.update(((Item)element).getData(), null);
}

}

public Snippet032TableTreeViewer(Shell shell) {
final TableTreeViewer v = new TableTreeViewer(shell, SWT.FULL_SELECTION);

TableColumn column = new
TableColumn(v.getTableTree().getTable(),SWT.NONE);
column.setWidth(200);
column.setText("Column 1");

column = new TableColumn(v.getTableTree().getTable(),SWT.NONE);
column.setWidth(200);
column.setText("Column 2");

v.getTableTree().getTable().setHeaderVisible(true);
v.getTableTree().getTable().setLinesVisible(true);

v.setCellEditors(new CellEditor[] { new
TextCellEditor(v.getTableTree().getTable()), new
TextCellEditor(v.getTableTree().getTable()) });
v.setColumnProperties(new String[] { "column1", "column2" });
v.setCellModifier(new MyModifier(v));

v.setLabelProvider(new MyLabelProvider());
v.setContentProvider(new MyContentProvider());
v.setInput(createModel());
}

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 Snippet032TableTreeViewer(shell);
shell.open();

while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}

display.dispose();
}
}
Re: Tabletreeviewer scroll problem [message #16442 is a reply to message #16423] Wed, 24 June 2009 17:20 Go to previous messageGo to next message
byrebg Mising name is currently offline byrebg Mising nameFriend
Messages: 48
Registered: July 2009
Member
Hi Tom,
Same is the case with TreeViewer as well


import java.util.ArrayList;

import org.eclipse.jface.resource.FontRegistry;
import org.eclipse.jface.viewers.CellEditor;
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.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.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);

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");

v.setCellEditors(new CellEditor[]{new TextCellEditor(v.getTree()), 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) {
Logger.INSTANCE.log(Activator.PLUGIN_ID,e.getMessage(), e);
}



}

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();
}
}
Re: Tabletreeviewer scroll problem [message #16460 is a reply to message #16423] Wed, 24 June 2009 19:11 Go to previous messageGo to next message
Thomas Schindl is currently offline Thomas SchindlFriend
Messages: 6651
Registered: July 2009
Senior Member
Hi,

Which OS? Can you show me a screen shot. I just ran the stuff on
OS-Cocoa and didn't see a problem or maybe I didn't spotted it because
I'm unsure what I should look after.

Tom

byrebg schrieb:
> Hi Tom,
>
> Please follow below steps to reproduce my problem in the snippet below.
>
> 1)Expand all the items in the tree
> 2)Scroll the viewer such that some row is semi visible.
> 3)Click and start editing the semi visible cell
> 4)The focus is onto the next row <Problem>
>
> package org.eclipse.jface.snippets.viewers;
>
> import java.util.ArrayList;
>
> import org.eclipse.jface.resource.FontRegistry;
> import org.eclipse.jface.viewers.CellEditor;
> import org.eclipse.jface.viewers.ICellModifier;
> import org.eclipse.jface.viewers.ITableColorProvider;
> import org.eclipse.jface.viewers.ITableFontProvider;
> import org.eclipse.jface.viewers.ITableLabelProvider;
> import org.eclipse.jface.viewers.ITreeContentProvider;
> import org.eclipse.jface.viewers.LabelProvider;
> import org.eclipse.jface.viewers.TableTreeViewer;
> import org.eclipse.jface.viewers.TextCellEditor;
> import org.eclipse.jface.viewers.Viewer;
> import org.eclipse.swt.SWT;
> import org.eclipse.swt.graphics.Color;
> import org.eclipse.swt.graphics.Font;
> import org.eclipse.swt.graphics.Image;
> import org.eclipse.swt.layout.FillLayout;
> import org.eclipse.swt.widgets.Display;
> import org.eclipse.swt.widgets.Item;
> import org.eclipse.swt.widgets.Shell;
> import org.eclipse.swt.widgets.TableColumn;
>
> /**
> * A simple TreeViewer to demonstrate usage
> * * @author Tom Schindl <tom.schindl@bestsolution.at>
> * */
> public class Snippet032TableTreeViewer {
> 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, ITableFontProvider, ITableColorProvider {
> 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 Font getFont(Object element, int columnIndex) {
> if (((MyModel) element).counter % 2 == 0) {
> return
> registry.getBold(Display.getCurrent().getSystemFont()
> .getFontData()[0].getName());
> }
> return null;
> }
>
> public Color getBackground(Object element, int columnIndex) {
> if (((MyModel) element).counter % 2 == 0) {
> return Display.getCurrent().getSystemColor(SWT.COLOR_RED);
> }
> return null;
> }
>
> public Color getForeground(Object element, int columnIndex) {
> if (((MyModel) element).counter % 2 == 1) {
> return Display.getCurrent().getSystemColor(SWT.COLOR_RED);
> }
> return null;
> }
>
> }
>
> private class MyModifier implements ICellModifier {
> private TableTreeViewer v;
>
> public MyModifier(TableTreeViewer v) {
> this.v = v;
> }
>
> 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)((Item)element).getData()).counter =
> Integer.parseInt(value.toString());
> v.update(((Item)element).getData(), null);
> }
>
> }
>
> public Snippet032TableTreeViewer(Shell shell) {
> final TableTreeViewer v = new TableTreeViewer(shell,
> SWT.FULL_SELECTION);
>
> TableColumn column = new
> TableColumn(v.getTableTree().getTable(),SWT.NONE);
> column.setWidth(200);
> column.setText("Column 1");
>
> column = new TableColumn(v.getTableTree().getTable(),SWT.NONE);
> column.setWidth(200);
> column.setText("Column 2");
>
> v.getTableTree().getTable().setHeaderVisible(true);
> v.getTableTree().getTable().setLinesVisible(true);
>
> v.setCellEditors(new CellEditor[] { new
> TextCellEditor(v.getTableTree().getTable()), new
> TextCellEditor(v.getTableTree().getTable()) });
> v.setColumnProperties(new String[] { "column1", "column2" });
> v.setCellModifier(new MyModifier(v));
>
> v.setLabelProvider(new MyLabelProvider());
> v.setContentProvider(new MyContentProvider());
> v.setInput(createModel());
> }
>
> 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 Snippet032TableTreeViewer(shell);
> shell.open();
>
> while (!shell.isDisposed()) {
> if (!display.readAndDispatch())
> display.sleep();
> }
>
> display.dispose();
> }
> }
>
>
>
Re: Tabletreeviewer scroll problem [message #16592 is a reply to message #16460] Thu, 25 June 2009 07:11 Go to previous messageGo to next message
byrebg Mising name is currently offline byrebg Mising nameFriend
Messages: 48
Registered: July 2009
Member
I am working in Windows XP and eclipse 3.4

And how do I attach screenshots to this post ?

Thanks,
BYG
Re: Tabletreeviewer scroll problem [message #18578 is a reply to message #16592] Fri, 03 July 2009 08:53 Go to previous messageGo to next message
byrebg Mising name is currently offline byrebg Mising nameFriend
Messages: 48
Registered: July 2009
Member
I could not fix the above mentioned problem and I am trying to find some
work around for the same.

Is there any way that I can know that a row is semi visible in a viewer
and a scroll is needed to view it completely ? So that when the row is in
editing mode, I can alert the user with some message.

Thanks in advance for help.

Regards,
BYG
Re: Tabletreeviewer scroll problem [message #20624 is a reply to message #18578] Tue, 14 July 2009 11:52 Go to previous messageGo to next message
byrebg Mising name is currently offline byrebg Mising nameFriend
Messages: 48
Registered: July 2009
Member
Hello,

Could anyone please tell me if i could have a similar treeviewer
control(the considered snippet) using Nebula GridViewer/GridEditor ? If
so, any piece of code pointing towards the solution would be really
helpful.


Thanks in advance :)

Regards,
BYG
Re: Tabletreeviewer scroll problem [message #22466 is a reply to message #20624] Wed, 22 July 2009 05:01 Go to previous messageGo to next message
Murthy Bhat is currently offline Murthy BhatFriend
Messages: 159
Registered: July 2009
Senior Member
Try defining your own editor activation strategy using
ColumnViewerEditorActivationStrategy. So that you can override the default
single click editing and any other event (like the double click) would
then get the scroll adjusted on its fist click.


Regards,
Bhat
Re: Tabletreeviewer scroll problem [message #352567 is a reply to message #22466] Tue, 28 July 2009 10:16 Go to previous messageGo to next message
byrebg Mising name is currently offline byrebg Mising nameFriend
Messages: 48
Registered: July 2009
Member
Hello Mr.Bhat,

Though the result is not exactly what I had in mind, but the solution
works out for me. Thank you for the help. Having double click event as the
activation strategy, I could now have the right row selected.

I also tried to reproduce the same single click error by double clicking
on the semi visible row.Though the focus is on the next row, the correct
row is selected. Not the best solution but serves the purpose good.

Thanks again.


Regards,
BYG
Re: Tabletreeviewer scroll problem [message #477809 is a reply to message #352567] Thu, 06 August 2009 06:24 Go to previous message
Murthy Bhat is currently offline Murthy BhatFriend
Messages: 159
Registered: July 2009
Senior Member
The mismatch in the desired editable row and the currently being modified
row can be easily detected in your modifier class.

You can get the current selection from the viewer and you can always make
a check in any of the modifier methods, canModify(...) for example.

An example is as below

public boolean canModify(Object element, String property) {

ISelection selection = myViewer.getSelection();
Object obj = ((IStructuredSelection) selection) .getFirstElement();
if(!element.equals(obj))
{
//Your Code for handling the situation here
}

...

Regards,
Bhat
Previous Topic:adding (horizontally growable) fieldeditor(s) inside a (horizontally growable) group in a preference
Next Topic:CellModifier in TreeViewer in Dialog class
Goto Forum:
  


Current Time: Fri Sep 20 09:56:40 GMT 2024

Powered by FUDForum. Page generated in 0.05433 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top