/** * Copyright (c) 2009, 2010 Mark Feber, MulgaSoft * * 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 */ package com.mulgasoft.emacsplus.commands; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.ITextSelection; import org.eclipse.ui.texteditor.ITextEditor; import com.mulgasoft.emacsplus.EmacsPlusActivator; import com.mulgasoft.emacsplus.execute.EmacsPlusConsole; import com.mulgasoft.emacsplus.execute.KbdMacroSupport; import com.mulgasoft.emacsplus.minibuffer.IMinibufferState; import com.mulgasoft.emacsplus.minibuffer.KbdMacroMinibuffer; /** * @author Mark Feber - initial API and implementation */ public class KbdMacroEditHandler extends KbdMacroDefineHandler { private static String KBD_VIEW_PREFIX = EmacsPlusActivator.getResourceString("KbdMacro_View_Prefix"); //$NON-NLS-1$ /** * @see com.mulgasoft.emacsplus.commands.EmacsPlusCmdHandler#transform(org.eclipse.ui.texteditor.ITextEditor, org.eclipse.jface.text.IDocument, org.eclipse.jface.text.ITextSelection, org.eclipse.core.commands.ExecutionEvent) */ @Override protected int transform(ITextEditor editor, IDocument document, ITextSelection currentSelection, ExecutionEvent event) throws BadLocationException { if (isUniversalPresent()) { mbState = nameState(); mbState.run(editor); } else { displayMacro(null); } return NO_OFFSET; } private void displayMacro(String name) { EmacsPlusConsole console = EmacsPlusConsole.getInstance(); console.clear(); console.activate(); console.print(KbdMacroSupport.getInstance().getKbdMacro(name).toString()); } /** * Get state to handle prompt for getting kbd macro name * * @return naming prompt state */ private IMinibufferState nameState() { return new IMinibufferState() { public String getMinibufferPrefix() { return KBD_VIEW_PREFIX; } public int run(ITextEditor editor) { miniTransform(new KbdMacroMinibuffer(KbdMacroEditHandler.this),editor,null); return NO_OFFSET; } public boolean executeResult(ITextEditor editor, Object minibufferResult) { boolean result = true; if (minibufferResult != null) { String name = (String) minibufferResult; if (KbdMacroSupport.getInstance().getKbdMacro(name) != null) { // macro by that name displayMacro(name); } else { // no macro found asyncShowMessage(editor, String.format(NO_NAME_UNO, name), true); } } return result; } }; } }