package net.sourceforge.texlipse.editor;
import net.sourceforge.texlipse.actions.TexInsertMathSymbolAction;
import net.sourceforge.texlipse.model.TexCommandContainer;
import net.sourceforge.texlipse.model.TexCommandEntry;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.editors.text.TextEditorActionContributor;
/**
* This class creates the math symbol menu
*
* @author Boris von Loesch
*
*/
public class TexEditorActionContributor extends TextEditorActionContributor {
private TexInsertMathSymbolAction[] greekSmall;
private TexInsertMathSymbolAction[] greekCapital;
private TexInsertMathSymbolAction[] arrows;
private TexInsertMathSymbolAction[] stdCompare;
private TexInsertMathSymbolAction[] stdBinOp;
private TexInsertMathSymbolAction[] stdBraces;
private TexInsertMathSymbolAction[] stdAccents;
/**
* Fills the actions array with the TexCommandEntries from commands
*
* @param actions
* @param commands
*/
private void createMathActions(TexInsertMathSymbolAction[] actions, TexCommandEntry[] commands) {
for (int i = 0; i < commands.length; i++) {
actions[i] = new TexInsertMathSymbolAction(commands[i]);
}
}
public TexEditorActionContributor() {
super();
greekSmall = new TexInsertMathSymbolAction[TexCommandContainer.greekSmall.length];
greekCapital = new TexInsertMathSymbolAction[TexCommandContainer.greekCapital.length];
arrows = new TexInsertMathSymbolAction[TexCommandContainer.stdArrows.length];
stdCompare = new TexInsertMathSymbolAction[TexCommandContainer.stdCompare.length];
stdBinOp = new TexInsertMathSymbolAction[TexCommandContainer.stdBinOpSymbols.length];
stdBraces = new TexInsertMathSymbolAction[TexCommandContainer.stdBraces.length];
stdAccents = new TexInsertMathSymbolAction[TexCommandContainer.stdAccents.length];
createMathActions(greekSmall, TexCommandContainer.greekSmall);
createMathActions(greekCapital, TexCommandContainer.greekCapital);
createMathActions(arrows, TexCommandContainer.stdArrows);
createMathActions(stdCompare, TexCommandContainer.stdCompare);
createMathActions(stdBinOp, TexCommandContainer.stdBinOpSymbols);
createMathActions(stdBraces, TexCommandContainer.stdBraces);
createMathActions(stdAccents, TexCommandContainer.stdAccents);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.part.EditorActionBarContributor#contributeToMenu(org.eclipse.jface.action.IMenuManager)
*/
@Override
public void contributeToMenu(IMenuManager menuManager) {
super.contributeToMenu(menuManager);
//Add a new group to the navigation/goto menu
IMenuManager gotoMenu = menuManager.findMenuUsingPath(IWorkbenchActionConstants.M_NAVIGATE+"/"+IWorkbenchActionConstants.GO_TO);
if (gotoMenu != null) {
gotoMenu.add(new Separator("additions2"));
}
IMenuManager editMenu = menuManager.findMenuUsingPath(IWorkbenchActionConstants.M_WINDOW);
MenuManager manager = new MenuManager("Latex Symbols");
if (editMenu != null) {
menuManager.insertBefore(IWorkbenchActionConstants.M_WINDOW, manager);
MenuManager smallGreekMenu = new MenuManager("Greek lower case");
MenuManager captialGreekMenu = new MenuManager("Greek upper case");
MenuManager arrowsMenu = new MenuManager("Arrows");
MenuManager compareMenu = new MenuManager("Compare symbols");
MenuManager stdBinOpMenu = new MenuManager("Binary Operator");
MenuManager stdBracesMenu = new MenuManager("Braces");
MenuManager stdAccentsMenu = new MenuManager("Accents");
manager.add(captialGreekMenu);
manager.add(smallGreekMenu);
manager.add(new Separator());
manager.add(arrowsMenu);
manager.add(compareMenu);
manager.add(stdBinOpMenu);
manager.add(stdBracesMenu);
manager.add(new Separator());
manager.add(stdAccentsMenu);
for (int i = 0; i < greekSmall.length; i++)
smallGreekMenu.add(greekSmall[i]);
for (int i = 0; i < greekCapital.length; i++)
captialGreekMenu.add(greekCapital[i]);
for (int i = 0; i < arrows.length; i++)
arrowsMenu.add(arrows[i]);
for (int i = 0; i < stdCompare.length; i++)
compareMenu.add(stdCompare[i]);
for (int i = 0; i < stdBinOp.length; i++)
stdBinOpMenu.add(stdBinOp[i]);
for (int i = 0; i < stdBraces.length; i++)
stdBracesMenu.add(stdBraces[i]);
for (int i = 0; i < stdAccents.length; i++)
stdAccentsMenu.add(stdAccents[i]);
}
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.IEditorActionBarContributor#setActiveEditor(org.eclipse.ui.IEditorPart)
*/
@Override
public void setActiveEditor(IEditorPart part) {
super.setActiveEditor(part);
for (int i = 0; i < greekSmall.length; i++)
greekSmall[i].setActiveEditor(part);
for (int i = 0; i < greekCapital.length; i++)
greekCapital[i].setActiveEditor(part);
for (int i = 0; i < arrows.length; i++)
arrows[i].setActiveEditor(part);
for (int i = 0; i < stdCompare.length; i++)
stdCompare[i].setActiveEditor(part);
for (int i = 0; i < stdBinOp.length; i++)
stdBinOp[i].setActiveEditor(part);
for (int i = 0; i < stdBraces.length; i++)
stdBraces[i].setActiveEditor(part);
for (int i = 0; i < stdAccents.length; i++)
stdAccents[i].setActiveEditor(part);
}
}