[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Newsgroup Home]
|
[news.eclipse.platform.swt] Re: DND within TableTree?
|
TreeViewer with columns supported for 3.1 Jan 25 Integration build. Here is
an example of setting fonts, colours, image and text:
public class TreeViewerTest {
class TreeViewerTestLabelProvider implements ITableLabelProvider,
ITableColorProvider, ITableFontProvider {
Font font = null;
public String getColumnText(Object element, int columnIndex)
{
if (!(element instanceof File)) return null;
File file = (File)element;
switch (columnIndex) {
case 0:
return file.getName();
case 1:
return ""+new Date(file.lastModified());
case 2:
return ""+file.isHidden();
}
return null;
}
public Image getColumnImage(Object element, int columnIndex)
{
if (columnIndex != 0) return null;
if (!(element instanceof File)) return null;
File file = (File)element;
Display display = Display.getCurrent();
if (file.isDirectory()) return
display.getSystemImage(SWT.ICON_WARNING);
return display.getSystemImage(SWT.ICON_QUESTION);
}
public void dispose() {
if (font != null) font.dispose();
font = null;
}
public boolean isLabelProperty(Object element, String
property) {
return false;
}
public void addListener(ILabelProviderListener listener) {
}
public void removeListener(ILabelProviderListener listener)
{
}
public Color getForeground(Object element, int columnIndex)
{
if (columnIndex == 1) {
Display display = Display.getCurrent();
return
display.getSystemColor(SWT.COLOR_RED);
}
return null;
}
public Color getBackground(Object element, int columnIndex)
{
if (columnIndex == 0) {
File file = (File)element;
Display display = Display.getCurrent();
if (file.isDirectory()) return
display.getSystemColor(SWT.COLOR_CYAN);
return
display.getSystemColor(SWT.COLOR_MAGENTA);
}
return null;
}
public Font getFont(Object element, int columnIndex) {
if (columnIndex == 2) {
if (font == null) {
Display display =
Display.getCurrent();
font = new Font(display, "Times",
12, SWT.ITALIC);
}
return font;
}
return null;
}
}
public static void main(String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new FormLayout());
TreeViewerTestLabelProvider labelProvider1 = new
TreeViewerTest().new TreeViewerTestLabelProvider();
ITreeContentProvider contentProvider = new ITreeContentProvider() {
public Object[] getChildren(Object parentElement) {
if (!(parentElement instanceof File)) return null;
File file = (File)parentElement;
if (file.isDirectory()) return file.listFiles();
return null;
}
public Object getParent(Object element) {
if (!(element instanceof File)) return null;
File file = (File)element;
return file.getParentFile();
}
public boolean hasChildren(Object element) {
if (!(element instanceof File)) return false;
File file = (File)element;
return file.isDirectory();
}
public Object[] getElements(Object inputElement) {
return getChildren(inputElement);
}
public void dispose() {
}
public void inputChanged(Viewer viewer, Object oldInput,
Object newInput) {
}
};
final TreeViewer treeViewer1 = new TreeViewer(shell,
SWT.FULL_SELECTION | SWT.CHECK);
Tree tree1 = treeViewer1.getTree();
tree1.setHeaderVisible(true);
TreeColumn column1 = new TreeColumn(tree1, SWT.LEFT);
column1.setText("Name");
column1.setImage(display.getSystemImage(SWT.ICON_WORKING));
column1.setWidth(200);
TreeColumn column2 = new TreeColumn(tree1, SWT.CENTER);
column2.setText("Last Modified");
column2.setImage(display.getSystemImage(SWT.ICON_INFORMATION));
column2.setWidth(200);
TreeColumn column3 = new TreeColumn(tree1, SWT.CENTER);
column3.setText("Hidden");
column3.setImage(display.getSystemImage(SWT.ICON_INFORMATION));
column3.setWidth(100);
treeViewer1.setLabelProvider(labelProvider1);
treeViewer1.setContentProvider(contentProvider);
Button b = new Button(shell, SWT.PUSH);
b.setText("choose root folder");
b.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
DirectoryDialog f = new DirectoryDialog(shell,
SWT.OPEN);
String root = f.open();
if (root != null) {
File file = new File(root);
if (file.exists()) {
treeViewer1.setInput(file);
treeViewer1.refresh();
treeViewer2.setInput(file);
treeViewer2.refresh();
}
}
}
});
FormData data = new FormData();
data.left = new FormAttachment(0, 10);
data.top = new FormAttachment(0, 10);
data.right = new FormAttachment(100, -10);
data.bottom = new FormAttachment(b, -10);
tree1.setLayoutData(data);
data = new FormData();
data.left = new FormAttachment(0, 10);
data.bottom = new FormAttachment(100, -10);
b.setLayoutData(data);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
"Boris Bokowski" <borisnews@xxxxxxxxxxx> wrote in message
news:csucj9$ap2$1@xxxxxxxxxxxxxxxxxx
> The TableTreeViewer registers your DragSourceListener with the TableTree
> control. To get DND to work, the listener has to be registered with the
> underlying Table control, like in:
>
> DragSource dragSource = new
> DragSource(tableTreeViewer.getTableTree().getTable(), ops);
> dragSource.setTransfer(transfers);
> dragSource.addDragListener(new SymbolDragListener(tableTreeViewer));
>
> You can do the same for drop. For your class TableTreeDropAdapter, this is
> the hack to determine the drop target:
>
> protected Object determineTarget(DropTargetEvent event) {
> Object tableTreeItem = event.item == null ? null :
> event.item.getData("TableTreeItemID");
> return tableTreeItem == null ? null : ((TableTreeItem)
> tableTreeItem).getData();
> }
>
> The JFace team says this is a bug in SWT (see bugzilla #38840).
> Apparently, native table trees are coming up for 3.1 (see #36822).
>
> /Boris
>
> =====================
> "Mighty M" <fn2o-mycl@xxxxxxxxxx> wrote:
>
> When I converted my TreeViewer to a TableTreeViewer, the drag-and-drop
> support broke. Performing a selection and drag gesture no longer initiates
> a drag operation. The dragStart() method is never evoked. Are there any
> known issues that prevent dragging and dropping within the TableTree? Do
> I need to supply a special TableTreeViewer SWT style to enable dragging?
> Please help.
>
> Thanks,
> Mark
>
> reply to: fn2o-mycl@xxxxxxxxxx
>
> ==========
> tableTreeViewer = new TableTreeViewer(parent, SWT.FULL_SELECTION +
> SWT.MULTI);
> tableTreeViewer.setContentProvider( new DomainContentProvider () );
> labelProvider = new DomainLabelProvider ();
> tableTreeViewer.setLabelProvider(labelProvider);
> tableTreeViewer.setUseHashlookup(true);
>
> tableTreeViewer.setInput (getInitalInput());
>
> Table table = tableTreeViewer.getTableTree().getTable();
> new TableColumn(table, SWT.LEFT).setText(DomainConstants.COLUMN_NAME);
> new TableColumn(table, SWT.LEFT).setText(DomainConstants.COLUMN_TYPE);
> new TableColumn(table, SWT.RIGHT).setText(DomainConstants.COLUMN_STATUS);
> new TableColumn(table,
> SWT.RIGHT).setText(DomainConstants.COLUMN_PRIORITY);
>
> // Add drag and drop support.
>
> int ops = DND.DROP_COPY | DND.DROP_MOVE;
>
> Transfer[] transfers = new Transfer[] {
> DomainSymbolTransfer.getInstance()};
> tableTreeViewer.addDragSupport(ops, transfers, new
> SymbolDragListener(tableTreeViewer));
>
> dropAdapter = new TableTreeDropAdapter(tableTreeViewer);
> tableTreeViewer.addDropSupport(ops, transfers, dropAdapter);
>