package org.geogebra.desktop.gui.view.spreadsheet;
import java.awt.Color;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import org.geogebra.common.gui.view.spreadsheet.MyTable;
import org.geogebra.common.gui.view.spreadsheet.SpreadsheetContextMenu;
import org.geogebra.desktop.main.AppD;
import org.geogebra.desktop.util.GuiResourcesD;
import org.geogebra.desktop.util.ImageResourceD;
/**
* Subclass of SpreadsheetContextMenu, implements the spreadsheet context menu
* for desktop.
*
* @author G. Sturr
*
*/
public class SpreadsheetContextMenuD extends SpreadsheetContextMenu {
/** Desktop popUp panel */
protected JPopupMenu popup;
private static final Color bgColor = Color.white;
private static final Color fgColor = Color.black;
/**
* Constructor
*
* @param table
* spreadsheet table
*/
public SpreadsheetContextMenuD(MyTable table) {
super(table);
}
/**
* @return true if data file can be read locally
*/
@Override
public boolean enableDataImport() {
return isEmptySelection();
}
/**
* Import data file
*/
@Override
public void cmdImportDataFile() {
File dataFile = ((AppD) app).getGuiManager().getDataFile();
if (dataFile != null) {
((SpreadsheetViewD) table.getView())
.loadSpreadsheetFromURL(dataFile);
}
}
// ======================================
// GUI implementation
// ======================================
@Override
public Object getMenuContainer() {
return popup;
}
@Override
public void createGUI() {
popup = new JPopupMenu();
popup.setBackground(bgColor);
((AppD) app).setComponentOrientation(popup);
initMenu();
}
// setTitle (copied from gui.ContextMenuGeoElement)
@Override
public void setTitle(String str) {
JLabel title = new JLabel(str);
title.setFont(((AppD) app).getBoldFont());
title.setBackground(bgColor);
title.setForeground(fgColor);
title.setIcon(((AppD) app).getEmptyIcon());
title.setBorder(BorderFactory.createEmptyBorder(5, 15, 2, 5));
popup.add(title);
title.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
popup.setVisible(false);
}
});
}
@Override
public void addMenuItem(final String cmdString, String text,
boolean enabled) {
JMenuItem item = new JMenuItem(text);
item.setIcon(getIcon(cmdString));
item.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
doCommand(cmdString);
}
});
item.setEnabled(enabled);
addItem(item);
}
@Override
public void addCheckBoxMenuItem(final String cmdString, String text,
boolean isSelected) {
JCheckBoxMenuItem item = new JCheckBoxMenuItem(text);
item.setIcon(getIcon(cmdString));
item.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
doCommand(cmdString);
}
});
item.setSelected(isSelected);
addItem(item);
}
@Override
public void addCheckBoxMenuItem(final String cmdString, String nonSelected,
String selected, boolean isSelected) {
addCheckBoxMenuItem(cmdString, nonSelected, isSelected);
}
@Override
public Object addSubMenu(String text, String cmdString) {
JMenu menu = new JMenu(text);
menu.setIcon(getIcon(cmdString));
addItem(menu);
return menu;
}
@Override
public void addSubMenuItem(Object menu, final String cmdString, String text,
boolean enabled) {
JMenuItem item = new JMenuItem(text, getIcon(cmdString));
item.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
doCommand(cmdString);
}
});
item.setEnabled(enabled);
addSubItem(menu, item);
}
@Override
public void addSeparator() {
popup.addSeparator();
}
private void addItem(Object item) {
Component mi = (Component) item;
mi.setBackground(bgColor);
popup.add(mi);
}
private static void addSubItem(Object menu, Object item) {
Component mi = (Component) item;
mi.setBackground(bgColor);
((JMenu) menu).add(mi);
}
private ImageIcon getIcon(String cmdString) {
if (cmdString == null) {
return ((AppD) app).getEmptyIcon();
}
ImageResourceD iconString = null;
switch (MenuCommand.valueOf(cmdString)) {
default:
// do nothing
break;
case Copy:
iconString = GuiResourcesD.MENU_EDIT_COPY;
break;
case Cut:
iconString = GuiResourcesD.MENU_EDIT_CUT;
break;
case Paste:
iconString = GuiResourcesD.MENU_EDIT_PASTE;
break;
case Delete:
case DeleteObjects:
iconString = GuiResourcesD.DELETE_SMALL;
break;
case ShowObject:
iconString = GuiResourcesD.MODE_SHOWHIDEOBJECT_GIF;
break;
case ShowLabel:
iconString = GuiResourcesD.MODE_SHOWHIDELABEL;
break;
case RecordToSpreadsheet:
iconString = GuiResourcesD.SPREADSHEETTRACE;
break;
case Properties:
iconString = GuiResourcesD.VIEW_PROPERTIES_16;
break;
case SpreadsheetOptions:
iconString = GuiResourcesD.VIEW_PROPERTIES_16;
break;
}
// convert string to icon
if (iconString != null) {
return ((AppD) app).getScaledIcon(iconString);
}
return ((AppD) app).getEmptyIcon();
}
}