diff options
author | itrimble | 2008-03-01 09:02:24 +0000 |
---|---|---|
committer | itrimble | 2008-03-01 09:02:24 +0000 |
commit | d7ba26d9eb32b055de808e454dcf35a0176f62df (patch) | |
tree | e27c206d03add06a8cdb22a306f623b839484da6 | |
parent | 1af85eb1abaab330a6461c485f2ac9224da8c350 (diff) | |
download | webtools.jsf-d7ba26d9eb32b055de808e454dcf35a0176f62df.tar.gz webtools.jsf-d7ba26d9eb32b055de808e454dcf35a0176f62df.tar.xz webtools.jsf-d7ba26d9eb32b055de808e454dcf35a0176f62df.zip |
Update Trinidad Tag Support:
- enhanced editing support for tr:panelTabbed/tr:showDetailItem
3 files changed, 99 insertions, 10 deletions
diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/TrinidadUtils.java b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/TrinidadUtils.java new file mode 100644 index 000000000..de19971ce --- /dev/null +++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/TrinidadUtils.java @@ -0,0 +1,67 @@ +/** + * Copyright (c) 2008 Oracle Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Oracle Corporation - initial API and implementation + */ +package org.eclipse.jst.jsf.apache.trinidad.tagsupport; + +import org.w3c.dom.Node; + +/** + * Utility class for the Trinidad Tag Support plug-in. + * + * @author Ian Trimble - Oracle + */ +public class TrinidadUtils { + + private static final String KEY_DISCLOSED_CHILD_INDEX = + "KEY_DISCLOSED_CHILD_INDEX"; + + /** + * Sets the index of the Node instance's "disclosed" child as user data on + * the Node instance. + * + * @param node Node instance on which to set index. + * @param index Index of node's "disclosed" child. + * @return true if index has changed, else false. + */ + public static boolean setDisclosedChildIndex(Node node, int index) { + boolean indexChanged = false; + if (node != null) { + int currentIndex = getDisclosedChildIndex(node); + if (currentIndex != index) { + node.setUserData( + KEY_DISCLOSED_CHILD_INDEX, + new Integer(index), + null); + indexChanged = true; + } + } + return indexChanged; + } + + /** + * Gets the index of the Node instance's "disclosed child from user data on + * the Node instance. + * + * @param node Node instance from which to get index. + * @return Index of node's "disclosed" child. A value of -1 indicates + * inability to get index from node. + */ + public static int getDisclosedChildIndex(Node node) { + int index = -1; + if (node != null) { + Object obj = node.getUserData(KEY_DISCLOSED_CHILD_INDEX); + if (obj instanceof Integer) { + index = ((Integer)obj).intValue(); + } + } + return index; + } + +} diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/PanelTabbedOperation.java b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/PanelTabbedOperation.java index 82ff9e336..2563b05f3 100644 --- a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/PanelTabbedOperation.java +++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/converter/operations/PanelTabbedOperation.java @@ -14,6 +14,7 @@ import java.util.Iterator; import java.util.List; import org.eclipse.jst.jsf.apache.trinidad.tagsupport.Messages; +import org.eclipse.jst.jsf.apache.trinidad.tagsupport.TrinidadUtils; import org.eclipse.jst.pagedesigner.converter.ConvertPosition; import org.eclipse.jst.pagedesigner.dtmanager.converter.ITransformOperation; import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.AbstractTransformOperation; @@ -57,7 +58,8 @@ public class PanelTabbedOperation extends AbstractTransformOperation { //get child showDetailItem elements @SuppressWarnings("unchecked") - List<Node> showDetailItems = getChildElements(srcElement, "showDetailItem"); //$NON-NLS-1$ + List<Node> showDetailItems = getChildElements( + srcElement, "showDetailItem"); //$NON-NLS-1$ if (showDetailItems.size() > 0) { //determine tabs position ("both", "above", or "below" - default "both") @@ -79,7 +81,8 @@ public class PanelTabbedOperation extends AbstractTransformOperation { } //copy "disclosed" child showDetailItem - int disclosedItem = calculateDisclosedShowDetailItem(showDetailItems); + int disclosedItem = + calculateDisclosedShowDetailItem(srcElement, showDetailItems); int curItem = 0; Iterator<Node> itItems = showDetailItems.iterator(); while (itItems.hasNext()) { @@ -144,7 +147,8 @@ public class PanelTabbedOperation extends AbstractTransformOperation { Node nodeItem = itItems.next(); if (nodeItem instanceof Element) { Element elemItem = (Element)nodeItem; - appendShowDetailItemTD(trElement, elemItem, disclosedItem == curItem); + appendShowDetailItemTD( + trElement, elemItem, disclosedItem == curItem); if (curItem < showDetailItems.size() - 1) { appendSeparatorTD(trElement); } @@ -234,6 +238,16 @@ public class PanelTabbedOperation extends AbstractTransformOperation { } } + private int calculateDisclosedShowDetailItem( + Element srcElement, List<Node> showDetailItems) { + int disclosedItem = TrinidadUtils.getDisclosedChildIndex(srcElement); + if (disclosedItem == -1) { + disclosedItem = calculateDisclosedShowDetailItem(showDetailItems); + TrinidadUtils.setDisclosedChildIndex(srcElement, disclosedItem); + } + return disclosedItem; + } + private int calculateDisclosedShowDetailItem(List<Node> showDetailItems) { int disclosedItem = -1; int curItem = 0; @@ -243,14 +257,15 @@ public class PanelTabbedOperation extends AbstractTransformOperation { if (item instanceof Element) { Element elemItem = (Element)item; String attrDisclosedVal = elemItem.getAttribute("disclosed"); //$NON-NLS-1$ - if (Boolean.TRUE.toString().equalsIgnoreCase(attrDisclosedVal)) { + if (Boolean.TRUE.toString().equalsIgnoreCase( + attrDisclosedVal)) { disclosedItem = curItem; break; } } curItem++; } - //if none explicitly disclosed, consider first non-disabled tab "disclosed" + //if none explicitly disclosed, consider first non-disabled tab disclosed if (disclosedItem == -1) { curItem = 0; itItems = showDetailItems.iterator(); @@ -267,7 +282,7 @@ public class PanelTabbedOperation extends AbstractTransformOperation { curItem++; } } - //if none explicitly disclosed and all disabled, consider first tab "disclosed" + //if none explicitly disclosed and all disabled, consider first tab disclosed if (disclosedItem == -1) { disclosedItem = 0; } diff --git a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/elementedit/PanelTabbedElementEdit.java b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/elementedit/PanelTabbedElementEdit.java index fb36e1cc4..8d52c7a0f 100644 --- a/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/elementedit/PanelTabbedElementEdit.java +++ b/jsf/plugins/org.eclipse.jst.jsf.apache.trinidad.tagsupport/src/org/eclipse/jst/jsf/apache/trinidad/tagsupport/elementedit/PanelTabbedElementEdit.java @@ -13,11 +13,12 @@ package org.eclipse.jst.jsf.apache.trinidad.tagsupport.elementedit; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.geometry.Point; import org.eclipse.gef.DragTracker; +import org.eclipse.gef.EditPart; import org.eclipse.gef.EditPolicy; import org.eclipse.gef.GraphicalEditPart; import org.eclipse.gef.requests.LocationRequest; import org.eclipse.jst.jsf.apache.trinidad.tagsupport.ITrinidadConstants; -import org.eclipse.jst.jsf.apache.trinidad.tagsupport.TrinidadTagSupportActivator; +import org.eclipse.jst.jsf.apache.trinidad.tagsupport.TrinidadUtils; import org.eclipse.jst.jsf.core.internal.tld.TagIdentifierFactory; import org.eclipse.jst.pagedesigner.editpolicies.ElementResizableEditPolicy; import org.eclipse.jst.pagedesigner.parts.ElementEditPart; @@ -64,9 +65,14 @@ public class PanelTabbedElementEdit extends DefaultTrinidadCoreElementEdit { ObjectModeDragTracker dragTracker = new ObjectModeDragTracker(getHost()) { protected boolean handleButtonDown(int button) { if (button == 1) { - TrinidadTagSupportActivator.logInfo( - "Tab clicked: index == " + - String.valueOf(getTabIndex(getLocation()))); + int tabIndex = getTabIndex(getLocation()); + EditPart editPart = getSourceEditPart(); + if (editPart instanceof ElementEditPart) { + Node node = ((ElementEditPart)part).getDOMNode(); + if (TrinidadUtils.setDisclosedChildIndex(node, tabIndex)) { + ((ElementEditPart)part).refresh(true); + } + } } return super.handleButtonDown(button); } @@ -113,6 +119,7 @@ public class PanelTabbedElementEdit extends DefaultTrinidadCoreElementEdit { } return count; } + } } |