package org.geogebra.desktop.gui.view.algebra;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JLabel;
import javax.swing.JPopupMenu;
import javax.swing.JToolBar;
import org.geogebra.common.gui.view.algebra.AlgebraView.SortMode;
import org.geogebra.desktop.gui.util.PopupMenuButtonD;
import org.geogebra.desktop.main.AppD;
import org.geogebra.desktop.main.LocalizationD;
import org.geogebra.desktop.util.GuiResourcesD;
/**
* Helper tool bar for the algebra view which displays some useful buttons to
* change the functionality (e.g. show auxiliary objects).
*/
public class AlgebraHelperBar extends JToolBar implements ActionListener {
/** */
private static final long serialVersionUID = 1L;
/**
* The algebra view which uses this tool bar.
*/
protected AlgebraViewD algebraView;
/**
* Instance of the application.
*/
protected AppD app;
/**
* Button to show/hide auxiliary objects in the algebra view.
*/
private JButton toggleAuxiliary;
/**
* Button to toggle between the two tree modes of the algebra view: -
* Categorize objects by free / independent / auxiliary - Categorize objects
* by their type
*/
protected PopupMenuButtonD toggleTypeTreeMode;
protected PopupMenuButtonD toggleDescriptionMode;
private JPopupMenu treeModeMenu, descriptionMenu;
private LocalizationD loc;
/**
* Button to toggle LaTeX rendering
*/
// private JButton toggleLaTeX;
/**
* Helper bar.
*
* @param algebraView
* @param app
*/
public AlgebraHelperBar(AlgebraViewD algebraView, AppD app) {
this.algebraView = algebraView;
this.app = app;
this.loc = app.getLocalization();
setFloatable(false);
addButtons();
updateStates();
updateLabels();
}
/**
* add the buttons
*/
protected void addButtons() {
toggleAuxiliary = new JButton(app.getScaledIcon(
GuiResourcesD.STYLINGBAR_ALGEBRAVIEW_AUXILIARY_OBJECTS));
toggleAuxiliary.setFocusPainted(false);
toggleAuxiliary.addActionListener(this);
add(toggleAuxiliary);
addSeparator();
toggleTypeTreeMode = new PopupMenuButtonD(app);
buildTreeModeMenu();
toggleTypeTreeMode.setPopupMenu(treeModeMenu);
toggleTypeTreeMode.setKeepVisible(true);
toggleTypeTreeMode.setStandardButton(true); // mouse clicks over total
// button region
toggleTypeTreeMode.setIcon(app.getScaledIcon(
GuiResourcesD.STYLINGBAR_ALGEBRAVIEW_SORT_OBJECTS_BY));
add(toggleTypeTreeMode);
toggleDescriptionMode = new PopupMenuButtonD(app);
buildDescriptionMenu();
toggleDescriptionMode.setPopupMenu(descriptionMenu);
toggleDescriptionMode.setKeepVisible(true);
toggleDescriptionMode.setStandardButton(true); // mouse clicks over
// total
// button region
toggleDescriptionMode
.setIcon(app.getScaledIcon(GuiResourcesD.FORMULA_BAR));
add(toggleDescriptionMode);
}
public void update() {
removeAll();
addButtons();
updateLabels();
}
public void updateStates() {
toggleAuxiliary.setSelected(app.showAuxiliaryObjects());
// toggleTypeTreeMode.setSelected(algebraView.getTreeMode().equals(SortMode.TYPE));
// toggleLaTeX.setSelected(!algebraView.isRenderLaTeX());
}
/**
* Update the tool tip texts (used for language change).
*/
public void updateLabels() {
toggleAuxiliary.setToolTipText(loc.getPlainTooltip("AuxiliaryObjects"));
toggleTypeTreeMode.setToolTipText(loc.getPlainTooltip("SortObjectsBy"));
buildTreeModeMenu();
buildDescriptionMenu();
}
/**
* React to button presses.
*/
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == toggleAuxiliary) {
app.setShowAuxiliaryObjects(!app.showAuxiliaryObjects());
toggleAuxiliary.setSelected(app.showAuxiliaryObjects());
}
// else if(e.getSource() == toggleLaTeX) {
// algebraView.setRenderLaTeX(!algebraView.isRenderLaTeX());
// toggleLaTeX.setSelected(!algebraView.isRenderLaTeX());
// }
}
void buildTreeModeMenu() {
if (treeModeMenu == null) {
treeModeMenu = new JPopupMenu();
}
treeModeMenu.removeAll();
JLabel title = new JLabel(loc.getMenu("SortBy") + ":");
title.setFont(app.getBoldFont());
title.setIcon(app.getEmptyIcon());
title.setBorder(BorderFactory.createEmptyBorder(2, 5, 2, 5));
add(title);
treeModeMenu.add(title);
SortMode[] sortModes = new SortMode[] { SortMode.DEPENDENCY,
SortMode.TYPE, SortMode.LAYER, SortMode.ORDER };
for (int i = 0; i < sortModes.length; i++) {
JCheckBoxMenuItem mi = new JCheckBoxMenuItem();
mi.setFont(app.getPlainFont());
mi.setBackground(Color.white);
final SortMode sort = sortModes[i];
mi.setText(loc.getMenu(sort.toString()));
mi.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
algebraView.setTreeMode(sort);
buildTreeModeMenu();
}
});
mi.setSelected(algebraView.getTreeMode() == sortModes[i]);
treeModeMenu.add(mi);
}
app.setComponentOrientation(treeModeMenu);
}
void buildDescriptionMenu() {
if (descriptionMenu == null) {
descriptionMenu = new JPopupMenu();
}
descriptionMenu.removeAll();
JLabel title = new JLabel(loc.getMenu("AlgebraDescriptions") + ":");
title.setFont(app.getBoldFont());
title.setIcon(app.getEmptyIcon());
title.setBorder(BorderFactory.createEmptyBorder(2, 5, 2, 5));
add(title);
descriptionMenu.add(title);
String[] modes = new String[] { loc.getMenu("Value"),
loc.getMenu("Description"), loc.getMenu("Definition") };
for (int i = 0; i < modes.length; i++) {
JCheckBoxMenuItem mi = new JCheckBoxMenuItem();
mi.setFont(app.getPlainFont());
mi.setBackground(Color.white);
mi.setText(modes[i]);
final int current = i;
mi.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
app.getKernel().setAlgebraStyle(current);
app.getKernel().updateConstruction();
buildDescriptionMenu();
}
});
mi.setSelected(algebraView.getTreeMode() == SortMode.DEPENDENCY);
descriptionMenu.add(mi);
}
app.setComponentOrientation(treeModeMenu);
}
}