/****************************************************************************** * Copyright (c) 2002, 2003 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 ****************************************************************************/ package org.eclipse.gmf.runtime.common.ui.util; import org.eclipse.swt.widgets.Text; /** * A class that is used to handle all keyboard generated text actions * associated with the displayed text editor * * @author Yasser Lulu * */ public abstract class BaseInlineTextActionHandler implements IInlineTextActionHandler { /** * an empty string constant */ protected static final String EMPTY_STRING = ""; //$NON-NLS-1$ /** * a boolean indicating if text actions are hooked */ private boolean hooked; /** * the text box widget used for editing */ private Text text; /** * Creates a runtime instance of <code>BaseInlineTextActionHandler</code>. * * @param text <code>Text</code> widget used for editing */ BaseInlineTextActionHandler(Text text) { setText(text); } /** * sets the text widget * @param text The Text widget to set */ private void setText(Text text) { this.text = text; } /** * returns the text widget * @return Text The text widget */ protected Text getText() { return text; } /** * @see org.eclipse.gmf.runtime.common.ui.util.IInlineTextActionHandler */ public void dispose() { if (isHooked()) { unHookHandlers(); } setText(null); } /** * Returns the hooked. * @return boolean */ protected boolean isHooked() { return hooked; } /** * Sets the hooked. * @param hooked The hooked to set */ protected void setHooked(boolean hooked) { this.hooked = hooked; } /** * handles cut action */ protected void handleCut() { getText().cut(); } /** * handles copy action */ protected void handleCopy() { getText().copy(); } /** * handles paste action */ protected void handlePaste() { getText().paste(); } /** * handles select-all action */ protected void handleSelectAll() { getText().selectAll(); } /** * handles delete action */ protected void handleDelete() { if (getText().getSelectionCount() > 0) { getText().insert(EMPTY_STRING); } else { // remove the next character int pos = getText().getCaretPosition(); if (pos < getText().getCharCount()) { getText().setSelection(pos, pos + 1); getText().insert(EMPTY_STRING); } } } } /* * Please do NOT delete this commented code */ // /** // * @see org.eclipse.gmf.runtime.common.ui.util.IInlineTextActionHandler // */ // public void hookHandlers() { // getText().addKeyListener(getKeyAdapter()); // getText().setFocus(); // setHooked(true); // } // /** // * @see org.eclipse.gmf.runtime.common.ui.util.IInlineTextActionHandler // */ // public void unHookHandlers() { // getText().removeKeyListener(getKeyAdapter()); // setHooked(false); // } // // /** // * Returns the keyAdapter. // * @return KeyAdapter // * // * NOTE: Eclipse does not dispatch to us the ctrl-x, ctrl-v, ctrl-c // * keyboard edit actions, but rather it installs by default and // * uses the old Windows text editing short-cuts: // * shift-insert, shift-delete, ctrl-insert. // * in other words this key adapter is useless since we'll never be called // * appropriately // * CTRL+V or SHIFT+INS // * CTRL+C or CTRL+INSERT // * CTRL+X or SHIFT+DELETE // */ // private KeyAdapter getKeyAdapter() { // if (keyAdapter == null) { // keyAdapter = new KeyAdapter() { // public void keyReleased(KeyEvent event) { // if (event.keyCode == SWT.DEL) { // handleDelete(); // } else if (event.stateMask == SWT.CTRL) { // switch (Character.toLowerCase(event.character)) { // case 'a' : // { // handleSelectAll(); // break; // } // case 'c' : // { // handleCopy(); // break; // } // case 'v' : // { // handlePaste(); // break; // } // case 'x' : // { // handleCut(); // break; // } // } // } // } // }; // } // // return keyAdapter; // }