Merge branch 'Jalview-BH/JAL-3026' into
[jalview.git] / src / jalview / gui / UserDefinedColours.java
index af2a6f6..17b2df7 100755 (executable)
@@ -32,6 +32,7 @@ import jalview.schemes.UserColourScheme;
 import jalview.util.ColorUtils;
 import jalview.util.Format;
 import jalview.util.MessageManager;
+import jalview.util.dialogrunner.RunResponse;
 import jalview.xml.binding.jalview.JalviewUserColours;
 import jalview.xml.binding.jalview.JalviewUserColours.Colour;
 import jalview.xml.binding.jalview.ObjectFactory;
@@ -90,7 +91,7 @@ public class UserDefinedColours extends GUserDefinedColours
    * 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;
 
@@ -264,7 +265,7 @@ public class UserDefinedColours extends GUserDefinedColours
       button.setForeground(ColorUtils.brighterThan(newColour));
     }
 
-    changed = true;
+    changedButNotSaved = true;
   }
 
   /**
@@ -485,7 +486,7 @@ public class UserDefinedColours extends GUserDefinedColours
   {
     // BH 2018 no warning in JavaScript TODO
     
-    if (/** @j2sNative true || */ !changed)
+    if (/** @j2sNative true || */ !changedButNotSaved)
     {
       return;
     }
@@ -504,20 +505,20 @@ public class UserDefinedColours extends GUserDefinedColours
               question, title, JvOptionPane.DEFAULT_OPTION,
               JvOptionPane.PLAIN_MESSAGE, null, options, options[0]);
 
-      boolean saved = false;
       if (response == 0)
       {
         /*
-         * prompt to save changes to file
+         * prompt to save changes to file; if done,
+         * resets 'changed' flag to false
          */
-        saved = savebutton_actionPerformed();
+        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)
+      if (changedButNotSaved)
       {
         /*
          * clear scheme name and re-apply as an anonymous scheme
@@ -638,53 +639,51 @@ public class UserDefinedColours extends GUserDefinedColours
   {
     upperCaseButtons = new ArrayList<>();
     lowerCaseButtons = new ArrayList<>();
-    // TODO: JAL-3048 requires Castor dependency for Jalview-JS
     JalviewFileChooser chooser = new JalviewFileChooser("jc",
             "Jalview User Colours");
     chooser.setFileView(new JalviewFileView());
     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.response(new RunResponse(JalviewFileChooser.APPROVE_OPTION) {
+               @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);
   }
 
   /**
@@ -728,12 +727,10 @@ public class UserDefinedColours extends GUserDefinedColours
    * <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)
@@ -743,7 +740,6 @@ public class UserDefinedColours extends GUserDefinedColours
                       .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))
@@ -757,10 +753,8 @@ public class UserDefinedColours extends GUserDefinedColours
               JvOptionPane.YES_NO_OPTION);
       if (reply != JvOptionPane.YES_OPTION)
       {
-        return false;
       }
     }
-    // TODO: JAL-3048 saveas, also requires Castor dependency for Jalview-JS
 
     JalviewFileChooser chooser = new JalviewFileChooser("jc",
             "Jalview User Colours");
@@ -770,31 +764,26 @@ public class UserDefinedColours extends GUserDefinedColours
     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;
   }
 
   /**