package org.geogebra.desktop.cas.view;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import javax.swing.JLabel;
import javax.swing.JPanel;
import org.geogebra.common.awt.GColor;
import org.geogebra.common.main.App;
import org.geogebra.desktop.awt.GColorD;
import org.geogebra.desktop.main.AppD;
/**
* Panel for CAS output, can contain LaTeX or normal output
*/
public class CASOutputPanel extends JPanel {
private static final long serialVersionUID = 1L;
// public static final int INDENT = 20; // pixel
/**
* The text color of the output
*/
private static Color ERROR_COLOR = Color.red;
private static Color OUTPUT_PREFIX_COLOR = Color.gray;
private JLabel outputSign;
private JLabel outputArea;
private LaTeXPanel latexPanel;
private AppD app;
private JPanel centerPanel;
/**
* @param app
* application
*/
public CASOutputPanel(AppD app) {
this.app = app;
setBackground(Color.white);
setLayout(new BorderLayout(5, 0));
outputSign = new JLabel();
outputSign.setForeground(OUTPUT_PREFIX_COLOR);
outputArea = new JLabel();
latexPanel = new LaTeXPanel(app);
// will be overwritten later
latexPanel.setForeground(Color.black);
latexPanel.setBackground(Color.white);
add(outputSign, app.getLocalization().borderWest());
centerPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
centerPanel.setBackground(Color.white);
centerPanel.add(outputArea);
centerPanel.add(latexPanel);
add(centerPanel, BorderLayout.CENTER);
}
/**
* @param c
* foreground color
*/
public void setForeground(GColor c) {
outputArea.setForeground(GColorD.getAwtColor(c));
latexPanel.setForeground(GColorD.getAwtColor(c));
}
/**
* @param output
* plain output (used when latexOutput is null or isError)
* @param latexOutput
* LaTeX output (used when not null and !isError)
* @param cmd
* top level command
* @param isError
* whether outpput is error
* @param c
* color
*/
public void setOutput(String output, String latexOutput, String cmd,
boolean isError, GColor c, App app) {
boolean useLaTeXpanel = latexOutput != null && !isError;
outputArea.setVisible(!useLaTeXpanel);
latexPanel.setVisible(useLaTeXpanel);
setForeground(c);
if (useLaTeXpanel) {
latexPanel.setLaTeX(latexOutput);
} else {
outputArea.setText(output);
if (isError) {
outputArea.setForeground(ERROR_COLOR);
}
}
outputSign.setText(cmd);
}
@Override
final public void setFont(Font ft) {
super.setFont(ft);
if (ft == null) {
return;
}
if (latexPanel != null) {
latexPanel.setFont(ft.deriveFont(ft.getSize() + 2f));
}
if (outputArea != null) {
outputArea.setFont(ft);
}
if (outputSign != null) {
outputSign.setFont(ft);
}
}
public void setOrientation() {
remove(outputSign);
add(outputSign, app.getLocalization().borderWest());
app.setFlowLayoutOrientation(centerPanel);
}
}