X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FUserDefinedColours.java;h=d2741a972d122e7487c1e4fdc5e73894672834c3;hb=b5d69834ef8b11df514d5b4c08c82945f15f8a2e;hp=0477391df7a4ba04311a2daabe7b7fb838f254de;hpb=4fe5e959d104419f1f313f493e00d683b6b5cd0a;p=jalview.git diff --git a/src/jalview/gui/UserDefinedColours.java b/src/jalview/gui/UserDefinedColours.java index 0477391..d2741a9 100755 --- a/src/jalview/gui/UserDefinedColours.java +++ b/src/jalview/gui/UserDefinedColours.java @@ -1,6 +1,6 @@ /* * Jalview - A Sequence Alignment Editor and Viewer - * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -52,6 +52,10 @@ public class UserDefinedColours extends GUserDefinedColours Vector selectedButtons; ColourSchemeI oldColourScheme; JInternalFrame frame; + MCview.PDBCanvas pdbcanvas; + Vector upperCaseButtons; + Vector lowerCaseButtons; + /** * Creates a new UserDefinedColours object. @@ -62,50 +66,150 @@ public class UserDefinedColours extends GUserDefinedColours public UserDefinedColours(AlignmentPanel ap, SequenceGroup sg) { super(); - frame = new JInternalFrame(); - frame.setContentPane(this); - Desktop.addInternalFrame(frame, "User Defined Colours", 720, 370, true); - if (System.getProperty("os.name").startsWith("Mac")) - { - frame.setSize(450, 560); - } + //AW - LOWER CASE DISABLED IN 2.1.01 bug fix release + casePanel.setVisible(false); - if (sg != null) - { - frame.setTitle(frame.getTitle() + " (" + sg.getName() + ")"); - } - colorChooser.getSelectionModel().addChangeListener(this); + lcaseColour.setEnabled(false); this.ap = ap; seqGroup = sg; if (seqGroup != null) - { oldColourScheme = seqGroup.cs; - } else - { oldColourScheme = ap.av.getGlobalColourScheme(); - } if (oldColourScheme instanceof UserColourScheme) { - schemeName.setText( ( (UserColourScheme) oldColourScheme).getName()); + schemeName.setText( ( (UserColourScheme) oldColourScheme).getName()); + if(( (UserColourScheme) oldColourScheme).getLowerCaseColours()!=null) + { + caseSensitive.setSelected(true); + lcaseColour.setEnabled(true); + resetButtonPanel(true); + } + else + resetButtonPanel(false); } - for (int i = 0; i < 20; i++) + else + resetButtonPanel(false); + + showFrame(); + } + + public UserDefinedColours(MCview.PDBCanvas pdb, ColourSchemeI oldcs) + { + super(); + pdbcanvas = pdb; + + colorChooser.getSelectionModel().addChangeListener(this); + + oldColourScheme = oldcs; + + if (oldColourScheme instanceof UserColourScheme) { - makeButton(ResidueProperties.aa2Triplet.get(ResidueProperties.aa[i]) + - "", ResidueProperties.aa[i]); + schemeName.setText( ( (UserColourScheme) oldColourScheme).getName()); } - makeButton("B", "B"); - makeButton("Z", "Z"); - makeButton("X", "X"); - makeButton("Gap", "-"); + resetButtonPanel(false); + + showFrame(); + } + void showFrame() + { + colorChooser.getSelectionModel().addChangeListener(this); + frame = new JInternalFrame(); + frame.setContentPane(this); + Desktop.addInternalFrame(frame, "User Defined Colours", 720, 370, true); + + if (seqGroup != null) + frame.setTitle(frame.getTitle() + " (" + seqGroup.getName() + ")"); + + if (System.getProperty("os.name").startsWith("Mac")) + { + frame.setSize(760, 370); + } + } + + void resetButtonPanel(boolean caseSensitive) + { + //AW - LOWER CASE DISABLED IN 2.1.01 bug fix release + caseSensitive = false; + + buttonPanel.removeAll(); + + + if(upperCaseButtons==null) + upperCaseButtons = new Vector(); + + 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); + + buttonPanel.add(button); + } + + buttonPanel.add(makeButton("B", "B", upperCaseButtons, 20)); + buttonPanel.add(makeButton("Z", "Z", upperCaseButtons, 21)); + buttonPanel.add(makeButton("X", "X", upperCaseButtons, 22)); + buttonPanel.add(makeButton("Gap", "-", upperCaseButtons, 23)); + + if(!caseSensitive) + { + gridLayout.setRows(6); + gridLayout.setColumns(4); + } + else + { + gridLayout.setRows(7); + int cols = 7; + gridLayout.setColumns(cols+1); + + if(lowerCaseButtons==null) + lowerCaseButtons = new Vector(); + + + for (int i = 0; i < 20; i++) + { + int row = i / cols + 1; + int index = (row * cols) + i; + button = makeButton( + ResidueProperties.aa[i].toLowerCase(), + ResidueProperties.aa[i].toLowerCase(), + lowerCaseButtons, + i); + + buttonPanel.add(button, index); + } + } + + + if(caseSensitive) + { + buttonPanel.add(makeButton("b", "b", lowerCaseButtons, 20)); + buttonPanel.add(makeButton("z", "z", lowerCaseButtons, 21)); + buttonPanel.add(makeButton("x", "x", lowerCaseButtons, 22)); + } + + buttonPanel.validate(); + validate(); + } + + /** * DOCUMENT ME! * @@ -115,13 +219,22 @@ public class UserDefinedColours extends GUserDefinedColours { if (selectedButtons != null) { - JButton button; + JButton button=null; for(int i=0; i0) + start = (JButton)selectedButtons.elementAt(selectedButtons.size()-1); + else + start = (JButton) e.getSource(); + int startIndex=0, endIndex=0; for(int b=0; b-1) colours = colours.substring(0, colours.indexOf("|")); - return loadColours(colours); + ret = loadColours(colours); } - else + + if(ret == null) { - return null; + Color[] newColours = new Color[24]; + for (int i = 0; i < 24; i++) + { + newColours[i] = Color.white; + } + ret = new UserColourScheme(newColours); } + + return ret; } /** @@ -357,39 +550,101 @@ public class UserDefinedColours extends GUserDefinedColours * * @return DOCUMENT ME! */ - public static UserColourScheme loadColours(String file) + static UserColourScheme loadColours(String file) { UserColourScheme ucs = null; Color[] newColours = null; - try { InputStreamReader in = new InputStreamReader(new FileInputStream( file), "UTF-8"); - jalview.binding.JalviewUserColours jucs = new jalview.binding.JalviewUserColours(); - jucs = (jalview.binding.JalviewUserColours) jucs.unmarshal(in); + 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]; - newColours = new Color[jucs.getColourCount()]; + Color [] lowerCase = null; + boolean caseSensitive = false; - for (int i = 0; i < 24; i++) + + String name; + int index; + for (int i = 0; i < jucs.getColourCount(); i++) { - newColours[i] = new Color(Integer.parseInt( + name = jucs.getColour(i).getName(); + if(ResidueProperties.aa3Hash.containsKey(name)) + { + index = ((Integer)ResidueProperties.aa3Hash.get(name)).intValue(); + } + else + { + index = ((Integer)ResidueProperties.aaHash.get(name)).intValue(); + } + 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) { - System.out.println("Error loading User ColourFile\n"+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 = (jalview.binding.JalviewUserColours) 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; } @@ -435,28 +690,31 @@ public class UserDefinedColours extends GUserDefinedColours String defaultColours = jalview.bin.Cache.getDefault("USER_DEFINED_COLOURS", choice); if(defaultColours.indexOf(choice)==-1) { - if(defaultColours.length()<1) + if(defaultColours.length()>0) defaultColours = defaultColours.concat("|"); defaultColours = defaultColours.concat(choice); } - userColourSchemes.put(schemeName.getText(), getSchemeFromGUI()); + userColourSchemes.put(schemeName.getText(), getSchemeFromButtons()); ap.alignFrame.updateUserColourMenu(); jalview.bin.Cache.setProperty("USER_DEFINED_COLOURS", defaultColours); - jalview.binding.JalviewUserColours ucs = new jalview.binding.JalviewUserColours(); + jalview.schemabinding.version2.JalviewUserColours ucs + = new jalview.schemabinding.version2.JalviewUserColours(); + ucs.setSchemeName(schemeName.getText()); try { PrintWriter out = new PrintWriter(new OutputStreamWriter( new FileOutputStream(choice), "UTF-8")); - for (int i = 0; i < 24; i++) + for (int i = 0; i < buttonPanel.getComponentCount(); i++) { JButton button = (JButton) buttonPanel.getComponent(i); - jalview.binding.Colour col = new jalview.binding.Colour(); + jalview.schemabinding.version2.Colour col + = new jalview.schemabinding.version2.Colour(); col.setName(button.getText()); col.setRGB(jalview.util.Format.getHexString( button.getBackground())); @@ -480,16 +738,23 @@ public class UserDefinedColours extends GUserDefinedColours */ protected void cancelButton_actionPerformed(ActionEvent e) { + if (ap != null) + { if (seqGroup != null) { - seqGroup.cs = oldColourScheme; + seqGroup.cs = oldColourScheme; } - else + else if (ap != null) { - ap.av.setGlobalColourScheme(oldColourScheme); + ap.av.setGlobalColourScheme(oldColourScheme); } - ap.repaint(); + } + + if(pdbcanvas!=null) + { + pdbcanvas.pdb.setColours(oldColourScheme); + } try { @@ -512,9 +777,10 @@ public class UserDefinedColours extends GUserDefinedColours { userColourSchemes = new Hashtable(); - if(files==null) + 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(); @@ -540,7 +806,66 @@ public class UserDefinedColours extends GUserDefinedColours } if (!files.equals(coloursFound.toString())) { - jalview.bin.Cache.setProperty("USER_DEFINED_COLOURS", coloursFound.toString()); + if (coloursFound.toString().length() > 1) + jalview.bin.Cache.setProperty("USER_DEFINED_COLOURS", + coloursFound.toString()); + else + jalview.bin.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 Hashtable(); + + StringBuffer coloursFound = new StringBuffer(); + StringTokenizer st = new StringTokenizer( + jalview.bin.Cache.getProperty("USER_DEFINED_COLOURS"), "|"); + + while (st.hasMoreElements()) + { + String file = st.nextToken(); + try + { + UserColourScheme ucs = loadColours(file); + if (ucs != null && !ucs.getName().equals(target)) + { + if (coloursFound.length() > 0) + coloursFound.append("|"); + coloursFound.append(file); + userColourSchemes.put(ucs.getName(), ucs); + } + } + catch (Exception ex) + { + System.out.println("Error loading User ColourFile\n" + ex); + } } + + if (coloursFound.toString().length() > 1) + jalview.bin.Cache.setProperty("USER_DEFINED_COLOURS", coloursFound.toString()); + else + jalview.bin.Cache.applicationProperties.remove("USER_DEFINED_COLOURS"); + + } + + public void caseSensitive_actionPerformed(ActionEvent e) + { + resetButtonPanel(caseSensitive.isSelected()); + lcaseColour.setEnabled(caseSensitive.isSelected()); + } + + public void lcaseColour_actionPerformed(ActionEvent e) + { + if(selectedButtons==null) + selectedButtons = new Vector(); + else + selectedButtons.clear(); + selectedButtons.add(lcaseColour); } + }