createColourFromName
[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 \r
23 public class UserColourScheme\r
24     extends ResidueColourScheme\r
25 {\r
26   protected String schemeName;\r
27 \r
28   public UserColourScheme()\r
29   {}\r
30 \r
31   public UserColourScheme(String colour)\r
32   {\r
33     Color col = null;\r
34     try{\r
35       int value = Integer.parseInt(colour, 16);\r
36       col = new Color(value);\r
37     }\r
38     catch(NumberFormatException ex){}\r
39 \r
40     if(col==null)\r
41       col = ColourSchemeProperty.getAWTColorFromName(colour);\r
42 \r
43     if(col==null)\r
44     {try{\r
45       java.util.StringTokenizer st = new java.util.StringTokenizer(colour, ",");\r
46       int r = Integer.parseInt( st.nextToken() );\r
47       int g = Integer.parseInt( st.nextToken() );\r
48       int b = Integer.parseInt( st.nextToken() );\r
49       col = new Color(r,g,b);\r
50     }catch(Exception ex){}\r
51     }\r
52 \r
53     if(col==null)\r
54     {\r
55       System.out.println("Unknown colour!! "+colour);\r
56       col = createColourFromName(colour);\r
57     }\r
58 \r
59     colors = new Color[24];\r
60     for(int i=0; i<24; i++)\r
61       colors[i] = col;\r
62   }\r
63 \r
64   public UserColourScheme(Color[] newColors)\r
65   {\r
66     colors = newColors;\r
67   }\r
68 \r
69   public Color[] getColours()\r
70   {\r
71     return colors;\r
72   }\r
73 \r
74   public void setName(String name)\r
75   {\r
76     schemeName = name;\r
77   }\r
78   public String getName()\r
79   {\r
80     return schemeName;\r
81   }\r
82 \r
83   public Color createColourFromName(String name)\r
84   {\r
85     int r, g, b;\r
86 \r
87     int lsize = name.length();\r
88     int start = 0, end = lsize / 3;\r
89 \r
90     int rgbOffset = Math.abs(name.hashCode() % 10) * 15;\r
91 \r
92     r = Math.abs(name.substring(start, end).hashCode() + rgbOffset) % 210 + 20;\r
93     start = end;\r
94     end += lsize / 3;\r
95     if (end > lsize)\r
96       end = lsize;\r
97 \r
98     g = Math.abs(name.substring(start, end).hashCode() + rgbOffset) % 210 + 20;\r
99 \r
100     b = Math.abs(name.substring(end).hashCode() + rgbOffset) % 210 + 20;\r
101 \r
102     Color color = new Color(r, g, b);\r
103 \r
104     return color;\r
105   }\r
106 \r
107 }\r