component config refactoring, localization fixes
[debian/openrocket] / src / net / sf / openrocket / gui / configdialog / ComponentConfigDialog.java
index e37d80ee93b4f9d612f6b0876dab8cae8c722bb7..5bb3448bc5f8d0f698bc5b2925d2c28ec107ea46 100644 (file)
@@ -1,22 +1,20 @@
 package net.sf.openrocket.gui.configdialog;
 
 
-import java.awt.Point;
 import java.awt.Window;
-import java.awt.event.ComponentAdapter;
-import java.awt.event.ComponentEvent;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 
 import javax.swing.JDialog;
 
 import net.sf.openrocket.document.OpenRocketDocument;
+import net.sf.openrocket.l10n.Translator;
 import net.sf.openrocket.rocketcomponent.ComponentChangeEvent;
 import net.sf.openrocket.rocketcomponent.ComponentChangeListener;
 import net.sf.openrocket.rocketcomponent.RocketComponent;
+import net.sf.openrocket.startup.Application;
 import net.sf.openrocket.util.BugException;
 import net.sf.openrocket.util.GUIUtil;
-import net.sf.openrocket.util.Prefs;
 import net.sf.openrocket.util.Reflection;
 
 /**
@@ -41,6 +39,7 @@ public class ComponentConfigDialog extends JDialog implements ComponentChangeLis
        private RocketComponentConfig configurator = null;
        
        private final Window parent;
+       private static final Translator trans = Application.getTranslator();
        
        private ComponentConfigDialog(Window parent, OpenRocketDocument document,
                        RocketComponent component) {
@@ -50,22 +49,7 @@ public class ComponentConfigDialog extends JDialog implements ComponentChangeLis
                setComponent(document, component);
                
                GUIUtil.setDisposableDialogOptions(this, null);
-               
-               // Set window position according to preferences, and set prefs when moving
-               Point position = Prefs.getWindowPosition(this.getClass());
-               if (position != null) {
-                       this.setLocationByPlatform(false);
-                       this.setLocation(position);
-               }
-               
-               this.addComponentListener(new ComponentAdapter() {
-                       @Override
-                       public void componentMoved(ComponentEvent e) {
-                               Prefs.setWindowPosition(ComponentConfigDialog.this.getClass(),
-                                               ComponentConfigDialog.this.getLocation());
-                       }
-               });
-               
+               GUIUtil.rememberWindowPosition(this);
        }
        
        
@@ -93,11 +77,9 @@ public class ComponentConfigDialog extends JDialog implements ComponentChangeLis
                this.setContentPane(configurator);
                configurator.updateFields();
                
-               setTitle(component.getComponentName() + " configuration");
+               //// configuration
+               setTitle(trans.get("ComponentCfgDlg.configuration1") + " " + component.getComponentName() + " " + trans.get("ComponentCfgDlg.configuration"));
                
-               //              Dimension pref = getPreferredSize();
-               //              Dimension real = getSize();
-               //              if (pref.width > real.width || pref.height > real.height)
                this.pack();
        }
        
@@ -109,7 +91,7 @@ public class ComponentConfigDialog extends JDialog implements ComponentChangeLis
                                findDialogContentsConstructor(component);
                if (c != null) {
                        try {
-                               return (RocketComponentConfig) c.newInstance(component);
+                               return c.newInstance(document, component);
                        } catch (InstantiationException e) {
                                throw new BugException("BUG in constructor reflection", e);
                        } catch (IllegalAccessException e) {
@@ -124,6 +106,34 @@ public class ComponentConfigDialog extends JDialog implements ComponentChangeLis
                throw new BugException("Unable to find any configurator for " + component);
        }
        
+       
+       private void closeDialog() {
+               this.setVisible(false);
+               this.dispose();
+               this.configurator.invalidateModels();
+       }
+       
+       
+       @Override
+       public void componentChanged(ComponentChangeEvent e) {
+               if (e.isTreeChange() || e.isUndoChange()) {
+                       
+                       // Hide dialog in case of tree or undo change
+                       dialog.closeDialog();
+                       
+               } else {
+                       /*
+                        * TODO: HIGH:  The line below has caused a NullPointerException (without null check)
+                        * How is this possible?  The null check was added to avoid this, but the
+                        * root cause should be analyzed.
+                        * [Openrocket-bugs] 2009-12-12 19:23:22 Automatic bug report for OpenRocket 0.9.5
+                        */
+                       if (configurator != null)
+                               configurator.updateFields();
+               }
+       }
+       
+       
        /**
         * Finds the Constructor of the given component's config dialog panel in 
         * CONFIGDIALOGPACKAGE.
@@ -149,7 +159,7 @@ public class ComponentConfigDialog extends JDialog implements ComponentChangeLis
                        try {
                                configclass = Class.forName(configclassname);
                                c = (Constructor<? extends RocketComponentConfig>)
-                                               configclass.getConstructor(RocketComponent.class);
+                                               configclass.getConstructor(OpenRocketDocument.class, RocketComponent.class);
                                return c;
                        } catch (Exception ignore) {
                        }
@@ -179,7 +189,8 @@ public class ComponentConfigDialog extends JDialog implements ComponentChangeLis
                dialog = new ComponentConfigDialog(parent, document, component);
                dialog.setVisible(true);
                
-               document.addUndoPosition("Modify " + component.getComponentName());
+               ////Modify
+               document.addUndoPosition(trans.get("ComponentCfgDlg.Modify") + " " + component.getComponentName());
        }
        
        
@@ -192,31 +203,11 @@ public class ComponentConfigDialog extends JDialog implements ComponentChangeLis
         * Hides the configuration dialog.  May be used even if not currently visible.
         */
        public static void hideDialog() {
-               if (dialog != null)
-                       dialog.setVisible(false);
-       }
-       
-       
-       /**
-        * Add an undo position for the current document.  This is intended for use only
-        * by the currently open dialog.
-        * 
-        * @param description  Description of the undoable action
-        */
-       /*package*/static void addUndoPosition(String description) {
-               if (dialog == null) {
-                       throw new IllegalStateException("Dialog not open, report bug!");
+               if (dialog != null) {
+                       dialog.closeDialog();
                }
-               dialog.document.addUndoPosition(description);
        }
        
-       /*package*/
-       static String getUndoDescription() {
-               if (dialog == null) {
-                       throw new IllegalStateException("Dialog not open, report bug!");
-               }
-               return dialog.document.getUndoDescription();
-       }
        
        /**
         * Returns whether the singleton configuration dialog is currently visible or not.
@@ -225,23 +216,4 @@ public class ComponentConfigDialog extends JDialog implements ComponentChangeLis
                return (dialog != null) && (dialog.isVisible());
        }
        
-       
-       public void componentChanged(ComponentChangeEvent e) {
-               if (e.isTreeChange() || e.isUndoChange()) {
-                       
-                       // Hide dialog in case of tree or undo change
-                       dialog.setVisible(false);
-                       
-               } else {
-                       /*
-                        * TODO: HIGH:  The line below has caused a NullPointerException (without null check)
-                        * How is this possible?  The null check was added to avoid this, but the
-                        * root cause should be analyzed.
-                        * [Openrocket-bugs] 2009-12-12 19:23:22 Automatic bug report for OpenRocket 0.9.5
-                        */
-                       if (configurator != null)
-                               configurator.updateFields();
-               }
-       }
-       
 }