Changeset 7486

Show
Ignore:
Timestamp:
05/06/08 09:04:14 (5 years ago)
Author:
stedwar2
Message:

Added custom tree viewer class and custom drag-and-drop transfer
type.

Location:
ossiedev/branches/jsnyder/ComponentProject/src/edu/vt/ossie/editors
Files:
1 added
2 modified

Legend:

Unmodified
Added
Removed
  • ossiedev/branches/jsnyder/ComponentProject/src/edu/vt/ossie/editors/OWDEditor.java

    r7482 r7486  
    2525import org.eclipse.ui.part.FileEditorInput; 
    2626import org.eclipse.jface.action.Action; 
    27 import org.eclipse.jface.action.IMenuListener; 
    2827import org.eclipse.jface.action.IMenuManager; 
    2928import org.eclipse.jface.action.IStatusLineManager; 
     
    3534import org.eclipse.jface.operation.IRunnableWithProgress; 
    3635import org.eclipse.jface.resource.ImageDescriptor; 
    37 import org.eclipse.jface.viewers.CellEditor; 
    38 import org.eclipse.jface.viewers.ColumnViewerEditor; 
    39 import org.eclipse.jface.viewers.ColumnViewerEditorActivationEvent; 
    40 import org.eclipse.jface.viewers.ColumnViewerEditorActivationStrategy; 
    4136import org.eclipse.jface.viewers.DoubleClickEvent; 
    42 import org.eclipse.jface.viewers.ICellModifier; 
    4337import org.eclipse.jface.viewers.IDoubleClickListener; 
    4438import org.eclipse.jface.viewers.ISelectionChangedListener; 
    4539import org.eclipse.jface.viewers.IStructuredSelection; 
    4640import org.eclipse.jface.viewers.TreeViewer; 
    47 import org.eclipse.jface.viewers.TreeViewerEditor; 
    4841import org.eclipse.swt.SWT; 
    4942import org.eclipse.swt.custom.ScrolledComposite; 
    50 import org.eclipse.swt.dnd.DND; 
    51 import org.eclipse.swt.dnd.DragSourceEvent; 
    52 import org.eclipse.swt.dnd.DragSourceListener; 
    5343import org.eclipse.swt.dnd.DropTargetEvent; 
    54 import org.eclipse.swt.dnd.DropTargetListener; 
    55 import org.eclipse.swt.dnd.TextTransfer; 
    56 import org.eclipse.swt.dnd.Transfer; 
    5744import org.eclipse.swt.events.FocusEvent; 
    5845import org.eclipse.swt.events.FocusListener; 
     
    6754import org.eclipse.swt.widgets.TreeItem; 
    6855import org.python.core.Py; 
    69 import org.python.core.PyList; 
    7056import edu.vt.ossie.OWDPlugin; 
    7157import edu.vt.ossie.dialogs.ConnectDialog; 
    7258import edu.vt.ossie.jyinterface.interfaces.MainFrame; 
    7359import edu.vt.ossie.wavedev.*; 
     60import edu.vt.ossie.wavedev.treemodel.ITreeNode; 
    7461import edu.vt.ossie.wavedev.treemodel.ContentProvider; 
    75 import edu.vt.ossie.wavedev.treemodel.ITreeNode; 
    7662import edu.vt.ossie.wavedev.treemodel.LabelProvider; 
    7763 
     
    707693        data.minimumWidth = 200; 
    708694        resourcesTree.setLayoutData(data); 
    709         resourcesTreeViewer = new ResourceTreeViewer(resourcesTree); 
     695        resourcesTreeViewer = new ResourceTreeViewer( 
     696            resourcesTree, ResourceTransfer.ResourceData.RESOURCE_TREE); 
    710697        resourcesTreeViewer.setAutoExpandLevel(2); 
    711698        resourcesTree.addFocusListener(this); 
     
    831818        data.minimumWidth = 200; 
    832819        waveformTree.setLayoutData(data); 
    833         waveformTreeViewer = new ResourceTreeViewer(waveformTree); 
     820        waveformTreeViewer = new ResourceTreeViewer( 
     821            waveformTree, ResourceTransfer.ResourceData.WAVEFORM_TREE); 
    834822        waveformTree.addFocusListener(this); 
    835823 
    836824        // Turn on name decorations in the tree 
    837         ((LabelProvider)resourcesTreeViewer.getLabelProvider()) 
     825        ((LabelProvider)waveformTreeViewer.getLabelProvider()) 
    838826            .setShowDecoratedNames(true); 
    839827 
     
    914902 
    915903 
     904        // Add drag-and-drop support for inserting into waveform/platform 
     905 
     906        waveformTreeViewer.addDragSupport(null); 
     907 
     908 
    916909        // Add drag-and-drop support for adding components from resources 
    917910 
     
    947940                        { 
    948941                            getActiveWaveform().addNewComponent(toAdd, after); 
    949                             refreshWaveform(); 
    950942                            return true; 
    951943                        } 
     
    965957        data.minimumWidth = 200; 
    966958        platformTree.setLayoutData(data); 
    967         platformTreeViewer = new ResourceTreeViewer(platformTree); 
     959        platformTreeViewer = new ResourceTreeViewer( 
     960            platformTree, ResourceTransfer.ResourceData.PLATFORM_TREE); 
    968961        platformTreeViewer.setAutoExpandLevel(2); 
    969962        platformTree.addFocusListener(this); 
     
    996989        // Add edit support for node and device names 
    997990 
    998         platformTreeViewer.addNameEditSupport(null, dirtySetter); 
     991        platformTreeViewer.addNameEditSupport(null, 
     992            new ResourceTreeViewer.SetDirty() 
     993        { 
     994            // ---------------------------------------------------------- 
     995            public void setIsDirty(boolean isDirty) 
     996            { 
     997                waveformTreeViewer.refresh(); 
     998                OWDEditor.this.setIsDirty(isDirty); 
     999            } 
     1000        }); 
     1001 
     1002 
     1003        // Add drag-and-drop support for moving components between devices 
     1004 
     1005        platformTreeViewer.addDragSupport(new ResourceTreeViewer.AllowAction() 
     1006        { 
     1007            // ---------------------------------------------------------- 
     1008            @Override 
     1009            public boolean allowAction(PyWrapper object) 
     1010            { 
     1011                return object instanceof Component 
     1012                    && !((Component)object).isDevice(); 
     1013            } 
     1014        }); 
    9991015 
    10001016 
     
    10141030                    } 
    10151031                }, 
    1016                 new ResourceTreeViewer.SetDirty() 
    1017                 { 
    1018                     public void setIsDirty(boolean isDirty) 
    1019                     { 
    1020                         refreshPlatform(); 
    1021                         OWDEditor.this.setIsDirty(isDirty); 
    1022                     } 
    1023                 } 
    1024                 ) 
     1032                dirtySetter) 
    10251033            { 
    10261034                // ---------------------------------------------------------- 
    10271035                public boolean drop(DropTargetEvent event, ITreeNode onNode) 
     1036                { 
     1037                    ResourceTransfer.ResourceData data = 
     1038                        (ResourceTransfer.ResourceData)event.data; 
     1039                    if (data.tree == resourcesTreeViewer.treeId()) 
     1040                    { 
     1041                        return dropNewResource(event, onNode); 
     1042                    } 
     1043                    else // if (data.tree == waveformTreeViewer.treeId()) 
     1044                    { 
     1045                        return dropComponentAssignment(event, onNode); 
     1046                    } 
     1047                } 
     1048 
     1049                // ---------------------------------------------------------- 
     1050                public boolean dropComponentAssignment( 
     1051                    DropTargetEvent event, ITreeNode onNode) 
     1052                { 
     1053                    ResourceTreeViewer sourceViewer = viewerSource(event); 
     1054                    ITreeNode droppedNode = 
     1055                        getDroppedNode(event, sourceViewer); 
     1056                    droppedNode = 
     1057                        nearestEnclosingNode(Component.class, droppedNode); 
     1058                    if (droppedNode == null) return false; 
     1059 
     1060                    onNode = 
     1061                        nearestEnclosingNode(Component.class, onNode); 
     1062                    while (onNode != null 
     1063                        && !((Component)onNode.data()).isDevice()) 
     1064                    { 
     1065                        onNode = 
     1066                            nearestEnclosingNode(Component.class, onNode); 
     1067                    } 
     1068                    if (onNode == null) return false; 
     1069 
     1070                    Component c = (Component)droppedNode.data(); 
     1071                    Component oldDevice = c.getDevice(); 
     1072                    Component newDevice = (Component)onNode.data(); 
     1073                    c.assignToDevice(newDevice); 
     1074                    sourceViewer.update(droppedNode, null); 
     1075                    if (sourceViewer != waveformTreeViewer) 
     1076                    { 
     1077                        waveformTreeViewer.update(((ContentProvider) 
     1078                            waveformTreeViewer.getContentProvider()) 
     1079                            .findNodeByData(c), null); 
     1080                    } 
     1081                    viewer().refresh(onNode); 
     1082                    viewer().expandToLevel(onNode, 1); 
     1083                    if (oldDevice != null) 
     1084                    { 
     1085                        ITreeNode oldNode = ((ContentProvider)viewer() 
     1086                            .getContentProvider()).findNodeByData(oldDevice); 
     1087                        if (oldNode != null) 
     1088                        { 
     1089                            viewer().refresh(oldNode); 
     1090                        } 
     1091                    } 
     1092                    return true; 
     1093                } 
     1094 
     1095                // ---------------------------------------------------------- 
     1096                public boolean dropNewResource( 
     1097                    DropTargetEvent event, ITreeNode onNode) 
    10281098                { 
    10291099                    ITreeNode droppedNode = 
     
    10351105                        getActivePlatform().addNewNode( 
    10361106                            (Node)droppedNode.data(), after); 
     1107                        refreshPlatform(); 
    10371108                        return true; 
    10381109                    } 
     
    10461117                            ? null 
    10471118                            : (Component)afterNode.data(); 
    1048                         Node nodeForDevice = nearestEnclosingObject(Node.class, 
     1119                        ITreeNode nodeForDevice = nearestEnclosingNode( 
     1120                            Node.class, 
    10491121                            afterNode == null ? onNode : afterNode); 
    10501122                        if (nodeForDevice == null) return false; 
    10511123 
    1052                         nodeForDevice.addNewDevice(device, after); 
     1124                        Node theNode = (Node)nodeForDevice.data(); 
     1125                        log.debug("before add: " + theNode.getDevices()); 
     1126                        theNode.addNewDevice(device, after); 
     1127                        log.debug("after add: " + theNode.getDevices()); 
     1128                        viewer().refresh(nodeForDevice); 
    10531129                        return true; 
    10541130                    } 
     
    11401216        { 
    11411217            log.error("openComponentInEditor()", e); 
     1218        } 
     1219    } 
     1220 
     1221 
     1222    // ---------------------------------------------------------- 
     1223    private ResourceTreeViewer viewerSource(DropTargetEvent e) 
     1224    { 
     1225        return viewerFromId(((ResourceTransfer.ResourceData)e.data).tree); 
     1226    } 
     1227 
     1228 
     1229    // ---------------------------------------------------------- 
     1230    private ResourceTreeViewer viewerFromId(int treeId) 
     1231    { 
     1232        if (treeId == waveformTreeViewer.treeId()) 
     1233        { 
     1234            return waveformTreeViewer; 
     1235        } 
     1236        else if (treeId == platformTreeViewer.treeId()) 
     1237        { 
     1238            return platformTreeViewer; 
     1239        } 
     1240        else 
     1241        { 
     1242            return resourcesTreeViewer; 
    11421243        } 
    11431244    } 
  • ossiedev/branches/jsnyder/ComponentProject/src/edu/vt/ossie/editors/ResourceTreeViewer.java

    r7482 r7486  
    1010import org.eclipse.jface.viewers.ColumnViewerEditorActivationStrategy; 
    1111import org.eclipse.jface.viewers.DoubleClickEvent; 
    12 import org.eclipse.jface.viewers.IBaseLabelProvider; 
    1312import org.eclipse.jface.viewers.ICellModifier; 
    14 import org.eclipse.jface.viewers.IContentProvider; 
    1513import org.eclipse.jface.viewers.IDoubleClickListener; 
    1614import org.eclipse.jface.viewers.IStructuredSelection; 
     
    1917import org.eclipse.swt.dnd.DND; 
    2018import org.eclipse.swt.dnd.DragSourceEvent; 
    21 import org.eclipse.swt.dnd.DragSourceListener; 
    2219import org.eclipse.swt.dnd.DropTargetEvent; 
    23 import org.eclipse.swt.dnd.DropTargetListener; 
    2420import org.eclipse.swt.dnd.TextTransfer; 
    2521import org.eclipse.swt.dnd.Transfer; 
    26 import org.eclipse.swt.widgets.Composite; 
    2722import org.eclipse.swt.widgets.Tree; 
    2823import org.eclipse.swt.widgets.TreeItem; 
    29 import org.python.core.PyList; 
    3024import edu.vt.ossie.OWDPlugin; 
    31 import edu.vt.ossie.wavedev.Component; 
    32 import edu.vt.ossie.wavedev.MainFrameTreeNode; 
    3325import edu.vt.ossie.wavedev.NamedObject; 
    34 import edu.vt.ossie.wavedev.Node; 
    35 import edu.vt.ossie.wavedev.Port; 
    3626import edu.vt.ossie.wavedev.PyWrapper; 
    3727import edu.vt.ossie.wavedev.treemodel.ContentProvider; 
     
    5444 
    5545    // ---------------------------------------------------------- 
    56     public ResourceTreeViewer(Tree tree) 
     46    public ResourceTreeViewer(Tree tree, int treeId) 
    5747    { 
    5848        super(tree); 
     49        this.treeId = treeId; 
    5950        setContentProvider(new ContentProvider()); 
    6051        setLabelProvider(new LabelProvider()); 
     
    6354 
    6455    //~ Public Methods ........................................................ 
     56 
     57    // ---------------------------------------------------------- 
     58    public int treeId() 
     59    { 
     60        return treeId; 
     61    } 
     62 
    6563 
    6664    // ---------------------------------------------------------- 
     
    7573        addDragSupport( 
    7674            DND.DROP_COPY | DND.DROP_DEFAULT, 
    77             new Transfer[] {TextTransfer.getInstance()}, 
    78             new DragSourceListener(filter, null)); 
     75            new Transfer[] {ResourceTransfer.getInstance()}, 
     76            new DragSourceListener(filter, null, treeId)); 
    7977    } 
    8078 
     
    9189        addDropSupport( 
    9290            DND.DROP_COPY | DND.DROP_DEFAULT, 
    93             new Transfer[] {TextTransfer.getInstance()}, 
     91            new Transfer[] {ResourceTransfer.getInstance()}, 
    9492            listener); 
    9593    } 
     
    232230 
    233231        // ---------------------------------------------------------- 
    234         public DragSourceListener() 
    235         { 
    236             this(null, null); 
    237         } 
    238  
    239  
    240         // ---------------------------------------------------------- 
    241         public DragSourceListener(AllowAction allower, SetDirty setter) 
     232        public DragSourceListener(int treeId) 
     233        { 
     234            this(null, null, treeId); 
     235        } 
     236 
     237 
     238        // ---------------------------------------------------------- 
     239        public DragSourceListener( 
     240            AllowAction allower, SetDirty setter, int treeId) 
    242241        { 
    243242            allowAction = allower; 
    244243            dirtySetter = setter; 
     244            this.treeId = treeId; 
    245245        } 
    246246 
     
    290290        public void dragSetData(DragSourceEvent event) 
    291291        { 
    292             if (TextTransfer.getInstance().isSupportedType( 
     292            if (ResourceTransfer.getInstance().isSupportedType( 
    293293                event.dataType)) 
    294294            { 
     
    299299                    ITreeNode node = 
    300300                        (ITreeNode)selection.getFirstElement(); 
    301                     event.data = node.getName(); 
     301                    ResourceTransfer.ResourceData data = 
     302                        new ResourceTransfer.ResourceData(); 
     303                    data.name = node.getName(); 
     304                    data.tree = treeId; 
     305                    event.data = data; 
    302306                } 
    303307            } 
     
    318322        protected AllowAction allowAction; 
    319323        protected SetDirty dirtySetter; 
     324        protected int treeId; 
    320325    } 
    321326 
     
    491496                } 
    492497            } 
    493             for (int i = 0; i < event.dataTypes.length; i++) 
    494             { 
    495                 if (TextTransfer.getInstance().isSupportedType( 
    496                     event.dataTypes[i])) 
    497                 { 
    498                     event.currentDataType = event.dataTypes[i]; 
    499                     break; 
    500                 } 
    501             } 
    502498            if (event.detail != DND.DROP_COPY) 
    503499            { 
     
    549545            DropTargetEvent event, ResourceTreeViewer source) 
    550546        { 
    551             String name = (String)event.data; 
     547            ResourceTransfer.ResourceData data = 
     548                (ResourceTransfer.ResourceData)event.data; 
    552549            return ((ContentProvider) 
    553550                source.getContentProvider()) 
    554                 .findNodeByName(name); 
     551                .findNodeByName(data.name); 
    555552        } 
    556553 
     
    594591        public void drop(DropTargetEvent event) 
    595592        { 
    596             if (TextTransfer.getInstance().isSupportedType( 
     593            if (ResourceTransfer.getInstance().isSupportedType( 
    597594                event.currentDataType)) 
    598595            { 
     
    619616        public void dropAccept(DropTargetEvent event) 
    620617        { 
    621             if (allowAction != null) 
     618            if (allowAction != null && event.item != null) 
    622619            { 
    623620                TreeItem item = (TreeItem)event.item; 
     
    640637    //~ Instance/static variables ............................................. 
    641638 
     639    private int treeId; 
     640 
    642641    private static final Logger log = 
    643642        OWDPlugin.getLogManager().getLogger(ResourceTreeViewer.class);