/* * Jalview - A Sequence Alignment Editor and Viewer * Copyright (C) 2005 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 * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ package jalview.appletgui; import java.util.*; import java.awt.*; import java.awt.event.*; import jalview.datamodel.*; import jalview.schemes.*; public class UserDefinedColours extends Panel { AlignmentPanel ap; SequenceGroup seqGroup; Button selectedButton; Vector oldColours = new Vector(); ColourSchemeI oldColourScheme; Frame frame; int R = 0, G = 0, B = 0; public ColourSchemeI loadDefaultColours() { // NOT IMPLEMENTED YET IN APPLET VERSION return null; } public UserDefinedColours(AlignmentPanel ap, SequenceGroup sg) { try { jbInit(); } catch (Exception e) { e.printStackTrace(); } frame = new Frame(); frame.add(this); jalview.bin.JalviewLite.addFrame(frame, "User defined colours", 420, 345); if (sg != null) { frame.setTitle(frame.getTitle() + " (" + sg.getName() + ")"); } this.ap = ap; seqGroup = sg; if (seqGroup != null) { oldColourScheme = seqGroup.cs; } else { oldColourScheme = ap.av.getGlobalColourScheme(); } for (int i = 0; i < 20; i++) { makeButton(ResidueProperties.aa2Triplet.get(ResidueProperties.aa[i]) + "", ResidueProperties.aa[i]); } makeButton("B", "B"); makeButton("Z", "Z"); makeButton("X", "X"); makeButton("Gap", "'.','-',' '"); validate(); } protected void rText_actionPerformed(ActionEvent e) { try { int i = Integer.parseInt(rText.getText()); rScroller.setValue(i); rScroller_adjustmentValueChanged(null); } catch (NumberFormatException ex) {} } protected void gText_actionPerformed(ActionEvent e) { try { int i = Integer.parseInt(gText.getText()); gScroller.setValue(i); gScroller_adjustmentValueChanged(null); } catch (NumberFormatException ex) {} } protected void bText_actionPerformed(ActionEvent e) { try { int i = Integer.parseInt(bText.getText()); bScroller.setValue(i); bScroller_adjustmentValueChanged(null); } catch (NumberFormatException ex) {} } protected void rScroller_adjustmentValueChanged(AdjustmentEvent e) { R = rScroller.getValue(); rText.setText(R + ""); colourChanged(); } protected void gScroller_adjustmentValueChanged(AdjustmentEvent e) { G = gScroller.getValue(); gText.setText(G + ""); colourChanged(); } protected void bScroller_adjustmentValueChanged(AdjustmentEvent e) { B = bScroller.getValue(); bText.setText(B + ""); colourChanged(); } public void colourChanged() { Color col = new Color(R, G, B); target.setBackground(col); target.repaint(); if (selectedButton != null) { selectedButton.setBackground(col); selectedButton.repaint(); } } public void colourButtonPressed(MouseEvent e) { selectedButton = (Button) e.getSource(); Color col = selectedButton.getBackground(); R = col.getRed(); G = col.getGreen(); B = col.getBlue(); rScroller.setValue(R); gScroller.setValue(G); bScroller.setValue(B); rText.setText(R + ""); gText.setText(G + ""); bText.setText(B + ""); colourChanged(); } void makeButton(String label, String aa) { final Button button = new Button(); Color col = Color.white; try { col = oldColourScheme.findColour(aa, -1); } catch (Exception ex) {} button.setBackground(col); oldColours.addElement(col); button.setLabel(label); button.setForeground(col.darker().darker().darker()); button.setFont(new java.awt.Font("Verdana", 1, 10)); button.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(MouseEvent e) { colourButtonPressed(e); } }); buttonPanel.add(button, null); } protected void okButton_actionPerformed(ActionEvent e) { applyButton_actionPerformed(null); frame.setVisible(false); } protected void applyButton_actionPerformed(ActionEvent e) { Color[] newColours = new Color[24]; for (int i = 0; i < 24; i++) { Button button = (Button) buttonPanel.getComponent(i); newColours[i] = button.getBackground(); } UserColourScheme ucs = new UserColourScheme(newColours); ucs.setThreshold(0, ap.av.getIgnoreGapsConsensus()); if (seqGroup != null) { seqGroup.cs = ucs; } else { ap.av.setGlobalColourScheme(ucs); } ap.seqPanel.seqCanvas.img = null; ap.repaint(); } protected void cancelButton_actionPerformed(ActionEvent e) { Color[] newColours = new Color[24]; for (int i = 0; i < 24; i++) { newColours[i] = (Color) oldColours.elementAt(i); buttonPanel.getComponent(i).setBackground(newColours[i]); } UserColourScheme ucs = new UserColourScheme(newColours); if (seqGroup != null) { seqGroup.cs = ucs; } else { ap.av.setGlobalColourScheme(ucs); } ap.repaint(); frame.setVisible(false); } protected Panel buttonPanel = new Panel(); protected GridLayout gridLayout = new GridLayout(); Panel jPanel2 = new Panel(); protected Button okButton = new Button(); protected Button applyButton = new Button(); protected Button cancelButton = new Button(); protected Scrollbar rScroller = new Scrollbar(); Label label1 = new Label(); protected TextField rText = new TextField(); Label label4 = new Label(); protected Scrollbar gScroller = new Scrollbar(); protected TextField gText = new TextField(); Label label5 = new Label(); protected Scrollbar bScroller = new Scrollbar(); protected TextField bText = new TextField(); protected Panel target = new Panel(); private void jbInit() throws Exception { this.setLayout(null); buttonPanel.setLayout(gridLayout); gridLayout.setColumns(6); gridLayout.setRows(4); okButton.setFont(new java.awt.Font("Verdana", 0, 11)); okButton.setLabel("OK"); okButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { okButton_actionPerformed(e); } }); applyButton.setFont(new java.awt.Font("Verdana", 0, 11)); applyButton.setLabel("Apply"); applyButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { applyButton_actionPerformed(e); } }); cancelButton.setFont(new java.awt.Font("Verdana", 0, 11)); cancelButton.setLabel("Cancel"); cancelButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { cancelButton_actionPerformed(e); } }); this.setBackground(new Color(212, 208, 223)); jPanel2.setBounds(new Rectangle(0, 265, 400, 35)); buttonPanel.setBounds(new Rectangle(0, 123, 400, 142)); rScroller.setMaximum(256); rScroller.setMinimum(0); rScroller.setOrientation(0); rScroller.setUnitIncrement(1); rScroller.setVisibleAmount(1); rScroller.setBounds(new Rectangle(36, 27, 119, 19)); rScroller.addAdjustmentListener(new java.awt.event.AdjustmentListener() { public void adjustmentValueChanged(AdjustmentEvent e) { rScroller_adjustmentValueChanged(e); } }); label1.setAlignment(Label.RIGHT); label1.setText("R"); label1.setBounds(new Rectangle(19, 30, 16, 15)); rText.setFont(new java.awt.Font("Dialog", Font.PLAIN, 10)); rText.setText("0 "); rText.setBounds(new Rectangle(156, 27, 53, 19)); rText.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { rText_actionPerformed(e); } }); label4.setAlignment(Label.RIGHT); label4.setText("G"); label4.setBounds(new Rectangle(15, 56, 20, 15)); gScroller.setMaximum(256); gScroller.setMinimum(0); gScroller.setOrientation(0); gScroller.setUnitIncrement(1); gScroller.setVisibleAmount(1); gScroller.setBounds(new Rectangle(35, 52, 120, 20)); gScroller.addAdjustmentListener(new java.awt.event.AdjustmentListener() { public void adjustmentValueChanged(AdjustmentEvent e) { gScroller_adjustmentValueChanged(e); } }); gText.setFont(new java.awt.Font("Dialog", Font.PLAIN, 10)); gText.setText("0 "); gText.setBounds(new Rectangle(156, 52, 53, 20)); gText.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { gText_actionPerformed(e); } }); label5.setAlignment(Label.RIGHT); label5.setText("B"); label5.setBounds(new Rectangle(14, 82, 20, 15)); bScroller.setMaximum(256); bScroller.setMinimum(0); bScroller.setOrientation(0); bScroller.setUnitIncrement(1); bScroller.setVisibleAmount(1); bScroller.setBounds(new Rectangle(35, 78, 120, 20)); bScroller.addAdjustmentListener(new java.awt.event.AdjustmentListener() { public void adjustmentValueChanged(AdjustmentEvent e) { bScroller_adjustmentValueChanged(e); } }); bText.setFont(new java.awt.Font("Dialog", Font.PLAIN, 10)); bText.setText("0 "); bText.setBounds(new Rectangle(157, 78, 52, 20)); bText.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { bText_actionPerformed(e); } }); target.setBackground(Color.black); target.setBounds(new Rectangle(229, 26, 134, 79)); this.add(jPanel2, null); jPanel2.add(okButton, null); jPanel2.add(applyButton, null); jPanel2.add(cancelButton, null); this.add(buttonPanel, null); this.add(target, null); this.add(gScroller); this.add(rScroller); this.add(bScroller); this.add(label5); this.add(label4); this.add(label1); this.add(gText); this.add(rText); this.add(bText); } }