package org.geogebra.desktop.gui.util; import java.awt.Component; import java.awt.Dimension; import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; import javax.swing.BorderFactory; import javax.swing.MenuElement; import javax.swing.MenuSelectionManager; import javax.swing.SwingConstants; import org.geogebra.common.gui.util.SelectionTable; import org.geogebra.common.main.GeoGebraColorConstants; import org.geogebra.desktop.awt.GColorD; import org.geogebra.desktop.gui.dialog.TextInputDialogD; import org.geogebra.desktop.gui.view.algebra.InputPanelD; import org.geogebra.desktop.gui.view.spreadsheet.MyTableD; import org.geogebra.desktop.main.AppD; public class LatexTable extends SelectionTableD implements MenuElement { private static final long serialVersionUID = 1L; private TextInputDialogD inputDialog; private String[] latexArray; private PopupMenuButtonD popupButton; private SelectionTable mode; public LatexTable(AppD app, TextInputDialogD textInputDialog, PopupMenuButtonD popupButton, String[] latexArray, int rows, int columns, SelectionTable mode) { super(app, latexArray, rows, columns, new Dimension(24, 24), mode); this.inputDialog = textInputDialog; this.latexArray = latexArray; this.popupButton = popupButton; this.mode = mode; // setShowGrid(true); setHorizontalAlignment(SwingConstants.CENTER); setSelectedIndex(0); // this.setUseColorSwatchBorder(true); this.setShowGrid(true); this.setGridColor( GColorD.getAwtColor(GeoGebraColorConstants.TABLE_GRID_COLOR)); this.setBorder( BorderFactory.createLineBorder(MyTableD.TABLE_GRID_COLOR)); // this.setBorder(BorderFactory.createEmptyBorder()); this.setShowSelection(false); } // support for MenuElement interface @Override public Component getComponent() { return this; } @Override public MenuElement[] getSubElements() { return new MenuElement[0]; } @Override public void menuSelectionChanged(boolean arg0) { // nothing to do } @Override public void processKeyEvent(KeyEvent arg0, MenuElement[] arg1, MenuSelectionManager arg2) { // nothing to do } @Override public void processMouseEvent(MouseEvent arg0, MenuElement[] arg1, MenuSelectionManager arg2) { if (this.getSelectedIndex() >= latexArray.length) { return; } if (arg0.getID() == MouseEvent.MOUSE_RELEASED) { // get the selected string StringBuffer sb = new StringBuffer( latexArray[this.getSelectedIndex()]); // if LaTeX string, adjust the string to include selected text // within braces if (mode == SelectionTable.MODE_LATEX) { String selText = ((InputPanelD) inputDialog.getInputPanel()) .getSelectedText(); if (selText != null) { sb.deleteCharAt(sb.indexOf("{") + 1); sb.insert(sb.indexOf("{") + 1, selText); } } // now insert the string inputDialog.insertString(sb.toString(), inputDialog.isLaTeX()); // if unicode string, add the string to the recent symbol list if (mode == SelectionTable.MODE_TEXT) { inputDialog.addRecentSymbol(sb.toString()); } // notify the popup button popupButton.handlePopupActionEvent(); } } }