X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FUserDefinedColours.java;h=9ab43278b94218c17552be163ff38bf8190c84a8;hb=c6393cfb591bf7325ad645d3d48f6fe6991c3d6d;hp=bb2676c0bbc901d75c25ece3eb9815e170145a04;hpb=94379c810f9115b8564ee7bac46ed119218d5fd2;p=jalview.git diff --git a/src/jalview/gui/UserDefinedColours.java b/src/jalview/gui/UserDefinedColours.java index bb2676c..9ab4327 100755 --- a/src/jalview/gui/UserDefinedColours.java +++ b/src/jalview/gui/UserDefinedColours.java @@ -29,6 +29,7 @@ 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; import jalview.schemes.ResidueProperties; import jalview.schemes.UserColourScheme; @@ -43,16 +44,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; @@ -69,20 +65,19 @@ import javax.swing.event.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); - 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"; - private static final int MY_FRAME_HEIGHT = 420; + private static final int MY_FRAME_HEIGHT = 440; private static final int MY_FRAME_WIDTH = 810; private static final int MY_FRAME_WIDTH_CASE_SENSITIVE = 970; - static SortedMap userColourSchemes; - AlignmentPanel ap; SequenceGroup seqGroup; @@ -107,7 +102,7 @@ public class UserDefinedColours extends GUserDefinedColours implements */ public UserDefinedColours(AlignmentPanel ap, SequenceGroup sg) { - super(); + this(); lcaseColour.setEnabled(false); @@ -116,7 +111,7 @@ public class UserDefinedColours extends GUserDefinedColours implements if (seqGroup != null) { - oldColourScheme = seqGroup.cs; + oldColourScheme = seqGroup.getColourScheme(); } else { @@ -125,7 +120,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); @@ -148,7 +143,7 @@ public class UserDefinedColours extends GUserDefinedColours implements public UserDefinedColours(JalviewStructureDisplayI viewer, ColourSchemeI oldcs) { - super(); + this(); this.structureViewer = viewer; colorChooser.getSelectionModel().addChangeListener(this); @@ -157,7 +152,8 @@ public class UserDefinedColours extends GUserDefinedColours implements if (oldColourScheme instanceof UserColourScheme) { - schemeName.setText(((UserColourScheme) oldColourScheme).getSchemeName()); + schemeName.setText(((UserColourScheme) oldColourScheme) + .getSchemeName()); } resetButtonPanel(false); @@ -166,6 +162,12 @@ public class UserDefinedColours extends GUserDefinedColours implements } + public UserDefinedColours() + { + super(); + selectedButtons = new ArrayList(); + } + void showFrame() { colorChooser.getSelectionModel().addChangeListener(this); @@ -181,7 +183,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 +200,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 +215,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 +235,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 +253,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()); } @@ -263,35 +263,36 @@ public class UserDefinedColours extends GUserDefinedColours implements } /** - * DOCUMENT ME! + * ChangeListener handler for when a colour is picked in the colour chooser. + * The action is to apply the colour to all selected buttons as their + * background colour. Foreground colour (text) is set to a lighter shade in + * order to highlight which buttons are selected. If 'Lower Case Colour' is + * active, then the colour is applied to all lower case buttons (as well as + * the Lower Case Colour button itself). * * @param evt - * DOCUMENT ME! */ @Override public void stateChanged(ChangeEvent evt) { - if (selectedButtons != null) + JButton button = null; + final Color newColour = colorChooser.getColor(); + if (lcaseColour.isSelected()) { - JButton button = null; - final Color newColour = colorChooser.getColor(); - for (int i = 0; i < selectedButtons.size(); i++) + selectedButtons.clear(); + for (int i = 0; i < lowerCaseButtons.size(); i++) { - button = selectedButtons.get(i); + button = lowerCaseButtons.get(i); button.setBackground(newColour); - button.setForeground(ColorUtils.brighterThan(newColour)); - } - if (button == lcaseColour) - { - for (int i = 0; i < lowerCaseButtons.size(); i++) - { - 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++) + { + button = selectedButtons.get(i); + button.setBackground(newColour); + button.setForeground(ColorUtils.brighterThan(newColour)); + } } /** @@ -314,11 +315,6 @@ public class UserDefinedColours extends GUserDefinedColours implements */ public void colourButtonPressed(MouseEvent e) { - if (selectedButtons == null) - { - selectedButtons = new ArrayList(); - } - JButton pressed = (JButton) e.getSource(); if (e.isShiftDown()) @@ -412,8 +408,8 @@ public class UserDefinedColours extends GUserDefinedColours implements * @param buttonIndex * the button's position in the list */ - JButton makeButton(String label, String residue, - List buttons, int buttonIndex) + JButton makeButton(String label, String residue, List buttons, + int buttonIndex) { final JButton button; Color col; @@ -437,15 +433,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 +524,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 +565,7 @@ public class UserDefinedColours extends GUserDefinedColours implements } UserColourScheme ucs = new UserColourScheme(newColours); + ucs.setName(schemeName.getText()); if (caseSensitive.isSelected()) { @@ -595,11 +591,6 @@ public class UserDefinedColours extends GUserDefinedColours implements ucs.setLowerCaseColours(newColours); } - if (ap != null) - { - ucs.setThreshold(0, ap.av.isIgnoreGapsConsensus()); - } - return ucs; } @@ -615,8 +606,8 @@ public class UserDefinedColours extends GUserDefinedColours implements upperCaseButtons = new ArrayList(); lowerCaseButtons = new ArrayList(); - JalviewFileChooser chooser = new JalviewFileChooser( - Cache.getProperty(LAST_DIRECTORY), "jc", "Jalview User Colours"); + JalviewFileChooser chooser = new JalviewFileChooser("jc", + "Jalview User Colours"); chooser.setFileView(new JalviewFileView()); chooser.setDialogTitle(MessageManager .getString("label.load_colour_scheme")); @@ -631,7 +622,8 @@ public class UserDefinedColours extends GUserDefinedColours implements File choice = chooser.getSelectedFile(); Cache.setProperty(LAST_DIRECTORY, choice.getParent()); - UserColourScheme ucs = loadColours(choice.getAbsolutePath()); + UserColourScheme ucs = ColourSchemeLoader.loadColourScheme(choice + .getAbsolutePath()); Color[] colors = ucs.getColours(); schemeName.setText(ucs.getSchemeName()); @@ -663,9 +655,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 +671,12 @@ public class UserDefinedColours extends GUserDefinedColours implements { colours = colours.substring(0, colours.indexOf("|")); } - - ret = loadColours(colours); + ret = ColourSchemeLoader.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 +685,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 +701,25 @@ 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", + JalviewFileChooser chooser = new JalviewFileChooser("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++) { @@ -939,10 +810,9 @@ public class UserDefinedColours extends GUserDefinedColours implements } /** - * DOCUMENT ME! + * On cancel, restores the colour scheme before the dialogue was opened * * @param e - * DOCUMENT ME! */ @Override protected void cancelButton_actionPerformed(ActionEvent e) @@ -951,13 +821,12 @@ public class UserDefinedColours extends GUserDefinedColours implements { if (seqGroup != null) { - seqGroup.cs = oldColourScheme; + seqGroup.setColourScheme(oldColourScheme); } else { - ap.av.setGlobalColourScheme(oldColourScheme); + ap.alignFrame.changeColour(oldColourScheme); } - ap.alignFrame.changeColour(oldColourScheme); ap.paintAlignment(true); } @@ -974,121 +843,11 @@ 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) { - resetButtonPanel(caseSensitive.isSelected()); - lcaseColour.setEnabled(caseSensitive.isSelected()); - } - - @Override - public void lcaseColour_actionPerformed(ActionEvent e) - { - if (selectedButtons == null) - { - selectedButtons = new ArrayList(); - } - else - { - selectedButtons.clear(); - } - selectedButtons.add(lcaseColour); + boolean selected = caseSensitive.isSelected(); + resetButtonPanel(selected); + lcaseColour.setEnabled(selected); } }