/* * (non-Javadoc) * * @see org.talend.designer.fileoutputxml.ui.footer.AbstractTreeNodeButton#updateButtonStatus() */ @Override protected void updateStatus(TreeSelection selection) { if (selection.isEmpty()) { getButton().setEnabled(false); return; } final TreePath[] paths = selection.getPaths(); boolean sameSegment = true; for (int i = 0; i < paths.length - 1; i++) { if (paths[i].getSegmentCount() != paths[i + 1].getSegmentCount()) { sameSegment = false; } } if (sameSegment) { getButton().setEnabled(true); } else { getButton().setEnabled(false); return; } // if same segment ,they have the same parent and parent must be an element final Element parent = (Element) ((FOXTreeNode) selection.getFirstElement()).getParent(); if (parent == null) { getButton().setEnabled(false); return; } final List<? extends FOXTreeNode> attrChildren = parent.getAttributeChildren(); final List<? extends FOXTreeNode> nameSpaceChildren = parent.getNameSpaceChildren(); final List<FOXTreeNode> elementChildren = parent.getElementChildren(); final Iterator iterator = selection.iterator(); while (iterator.hasNext()) { final Object next = iterator.next(); if (next instanceof Attribute) { if (attrChildren.contains(next) && attrChildren.indexOf(next) == 0) { getButton().setEnabled(false); return; } } else if (next instanceof NameSpaceNode) { if (nameSpaceChildren.contains(next) && nameSpaceChildren.indexOf(next) == 0) { getButton().setEnabled(false); return; } } else if (next instanceof Element) { if (elementChildren.contains(next) && elementChildren.indexOf(next) == 0) { getButton().setEnabled(false); return; } } } }
/* * (non-Javadoc) * * @see org.talend.designer.fileoutputxml.ui.footer.AbstractTreeNodeButton#handleSelectionEvent() */ @Override protected void handleSelectionEvent(TreeSelection selection) { if (!selection.isEmpty()) { final Element parentNode = (Element) ((FOXTreeNode) selection.getFirstElement()).getParent(); final List<? extends FOXTreeNode> attrChildren = parentNode.getAttributeChildren(); final List<? extends FOXTreeNode> nameSpaceChildren = parentNode.getNameSpaceChildren(); final List<FOXTreeNode> elementChildren = parentNode.getElementChildren(); List<Integer> attrIndices = new ArrayList<Integer>(); List<Integer> nameSpaceIndices = new ArrayList<Integer>(); List<Integer> elementIndices = new ArrayList<Integer>(); final Iterator iterator = selection.iterator(); while (iterator.hasNext()) { final Object next = iterator.next(); if (next instanceof Attribute) { if (attrChildren.contains(next)) { attrIndices.add(attrChildren.indexOf(next)); } } else if (next instanceof NameSpaceNode) { if (nameSpaceChildren.contains(next)) { nameSpaceIndices.add(nameSpaceChildren.indexOf(next)); } } else if (next instanceof Element) { if (elementChildren.contains(next)) { elementIndices.add(elementChildren.indexOf(next)); } } } Collections.sort(attrIndices); Collections.sort(nameSpaceIndices); Collections.sort(elementIndices); swapElements(attrChildren, attrIndices); swapElements(nameSpaceChildren, nameSpaceIndices); swapElements(elementChildren, elementIndices); treeViewer.refresh(parentNode); treeViewer.expandAll(); manager.getUiManager().getFoxUI().redrawLinkers(); treeViewer.setSelection(selection); } }