package org.geogebra.desktop; import java.awt.BorderLayout; import java.net.URL; import java.util.Locale; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingUtilities; import org.geogebra.common.kernel.View; import org.geogebra.common.main.App; import org.geogebra.desktop.main.AppD; import org.geogebra.desktop.plugin.GgbAPID; /** * GeoGebra application inside a JPanel that can be integrated into other * applications. */ public class GeoGebraPanel extends JPanel { private static final long serialVersionUID = 1L; /** * Test method that demonstrates how to embed a GeoGebraPanel into another * application. * * @param args */ public static void main(String[] args) { // prepare URL for ggb file // URL ggbURL = null; // try { // File ggbFile = new File("test.ggb"); // ggbURL = ggbFile.toURL(); // } catch (Exception e) { // e.printStackTrace(); // } // create GeoGebraPanel and open test file // GeoGebraPanel ggbPanel = new GeoGebraPanel(ggbURL); // create empty GeoGebraPanel GeoGebraPanel ggbPanel = new GeoGebraPanel(); // hide input bar ggbPanel.setShowAlgebraInput(false); // use smaller icons in toolbar ggbPanel.setMaxIconSize(24); // show menu bar and toolbar ggbPanel.setShowMenubar(true); ggbPanel.setShowToolbar(true); // build the user interface of the GeoGebraPanel ggbPanel.buildGUI(); // use GeoGebraAPI ggbPanel.getGeoGebraAPI().evalCommand("100 - x"); ggbPanel.getGeoGebraAPI().evalCommand("x + 100"); ggbPanel.getGeoGebraAPI().setAxesCornerCoordsVisible(false); // add GeoGebraPanel to your application JFrame f = new JFrame(); f.add(ggbPanel); f.setSize(800, 600); f.setVisible(true); } private AppD app; /** * Creates a GeoGebraPanel. Note that you need to call buildGUI() after this * method. */ public GeoGebraPanel() { this(null); } /** * Creates a GeoGebraPanel and loads the given ggbFile. Note that you need * to call buildGUI() after this method. */ public GeoGebraPanel(URL ggbFile) { // use filename as argument String[] args = null; if (ggbFile != null) { args = new String[1]; args[0] = ggbFile.toExternalForm(); } // create GeoGebra application app = new AppD(new CommandLineArguments(args), this, false); } /** * Loads a ggb or ggt file. Note that you need to call buildGUI() after this * method to update the panel's structure. */ public synchronized void openFile(URL url) { app.getGgbApi().openFile(url.toExternalForm()); } /** * Tells the panel to show/hide the tool bar. Note that you need to call * buildGUI() after this method to update the panel's structure. */ public synchronized void setShowToolbar(boolean showToolBar) { app.setShowToolBar(showToolBar, true); } /** * Sets the font size of the GeoGebra user interface. */ public synchronized void setFontSize(int points) { app.setFontSize(points, true); } /** * Sets the maximum pixel size of all icons in the GeoGebra user interface * including the toolbar. * * @param pixel * a value between 16 and 64 */ public synchronized void setMaxIconSize(int pixel) { app.getImageManager().setMaxIconSize(pixel); } /** * Tells the panel to show/hide the menu bar. Note that you need to call * buildGUI() after this method to update the panel's structure. */ public synchronized void setShowMenubar(boolean showMenuBar) { app.setShowMenuBar(showMenuBar); } /** * Tells the panel to show/hide the input bar. Note that you need to call * buildGUI() after this method to update the panel's structure. */ public synchronized void setShowAlgebraInput(boolean showInputBar) { app.setShowAlgebraInput(showInputBar, true); } /** * Tells the panel to show/hide the algebra view. Note that you need to call * buildGUI() after this method to update the panel's structure. */ public synchronized void setShowAlgebraView(boolean show) { app.getGuiManager().setShowView(show, App.VIEW_ALGEBRA); } /** * Tells the panel to show/hide the spreadsheet view. Note that you need to * call buildGUI() after this method to update the panel's structure. */ public synchronized void setShowSpreadsheetView(boolean show) { app.getGuiManager().setShowView(show, App.VIEW_SPREADSHEET); } /** * Returns the graphics view's panel. */ public JPanel getGraphicsPanel() { return app.getEuclidianView1().getJPanel(); } /** * Sets the language of the GeoGebraPanel. Note that you need to call * buildGUI() after this method to update the panel's structure. */ public synchronized void setLanguage(Locale locale) { app.setLanguage(locale); } /** * Attaches a view to listen to kernel changes. */ public synchronized void attachView(View view) { app.getKernel().attach(view); } /** * Detaches a view from the kernel. */ public synchronized void detachView(View view) { app.getKernel().detach(view); } /** * Rebuilds the GeoGebra user interface in this panel. */ public synchronized void buildGUI() { removeAll(); setLayout(new BorderLayout()); // activate undo app.setUndoActive(app.showMenuBar() || app.showToolBar()); // create application panel add(app.buildApplicationPanel(), BorderLayout.CENTER); if (isShowing()) { SwingUtilities.updateComponentTreeUI(this); } } /** * Returns the GeoGebraAPI object that lets you interact with the GeoGebra * construction. */ public synchronized GgbAPID getGeoGebraAPI() { return app.getGgbApi(); } }