/** * Copyright (c) 2009 Borland Software Corp. * * 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: * Alexander Shatalin (Borland) - initial API and implementation */ package org.eclipse.gmf.graphdef.editor.edit.policies.assistant; import org.eclipse.draw2d.KeyEvent; import org.eclipse.draw2d.KeyListener; import org.eclipse.swt.SWT; public abstract class AssistantFigureKeyListener extends KeyListener.Stub { private BubbleFigure myFeedbackFigure; public AssistantFigureKeyListener(BubbleFigure feedbackFigure) { myFeedbackFigure = feedbackFigure; } public void keyPressed(KeyEvent ke) { switch (ke.character) { case SWT.ESC: hideAssistant(); return; case ' ': if (ke.getState() != 0) { // ignoring any key events with state masks return; } case SWT.CR: for (Object nextFigure : myFeedbackFigure.getChildren()) { if (nextFigure instanceof SelectableBubbleItemFigure) { SelectableBubbleItemFigure childFigure = (SelectableBubbleItemFigure) nextFigure; if (childFigure.isSelected()) { ((SelectEditPartDragTracker) childFigure.getDragTracker()).handleButtonUp(1); return; } } } return; case 12: switch (myFeedbackFigure.getMode()) { case ICON: myFeedbackFigure.setMode(BubbleFigure.Mode.PREVIEW); break; case PREVIEW: myFeedbackFigure.setMode(BubbleFigure.Mode.ICON); break; } myFeedbackFigure.setSize(myFeedbackFigure.getPreferredSize()); } switch (ke.keycode) { case SWT.ARROW_UP: for (Object nextFigure : myFeedbackFigure.getChildren()) { if (nextFigure instanceof SelectableBubbleItemFigure) { myFeedbackFigure.selectChild((SelectableBubbleItemFigure) nextFigure); return; } } return; case SWT.ARROW_DOWN: SelectableBubbleItemFigure lastChildFigure = null; for (Object nextFigure : myFeedbackFigure.getChildren()) { if (nextFigure instanceof SelectableBubbleItemFigure) { lastChildFigure = (SelectableBubbleItemFigure) nextFigure; } } if (lastChildFigure != null) { myFeedbackFigure.selectChild(lastChildFigure); } return; case SWT.ARROW_RIGHT: SelectableBubbleItemFigure selectedChildFigure = null; for (Object nextFigure : myFeedbackFigure.getChildren()) { if (nextFigure instanceof SelectableBubbleItemFigure) { SelectableBubbleItemFigure nextChildFigure = (SelectableBubbleItemFigure) nextFigure; if (selectedChildFigure != null) { myFeedbackFigure.selectChild(nextChildFigure); return; } if (nextChildFigure.isSelected()) { selectedChildFigure = nextChildFigure; } } } return; case SWT.ARROW_LEFT: SelectableBubbleItemFigure prevChildFigure = null; for (Object nextFigure : myFeedbackFigure.getChildren()) { if (nextFigure instanceof SelectableBubbleItemFigure) { SelectableBubbleItemFigure childFigure = (SelectableBubbleItemFigure) nextFigure; if (childFigure.isSelected()) { if (prevChildFigure != null) { myFeedbackFigure.selectChild(prevChildFigure); } return; } prevChildFigure = childFigure; } } return; } } protected abstract void hideAssistant(); }