Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright (c) 2006, 2013 IBM 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: IBM Corporation - initial API and implementation Alexander Kurtakov <akurtako@redhat.com> - bug 415649 /
  
  
  package org.eclipse.pde.internal.ua.ui.editor.cheatsheet.simple;
  
  import  org.eclipse.swt.SWT;
  import  org.eclipse.swt.graphics.Cursor;
  import  org.eclipse.swt.widgets.Button;
  import  org.eclipse.swt.widgets.Composite;
  import  org.eclipse.swt.widgets.Display;
  import  org.eclipse.swt.widgets.ToolBar;
SimpleCSElementSection
  
  public class SimpleCSMasterTreeSection extends TreeSection implements ICSMaster {
  
  	private static final int F_BUTTON_ADD_STEP = 0;
  
  	private static final int F_BUTTON_ADD_SUBSTEP = 1;
  
  	private static final int F_BUTTON_REMOVE = 4;
  
  	private static final int F_BUTTON_UP = 5;
  
  	private static final int F_BUTTON_DOWN = 6;
  
  	private static final int F_BUTTON_PREVIEW = 9;
  
  	private static final int F_UP_FLAG = -1;
  
  	private static final int F_DOWN_FLAG = 1;
  
  	private TreeViewer fTreeViewer;
  
  	private ISimpleCSModel fModel;
  
  
  
  
  
  
  

Parameters:
formPage
parent
style
buttonLabels
  
  	public SimpleCSMasterTreeSection(PDEFormPage formPage, Composite parent) {
  		super(formPageparent.new String[] {
  
  		// Create actions
 		 = null;
 	}
 
 	/*
 	 * (non-Javadoc)
 	 * 
 	 * @see
 	 * org.eclipse.pde.internal.ui.editor.PDESection#createClient(org.eclipse
 	 * .ui.forms.widgets.Section, org.eclipse.ui.forms.widgets.FormToolkit)
 	 */
 	protected void createClient(Section sectionFormToolkit toolkit) {
 		// Get the model
 		// Set section title
 		// Set section description
 		// Create section client
 		Composite container = createClientContainer(section, 2, toolkit);
 		createTree(containertoolkit);
 		toolkit.paintBordersFor(container);
 		section.setClient(container);
 		// Create section toolbar
 		createSectionToolbar(sectiontoolkit);
 	}

Parameters:
section
toolkit
 
 	private void createSectionToolbar(Section sectionFormToolkit toolkit) {
 
 		ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT);
 		ToolBar toolbar = toolBarManager.createControl(section);
 		final Cursor handCursor = Display.getCurrent().getSystemCursor(
 				SWT.CURSOR_HAND);
 		toolbar.setCursor(handCursor);
 		// Add collapse action to the tool bar
 		toolBarManager.add();
 
 		toolBarManager.update(true);
 
 		section.setTextClient(toolbar);
 	}

 
 	private void initializeTreeViewer() {
 		if ( == null) {
 			return;
 		}
 
 		// Set to false because initial node selected is the root cheatsheet
 		// node
 		// Set to false because initial node selected is the root cheatsheet
 		// node
 		// Set to false because initial node selected is the root cheatsheet
 		// node
 		// Set to false because initial node selected is the root cheatsheet
 		// node
 
 		// ISimpleCS cheatsheet = fModel.getSimpleCS();
 		// Select the cheatsheet node in the tree
 		// fTreeViewer.setSelection(new StructuredSelection(cheatsheet), true);
 		// fTreeViewer.expandToLevel(2);
 		.setSelection(selectiontrue);
 	}

Parameters:
container
toolkit
 
 	private void createTree(Composite containerFormToolkit toolkit) {
 		TreePart treePart = getTreePart();
 		createViewerPartControl(container, SWT.SINGLE, 2, toolkit);
 		 = treePart.getTreeViewer();
 		.setLabelProvider(PDEUserAssistanceUIPlugin.getDefault()
 		PDEUserAssistanceUIPlugin.getDefault().getLabelProvider().connect(this);
 	}
 
 	/*
 	 * (non-Javadoc)
 	 * 
 	 * @see org.eclipse.pde.internal.ui.editor.StructuredViewerSection#
 	 * isDragAndDropEnabled()
 	 */
 	protected boolean isDragAndDropEnabled() {
 		return true;
 	}
 
 	/*
 	 * (non-Javadoc)
 	 * 
 	 * @see
 	 * org.eclipse.pde.internal.ui.editor.StructuredViewerSection#canDragMove
 	 * (java.lang.Object[])
 	 */
 	public boolean canDragMove(Object[] sourceObjects) {
 		// Validate source objects
 		if (validatePaste(sourceObjects) == false) {
 			return false;
 		}
 		ISelection selection = new StructuredSelection(sourceObjects);
 		return canCut(selection);
 	}
 
 	/*
 	 * (non-Javadoc)
 	 * 
 	 * @see
 	 * org.eclipse.pde.internal.ui.editor.StructuredViewerSection#canDropMove
 	 * (java.lang.Object, java.lang.Object[], int)
 	 */
 	public boolean canDropMove(Object targetObjectObject[] sourceObjects,
 			int targetLocation) {
 		// Validate arguments
 		if (validatePaste(targetObjectsourceObjects) == false) {
 			return false;
 		}
 		// Multi-select not supported
 		ISimpleCSObject sourceCSObject = (ISimpleCSObjectsourceObjects[0];
 		ISimpleCSObject targetCSObject = (ISimpleCSObjecttargetObject;
 		// Objects have to be from the same model
 		ISimpleCSModel sourceModel = sourceCSObject.getModel();
 		ISimpleCSModel targetModel = targetCSObject.getModel();
 		if (sourceModel.equals(targetModel) == false) {
 			return false;
 		}
 		// Validate move
 		if (sourceCSObject.getType() == .) {
 			ISimpleCSItem sourceItem = (ISimpleCSItemsourceCSObject;
 			if (targetCSObject.getType() == .) {
 				// Source: Item
 				// Target: Cheat Sheet
 				ISimpleCS targetCheatSheet = (ISimpleCStargetCSObject;
 				return canDropMove(targetCheatSheetsourceItemtargetLocation);
 			} else if (targetCSObject.getType() == .) {
 				// Source: Item
 				// Target: Item
 				ISimpleCSItem targetItem = (ISimpleCSItemtargetCSObject;
 				return canDropMove(targetItemsourceItemtargetLocation);
 			} else if (targetCSObject.getType() == .) {
 				// Source: Item
 				// Target: Intro
 				ISimpleCSIntro targetIntro = (ISimpleCSIntrotargetCSObject;
 				return canDropMove(targetIntrosourceItemtargetLocation);
 			}
 		} else if (sourceCSObject.getType() == .) {
 			ISimpleCSSubItem sourceSubItem = (ISimpleCSSubItemsourceCSObject;
 			if (targetCSObject.getType() == .) {
 				// Source: SubItem
 				// Target: Item
 				ISimpleCSItem targetItem = (ISimpleCSItemtargetCSObject;
 				return canDropMove(targetItemsourceSubItemtargetLocation);
 			} else if ((targetCSObject.getType() == .)
 					&& (targetCSObject.getParent().getType() == .)) {
 				// Source: SubItem
 				// Target: SubItem
 				ISimpleCSSubItem targetSubItem = (ISimpleCSSubItemtargetCSObject;
 				return canDropMove(targetSubItemsourceSubItemtargetLocation);
 			}
 		}
 		return false;
 	}

Parameters:
targetCheatSheet
sourceItem
targetLocation
Returns:
 
 	private boolean canDropMove(ISimpleCS targetCheatSheet,
 			ISimpleCSItem sourceItemint targetLocation) {
 		if (targetLocation == .) {
 			return false;
 		} else if (targetLocation == .) {
 			return false;
 		} else if (targetLocation == .) {
 			if (targetCheatSheet.isLastItem(sourceItem)) {
 				return false;
 			}
 			// Paste item as last child of cheat sheet root
 			return true;
 		}
 		return false;
 	}

Parameters:
targetItem
sourceItem
targetLocation
Returns:
 
 	private boolean canDropMove(ISimpleCSItem targetItem,
 			ISimpleCSItem sourceItemint targetLocation) {
 		ISimpleCS parent = targetItem.getSimpleCS();
 		if (targetLocation == .) {
 			IDocumentElementNode previousNode = parent.getPreviousSibling(
 					targetItemISimpleCSItem.class);
 			if (sourceItem.equals(previousNode)) {
 				return false;
 			}
 			// Paste item as sibling of item (before)
 			return true;
 		} else if (targetLocation == .) {
 			IDocumentElementNode nextNode = parent.getNextSibling(targetItem,
 					ISimpleCSItem.class);
 			if (sourceItem.equals(nextNode)) {
 				return false;
 			}
 			// Paste item as sibling of item (after)
 			return true;
 		} else if (targetLocation == .) {
 			IDocumentElementNode nextNode = parent.getNextSibling(targetItem,
 					ISimpleCSItem.class);
 			if (sourceItem.equals(nextNode)) {
 				return false;
 			}
 			// Paste item as sibling of item (after)
 			return true;
 		}
 		return false;
 	}

Parameters:
targetIntro
sourceItem
targetLocation
Returns:
 
 	private boolean canDropMove(ISimpleCSIntro targetIntro,
 			ISimpleCSItem sourceItemint targetLocation) {
 		ISimpleCS parent = targetIntro.getSimpleCS();
 		if (targetLocation == .) {
 			return false;
 		} else if (targetLocation == .) {
 			IDocumentElementNode nextNode = parent.getNextSibling(targetIntro,
 					ISimpleCSItem.class);
 			if (sourceItem.equals(nextNode)) {
 				return false;
 			}
 			// Paste item as sibling of intro (first item child of cheat sheet
 			// after intro)
 			return true;
 		} else if (targetLocation == .) {
 			IDocumentElementNode nextNode = parent.getNextSibling(targetIntro,
 					ISimpleCSItem.class);
 			if (sourceItem.equals(nextNode)) {
 				return false;
 			}
 			// Paste item as sibling of intro (first item child of cheat sheet
 			// after intro)
 			return true;
 		}
 		return false;
 	}

Parameters:
targetItem
sourceSubItem
targetLocation
Returns:
 
 	private boolean canDropMove(ISimpleCSItem targetItem,
 			ISimpleCSSubItem sourceSubItemint targetLocation) {
 		if (targetLocation == .) {
 			return false;
 		} else if (targetLocation == .) {
 			if (targetItem.getExecutable() != null) {
 				return false;
 			} else if (targetItem.isFirstSubItem(sourceSubItem)) {
 				return false;
 			}
 			// Paste subitem as the first child of item
 			return true;
 		} else if (targetLocation == .) {
 			if (targetItem.getExecutable() != null) {
 				return false;
 			} else if (targetItem.isLastSubItem(sourceSubItem)) {
 				return false;
 			}
 			// Paste subitem as the last child of item
 			return true;
 		}
 		return false;
 	}

Parameters:
targetSubItem
sourceSubItem
targetLocation
Returns:
 
 	private boolean canDropMove(ISimpleCSSubItem targetSubItem,
 			ISimpleCSSubItem sourceSubItemint targetLocation) {
 		ISimpleCSItem parent = (ISimpleCSItemtargetSubItem.getParent();
 		if (targetLocation == .) {
 			IDocumentElementNode previousNode = parent.getPreviousSibling(
 					targetSubItemISimpleCSSubItem.class);
 			if (sourceSubItem.equals(previousNode)) {
 				return false;
 			}
 			// Paste subitem as sibling of subitem (before)
 			return true;
 		} else if (targetLocation == .) {
 			IDocumentElementNode nextNode = parent.getNextSibling(
 					targetSubItemISimpleCSSubItem.class);
 			if (sourceSubItem.equals(nextNode)) {
 				return false;
 			}
 			// Paste subitem as sibling of subitem (after)
 			return true;
 		} else if (targetLocation == .) {
 			IDocumentElementNode nextNode = parent.getNextSibling(
 					targetSubItemISimpleCSSubItem.class);
 			if (sourceSubItem.equals(nextNode)) {
 				return false;
 			}
 			// Paste subitem as sibling of subitem (after)
 			return true;
 		}
 		return false;
 	}
 
 	/*
 	 * (non-Javadoc)
 	 * 
 	 * @see
 	 * org.eclipse.pde.internal.ui.editor.StructuredViewerSection#doDropMove
 	 * (java.lang.Object, java.lang.Object[], int)
 	 */
 	public void doDropMove(Object targetObjectObject[] sourceObjects,
 			int targetLocation) {
 		// Validate arguments
 		if (validatePaste(targetObjectsourceObjects) == false) {
 			Display.getDefault().beep();
 			return;
 		}
 		// Multi-select not supported
 		ISimpleCSObject sourceCSObject = (ISimpleCSObjectsourceObjects[0];
 		ISimpleCSObject targetCSObject = (ISimpleCSObjecttargetObject;
 		// Validate move
 		if (sourceCSObject.getType() == .) {
 			ISimpleCSItem sourceItem = (ISimpleCSItemsourceCSObject;
 			if (targetCSObject.getType() == .) {
 				// Source: Item
 				// Target: Cheat Sheet
 				ISimpleCS targetCheatSheet = (ISimpleCStargetCSObject;
 				doDropMove(targetCheatSheetsourceItemtargetLocation);
 			} else if (targetCSObject.getType() == .) {
 				// Source: Item
 				// Target: Item
 				ISimpleCSItem targetItem = (ISimpleCSItemtargetCSObject;
 				doDropMove(targetItemsourceItemtargetLocation);
 			} else if (targetCSObject.getType() == .) {
 				// Source: Item
 				// Target: Intro
 				ISimpleCSIntro targetIntro = (ISimpleCSIntrotargetCSObject;
 				doDropMove(targetIntrosourceItemtargetLocation);
 			}
 		} else if (sourceCSObject.getType() == .) {
 			ISimpleCSSubItem sourceSubItem = (ISimpleCSSubItemsourceCSObject;
 			if (targetCSObject.getType() == .) {
 				// Source: SubItem
 				// Target: Item
 				ISimpleCSItem targetItem = (ISimpleCSItemtargetCSObject;
 				doDropMove(targetItemsourceSubItemtargetLocation);
 			} else if ((targetCSObject.getType() == .)
 					&& (targetCSObject.getParent().getType() == .)) {
 				// Source: SubItem
 				// Target: SubItem
 				ISimpleCSSubItem targetSubItem = (ISimpleCSSubItemtargetCSObject;
 				doDropMove(targetSubItemsourceSubItemtargetLocation);
 			}
 		}
 	}

Parameters:
targetCheatSheet
sourceItem
targetLocation
 
 	private void doDropMove(ISimpleCS targetCheatSheet,
 			ISimpleCSItem sourceItemint targetLocation) {
 		if (targetLocation == .) {
 			// NO-OP, not legal
 		} else if (targetLocation == .) {
 			// NO-OP, not legal
 		} else if (targetLocation == .) {
 			if (targetCheatSheet.isLastItem(sourceItem)) {
 				return;
 			}
 			// Adjust all the source object transient field values to
 			// acceptable values
 			sourceItem.reconnect(targetCheatSheet);
 			// Paste item as the last child of cheat sheet root
 			targetCheatSheet.addItem(sourceItem);
 		}
 	}

Parameters:
targetItem
sourceItem
targetLocation
 
 	private void doDropMove(ISimpleCSItem targetItemISimpleCSItem sourceItem,
 			int targetLocation) {
 		ISimpleCS parent = targetItem.getSimpleCS();
 		if (targetLocation == .) {
 			IDocumentElementNode previousNode = parent.getPreviousSibling(
 					targetItemISimpleCSItem.class);
 			if (sourceItem.equals(previousNode)) {
 				// NO-OP, not legal
 				return;
 			}
 			// Adjust all the source object transient field values to
 			// acceptable values
 			sourceItem.reconnect(parent);
 			// Get index of target item
 			int index = parent.indexOfItem(targetItem);
 			// Paste item as sibling of item (before)
 			if (index != -1) {
 				parent.addItem(indexsourceItem);
 			}
 		} else if ((targetLocation == .)
 				|| (targetLocation == .)) {
 			IDocumentElementNode nextNode = parent.getNextSibling(targetItem,
 					ISimpleCSItem.class);
 			if (sourceItem.equals(nextNode)) {
 				// NO-OP, not legal
 				return;
 			}
 			// Adjust all the source object transient field values to
 			// acceptable values
 			sourceItem.reconnect(parent);
 
 			if (nextNode == null) {
 				parent.addItem(sourceItem);
 			} else {
 				// Get index of target item
 				int index = parent.indexOfItem((ISimpleCSItemnextNode);
 				// Paste item as sibling of item (after)
 				if (index != -1) {
 					parent.addItem(indexsourceItem);
 				}
 			}
 		}
 	}

Parameters:
targetIntro
sourceItem
targetLocation
 
 	private void doDropMove(ISimpleCSIntro targetIntro,
 			ISimpleCSItem sourceItemint targetLocation) {
 		ISimpleCS parent = targetIntro.getSimpleCS();
 		if (targetLocation == .) {
 			// NO-OP, not legal
 		} else if ((targetLocation == .)
 				|| (targetLocation == .)) {
 			IDocumentElementNode nextNode = parent.getNextSibling(targetIntro,
 					ISimpleCSItem.class);
 			if (sourceItem.equals(nextNode)) {
 				// NO-OP, not legal
 				return;
 			}
 			// Adjust all the source object transient field values to
 			// acceptable values
 			sourceItem.reconnect(parent);
 			if (nextNode == null) {
 				parent.addItem(sourceItem);
 			} else {
 				// Get index of target item
 				int index = parent.indexOfItem((ISimpleCSItemnextNode);
 				// Paste item as sibling of intro (first item child of cheat
 				// sheet after intro)
 				if (index != -1) {
 					parent.addItem(indexsourceItem);
 				}
 			}
 		}
 	}

Parameters:
targetItem
sourceSubItem
targetLocation
 
 	private void doDropMove(ISimpleCSItem targetItem,
 			ISimpleCSSubItem sourceSubItemint targetLocation) {
 		if (targetLocation == .) {
 			// NO-OP, not legal
 		} else if (targetLocation == .) {
 			if (targetItem.getExecutable() != null) {
 				return;
 			} else if (targetItem.isFirstSubItem(sourceSubItem)) {
 				return;
 			}
 			// Adjust all the source object transient field values to
 			// acceptable values
 			sourceSubItem.reconnect(targetItem);
 			// Get the item's first subitem child
 			ISimpleCSSubItem firstSubItem = (ISimpleCSSubItemtargetItem
 			// Paste subitem as the first child of item
 			if (firstSubItem == null) {
 				targetItem.addSubItem(sourceSubItem);
 			} else {
 				int index = targetItem.indexOfSubItem(firstSubItem);
 				// Paste subitem as the first child of item
 				if (index != -1) {
 					targetItem.addSubItem(indexsourceSubItem);
 				}
 			}
 		} else if (targetLocation == .) {
 			if (targetItem.getExecutable() != null) {
 				return;
 			} else if (targetItem.isLastSubItem(sourceSubItem)) {
 				return;
 			}
 			// Adjust all the source object transient field values to
 			// acceptable values
 			sourceSubItem.reconnect(targetItem);
 			// Paste subitem as the last child of item
 			targetItem.addSubItem(sourceSubItem);
 		}
 	}

Parameters:
targetSubItem
sourceSubItem
targetLocation
 
 	private void doDropMove(ISimpleCSSubItem targetSubItem,
 			ISimpleCSSubItem sourceSubItemint targetLocation) {
 		ISimpleCSItem parent = (ISimpleCSItemtargetSubItem.getParent();
 		if (targetLocation == .) {
 			IDocumentElementNode previousNode = parent.getPreviousSibling(
 					targetSubItemISimpleCSSubItem.class);
 			if (sourceSubItem.equals(previousNode)) {
 				// NO-OP, not legal
 				return;
 			}
 			// Adjust all the source object transient field values to
 			// acceptable values
 			sourceSubItem.reconnect(parent);
 			// Get index of target item
 			int index = parent.indexOfSubItem(targetSubItem);
 			// Paste item as sibling of item (before)
 			if (index != -1) {
 				parent.addSubItem(indexsourceSubItem);
 			}
 		} else if ((targetLocation == .)
 				|| (targetLocation == .)) {
 			IDocumentElementNode nextNode = parent.getNextSibling(
 					targetSubItemISimpleCSSubItem.class);
 			if (sourceSubItem.equals(nextNode)) {
 				// NO-OP, not legal
 				return;
 			}
 			// Adjust all the source object transient field values to
 			// acceptable values
 			sourceSubItem.reconnect(parent);
 
 			if (nextNode == null) {
 				parent.addSubItem(sourceSubItem);
 			} else {
 				// Get index of target item
 				int index = parent.indexOfSubItem((ISimpleCSSubItemnextNode);
 				// Paste item as sibling of item (after)
 				if (index != -1) {
 					parent.addSubItem(indexsourceSubItem);
 				}
 			}
 		}
 	}
 
 	/*
 	 * (non-Javadoc)
 	 * 
 	 * @see
 	 * org.eclipse.pde.internal.ui.editor.StructuredViewerSection#doDragRemove
 	 * (java.lang.Object[])
 	 */
 	public void doDragRemove(Object[] sourceObjects) {
 		// Validate source objects
 		if (validatePaste(sourceObjects) == false) {
 			return;
 		}
 		ISimpleCSObject object = (ISimpleCSObjectsourceObjects[0];
 		// Remove the object from the model
 		if (object.getType() == .) {
 			ISimpleCSItem item = (ISimpleCSItemobject;
 			ISimpleCS cheatsheet = object.getSimpleCS();
 			doSelect(false);
 			cheatsheet.removeItem(item);
 			doSelect(true);
 		} else if (object.getType() == .) {
 			ISimpleCSObject parent = object.getParent();
 			if (parent.getType() == .) {
 				ISimpleCSSubItem subitem = (ISimpleCSSubItemobject;
 				ISimpleCSItem item = ((ISimpleCSItemparent);
 				doSelect(false);
 				item.removeSubItem(subitem);
 				doSelect(true);
 			}
 		}
 		// Applicable for move operations
 		// Flush the text edit operations associated with the move operation
 		// to the source page
 		// Move involves add new cloned object x and remove of original object
 		// x
 		// Without flushing, multiple move operations up and down cause the
 		// text edit operations to get completely screwed up (e.g. mark-up
 		// in wrong position or getting lost)
 		// TODO: MP: Undo: What are the implications of this?
 	}

 
 	private void createSubStepInfoDecoration() {
 		//
 		Button button = getStructuredViewerPart().getButton(
 		int bits = SWT.TOP | SWT.RIGHT;
 		 = new ControlDecoration(buttonbits);
 		updateSubStepInfoDecoration(falsefalsefalse);
 		.setImage(FieldDecorationRegistry.getDefault()
 				.getImage());
 	}

Parameters:
show
itemHasNoExecutable
itemIsNotOptional
 
 	private void updateSubStepInfoDecoration(boolean show,
 			boolean itemHasNoExecutableboolean itemIsNotOptional) {
 		//
 		if (show) {
 			if (itemHasNoExecutable == false) {
 			} else if (itemIsNotOptional == false) {
 			}
 		} else {
 		}
 	}

 
 	private void createTreeListeners() {
 		// Create listener for the outline view 'link with editor' toggle
 		// button
 	}

Returns:
 
 	public ISelection getSelection() {
 	}
 
 	/*
 	 * (non-Javadoc)
 	 * 
 	 * @see
 	 * org.eclipse.pde.internal.ui.editor.StructuredViewerSection#buttonSelected
 	 * (int)
 	 */
 	protected void buttonSelected(int index) {
 		switch (index) {
 			break;
 			break;
 			break;
 		case :
 			break;
 			break;
 			break;
 		}
 	}
 
 	/*
 	 * (non-Javadoc)
 	 * 
 	 * @see
 	 * org.eclipse.pde.internal.ui.editor.TreeSection#selectionChanged(org.eclipse
 	 * .jface.viewers.IStructuredSelection)
 	 */
 	protected void selectionChanged(IStructuredSelection selection) {
 		// Update global selection used by source page to sychronize selections
 		// made in the master tree viewer with elements in the source view
 	}

 
 	public void updateButtons() {
 		if (!.isEditable()) {
 			return;
 		}
 
 		boolean canAddItem = false;
 		boolean canAddSubItem = false;
 		boolean canRemove = false;
 		boolean canMoveUp = false;
 		boolean canMoveDown = false;
 
 		boolean itemHasNoExecutable = false;
 		boolean itemIsNotOptional = false;
 		boolean showDecoration = false;
 
 		if (csObject != null) {
 
 			if (csObject.getType() == .) {
 				// Add item to end of cheat sheet child items
 				canAddItem = true;
 			} else if (csObject.getType() == .) {
 				// Add item as the first cheat sheet child item
 				// which is right after the introduction node
 				canAddItem = true;
 			} else if (csObject.getType() == .) {
 				ISimpleCSItem item = (ISimpleCSItemcsObject;
 				if (item.getSimpleCS().isFirstItem(item) == false) {
 					canMoveUp = true;
 				}
 				if (item.getSimpleCS().isLastItem(item) == false) {
 					canMoveDown = true;
 				}
 
 				// Preserve cheat sheet validity
 				// Semantic Rule: Cannot have a cheat sheet with no items
 				if (item.getSimpleCS().getItemCount() > 1) {
 					canRemove = true;
 				}
 
 				// Preserve cheat sheet validity
 				// Semantic Rule: Cannot have a subitem and any of the following
 				// together: perform-when, command, action
 				// Preserve cheat sheet validity
 				// Semantic Rule: Cannot add subitems to an item that is
 				// optional
 				itemHasNoExecutable = (item.getExecutable() == null);
 				itemIsNotOptional = (item.getSkip() == false);
 				if (itemHasNoExecutable && itemIsNotOptional) {
 					canAddSubItem = true;
 				}
 				showDecoration = (canAddSubItem == false);
 				// Add item right after this item
 				canAddItem = true;
 
 			} else if (csObject.getType() == .) {
 				ISimpleCSSubItem subitem = (ISimpleCSSubItemcsObject;
 				ISimpleCSObject parent = subitem.getParent();
 				if (parent.getType() == .) {
 					ISimpleCSItem item = (ISimpleCSItemparent;
 					if (item.isFirstSubItem(subitem) == false) {
 						canMoveUp = true;
 					}
 					if (item.isLastSubItem(subitem) == false) {
 						canMoveDown = true;
 					}
 					// Preserve cheat sheet validity
 					// Semantic Rule: Cannot have a subitem and any of the
 					// following
 					// together: perform-when, command, action
 					// Preserve cheat sheet validity
 					// Semantic Rule: Cannot add subitems to an item that is
 					// optional
 					itemHasNoExecutable = (item.getExecutable() == null);
 					itemIsNotOptional = (item.getSkip() == false);
 					if (itemHasNoExecutable && itemIsNotOptional) {
 						canAddSubItem = true;
 					}
 					showDecoration = (canAddSubItem == false);
 				}
 				canRemove = true;
 
 			} else if ((csObject.getType() == .)
 					|| (csObject.getType() == .)
 					|| (csObject.getType() == .)) {
 				// Specifically for perform-when, repeated-subitem,
 				// conditional-subitem edge cases
 				// Action and command supported; but, will never be applicable
 				canRemove = true;
 			}
 
 			updateSubStepInfoDecoration(showDecorationitemHasNoExecutable,
 					itemIsNotOptional);
 		}
 
 	}

 
 	private void handleAddStepAction() {
 		// Get the current selection
 		// If nothing is selected add to the root cheat sheet node
 		if (csObject == null) {
 		} else {
 		}
 		// Execute the action
 	}

Returns:
 
 		Object object = ((IStructuredSelectionselection).getFirstElement();
 		return (ISimpleCSObjectobject;
 	}

 
 	private void handleAddSubStepAction() {
 		// Get the current selection
 		// Ensure the selection is defined
 		if (csObject == null) {
 			return;
 		}
 		// Set the selection object to operate on
 		// Execute the action
 	}

 
 	private void handleMoveStepAction(int positionFlag) {
 		if (object != null) {
 			if (object instanceof ISimpleCSItem) {
 				ISimpleCSItem item = (ISimpleCSItemobject;
 				item.getSimpleCS().moveItem(itempositionFlag);
 			} else if (object instanceof ISimpleCSSubItem) {
 				ISimpleCSSubItem subitem = (ISimpleCSSubItemobject;
				// Get the current index of the subitem
				ISimpleCSObject parent = subitem.getParent();
				if (parent.getType() == .) {
					ISimpleCSItem item = (ISimpleCSItemparent;
					item.moveSubItem(subitempositionFlag);
	}

	private void handlePreviewAction() {
		// Get the editor
		// Get the form editor contributor
		// Get the preview action
		SimpleCSPreviewAction previewAction = contributor.getPreviewAction();
		// Set the cheat sheet object
		// Set the editor input
		// Run the preview action
		previewAction.run();
	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * org.eclipse.pde.internal.ui.editor.PDESection#modelChanged(org.eclipse
	 * .pde.core.IModelChangedEvent)
	 */
	public void modelChanged(IModelChangedEvent event) {
		// No need to call super, world changed event handled here
else if (event.getChangeType() == .) {
else if (event.getChangeType() == .) {
else if ((event.getChangeType() == .)
else if (event.getChangeType() == .) {
	/*
	 * (non-Javadoc)
	 * 
	 * @see org.eclipse.ui.forms.AbstractFormPart#refresh()
	 */
	public void refresh() {
		// Get the form page
		// Replace the current dirty model with the model reloaded from
		// file
		// Re-initialize the tree viewer. Makes a details page selection
		super.refresh();
	}

Parameters:
event
		// Section will be updated on refresh
	}

Parameters:
event
		// Swap event
		Object[] objects = event.getChangedObjects();
		// Ensure right type
		if ((objects[0] instanceof ISimpleCSObject) == false) {
			return;
		ISimpleCSObject object = (ISimpleCSObjectobjects[0];
		if (object == null) {
			// Ignore
else if ((object.getType() == .)
			// Refresh the element
	}

Parameters:
event
		// Insert event
		Object[] objects = event.getChangedObjects();
		ISimpleCSObject object = (ISimpleCSObjectobjects[0];
		if (object == null) {
			// Ignore
else if ((object.getType() == .)
			// Refresh the parent element in the tree viewer
			// Select the new item in the tree
	}

Parameters:
event
		// Remove event
		Object[] objects = event.getChangedObjects();
		ISimpleCSObject object = (ISimpleCSObjectobjects[0];
		if (object == null) {
			// Ignore
else if (object.getType() == .) {
			// Remove the item
			// Determine if we should make a selection
			if (canSelect() == false) {
				return;
			// Select the appropriate object
			if (csObject == null) {
				csObject = object.getParent();
else if (object.getType() == .) {
			// Remove the subitem
			// Determine if we should make a selection
			if (canSelect() == false) {
				return;
			// Select the appropriate object
			if (csObject == null) {
				csObject = object.getParent();
			// Remove the object