The following commit has been merged in the patch/version branch:
commit 7881af7c63327d3dc7507d83c6148912d1574756
Merge: b2cf8d2030a80923ce5f57d595260c7675e201e9 
87975a17a0cae2bceae76ca9d1d68ba6799db207
Author: Giovanni Mascellani <mascell...@poisson.phc.unipi.it>
Date:   Wed Dec 7 17:42:47 2011 +0100

    Merge commit 'refs/top-bases/patch/version' into patch/version
    
    Conflicts:
        geogebra/GeoGebra.java
        geogebra/GeoGebraAppletPreloader.java
        geogebra/gui/menubar/MenubarImpl.java
        geogebra/main/Application.java

diff --combined geogebra/GeoGebra.java
index fed2a9a,f25403d..86c3333
--- a/geogebra/GeoGebra.java
+++ b/geogebra/GeoGebra.java
@@@ -19,42 -19,56 +19,59 @@@ import java.net.URL
  public class GeoGebra extends Object {
        
        // GeoGebra version
-       public static final String BUILD_DATE = "June 03, 2011";
-       
-       public static final String VERSION_STRING = "3.2.47.0";
-       public static final String SHORT_VERSION_STRING = "3.2"; // used for 
online archive
+       public static final String BUILD_DATE = "30 November 2011";
+       public static final String VERSION_STRING = "4.0.13.0"; 
+       public static final String SPLASH_STRING = "splash40.png";
+       public static final String PREFERENCES_ROOT = "/geogebra40";
+       public static final String SHORT_VERSION_STRING = "4.0"; // used for 
online archive
+       public static final boolean CAS_VIEW_ENABLED = false;
+       public static final boolean IS_PRE_RELEASE = 
!VERSION_STRING.endsWith(".0");
 -      
 +
 +      // Debian version
 +      public static final String DEBIAN_VERSION_STRING = 
GeoGebraDebian.DEBIAN_VERSION_STRING;
 +              
        // File format versions
-       public static final String XML_FILE_FORMAT = "3.2";
-       public static final String I2G_FILE_FORMAT = "1.00.20080731";
+       public static final String XML_FILE_FORMAT = "4.0";
+       public static final String GGB_XSD_FILENAME = "ggb.xsd"; // for ggb 
files
+       public static final String GGT_XSD_FILENAME = "ggt.xsd"; // for macro 
files 
+       public static final String I2G_FILE_FORMAT = "0.1.20080731";
        
        // pre-releases and I2G
-       public static final boolean IS_PRE_RELEASE = 
!VERSION_STRING.endsWith(".0");
-       public static final boolean DISABLE_I2G = true;
+       public static final boolean DISABLE_I2G = !IS_PRE_RELEASE;      
  
        // URLs
-       public final static String GEOGEBRA_ONLINE_ARCHIVE_BASE = 
"http://www.geogebra.org/webstart/"; + SHORT_VERSION_STRING +"/";
+       public final static String GEOGEBRA_ONLINE_ARCHIVE_BASE = 
"http://www.geogebra.org/webstart/"; + SHORT_VERSION_STRING + "/";
+       public final static String GEOGEBRA_ONLINE_WEBSTART_BASE = 
"http://www.geogebra.org/webstart/"; + SHORT_VERSION_STRING + "/";
+       public final static String GEOGEBRA_ONLINE_WEBSTART_BASE_ALTERNATIVE = 
"http://jars.geogebra.org/webstart/"; + SHORT_VERSION_STRING + "/";
        public static final String LOADING_GIF = 
"http://www.geogebra.org/webstart/loading.gif";;
        public final static String GEOGEBRA_WEBSITE = 
"http://www.geogebra.org/";;
+       public final static String HELP_URL = GEOGEBRA_WEBSITE + "help";
+       public final static String GEOGEBRATUBE_WEBSITE = 
"http://www.geogebratube.org/";;
        
        // max possible heap space for applets in MB
        public final static int MAX_HEAP_SPACE = 512;
        
-     public static void main(String[] args) {  
- 
-       Frame splashFrame = null;
+       public static Frame splashFrame = null;
+       
+     public static void main(String[] cmdArgs) {  
+               CommandLineArguments args = new CommandLineArguments(cmdArgs);
+                               
        boolean showSplash = true;
-       for (int i = 0 ; i < args.length ; i++) {
-               if (args[i].equals("--showSplash=false")) showSplash = false;
-               else if (args[i].equals("--help")) showSplash = false;
+       if(!args.getBooleanValue("showSplash", true)) {
+               showSplash = false;
+       }
+       
+       if(args.containsArg("help")||args.containsArg("v")) {
+               showSplash = false;
        }
+ 
+       if(args.containsArg("regressionFile")) {
+               showSplash = false;
+       }
        
        if (showSplash) {
          // Show splash screen
-                 URL imageURL = 
GeoGebra.class.getResource("/geogebra/splash.png");
+                 URL imageURL = 
GeoGebra.class.getResource("/geogebra/"+SPLASH_STRING);
                  if (imageURL != null) {
                      splashFrame = SplashWindow.splash(
                          Toolkit.getDefaultToolkit().createImage(imageURL)
@@@ -77,9 -91,9 +94,9 @@@
                  if (splashFrame != null) splashFrame.setVisible(false);
      }
      
-     private static void startGeoGebra(String [] args) {
+     private static void startGeoGebra(CommandLineArguments args) {
        // create and open first GeoGebra window                
        geogebra.gui.app.GeoGebraFrame.main(args);
      }
      
--}
++}
diff --combined geogebra/GeoGebraAppletPreloader.java
index 51a66e5,d8de89d..2929722
--- a/geogebra/GeoGebraAppletPreloader.java
+++ b/geogebra/GeoGebraAppletPreloader.java
@@@ -11,19 -11,18 +11,19 @@@ public class GeoGebraAppletPreloader ex
  
        public void init() {
                setBackground(Color.white);
 -              System.out.println("GeoGebraAppletPreloader " + 
GeoGebra.VERSION_STRING + " started");
 +              System.out.println("GeoGebraAppletPreloader " + 
GeoGebra.VERSION_STRING
-                               + " (Debian package " + 
GeoGebra.DEBIAN_VERSION_STRING + " started");
-               loadAllJarFiles();
++                              + " (Debian package " + 
GeoGebra.DEBIAN_VERSION_STRING + ") started");
+               loadAllJarFiles(true);
        }
        
        /**
         * Loads all jar files in a background task. 
         */
-       public static void loadAllJarFiles() {
+       public static void loadAllJarFiles(final boolean loadJavaScriptJAR) {
                Thread jarLoader = new Thread() {
                        public void run() {
                                // touch on file in all jar files to force 
loading
-                               
+ 
                                // load main jar
                                System.out.print("loading geogebra_main.jar... 
");
                                System.out.flush();
@@@ -32,6 -31,21 +32,21 @@@
                                        System.out.println("done");
                                } catch (Exception e) {
                                        System.out.println("failed");
+                               } catch (Throwable e) {
+                                       System.out.println("failed");
+                               }
+                               System.out.flush();
+                               
+                               // load main jar
+                               System.out.print("loading geogebra_algos.jar... 
");
+                               System.out.flush();
+                               try {
+                                       
geogebra.kernel.discrete.AlgoVoronoi.class.getClass();
+                                       System.out.println("done");
+                               } catch (Exception e) {
+                                       System.out.println("failed");
+                               } catch (Throwable e) {
+                                       System.out.println("failed");
                                }
                                System.out.flush();
                                
@@@ -43,6 -57,8 +58,8 @@@
                                        System.out.println("done");
                                } catch (Exception e) {
                                        System.out.println("failed");
+                               } catch (Throwable e) {
+                                       System.out.println("failed");
                                }
                                System.out.flush();
                                
@@@ -50,10 -66,12 +67,12 @@@
                                System.out.print("loading geogebra_gui.jar... 
");
                                System.out.flush();
                                try {
-                                       
geogebra.gui.DefaultGuiManager.class.getClass();
+                                       
geogebra.gui.GuiManager.class.getClass();
                                        System.out.println("done");
                                } catch (Exception e) {
                                        System.out.println("failed");
+                               } catch (Throwable e) {
+                                       System.out.println("failed");
                                }
                                System.out.flush();
                                
@@@ -68,6 -86,8 +87,8 @@@
                                                System.out.println("not found");
                                } catch (Exception e) {
                                        System.out.println("not found");
+                               } catch (Throwable e) {
+                                       System.out.println("not found");
                                }
                                System.out.flush();
                                
@@@ -79,8 -99,64 +100,64 @@@
                                        System.out.println("done");
                                } catch (Exception e) {
                                        System.out.println("failed");
+                               } catch (Throwable e) {
+                                       System.out.println("failed");
                                }
                                System.out.flush();
+                               
+                               // load jlatexmath jar
+                               System.out.print("loading jlatexmath.jar... ");
+                               System.out.flush();
+                               try {
+                                       
org.scilab.forge.jlatexmath.TeXFormula.class.getClass();
+                                       System.out.println("done");
+                               } catch (Exception e) {
+                                       System.out.println("failed");
+                               } catch (Throwable e) {
+                                       System.out.println("failed");
+                               }
+                               System.out.flush();
+                               
+                               // load jlm_greek jar
+                               System.out.print("loading jlm_greek.jar... ");
+                               System.out.flush();
+                               try {
+                                       
org.scilab.forge.jlatexmath.greek.GreekRegistration.class.getClass();
+                                       System.out.println("done");
+                               } catch (Exception e) {
+                                       System.out.println("failed");
+                               } catch (Throwable e) {
+                                       System.out.println("failed");
+                               }
+                               System.out.flush();
+                               
+                               // load jlm_cyrillic jar
+                               System.out.print("loading jlm_cyrillic.jar... 
");
+                               System.out.flush();
+                               try {
+                                       
org.scilab.forge.jlatexmath.cyrillic.CyrillicRegistration.class.getClass();
+                                       System.out.println("done");
+                               } catch (Exception e) {
+                                       System.out.println("failed");
+                               } catch (Throwable e) {
+                                       System.out.println("failed");
+                               }
+                               System.out.flush();
+                               
+                               if (loadJavaScriptJAR) {
+                                       // load javascript jar
+                                       System.out.print("loading 
geogebra_javascript.jar... ");
+                                       System.out.flush();
+                                       try {
+                                               
org.mozilla.javascript.Context.class.getClass();
+                                               System.out.println("done");
+                                       } catch (Exception e) {
+                                               System.out.println("failed");
+                                       } catch (Throwable e) {
+                                               System.out.println("failed");
+                                       }
+                                       System.out.flush();
+                               }
                        }
                };
                jarLoader.start();
diff --combined geogebra/gui/menubar/GeoGebraMenuBar.java
index 6f56a45,6991e2c..d6529df
--- a/geogebra/gui/menubar/GeoGebraMenuBar.java
+++ b/geogebra/gui/menubar/GeoGebraMenuBar.java
@@@ -1,119 -1,353 +1,355 @@@
- package geogebra.gui.menubar;
- 
- import geogebra.kernel.Kernel;
- import geogebra.main.Application;
- 
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- 
- public class GeoGebraMenuBar extends MenubarImpl implements Menubar, 
ActionListener {
- 
-       public GeoGebraMenuBar(Application app) {
-               super();
-               this.app = app;
-               kernel = app.getKernel();
-       }
- 
-       public void actionPerformed(ActionEvent event) {
-               String cmd = event.getActionCommand();
-               
-               // change angle unit
-               if (cmd.equals("Degree")) {
-                       kernel.setAngleUnit(Kernel.ANGLE_DEGREE);
-                       kernel.updateConstruction();
-                       app.setUnsaved();
-               } else if (cmd.equals("Radiant")) {
-                       kernel.setAngleUnit(Kernel.ANGLE_RADIANT);
-                       kernel.updateConstruction();
-                       app.setUnsaved();
-               }
- 
-               // change graphics quality
-               else if (cmd.equals("LowQuality")) {
-                       app.getEuclidianView().setAntialiasing(false);
-               } else if (cmd.equals("HighQuality")) {
-                       app.getEuclidianView().setAntialiasing(true);
-               }
- 
-               // font size
-               else if (cmd.endsWith("pt")) {
-                       try {
-                               
app.setFontSize(Integer.parseInt(cmd.substring(0, 2)));
-                               
app.getGuiManager().updateSpreadsheetColumnWidths();
-                               app.setUnsaved();
-                               System.gc();
-                       } catch (Exception e) {
-                               app.showError(e.toString());
-                       }
-                       ;
-               }
-               
-               // decimal places
-               else if (cmd.endsWith("decimals")) {
-                       try {
-                               String decStr = cmd.substring(0,2).trim();      
                                                
-                               int decimals = Integer.parseInt(decStr);
-                               //Application.debug("decimals " + decimals);
-                               
-                               kernel.setPrintDecimals(decimals);              
                
-                               kernel.updateConstruction();
-                               app.refreshViews();
-                               
-                               // see ticket 79
-                               kernel.updateConstruction();
-                               
-                               app.setUnsaved();
-                               app.storeUndoInfo();
-                       } catch (Exception e) {
-                               app.showError(e.toString());
-                       }                       
-               }
- 
-               // significant figures
-               else if (cmd.endsWith("figures")) {
-                       try {
-                               String decStr = cmd.substring(0,2).trim();      
                                                
-                               int figures = Integer.parseInt(decStr);
-                               //Application.debug("figures " + figures);
-                               
-                               kernel.setPrintFigures(figures);
-                               kernel.updateConstruction();
-                               app.refreshViews();
-                               
-                               // see ticket 79
-                               kernel.updateConstruction();
-                               
-                               app.setUnsaved();
-                               app.storeUndoInfo();
-                       } catch (Exception e) {
-                               app.showError(e.toString());
-                       }                       
-               }
- 
-               // Point capturing
-               else if (cmd.endsWith("PointCapturing")) {
-                       int mode = Integer.parseInt(cmd.substring(0, 1));
-                       app.getEuclidianView().setPointCapturing(mode);
-                       app.setUnsaved();
-               }
- 
-               // Continuity
-               else if (cmd.endsWith("Continuity")) {
-                       boolean state = cmd.startsWith("true");
-                       kernel.setContinuous(state);
-                       kernel.updateConstruction();
-                       app.setUnsaved();
-               }
-               
-               
-               // Labeling
-               else if (cmd.endsWith("labeling")) {
-                       int style = Integer.parseInt(cmd.substring(0, 1));
-                       app.setLabelingStyle(style);
-                       app.setUnsaved();
-               }
-               
-       }
-       
-       
- }
+ package geogebra.gui.menubar;
+ 
+ import geogebra.GeoGebra;
+ import geogebra.gui.layout.DockManager;
+ import geogebra.gui.layout.Layout;
+ import geogebra.kernel.Kernel;
+ import geogebra.main.Application;
+ import geogebra.main.GeoGebraPreferences;
+ 
+ import java.awt.BorderLayout;
+ import java.awt.Font;
+ import java.awt.SystemColor;
+ import java.awt.Toolkit;
+ import java.awt.datatransfer.StringSelection;
+ import java.awt.event.ActionEvent;
+ import java.awt.print.PageFormat;
+ import java.awt.print.Printable;
+ import java.io.File;
+ import java.io.FileNotFoundException;
+ import java.util.Scanner;
+ 
+ import javax.swing.AbstractAction;
+ import javax.swing.BorderFactory;
+ import javax.swing.JButton;
+ import javax.swing.JDialog;
+ import javax.swing.JLabel;
+ import javax.swing.JMenuBar;
+ import javax.swing.JOptionPane;
+ import javax.swing.JPanel;
+ import javax.swing.JScrollPane;
+ import javax.swing.JTextArea;
+ 
+ public class GeoGebraMenuBar extends JMenuBar {
+       private static final long serialVersionUID = 1736020764918189176L;
+ 
+       private BaseMenu fileMenu, editMenu, viewMenu, perspectivesMenu, 
optionsMenu, toolsMenu, windowMenu, helpMenu;
+ 
+       private Application app;
+       private Layout layout;
+       
+ 
+       /**
+        * Creates new menubar
+        * @param app Application
+        * @param layout Layout
+        */
+       public GeoGebraMenuBar(Application app, Layout layout) {
+               this.layout = layout;
+ 
+               /**
+                * A nasty workaround to prevent any borders from being drawn. 
All other
+                * elements will have a border at the top to prevent visual 
conflicts
+                * while moving the toolbar / algebra input to the top / 
bottom. The
+                * JMenuBar *always* draws a border at the bottom however, even 
if the
+                * border set via setBorder() is empty. By drawing an one pixel 
border
+                * with the color of the background we can prevent this.
+                */
+               setBorder(BorderFactory.createCompoundBorder(BorderFactory
+                               .createMatteBorder(0, 0, 1, 0, 
SystemColor.control),
+                               BorderFactory.createEmptyBorder(1, 1, 0, 1)));
+ 
+               this.app = app;
+       }
+ 
+ 
+       /**
+        * Initialize the menubar. No update is required after initialization.
+        */
+       public void initMenubar() {
+               removeAll();
+       
+               // "File"
+                       fileMenu = new FileMenu(app);
+                       add(fileMenu);
+                               
+               // "Edit"
+               editMenu = new EditMenu(app);
+               add(editMenu);
+               
+               // "View"
+               viewMenu = new ViewMenu(app, layout);
+               add(viewMenu);
+               
+               // "Perspectives"
+               if(!app.isApplet()) {
+                       perspectivesMenu = new PerspectivesMenu(app, layout);
+                       add(perspectivesMenu);
+               }
+               
+               // "Options"
+               optionsMenu = new OptionsMenu(app, layout);
+               add(optionsMenu);
+               
+               // "Tools"
+               toolsMenu = new ToolsMenu(app);
+               add(toolsMenu);
+               
+               // "Window"
+               windowMenu = new WindowMenu(app);
+               
+               if(!app.isApplet()) // just add the menu if this is not an 
applet we're 
+               {
+                       add(windowMenu);
+                       
+                       if (app.getPluginManager() != null) {
+                               javax.swing.JMenu pim = 
app.getPluginManager().getPluginMenu();
+                               if (pim != null) {
+                                       add(pim);
+                               } // H-P Ulven 2008-04-17
+                       }
+               }
+               
+               // "Help"
+               helpMenu = new HelpMenu(app);
+               add(helpMenu);
+       }
+ 
+       /**
+        * Update the menubar.
+        */
+       public void updateMenubar() {
+               Application.debug("update menu");
+               fileMenu.update();
+               editMenu.update();
+               viewMenu.update();
+               optionsMenu.update();
+               toolsMenu.update();
+               if (perspectivesMenu != null)
+                       perspectivesMenu.update();
+               
+               if(!app.isApplet())
+                       windowMenu.update();
+               
+               helpMenu.update();
+               
+               updateSelection();
+       }
+ 
+       /**
+        * Update the selection.
+        */
+       public void updateSelection() {
+               ((EditMenu)editMenu).updateSelection();
+       }
+       
+       /**
+        * Update the file menu without being forced to updated the other menus 
as well.
+        */
+       public void updateMenuFile() {
+               if(fileMenu!=null)fileMenu.update();
+       }
+       
+       /**
+        * Update the window menu without having to update the other menus as 
well.
+        */
+       public void updateMenuWindow() {
+               windowMenu.update();
+       }
+       
+       /**
+        * Show the print preview dialog.
+        * 
+        * @param app
+        */
+       public static void showPrintPreview(final Application app) {
+               try {
+                       Thread runner = new Thread() {
+                               public void run() {
+ 
+                                       try {
+                                               app.setWaitCursor();
+                                               // use reflection for
+                                               // new 
geogebra.export.PrintPreview(app,
+                                               // app.getEuclidianView(), 
PageFormat.LANDSCAPE);
+                                               // Class classObject =
+                                               // 
Class.forName("geogebra.export.PrintPreview");
+                                               // Object[] args = new Object[] 
{ app ,
+                                               // app.getEuclidianView(), new
+                                               // 
Integer(PageFormat.LANDSCAPE)};
+                                               // Class [] types = new Class[] 
{Application.class,
+                                               // Printable.class, int.class};
+                                               // Constructor constructor =
+                                               // 
classObject.getDeclaredConstructor(types);
+                                               // 
constructor.newInstance(args);
+ /* old code
+                                               boolean printCAS=false;
+                                               if 
(app.getGuiManager().hasCasView()){  
+                                                       DockManager 
dm=app.getGuiManager().getLayout().getDockManager();
+                                                       //if CAS-view has 
Focus, print CAS
+                                                       if 
(dm.getFocusedPanel()==dm.getPanel(Application.VIEW_CAS)){
+                                                               new 
geogebra.export.PrintPreview(app, app.getGuiManager().getCasView(), 
PageFormat.LANDSCAPE);
+                                                               printCAS=true;
+                                                       }
+                                               }                       
+                                               
+                                               if (!printCAS)
+                                                       new 
geogebra.export.PrintPreview(app, app
+                                                               
.getEuclidianView(), PageFormat.LANDSCAPE);
+                                               
+                                               
+       */                                      
+                                               
+                                               DockManager 
dm=app.getGuiManager().getLayout().getDockManager();
+                                               
+                                               if 
(dm.getFocusedPanel()==dm.getPanel(Application.VIEW_CAS))
+                                                       new 
geogebra.export.PrintPreview(app, app.getGuiManager().getCasView(), 
PageFormat.LANDSCAPE);
+                                               else if 
(dm.getFocusedPanel()==dm.getPanel(Application.VIEW_CONSTRUCTION_PROTOCOL))
+                                                       new 
geogebra.export.PrintPreview(app, 
app.getGuiManager().getConstructionProtocolView(), PageFormat.LANDSCAPE);
+                                               else if 
(dm.getFocusedPanel()==dm.getPanel(Application.VIEW_SPREADSHEET))
+                                                       new 
geogebra.export.PrintPreview(app, app.getGuiManager().getSpreadsheetView(), 
PageFormat.LANDSCAPE);
+                                               else if 
(dm.getFocusedPanel()==dm.getPanel(Application.VIEW_EUCLIDIAN2))
+                                                       new 
geogebra.export.PrintPreview(app, app.getEuclidianView2(), 
PageFormat.LANDSCAPE);
+                                               else if 
(dm.getFocusedPanel()==dm.getPanel(Application.VIEW_ALGEBRA))
+                                                       new 
geogebra.export.PrintPreview(app, app.getGuiManager().getAlgebraView(), 
PageFormat.LANDSCAPE);
+                                               else //graphics view focused
+                                                       new 
geogebra.export.PrintPreview(app, app.getEuclidianView(), PageFormat.LANDSCAPE);
+                                                                               
+                                               
+                                       } catch (Exception e) {
+                                               Application.debug("Print 
preview not available");
+                                       } finally{
+                                               app.setDefaultCursor();         
                                
+                                       }
+ 
+                               }
+                       };
+                       runner.start();
+               } catch (java.lang.NoClassDefFoundError ee) {
+                       app.showErrorDialog(app.getError("ExportJarMissing"));
+                       ee.printStackTrace();
+               }
+       }
+ 
+       /**
+        * Show the "About" dialog.
+        * 
+        * @param app
+        */
+       public static void showAboutDialog(final Application app) {
+               final StringBuilder vsb = new StringBuilder();
+               vsb.append(app.getPlain("ApplicationName"));
+               vsb.append(" ");
+               vsb.append(GeoGebra.VERSION_STRING);
+               switch (Kernel.DEFAULT_CAS) {
+               case Application.CAS_MAXIMA:
+                       vsb.append('m');
+                       break;
+                       // default: do nothing
+               }
+               if (app.getApplet() != null) vsb.append(" Applet");
+               else if (Application.isWebstartDebug()) vsb.append(" Debug");
+               else if (Application.isWebstart()) vsb.append(" Webstart");
+               
+               StringBuilder sb = new StringBuilder();
+               sb.append("<html><b>");
+               sb.append(vsb);
 -              sb.append("</b>  (");
++              sb.append("</b> <i>Debian package ");
++              sb.append(GeoGebra.DEBIAN_VERSION_STRING);
++              sb.append("</i>  (");
+               sb.append("Java "); 
+               sb.append(System.getProperty("java.version")); 
+               sb.append(", ");
+               sb.append(app.getHeapSize()/1024/1024);
+               sb.append("MB, ");
+               sb.append(Application.getCASVersionString());
+               sb.append(")<br>");     
+               sb.append(GeoGebra.BUILD_DATE);
+ 
+               // license
+               String text = app.loadTextFile(Application.LICENSE_FILE);
+               // We may want to modify the window size when the license file 
changes:
+               JTextArea textArea = new JTextArea(24, 72); // window size fine 
tuning (rows, cols)
+               JScrollPane scrollPane = new JScrollPane(textArea,
+                               JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
+                               JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+               textArea.setEditable(false);
+               // not sure if Monospaced is installed everywhere:
+               textArea.setFont(new Font("Monospaced",Font.PLAIN,12));
+               textArea.setText(text);
+               textArea.setCaretPosition(0);
+ 
+               JPanel systemInfoPanel = new JPanel(new BorderLayout(5, 5));
+               systemInfoPanel.add(new JLabel(sb.toString()), 
BorderLayout.CENTER);
+               
+               // copy system information to clipboard
+               systemInfoPanel.add(new JButton(new 
AbstractAction(app.getPlain("SystemInformation")) {
+                       public void actionPerformed(ActionEvent arg0) {
+                               StringBuilder systemInfo = new StringBuilder();
+                               systemInfo.append("[code]");
+                               systemInfo.append(vsb);
+                               systemInfo.append(" (");
+                               systemInfo.append(GeoGebra.BUILD_DATE);
+                               systemInfo.append(")\nJava: ");
+                               
systemInfo.append(System.getProperty("java.version"));
+                               systemInfo.append(")\nCodebase: ");
+                               systemInfo.append(Application.getCodeBase());
+                               systemInfo.append("\nOS: ");
+                               
systemInfo.append(System.getProperty("os.name"));
+                               systemInfo.append("\nArchitecture: ");
+                               
systemInfo.append(System.getProperty("os.arch")); // tells us 32 or 64 bit 
(Java)
+                               systemInfo.append("\nHeap: ");
+                               systemInfo.append(app.getHeapSize()/1024/1024);
+                               systemInfo.append("MB\nCAS: ");
+                               
systemInfo.append(Application.getCASVersionString());
+                               systemInfo.append("\n\n");
+                               
+                               
+                               // copy log file to systemInfo
+                               if (app.logFile != null) {
+                                   String NL = 
System.getProperty("line.separator");
+                                   Scanner scanner = null;
+                                   try {
+                                         scanner = new Scanner(new 
File(app.logFile.toString()));
+                                     while (scanner.hasNextLine()){
+                                         systemInfo.append(scanner.nextLine() 
+ NL);
+                                     }
+                                   } catch (FileNotFoundException e) {
+                                       
+                                   }
+                                   finally{
+                                     if (scanner != null) scanner.close();
+                                   }
+                               }
+                               
+                               // append ggb file (except images)
+                               systemInfo.append(app.getXML());
+                               systemInfo.append("\n\n");
+                               systemInfo.append(app.getMacroXML());
+                               systemInfo.append("\n\nLibraryJavaScript:\n");
+                               app.getKernel().getLibraryJavaScript();
+                               
+                               systemInfo.append("\n\nPreferences:\n");
+                               
systemInfo.append(GeoGebraPreferences.getPref().getXMLPreferences());
+                               systemInfo.append("[/code]");
+                               
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(
+                                       new 
StringSelection(systemInfo.toString()), null
+                               );
+                               
+                               
app.showMessage(app.getPlain("SystemInformationMessage"));
+                       }
+               }), BorderLayout.EAST);
+               
+               JPanel panel = new JPanel(new BorderLayout(5, 5));
+               panel.add(systemInfoPanel, BorderLayout.NORTH);
+               panel.add(scrollPane, BorderLayout.SOUTH);
+ 
+               JOptionPane infoPane = new JOptionPane(panel,
+                               JOptionPane.PLAIN_MESSAGE, 
JOptionPane.DEFAULT_OPTION);
+               
+               final JDialog dialog = 
infoPane.createDialog(app.getMainComponent(),
+                               app.getMenu("About") + " / " + 
app.getMenu("License"));
+ 
+               dialog.setVisible(true);
+       }
+ }

-- 
GeoGebra: Dynamic mathematics software for education

_______________________________________________
pkg-java-commits mailing list
pkg-java-comm...@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-java-commits

Reply via email to