1 package org.herac.tuxguitar.gui.util;
2 
3 import org.herac.tuxguitar.gui.TuxGuitar;
4 import org.herac.tuxguitar.gui.system.language.LanguageLoader;
5 
6 public class TGMusicKeyUtils {
7 
8 	public static final String PREFIX_CHORD = "chord";
9 
10 	public static final String PREFIX_SCALE = "scale";
11 
12 	public static final String PREFIX_TUNING = "tuning";
13 
14 	public static final String PREFIX_FRETBOARD = "fretboard";
15 
16 	public static final String PREFIX_MATRIX = "matrix";
17 
18 	private static final String[][] DEFAULT_KEY_NAMES = new String[][]{
19 		{"C","C#","Cb"},
20 		{"D","D#","Db"},
21 		{"E","E#","Eb"},
22 		{"F","F#","Fb"},
23 		{"G","G#","Gb"},
24 		{"A","A#","Ab"},
25 		{"B","B#","Bb"}
26 	};
27 
getSharpKeyNames(String prefix)28 	public static String[] getSharpKeyNames(String prefix){
29 		return new TGMusicKeyNames(true,prefix).getNames();
30 	}
31 
getFlatKeyNames(String prefix)32 	public static String[] getFlatKeyNames(String prefix){
33 		return new TGMusicKeyNames(false,prefix).getNames();
34 	}
35 
loadKeyNames(String[] names,String prefix,boolean sharp)36 	protected static void loadKeyNames(String[] names,String prefix,boolean sharp){
37 		if(sharp){
38 			loadSharpKeyNames(names, prefix);
39 		}else{
40 			loadFlatKeyNames(names, prefix);
41 		}
42 	}
43 
loadSharpKeyNames(String[] names,String prefix)44 	private static void loadSharpKeyNames(String[] names,String prefix){
45 		names[0] = getName(prefix,0,0);
46 		names[1] = getName(prefix,0,1);
47 		names[2] = getName(prefix,1,0);
48 		names[3] = getName(prefix,1,1);
49 		names[4] = getName(prefix,2,0);
50 		names[5] = getName(prefix,3,0);
51 		names[6] = getName(prefix,3,1);
52 		names[7] = getName(prefix,4,0);
53 		names[8] = getName(prefix,4,1);
54 		names[9] = getName(prefix,5,0);
55 		names[10] = getName(prefix,5,1);
56 		names[11] = getName(prefix,6,0);
57 	}
58 
loadFlatKeyNames(String[] names,String prefix)59 	private static void loadFlatKeyNames(String[] names,String prefix){
60 		names[0] = getName(prefix,0,0);
61 		names[1] = getName(prefix,1,2);
62 		names[2] = getName(prefix,1,0);
63 		names[3] = getName(prefix,2,2);
64 		names[4] = getName(prefix,2,0);
65 		names[5] = getName(prefix,3,0);
66 		names[6] = getName(prefix,4,2);
67 		names[7] = getName(prefix,4,0);
68 		names[8] = getName(prefix,5,2);
69 		names[9] = getName(prefix,5,0);
70 		names[10] = getName(prefix,6,2);
71 		names[11] = getName(prefix,6,0);
72 	}
73 
getName(String prefix,int key,int signature)74 	private static String getName(String prefix,int key,int signature){
75 		String resource = ("key." + prefix + "." + key + "." + signature);
76 		return TuxGuitar.instance().getLanguageManager().getProperty(resource,DEFAULT_KEY_NAMES[key][signature]);
77 	}
78 }
79 
80 class TGMusicKeyNames implements LanguageLoader{
81 
82 	private boolean sharp;
83 	private String prefix;
84 	private String[] names;
85 
TGMusicKeyNames(boolean sharp,String prefix)86 	public TGMusicKeyNames(boolean sharp,String prefix){
87 		this.sharp = sharp;
88 		this.prefix = prefix;
89 		this.names = new String[12];
90 		this.loadProperties();
91 
92 		TuxGuitar.instance().getLanguageManager().addLoader(this);
93 	}
94 
getNames()95 	public String[] getNames(){
96 		return this.names;
97 	}
98 
loadProperties()99 	public void loadProperties() {
100 		TGMusicKeyUtils.loadKeyNames(this.names, this.prefix, this.sharp);
101 	}
102 }
103