isJS cleanup
[jalview.git] / src / jalview / gui / UserDefinedColours.java
index f75a0a3..8720341 100755 (executable)
@@ -24,8 +24,6 @@ import jalview.bin.Cache;
 import jalview.io.JalviewFileChooser;
 import jalview.io.JalviewFileView;
 import jalview.jbgui.GUserDefinedColours;
-import jalview.schemabinding.version2.Colour;
-import jalview.schemabinding.version2.JalviewUserColours;
 import jalview.schemes.ColourSchemeI;
 import jalview.schemes.ColourSchemeLoader;
 import jalview.schemes.ColourSchemes;
@@ -34,6 +32,10 @@ import jalview.schemes.UserColourScheme;
 import jalview.util.ColorUtils;
 import jalview.util.Format;
 import jalview.util.MessageManager;
+import jalview.util.Platform;
+import jalview.xml.binding.jalview.JalviewUserColours;
+import jalview.xml.binding.jalview.JalviewUserColours.Colour;
+import jalview.xml.binding.jalview.ObjectFactory;
 
 import java.awt.Color;
 import java.awt.Font;
@@ -51,6 +53,8 @@ import javax.swing.JButton;
 import javax.swing.JInternalFrame;
 import javax.swing.event.ChangeEvent;
 import javax.swing.event.ChangeListener;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.Marshaller;
 
 /**
  * This panel allows the user to assign colours to Amino Acid residue codes, and
@@ -59,11 +63,11 @@ import javax.swing.event.ChangeListener;
  * @author Andrew Waterhouse
  * @author Mungo Carstairs
  */
