X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FUserDefinedColours.java;h=a368e74cdb9eb9e18d909907b3ebd3536de9a76d;hb=bffd5239316cc37765480e532ed8f153d512732b;hp=cfc464ed066e661f98c3b42d2558831686b5948e;hpb=3f719e5608ad146997cfa48b5f7005137fb2d1a6;p=jalview.git diff --git a/src/jalview/gui/UserDefinedColours.java b/src/jalview/gui/UserDefinedColours.java index cfc464e..a368e74 100755 --- a/src/jalview/gui/UserDefinedColours.java +++ b/src/jalview/gui/UserDefinedColours.java @@ -43,16 +43,11 @@ import java.awt.event.ActionEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.File; -import java.io.FileInputStream; import java.io.FileOutputStream; -import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; -import java.util.SortedMap; -import java.util.StringTokenizer; -import java.util.TreeMap; import javax.swing.JButton; import javax.swing.JInternalFrame; @@ -71,7 +66,7 @@ public class UserDefinedColours extends GUserDefinedColours implements { private static final Font VERDANA_BOLD_10 = new Font("Verdana", Font.BOLD, 10); - private static final String USER_DEFINED_COLOURS = "USER_DEFINED_COLOURS"; + public static final String USER_DEFINED_COLOURS = "USER_DEFINED_COLOURS"; private static final String LAST_DIRECTORY = "LAST_DIRECTORY"; @@ -81,8 +76,6 @@ public class UserDefinedColours extends GUserDefinedColours implements private static final int MY_FRAME_WIDTH_CASE_SENSITIVE = 970; - static SortedMap userColourSchemes; - AlignmentPanel ap; SequenceGroup seqGroup; @@ -116,7 +109,7 @@ public class UserDefinedColours extends GUserDefinedColours implements if (seqGroup != null) { - oldColourScheme = seqGroup.cs; + oldColourScheme = seqGroup.getColourScheme(); } else { @@ -125,7 +118,7 @@ public class UserDefinedColours extends GUserDefinedColours implements if (oldColourScheme instanceof UserColourScheme) { - schemeName.setText(((UserColourScheme) oldColourScheme).getSchemeName()); + schemeName.setText(oldColourScheme.getSchemeName()); if (((UserColourScheme) oldColourScheme).getLowerCaseColours() != null) { caseSensitive.setSelected(true); @@ -181,7 +174,15 @@ public class UserDefinedColours extends GUserDefinedColours implements } } - void resetButtonPanel(boolean caseSensitive) + /** + * Rebuilds the panel with coloured buttons for residues. If not case + * sensitive colours, show 3-letter amino acid code as button text. If case + * sensitive, just show the single letter code, in order to make space for the + * additional buttons. + * + * @param isCaseSensitive + */ + void resetButtonPanel(boolean isCaseSensitive) { buttonPanel.removeAll(); @@ -190,23 +191,13 @@ public class UserDefinedColours extends GUserDefinedColours implements upperCaseButtons = new ArrayList(); } - JButton button; - String label; for (int i = 0; i < 20; i++) { - if (caseSensitive) - { - label = ResidueProperties.aa[i]; - } - else - { - label = ResidueProperties.aa2Triplet.get(ResidueProperties.aa[i]) - .toString(); - } - - button = makeButton(label, ResidueProperties.aa[i], upperCaseButtons, - i); - + String label = isCaseSensitive ? ResidueProperties.aa[i] + : ResidueProperties.aa2Triplet.get(ResidueProperties.aa[i]) + .toString(); + JButton button = makeButton(label, ResidueProperties.aa[i], + upperCaseButtons, i); buttonPanel.add(button); } @@ -215,7 +206,7 @@ public class UserDefinedColours extends GUserDefinedColours implements buttonPanel.add(makeButton("X", "X", upperCaseButtons, 22)); buttonPanel.add(makeButton("Gap", "-", upperCaseButtons, 23)); - if (!caseSensitive) + if (!isCaseSensitive) { gridLayout.setRows(6); gridLayout.setColumns(4); @@ -235,14 +226,14 @@ public class UserDefinedColours extends GUserDefinedColours implements { int row = i / cols + 1; int index = (row * cols) + i; - button = makeButton(ResidueProperties.aa[i].toLowerCase(), + JButton button = makeButton(ResidueProperties.aa[i].toLowerCase(), ResidueProperties.aa[i].toLowerCase(), lowerCaseButtons, i); buttonPanel.add(button, index); } } - if (caseSensitive) + if (isCaseSensitive) { buttonPanel.add(makeButton("b", "b", lowerCaseButtons, 20)); buttonPanel.add(makeButton("z", "z", lowerCaseButtons, 21)); @@ -253,7 +244,7 @@ public class UserDefinedColours extends GUserDefinedColours implements // codes if (this.frame != null) { - int newWidth = caseSensitive ? MY_FRAME_WIDTH_CASE_SENSITIVE + int newWidth = isCaseSensitive ? MY_FRAME_WIDTH_CASE_SENSITIVE : MY_FRAME_WIDTH; this.frame.setSize(newWidth, this.frame.getHeight()); } @@ -437,15 +428,15 @@ public class UserDefinedColours extends GUserDefinedColours implements buttons.add(button); + /* + * make initial button colour that of the current colour scheme, + * if it is a simple per-residue colouring, else white + */ col = Color.white; - if (oldColourScheme != null) + if (oldColourScheme != null && oldColourScheme.isSimple()) { - try - { - col = oldColourScheme.findColour(residue.charAt(0), -1, null); - } catch (Exception ex) - { - } + col = oldColourScheme.findColour(residue.charAt(0), 0, null, null, + 0f); } } @@ -528,11 +519,10 @@ public class UserDefinedColours extends GUserDefinedColours implements } UserColourScheme ucs = getSchemeFromButtons(); - ucs.setName(schemeName.getText()); if (seqGroup != null) { - seqGroup.cs = ucs; + seqGroup.setColourScheme(ucs); ap.paintAlignment(true); } else if (ap != null) @@ -570,6 +560,7 @@ public class UserDefinedColours extends GUserDefinedColours implements } UserColourScheme ucs = new UserColourScheme(newColours); + ucs.setName(schemeName.getText()); if (caseSensitive.isSelected()) { @@ -595,10 +586,10 @@ public class UserDefinedColours extends GUserDefinedColours implements ucs.setLowerCaseColours(newColours); } - if (ap != null) - { - ucs.setThreshold(0, ap.av.isIgnoreGapsConsensus()); - } + // if (ap != null) + // { + // ucs.setThreshold(0, ap.av.isIgnoreGapsConsensus()); + // } return ucs; } @@ -631,7 +622,7 @@ public class UserDefinedColours extends GUserDefinedColours implements File choice = chooser.getSelectedFile(); Cache.setProperty(LAST_DIRECTORY, choice.getParent()); - UserColourScheme ucs = loadColours(choice.getAbsolutePath()); + UserColourScheme ucs = ColourSchemes.loadColourScheme(choice.getAbsolutePath()); Color[] colors = ucs.getColours(); schemeName.setText(ucs.getSchemeName()); @@ -663,9 +654,10 @@ public class UserDefinedColours extends GUserDefinedColours implements } /** - * DOCUMENT ME! + * Loads the user-defined colour scheme from the first file listed in property + * "USER_DEFINED_COLOURS". If this fails, returns an all-white colour scheme. * - * @return DOCUMENT ME! + * @return */ public static UserColourScheme loadDefaultColours() { @@ -678,18 +670,12 @@ public class UserDefinedColours extends GUserDefinedColours implements { colours = colours.substring(0, colours.indexOf("|")); } - - ret = loadColours(colours); + ret = ColourSchemes.loadColourScheme(colours); } if (ret == null) { - Color[] newColours = new Color[24]; - for (int i = 0; i < 24; i++) - { - newColours[i] = Color.white; - } - ret = new UserColourScheme(newColours); + ret = new UserColourScheme("white"); } return ret; @@ -698,125 +684,14 @@ public class UserDefinedColours extends GUserDefinedColours implements /** * DOCUMENT ME! * - * @param file - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - static UserColourScheme loadColours(String file) - { - UserColourScheme ucs = null; - Color[] newColours = null; - try - { - InputStreamReader in = new InputStreamReader( - new FileInputStream(file), "UTF-8"); - - jalview.schemabinding.version2.JalviewUserColours jucs = new jalview.schemabinding.version2.JalviewUserColours(); - - org.exolab.castor.xml.Unmarshaller unmar = new org.exolab.castor.xml.Unmarshaller( - jucs); - jucs = (jalview.schemabinding.version2.JalviewUserColours) unmar - .unmarshal(in); - - newColours = new Color[24]; - - Color[] lowerCase = null; - boolean caseSensitive = false; - - String name; - int index; - for (int i = 0; i < jucs.getColourCount(); i++) - { - name = jucs.getColour(i).getName(); - if (ResidueProperties.aa3Hash.containsKey(name)) - { - index = ResidueProperties.aa3Hash.get(name).intValue(); - } - else - { - index = ResidueProperties.aaIndex[name.charAt(0)]; - } - if (index == -1) - { - continue; - } - - if (name.toLowerCase().equals(name)) - { - if (lowerCase == null) - { - lowerCase = new Color[23]; - } - caseSensitive = true; - lowerCase[index] = new Color(Integer.parseInt(jucs.getColour(i) - .getRGB(), 16)); - } - else - { - newColours[index] = new Color(Integer.parseInt(jucs.getColour(i) - .getRGB(), 16)); - } - } - - if (newColours != null) - { - ucs = new UserColourScheme(newColours); - ucs.setName(jucs.getSchemeName()); - if (caseSensitive) - { - ucs.setLowerCaseColours(lowerCase); - } - } - - } catch (Exception ex) - { - // Could be Archive Jalview format - try - { - InputStreamReader in = new InputStreamReader(new FileInputStream( - file), "UTF-8"); - - jalview.binding.JalviewUserColours jucs = new jalview.binding.JalviewUserColours(); - - jucs = jucs.unmarshal(in); - - newColours = new Color[jucs.getColourCount()]; - - for (int i = 0; i < 24; i++) - { - newColours[i] = new Color(Integer.parseInt(jucs.getColour(i) - .getRGB(), 16)); - } - if (newColours != null) - { - ucs = new UserColourScheme(newColours); - ucs.setName(jucs.getSchemeName()); - } - } catch (Exception ex2) - { - ex2.printStackTrace(); - } - - if (newColours == null) - { - System.out.println("Error loading User ColourFile\n" + ex); - } - } - - return ucs; - } - - /** - * DOCUMENT ME! - * * @param e * DOCUMENT ME! */ @Override protected void savebutton_actionPerformed(ActionEvent e) { - if (schemeName.getText().trim().length() < 1) + String name = schemeName.getText().trim(); + if (name.length() < 1) { JvOptionPane.showInternalMessageDialog(Desktop.desktop, MessageManager .getString("label.user_colour_scheme_must_have_name"), @@ -825,27 +700,26 @@ public class UserDefinedColours extends GUserDefinedColours implements return; } - if (userColourSchemes != null - && userColourSchemes.containsKey(schemeName.getText())) + if (ColourSchemes.getInstance().nameExists(name)) { int reply = JvOptionPane.showInternalConfirmDialog(Desktop.desktop, MessageManager.formatMessage( "label.colour_scheme_exists_overwrite", new Object[] { - schemeName.getText(), schemeName.getText() }), + name, name }), MessageManager.getString("label.duplicate_scheme_name"), JvOptionPane.YES_NO_OPTION); if (reply != JvOptionPane.YES_OPTION) { return; } - - userColourSchemes.remove(schemeName.getText()); + ColourSchemes.getInstance().removeColourScheme(name); } JalviewFileChooser chooser = new JalviewFileChooser( Cache.getProperty(LAST_DIRECTORY), "jc", "Jalview User Colours"); - chooser.setFileView(new JalviewFileView()); + JalviewFileView fileView = new JalviewFileView(); + chooser.setFileView(fileView); chooser.setDialogTitle(MessageManager .getString("label.save_colour_scheme")); chooser.setToolTipText(MessageManager.getString("action.save")); @@ -854,9 +728,9 @@ public class UserDefinedColours extends GUserDefinedColours implements if (value == JalviewFileChooser.APPROVE_OPTION) { - String choice = chooser.getSelectedFile().getPath(); - addNewColourScheme(choice); - saveToFile(choice); + File file = chooser.getSelectedFile(); + addNewColourScheme(file.getPath()); + saveToFile(file); } } @@ -887,12 +761,9 @@ public class UserDefinedColours extends GUserDefinedColours implements Cache.setProperty(USER_DEFINED_COLOURS, defaultColours); /* - * add to the cache in this object + * construct and register the colour scheme */ UserColourScheme ucs = getSchemeFromButtons(); - String name = schemeName.getText(); - userColourSchemes.put(name, ucs); - ColourSchemes.getInstance().registerColourScheme(ucs); /* @@ -907,9 +778,9 @@ public class UserDefinedColours extends GUserDefinedColours implements /** * Saves the colour scheme to file in XML format * - * @param filePath + * @param path */ - protected void saveToFile(String filePath) + protected void saveToFile(File toFile) { /* * build a Java model of colour scheme as XML, and @@ -920,7 +791,7 @@ public class UserDefinedColours extends GUserDefinedColours implements try { PrintWriter out = new PrintWriter(new OutputStreamWriter( - new FileOutputStream(filePath), "UTF-8")); + new FileOutputStream(toFile), "UTF-8")); for (int i = 0; i < buttonPanel.getComponentCount(); i++) { @@ -950,7 +821,7 @@ public class UserDefinedColours extends GUserDefinedColours implements { if (seqGroup != null) { - seqGroup.cs = oldColourScheme; + seqGroup.setColourScheme(oldColourScheme); } else { @@ -972,103 +843,6 @@ public class UserDefinedColours extends GUserDefinedColours implements } } - public static SortedMap getUserColourSchemes() - { - return userColourSchemes; - } - - public static void initUserColourSchemes(String files) - { - userColourSchemes = new TreeMap(); - - if (files == null || files.length() == 0) - { - return; - } - - // In case colours can't be loaded, we'll remove them - // from the default list here. - StringBuffer coloursFound = new StringBuffer(); - StringTokenizer st = new StringTokenizer(files, "|"); - while (st.hasMoreElements()) - { - String file = st.nextToken(); - try - { - UserColourScheme ucs = loadColours(file); - if (ucs != null) - { - if (coloursFound.length() > 0) - { - coloursFound.append("|"); - } - coloursFound.append(file); - String name = ucs.getName(); - userColourSchemes.put(name, ucs); - ColourSchemes.getInstance().registerColourScheme(ucs); - } - } catch (Exception ex) - { - System.out.println("Error loading User ColourFile\n" + ex); - } - } - if (!files.equals(coloursFound.toString())) - { - if (coloursFound.toString().length() > 1) - { - Cache.setProperty(USER_DEFINED_COLOURS, coloursFound.toString()); - } - else - { - Cache.applicationProperties.remove(USER_DEFINED_COLOURS); - } - } - } - - public static void removeColourFromDefaults(String target) - { - // The only way to find colours by name is to load them in - // In case colours can't be loaded, we'll remove them - // from the default list here. - - userColourSchemes = new TreeMap(); - - StringBuffer coloursFound = new StringBuffer(); - StringTokenizer st = new StringTokenizer( - Cache.getProperty(USER_DEFINED_COLOURS), "|"); - - while (st.hasMoreElements()) - { - String file = st.nextToken(); - try - { - UserColourScheme ucs = loadColours(file); - if (ucs != null && !ucs.getSchemeName().equals(target)) - { - if (coloursFound.length() > 0) - { - coloursFound.append("|"); - } - coloursFound.append(file); - userColourSchemes.put(ucs.getSchemeName(), ucs); - } - } catch (Exception ex) - { - System.out.println("Error loading User ColourFile\n" + ex); - } - } - - if (coloursFound.toString().length() > 1) - { - Cache.setProperty(USER_DEFINED_COLOURS, coloursFound.toString()); - } - else - { - Cache.applicationProperties.remove(USER_DEFINED_COLOURS); - } - - } - @Override public void caseSensitive_actionPerformed(ActionEvent e) {