moved to org.biojava
[jalview.git] / src / jalview / schemes / UserColourScheme.java
1 /*\r
2  * Jalview - A Sequence Alignment Editor and Viewer\r
3  * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
4  *\r
5  * This program is free software; you can redistribute it and/or\r
6  * modify it under the terms of the GNU General Public License\r
7  * as published by the Free Software Foundation; either version 2\r
8  * of the License, or (at your option) any later version.\r
9  *\r
10  * This program is distributed in the hope that it will be useful,\r
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13  * GNU General Public License for more details.\r
14  *\r
15  * You should have received a copy of the GNU General Public License\r
16  * along with this program; if not, write to the Free Software\r
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA\r
18  */\r
19 package jalview.schemes;\r
20 \r
21 import java.awt.*;\r
22 import java.util.StringTokenizer;\r
23 \r
24 public class UserColourScheme\r
25     extends ResidueColourScheme\r
26 {\r
27   protected String schemeName;\r
28 \r
29   public UserColourScheme()\r
30   {  }\r
31 \r
32   public UserColourScheme(Color[] newColors)\r
33   {\r
34     colors = newColors;\r
35   }\r
36 \r
37   public UserColourScheme(String colour)\r
38   {\r
39     Color col = getColourFromString(colour);\r
40 \r
41     if(col==null)\r
42     {\r
43       System.out.println("Unknown colour!! "+colour);\r
44       col = createColourFromName(colour);\r
45     }\r
46 \r
47     colors = new Color[24];\r
48     for(int i=0; i<24; i++)\r
49       colors[i] = col;\r
50   }\r
51 \r
52   public Color[] getColours()\r
53   {\r
54     return colors;\r
55   }\r
56 \r
57   public void setName(String name)\r
58   {\r
59     schemeName = name;\r
60   }\r
61 \r
62   public String getName()\r
63   {\r
64     return schemeName;\r
65   }\r
66 \r
67   public Color getColourFromString(String colour)\r
68   {\r
69     colour = colour.trim();\r
70 \r
71     Color col = null;\r
72     try\r
73     {\r
74       int value = Integer.parseInt(colour, 16);\r
75       col = new Color(value);\r
76     }\r
77     catch (NumberFormatException ex)\r
78     {}\r
79 \r
80     if (col == null)\r
81       col = ColourSchemeProperty.getAWTColorFromName(colour);\r
82 \r
83     if (col == null)\r
84     {\r
85       try\r
86       {\r
87         java.util.StringTokenizer st = new java.util.StringTokenizer(colour,\r
88             ",");\r
89         int r = Integer.parseInt(st.nextToken());\r
90         int g = Integer.parseInt(st.nextToken());\r
91         int b = Integer.parseInt(st.nextToken());\r
92         col = new Color(r, g, b);\r
93       }\r
94       catch (Exception ex)\r
95       {}\r
96     }\r
97 \r
98     return col;\r
99 \r
100   }\r
101 \r
102   public Color createColourFromName(String name)\r
103   {\r
104     int r, g, b;\r
105 \r
106     int lsize = name.length();\r
107     int start = 0, end = lsize / 3;\r
108 \r
109     int rgbOffset = Math.abs(name.hashCode() % 10) * 15;\r
110 \r
111     r = Math.abs(name.substring(start, end).hashCode() + rgbOffset) % 210 + 20;\r
112     start = end;\r
113     end += lsize / 3;\r
114     if (end > lsize)\r
115       end = lsize;\r
116 \r
117     g = Math.abs(name.substring(start, end).hashCode() + rgbOffset) % 210 + 20;\r
118 \r
119     b = Math.abs(name.substring(end).hashCode() + rgbOffset) % 210 + 20;\r
120 \r
121     Color color = new Color(r, g, b);\r
122 \r
123     return color;\r
124   }\r
125 \r
126   public void parseAppletParameter(String paramValue)\r
127   {\r
128     StringTokenizer st = new StringTokenizer(paramValue, ";");\r
129     StringTokenizer st2;\r
130     String token=null, colour, residues;\r
131     try{\r
132       while (st.hasMoreElements())\r
133       {\r
134         token = st.nextToken().trim();\r
135         residues = token.substring(0, token.indexOf("="));\r
136         colour = token.substring(token.indexOf("=") + 1);\r
137 \r
138         st2 = new StringTokenizer(residues, " ,");\r
139         while (st2.hasMoreTokens())\r
140         {\r
141           int colIndex =\r
142               ( (Integer) ResidueProperties.aaHash.\r
143                get(st2.nextToken())).intValue();\r
144 \r
145           colors[colIndex] = getColourFromString(colour);\r
146         }\r
147       }\r
148     }\r
149     catch(Exception ex)\r
150   {\r
151     System.out.println("Error parsing userDefinedColours:\n"\r
152                        +token+"\n"+ex);\r
153   }\r
154 \r
155   }\r
156 \r
157 }\r