List of usage examples for com.google.gwt.xml.client Node insertBefore
Node insertBefore(Node newChild, Node refChild);
newChild. From source file:org.gk.ui.client.com.tree.xml.gkTreeHandler.java
License:Open Source License
public gkTreeHandler(TreePanel tree, final Operation op) { new TreePanelDragSource(tree) { /**/* w ww. j a va 2s . co m*/ * ?drop???TreeNode?path */ @Override protected void onDragDrop(DNDEvent event) { event.setOperation(op); } }; target = new TreePanelDropTarget(tree) { @Override protected void onDragFail(DNDEvent event) { // treetraceMouseOver tree.setTrackMouseOver(true); super.onDragFail(event); } @Override protected void showFeedback(DNDEvent event) { final TreeNode overItem = tree.findNode(event.getTarget()); if (overItem == null) { clearStyles(event); } // :????? if (overItem != null && event.getDropTarget().getComponent() == event.getDragSource().getComponent()) { List<TreeModel> list = event.getData(); ModelData overModel = overItem.getModel(); for (int i = 0; i < list.size(); i++) { ModelData sel = (ModelData) list.get(i).get("model"); if (overModel == sel) { clearStyles(event); return; } List<ModelData> children = tree.getStore().getChildren(sel, true); if (children.contains(overItem.getModel())) { clearStyles(event); return; } } } // ================================ boolean append = feedback == Feedback.APPEND || feedback == Feedback.BOTH; boolean insert = feedback == Feedback.INSERT || feedback == Feedback.BOTH; if (overItem == null) { handleAppend(event, overItem); } else if (insert) { handleInsert(event, overItem); } else if ((!overItem.isLeaf() || isAllowDropOnLeaf()) && append) { handleAppend(event, overItem); } else { if (activeItem != null) { tree.getView().onDropChange(activeItem, false); } status = -1; activeItem = null; appendItem = null; Insert.get().hide(); event.getStatus().setStatus(false); } // if (activeItem == null) { event.getStatus().setStatus(false); } } @Override protected void onDragEnter(DNDEvent event) { removeDuplicateNode(event); super.onDragEnter(event); super.clearStyles(event);// ? IE ???? } private void removeDuplicateNode(DNDEvent event) { List<TreeStoreModel> modelList = (List<TreeStoreModel>) event.getData(); // 1. Parent Node Set<String> parentNodeSet = new HashSet<String>(); for (TreeStoreModel model : modelList) { Node node = model.getModel().get("node"); if (!model.isLeaf()) { parentNodeSet.add(node.toString()); } } // 2.?? Leaf Node (Leaf's Parent in parentNodeSet) Iterator<TreeStoreModel> modelIt = modelList.iterator(); while (modelIt.hasNext()) { TreeStoreModel model = modelIt.next(); Node node = model.getModel().get("node"); if (model.isLeaf()) { if (node.getParentNode() != null && parentNodeSet.contains(node.getParentNode().toString())) { modelIt.remove(); } } else { parentNodeSet.add(node.toString()); } } // 3.? event.getStatus() .update(Format.substitute(event.getDragSource().getStatusText(), modelList.size())); } /** * ? */ @Override protected void onDragDrop(DNDEvent e) { TreePanel srcTree = (TreePanel) e.getDragSource().getComponent(); if (activeItem == null) { super.onDragDrop(e); return; } List treeStoreModelList = (List) e.getData(); // ?XML Node Node dropNode = activeItem.getModel().get("node"); Node dropParentNode = dropNode.getParentNode(); // state=1,activeItem????Node // state=0,?TreeNode // ?xml doc????.??????? if (dropParentNode != null && dropParentNode.toString().equals(dropNode.toString())) { status = -1; } // Copy Mode // 1.???? // 2.?appendChild?? // 3.?? if (Operation.COPY == e.getOperation()) { List newModels = genNewTreeStoreModelList(srcTree, treeStoreModelList); e.setData(newModels); treeStoreModelList = newModels; } List<Node> dragNodeList = getNodeList(treeStoreModelList); String tarNodeId = ""; // 2011/06/28 ??? TreeNode srcTreeNode = srcTree.findNode((Element) e.getDragEvent().getStartElement()); switch (status) { case -1: // ? for (Node node : dragNodeList) { dropNode.appendChild(node); } tarNodeId = TreeUtils.getNodeId(activeItem, srcTreeNode, status); break; case 1: // ? Node siblingNode = dropNode.getNextSibling(); for (Node node : dragNodeList) { dropParentNode.insertBefore(node, siblingNode); } // ? tarNodeId = TreeUtils.getNodeId(activeItem, srcTreeNode, 1); break; case 0: // ? for (Node node : dragNodeList) { dropParentNode.insertBefore(node, dropNode); } // ? tarNodeId = TreeUtils.getNodeId(activeItem, srcTreeNode, 0); break; } // Move Mode // ??tree if (Operation.MOVE == e.getOperation()) { List<TreeModel> sel = e.getData(); for (TreeModel tm : sel) { srcTree.getStore().remove((ModelData) tm.get("model")); } } // update(compositeInfo(srcTree, tree, TreeUtils.getNodeId(srcTreeNode), tarNodeId)); super.onDragDrop(e); } }; target.setAllowSelfAsSource(true); target.setFeedback(Feedback.BOTH); }
From source file:org.openxdata.designer.client.view.DynamicListsView.java
/** * Moves an option one position upwards. * // w w w . j a v a2s. c om * @param optionDef the option to move. */ public void moveOptionUp(OptionDef optionDef) { List<OptionDef> optns = optionList; int index = optns.indexOf(optionDef); optns.remove(optionDef); Node parentNode = null; if (optionDef.getControlNode() != null) { parentNode = optionDef.getControlNode().getParentNode(); parentNode.removeChild(optionDef.getControlNode()); } OptionDef currentOptionDef; List<OptionDef> list = new ArrayList<OptionDef>(); //Remove all from index before selected all the way downwards while (optns.size() >= index) { currentOptionDef = (OptionDef) optns.get(index - 1); list.add(currentOptionDef); optns.remove(currentOptionDef); } optns.add(optionDef); for (int i = 0; i < list.size(); i++) { if (i == 0) { OptionDef optnDef = (OptionDef) list.get(i); if (parentNode != null && optnDef.getControlNode() != null && optionDef.getControlNode() != null) parentNode.insertBefore(optionDef.getControlNode(), optnDef.getControlNode()); } optns.add(list.get(i)); } }
From source file:org.openxdata.designer.client.view.DynamicListsView.java
/** * Moves an option one position downwards. * // w w w. jav a 2s. c o m * @param optionDef the option to move. */ public void moveOptionDown(OptionDef optionDef) { List<OptionDef> optns = optionList; int index = optns.indexOf(optionDef); optns.remove(optionDef); Node parentNode = null; if (optionDef.getControlNode() != null) { parentNode = optionDef.getControlNode().getParentNode(); parentNode.removeChild(optionDef.getControlNode()); } OptionDef currentItem; List<OptionDef> list = new ArrayList<OptionDef>(); //Remove all otions below selected index while (optns.size() > 0 && optns.size() > index) { currentItem = (OptionDef) optns.get(index); list.add(currentItem); optns.remove(currentItem); } for (int i = 0; i < list.size(); i++) { if (i == 1) { optns.add(optionDef); //Add after the first item but before the current (second). OptionDef optnDef = getNextSavedOption(list, i); if (optnDef.getControlNode() != null && optionDef.getControlNode() != null) parentNode.insertBefore(optionDef.getControlNode(), optnDef.getControlNode()); else if (parentNode != null) parentNode.appendChild(optionDef.getControlNode()); } optns.add(list.get(i)); } //If was second last and hence becoming last if (list.size() == 1) { optns.add(optionDef); if (optionDef.getControlNode() != null) parentNode.appendChild(optionDef.getControlNode()); } }
From source file:org.openxdata.sharedlib.client.model.PageDef.java
/** * Moves a question down by one position in a list of questions. * /*from w w w . java 2s. c o m*/ * @param questions the list of questions. * @param questionDef the question to move. */ public static void moveQuestionDown(Vector<QuestionDef> questions, QuestionDef questionDef) { int index = questions.indexOf(questionDef); //Not relying on group node because some forms have no groups Element controlNode = questionDef.getControlNode(); Element parentNode = controlNode != null ? (Element) controlNode.getParentNode() : null; if (questionDef.getDataType() == QuestionType.REPEAT && controlNode != null) { controlNode = (Element) controlNode.getParentNode(); parentNode = (Element) parentNode.getParentNode(); } questions.remove(questionDef); Node parentDataNode = questionDef.getDataNode() != null ? questionDef.getDataNode().getParentNode() : null; Node parentBindNode = questionDef.getBindNode() != null ? questionDef.getBindNode().getParentNode() : null; QuestionDef currentItem; List<QuestionDef> list = new ArrayList<QuestionDef>(); while (questions.size() > 0 && questions.size() > index) { currentItem = (QuestionDef) questions.elementAt(index); list.add(currentItem); questions.remove(currentItem); } for (int i = 0; i < list.size(); i++) { if (i == 1) { questions.add(questionDef); //Add after the first item. if (controlNode != null) { if (controlNode != null && parentNode != null) parentNode.removeChild(controlNode); QuestionDef qtnDef = getNextSavedQuestion(list, i); if (qtnDef.getControlNode() != null) { Node sibNode = qtnDef.getControlNode(); if (qtnDef.getDataType() == QuestionType.REPEAT) sibNode = sibNode.getParentNode(); parentNode.insertBefore(controlNode, sibNode); } else parentNode.appendChild(controlNode); //move data node (We are not moving nested data nodes just to avoid complications if (!(questionDef.getBinding().indexOf('/') > -1 || qtnDef.getBinding().indexOf('/') > -1)) if (questionDef.getDataNode() != null && questionDef.getDataNode().getParentNode() != null) { parentDataNode.removeChild(questionDef.getDataNode()); if (qtnDef.getDataNode() != null) { if (qtnDef.getDataType() == QuestionType.REPEAT && qtnDef.getBinding().contains("/")) parentDataNode.insertBefore(questionDef.getDataNode(), qtnDef.getDataNode().getParentNode()); else parentDataNode.insertBefore(questionDef.getDataNode(), qtnDef.getDataNode()); } else parentDataNode.appendChild(questionDef.getDataNode()); } //move binding node if (parentBindNode != null) { if (questionDef.getBindNode() != null && questionDef.getBindNode().getParentNode() != null) parentBindNode.removeChild(questionDef.getBindNode()); if (qtnDef.getBindNode() != null) parentBindNode.insertBefore(questionDef.getBindNode(), qtnDef.getBindNode()); else parentBindNode.appendChild(questionDef.getBindNode()); } } } questions.add(list.get(i)); } if (list.size() == 1) { questions.add(questionDef); if (controlNode != null) { if (questionDef.getControlNode() != null && parentNode != null) { parentNode.removeChild(controlNode); parentNode.appendChild(controlNode); } if (!(questionDef.getBinding().indexOf('/') > -1)) { if (questionDef.getDataNode() != null && parentDataNode != null) { parentDataNode.removeChild(questionDef.getDataNode()); parentDataNode.appendChild(questionDef.getDataNode()); } } if (questionDef.getBindNode() != null && parentBindNode != null) { parentBindNode.removeChild(questionDef.getBindNode()); parentBindNode.appendChild(questionDef.getBindNode()); } } } }