-public class UserDefinedColours extends GUserDefinedColours implements
-        ChangeListener
+public class UserDefinedColours extends GUserDefinedColours
+        implements ChangeListener
 {
-  private static final Font VERDANA_BOLD_10 = new Font("Verdana",
-          Font.BOLD, 10);
+  private static final Font VERDANA_BOLD_10 = new Font("Verdana", Font.BOLD,
+          10);
 
   public static final String USER_DEFINED_COLOURS = "USER_DEFINED_COLOURS";
 
@@ -87,7 +91,7 @@ public class UserDefinedColours extends GUserDefinedColours implements
    * flag is true if the colour scheme has been changed since the
    * dialog was opened, or the changes last saved to file
    */
-  boolean changed;
+  boolean changedButNotSaved;
 
   JInternalFrame frame;
 
@@ -113,7 +117,8 @@ public class UserDefinedColours extends GUserDefinedColours implements
     if (oldColourScheme instanceof UserColourScheme)
     {
       schemeName.setText(oldColourScheme.getSchemeName());
-      if (((UserColourScheme) oldColourScheme).getLowerCaseColours() != null)
+      if (((UserColourScheme) oldColourScheme)
+              .getLowerCaseColours() != null)
       {
         caseSensitive.setSelected(true);
         lcaseColour.setEnabled(true);
@@ -135,7 +140,7 @@ public class UserDefinedColours extends GUserDefinedColours implements
   UserDefinedColours()
   {
     super();
-    selectedButtons = new ArrayList<JButton>();
+    selectedButtons = new ArrayList<>();
   }
 
   void showFrame()
@@ -162,7 +167,7 @@ public class UserDefinedColours extends GUserDefinedColours implements
 
     if (upperCaseButtons == null)
     {
-      upperCaseButtons = new ArrayList<JButton>();
+      upperCaseButtons = new ArrayList<>();
     }
 
     for (int i = 0; i < 20; i++)
@@ -193,7 +198,7 @@ public class UserDefinedColours extends GUserDefinedColours implements
 
       if (lowerCaseButtons == null)
       {
-        lowerCaseButtons = new ArrayList<JButton>();
+        lowerCaseButtons = new ArrayList<>();
       }
 
       for (int i = 0; i < 20; i++)
@@ -249,7 +254,8 @@ public class UserDefinedColours extends GUserDefinedColours implements
       {
         button = lowerCaseButtons.get(i);
         button.setBackground(newColour);
-        button.setForeground(ColorUtils.brighterThan(button.getBackground()));
+        button.setForeground(
+                ColorUtils.brighterThan(button.getBackground()));
       }
     }
     for (int i = 0; i < selectedButtons.size(); i++)
@@ -259,7 +265,7 @@ public class UserDefinedColours extends GUserDefinedColours implements
       button.setForeground(ColorUtils.brighterThan(newColour));
     }
 
-    changed = true;
+    changedButNotSaved = true;
   }
 
   /**
@@ -321,8 +327,8 @@ public class UserDefinedColours extends GUserDefinedColours implements
         JButton button = (JButton) buttonPanel.getComponent(b);
         if (!selectedButtons.contains(button))
         {
-          button.setForeground(ColorUtils.brighterThan(button
-                  .getBackground()));
+          button.setForeground(
+                  ColorUtils.brighterThan(button.getBackground()));
           selectedButtons.add(button);
         }
       }
@@ -335,7 +341,8 @@ public class UserDefinedColours extends GUserDefinedColours implements
         button.setForeground(ColorUtils.darkerThan(button.getBackground()));
       }
       selectedButtons.clear();
-      pressed.setForeground(ColorUtils.brighterThan(pressed.getBackground()));
+      pressed.setForeground(
+              ColorUtils.brighterThan(pressed.getBackground()));
       selectedButtons.add(pressed);
 
     }
@@ -343,13 +350,14 @@ public class UserDefinedColours extends GUserDefinedColours implements
     {
       if (selectedButtons.contains(pressed))
       {
-        pressed.setForeground(ColorUtils.darkerThan(pressed.getBackground()));
+        pressed.setForeground(
+                ColorUtils.darkerThan(pressed.getBackground()));
         selectedButtons.remove(pressed);
       }
       else
       {
-        pressed.setForeground(ColorUtils.brighterThan(pressed
-                .getBackground()));
+        pressed.setForeground(
+                ColorUtils.brighterThan(pressed.getBackground()));
         selectedButtons.add(pressed);
       }
     }
@@ -440,8 +448,9 @@ public class UserDefinedColours extends GUserDefinedColours implements
   {
     if (isNoSelectionMade())
     {
-      JvOptionPane.showMessageDialog(Desktop.desktop, MessageManager
-              .getString("label.no_colour_selection_in_scheme"),
+      JvOptionPane.showMessageDialog(Desktop.desktop,
+              MessageManager
+                      .getString("label.no_colour_selection_in_scheme"),
               MessageManager.getString("label.no_colour_selection_warn"),
               JvOptionPane.WARNING_MESSAGE);
     }
@@ -475,45 +484,50 @@ public class UserDefinedColours extends GUserDefinedColours implements
    */
   protected void warnIfUnsavedChanges()
   {
-    if (!changed)
-    {
-      return;
-    }
+    // BH 2018 no warning in JavaScript TODO
 
-    String name = schemeName.getText().trim();
-    if (oldColourScheme != null && !"".equals(name)
-            && name.equals(oldColourScheme.getSchemeName()))
-    {
-      String message = MessageManager.formatMessage("label.scheme_changed",
-              name);
-      String title = MessageManager.getString("label.save_changes");
-      String[] options = new String[] { title,
-          MessageManager.getString("label.dont_save_changes"), };
-      final String question = JvSwingUtils.wrapTooltip(true, message);
-      int response = JvOptionPane.showOptionDialog(Desktop.desktop,
-              question, title, JvOptionPane.DEFAULT_OPTION,
-              JvOptionPane.PLAIN_MESSAGE, null, options, options[0]);
-
-      boolean saved = false;
-      if (response == 0)
+    if (!Platform.isJS() && changedButNotSaved)
+    /**
+     * Java only
+     * 
+     * @j2sNative
+     */
+    {
+      String name = schemeName.getText().trim();
+      if (oldColourScheme != null && !"".equals(name)
+              && name.equals(oldColourScheme.getSchemeName()))
       {
-        /*
-         * prompt to save changes to file
-         */
-        saved = savebutton_actionPerformed();
-      }
+        String message = MessageManager
+                .formatMessage("label.scheme_changed", name);
+        String title = MessageManager.getString("label.save_changes");
+        String[] options = new String[] { title,
+            MessageManager.getString("label.dont_save_changes"), };
+        final String question = JvSwingUtils.wrapTooltip(true, message);
+        int response = JvOptionPane.showOptionDialog(Desktop.desktop,
+                question, title, JvOptionPane.DEFAULT_OPTION,
+                JvOptionPane.PLAIN_MESSAGE, null, options, options[0]);
+
+        if (response == 0)
+        {
+          /*
+           * prompt to save changes to file; if done,
+           * resets 'changed' flag to false
+           */
+          savebutton_actionPerformed();
+        }
 
-      /*
-       * if user chooses not to save (either in this dialog or in the
-       * save as dialogs), treat this as a new user defined colour scheme
-       */
-      if (!saved)
-      {
         /*
-         * clear scheme name and re-apply as an anonymous scheme
+         * if user chooses not to save (either in this dialog or in the
+         * save as dialogs), treat this as a new user defined colour scheme
          */
-        schemeName.setText("");
-        applyButton_actionPerformed();
+        if (changedButNotSaved)
+        {
+          /*
+           * clear scheme name and re-apply as an anonymous scheme
+           */
+          schemeName.setText("");
+          applyButton_actionPerformed();
+        }
       }
     }
   }
@@ -543,8 +557,9 @@ public class UserDefinedColours extends GUserDefinedColours implements
   {
     if (isNoSelectionMade())
     {
-      JvOptionPane.showMessageDialog(Desktop.desktop, MessageManager
-              .getString("label.no_colour_selection_in_scheme"),
+      JvOptionPane.showMessageDialog(Desktop.desktop,
+              MessageManager
+                      .getString("label.no_colour_selection_in_scheme"),
               MessageManager.getString("label.no_colour_selection_warn"),
               JvOptionPane.WARNING_MESSAGE);
 
@@ -625,55 +640,56 @@ public class UserDefinedColours extends GUserDefinedColours implements
   @Override
   protected void loadbutton_actionPerformed()
   {
-    upperCaseButtons = new ArrayList<JButton>();
-    lowerCaseButtons = new ArrayList<JButton>();
-
+    upperCaseButtons = new ArrayList<>();
+    lowerCaseButtons = new ArrayList<>();
     JalviewFileChooser chooser = new JalviewFileChooser("jc",
             "Jalview User Colours");
     chooser.setFileView(new JalviewFileView());
-    chooser.setDialogTitle(MessageManager
-            .getString("label.load_colour_scheme"));
+    chooser.setDialogTitle(
+            MessageManager.getString("label.load_colour_scheme"));
     chooser.setToolTipText(MessageManager.getString("action.load"));
-
-    int value = chooser.showOpenDialog(this);
-
-    if (value != JalviewFileChooser.APPROVE_OPTION)
-    {
-      return;
-    }
-    File choice = chooser.getSelectedFile();
-    Cache.setProperty(LAST_DIRECTORY, choice.getParent());
-
-    UserColourScheme ucs = ColourSchemeLoader.loadColourScheme(choice
-            .getAbsolutePath());
-    Color[] colors = ucs.getColours();
-    schemeName.setText(ucs.getSchemeName());
-
-    if (ucs.getLowerCaseColours() != null)
-    {
-      caseSensitive.setSelected(true);
-      lcaseColour.setEnabled(true);
-      resetButtonPanel(true);
-      for (int i = 0; i < lowerCaseButtons.size(); i++)
-      {
-        JButton button = lowerCaseButtons.get(i);
-        button.setBackground(ucs.getLowerCaseColours()[i]);
-      }
-    }
-    else
-    {
-      caseSensitive.setSelected(false);
-      lcaseColour.setEnabled(false);
-      resetButtonPanel(false);
-    }
-
-    for (int i = 0; i < upperCaseButtons.size(); i++)
-    {
-      JButton button = upperCaseButtons.get(i);
-      button.setBackground(colors[i]);
-    }
-
-    addNewColourScheme(choice.getPath());
+    chooser.setResponseHandler(0, new Runnable() 
+    {
+         @Override
+         public void run() 
+         {
+           File choice = chooser.getSelectedFile();
+           Cache.setProperty(LAST_DIRECTORY, choice.getParent());
+
+           UserColourScheme ucs = ColourSchemeLoader
+                   .loadColourScheme(choice.getAbsolutePath());
+           Color[] colors = ucs.getColours();
+           schemeName.setText(ucs.getSchemeName());
+
+           if (ucs.getLowerCaseColours() != null)
+               {
+                  caseSensitive.setSelected(true);
+                  lcaseColour.setEnabled(true);
+                  resetButtonPanel(true);
+                  for (int i = 0; i < lowerCaseButtons.size(); i++)
+                  {
+                    JButton button = lowerCaseButtons.get(i);
+                    button.setBackground(ucs.getLowerCaseColours()[i]);
+                  }
+                }
+                else
+                {
+                  caseSensitive.setSelected(false);
+                  lcaseColour.setEnabled(false);
+                  resetButtonPanel(false);
+                }
+
+                for (int i = 0; i < upperCaseButtons.size(); i++)
+                {
+                  JButton button = upperCaseButtons.get(i);
+                  button.setBackground(colors[i]);
+                }
+
+                addNewColourScheme(choice.getPath());
+          }
+       });
+    
+    chooser.showOpenDialog(this);
   }
 
   /**
@@ -712,73 +728,68 @@ public class UserDefinedColours extends GUserDefinedColours implements
    * name if overwriting</li>
    * <li>Do the standard file chooser thing to write with extension .jc</li>
    * <li>If saving changes (possibly not yet applied) to the currently selected
-   * colour scheme, then apply the changes, as it is too late to back out now</li>
+   * colour scheme, then apply the changes, as it is too late to back out
+   * now</li>
    * <li>Don't apply the changes if the currently selected scheme is different,
    * to allow a new scheme to be configured and saved but not applied</li>
    * </ul>
-   * Returns true if the scheme is saved to file, false if it is not
-   * 
-   * @return
+   * If the scheme is saved to file, the 'changed' flag field is reset to false.
    */
   @Override
-  protected boolean savebutton_actionPerformed()
+  protected void savebutton_actionPerformed()
   {
     String name = schemeName.getText().trim();
     if (name.length() < 1)
     {
-      JvOptionPane.showInternalMessageDialog(Desktop.desktop, MessageManager
-              .getString("label.user_colour_scheme_must_have_name"),
+      JvOptionPane.showInternalMessageDialog(Desktop.desktop,
+              MessageManager
+                      .getString("label.user_colour_scheme_must_have_name"),
               MessageManager.getString("label.no_name_colour_scheme"),
               JvOptionPane.WARNING_MESSAGE);
-      return false;
     }
 
     if (ColourSchemes.getInstance().nameExists(name))
     {
-      int reply = JvOptionPane.showInternalConfirmDialog(Desktop.desktop,
+      // BH 2018 SwingJS bypasses this question with YES_OPTION
+      int reply = /** @j2sNative  0 &&  */ JvOptionPane.showInternalConfirmDialog(Desktop.desktop,
               MessageManager.formatMessage(
-                      "label.colour_scheme_exists_overwrite", new Object[] {
-                          name, name }),
+                      "label.colour_scheme_exists_overwrite", new Object[]
+                      { name, name }),
               MessageManager.getString("label.duplicate_scheme_name"),
               JvOptionPane.YES_NO_OPTION);
       if (reply != JvOptionPane.YES_OPTION)
       {
-        return false;
       }
     }
+
     JalviewFileChooser chooser = new JalviewFileChooser("jc",
             "Jalview User Colours");
 
     JalviewFileView fileView = new JalviewFileView();
     chooser.setFileView(fileView);
-    chooser.setDialogTitle(MessageManager
-            .getString("label.save_colour_scheme"));
+    chooser.setDialogTitle(
+            MessageManager.getString("label.save_colour_scheme"));
     chooser.setToolTipText(MessageManager.getString("action.save"));
-
-    int value = chooser.showSaveDialog(this);
-
-    if (value != JalviewFileChooser.APPROVE_OPTION)
-    {
-      return false;
-    }
-
-    File file = chooser.getSelectedFile();
-    UserColourScheme updatedScheme = addNewColourScheme(file.getPath());
-    saveToFile(file);
-    changed = false;
-
-    /*
-     * changes saved - apply to alignment if we are changing 
-     * the currently selected colour scheme; also make the updated
-     * colours the 'backout' scheme on Cancel
-     */
-    if (oldColourScheme != null
-            && name.equals(oldColourScheme.getSchemeName()))
-    {
-      oldColourScheme = updatedScheme;
-      applyButton_actionPerformed();
+    int option = chooser.showSaveDialog(this);
+    if (option == JalviewFileChooser.APPROVE_OPTION) 
+    {
+         File file = chooser.getSelectedFile();
+         UserColourScheme updatedScheme = addNewColourScheme(file.getPath());
+         saveToFile(file);
+         changedButNotSaved = false;
+
+         /*
+          * changes saved - apply to alignment if we are changing 
+          * the currently selected colour scheme; also make the updated
+          * colours the 'backout' scheme on Cancel
+          */
+         if (oldColourScheme != null
+                 && name.equals(oldColourScheme.getSchemeName()))
+         {
+           oldColourScheme = updatedScheme;
+           applyButton_actionPerformed();
+         }
     }
-    return true;
   }
 
   /**
@@ -796,8 +807,8 @@ public class UserDefinedColours extends GUserDefinedColours implements
      * update the delimited list of user defined colour files in
      * Jalview property USER_DEFINED_COLOURS
      */
-    String defaultColours = Cache
-            .getDefault(USER_DEFINED_COLOURS, filePath);
+    String defaultColours = Cache.getDefault(USER_DEFINED_COLOURS,
+            filePath);
     if (defaultColours.indexOf(filePath) == -1)
     {
       if (defaultColours.length() > 0)
@@ -850,9 +861,14 @@ public class UserDefinedColours extends GUserDefinedColours implements
         Colour col = new Colour();
         col.setName(button.getText());
         col.setRGB(Format.getHexString(button.getBackground()));
-        ucs.addColour(col);
+        ucs.getColour().add(col);
       }
-      ucs.marshal(out);
+      JAXBContext jaxbContext = JAXBContext
+              .newInstance(JalviewUserColours.class);
+      Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
+      jaxbMarshaller.marshal(
+              new ObjectFactory().createJalviewUserColours(ucs), out);
+      // ucs.marshal(out);
       out.close();
     } catch (Exception ex)
     {
@@ -868,7 +884,7 @@ public class UserDefinedColours extends GUserDefinedColours implements
   protected void cancelButton_actionPerformed()
   {
     ap.alignFrame.changeColour(oldColourScheme);
-    ap.paintAlignment(true);
+    ap.paintAlignment(true, true);
 
     try
     {