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