001: /*******************************************************************************
002: * Copyright (c) 2006 IBM Corporation and others.
003: * All rights reserved. This program and the accompanying materials
004: * are made available under the terms of the Eclipse Public License v1.0
005: * which accompanies this distribution, and is available at
006: * http://www.eclipse.org/legal/epl-v10.html
007: *
008: * Contributors:
009: * IBM Corporation - initial API and implementation
010: *******************************************************************************/package org.eclipse.pde.internal.ui.editor.cheatsheet.simple.actions;
011:
012: import org.eclipse.jface.action.Action;
013: import org.eclipse.pde.internal.core.icheatsheet.simple.ISimpleCSConditionalSubItem;
014: import org.eclipse.pde.internal.core.icheatsheet.simple.ISimpleCSConstants;
015: import org.eclipse.pde.internal.core.icheatsheet.simple.ISimpleCSItem;
016: import org.eclipse.pde.internal.core.icheatsheet.simple.ISimpleCSObject;
017: import org.eclipse.pde.internal.core.icheatsheet.simple.ISimpleCSRepeatedSubItem;
018: import org.eclipse.pde.internal.core.icheatsheet.simple.ISimpleCSSubItem;
019: import org.eclipse.pde.internal.core.icheatsheet.simple.ISimpleCSSubItemObject;
020: import org.eclipse.pde.internal.ui.PDEUIMessages;
021:
022: /**
023: * SimpleCSAddStepAction
024: *
025: */
026: public class SimpleCSRemoveSubStepAction extends Action {
027:
028: private ISimpleCSSubItemObject fSubItem;
029:
030: private ISimpleCSObject fObjectToSelect;
031:
032: /**
033: *
034: */
035: public SimpleCSRemoveSubStepAction() {
036: // TODO: MP: LOW: SimpleCS: Add tool-tip / image ?
037: setText(PDEUIMessages.SimpleCSRemoveSubStepAction_0);
038: // setImageDescriptor(PDEPluginImages.DESC_GEL_SC_OBJ);
039: // setToolTipText(PDEUIMessages.SchemaEditor_NewElement_tooltip);
040: fSubItem = null;
041: fObjectToSelect = null;
042: }
043:
044: /**
045: * @param subitem
046: */
047: public void setSubItem(ISimpleCSSubItemObject subitem) {
048: fSubItem = subitem;
049: }
050:
051: /* (non-Javadoc)
052: * @see org.eclipse.jface.action.Action#run()
053: */
054: public void run() {
055: if (fSubItem != null) {
056: // Determine parent type and remove accordingly
057: ISimpleCSObject parent = fSubItem.getParent();
058: if (parent.getType() == ISimpleCSConstants.TYPE_ITEM) {
059: // Parent is an item
060: ISimpleCSItem item = (ISimpleCSItem) parent;
061: // Determine the item to select after the deletion takes place
062: determineItemToSelect(item);
063: // Remove the subitem
064: item.removeSubItem(fSubItem);
065: } else if ((parent.getType() == ISimpleCSConstants.TYPE_REPEATED_SUBITEM)
066: && (fSubItem.getType() == ISimpleCSConstants.TYPE_SUBITEM)) {
067: // Parent is a repeated subitem
068: ISimpleCSRepeatedSubItem subitem = (ISimpleCSRepeatedSubItem) parent;
069: // Determine the item to select after the deletion takes place
070: determineItemToSelect(subitem);
071: // Remove the subitem
072: subitem.setSubItem(null);
073: } else if ((parent.getType() == ISimpleCSConstants.TYPE_CONDITIONAL_SUBITEM)
074: && (fSubItem.getType() == ISimpleCSConstants.TYPE_SUBITEM)) {
075: // Parent is a conditional subitem
076: ISimpleCSConditionalSubItem subitem = (ISimpleCSConditionalSubItem) parent;
077: // Determine the item to select after the deletion takes place
078: determineItemToSelect(subitem);
079: // Remove the subitem
080: subitem.removeSubItem((ISimpleCSSubItem) fSubItem);
081: }
082: }
083: }
084:
085: /**
086: * @param item
087: */
088: private void determineItemToSelect(ISimpleCSItem item) {
089: // Select the next sibling
090: fObjectToSelect = item.getNextSibling(fSubItem);
091: if (fObjectToSelect == null) {
092: // No next sibling
093: // Select the previous sibling
094: fObjectToSelect = item.getPreviousSibling(fSubItem);
095: if (fObjectToSelect == null) {
096: // No previous sibling
097: // Select the parent
098: fObjectToSelect = item;
099: }
100: }
101: }
102:
103: /**
104: * @param item
105: */
106: private void determineItemToSelect(ISimpleCSObject object) {
107: // The parent itself
108: fObjectToSelect = object;
109: }
110:
111: /**
112: * @return
113: */
114: public ISimpleCSObject getObjectToSelect() {
115: return fObjectToSelect;
116: }
117:
118: }
|