1 package org.columba.mail.gui.charset; 20 21 import java.awt.event.ActionEvent ; 22 import java.awt.event.ActionListener ; 23 import java.nio.charset.Charset ; 24 import java.nio.charset.UnsupportedCharsetException ; 25 import java.util.Hashtable ; 26 27 import javax.swing.ButtonGroup ; 28 import javax.swing.JMenuItem ; 29 import javax.swing.JRadioButtonMenuItem ; 30 31 import org.columba.api.gui.frame.IFrameMediator; 32 import org.columba.core.charset.CharsetEvent; 33 import org.columba.core.charset.CharsetListener; 34 import org.columba.core.charset.CharsetOwnerInterface; 35 import org.columba.core.gui.base.CMenu; 36 import org.columba.core.gui.menu.IMenu; 37 import org.columba.core.logging.Logging; 38 import org.columba.core.resourceloader.ImageLoader; 39 import org.columba.mail.util.MailResourceLoader; 40 41 45 46 public class CharacterEncodingSubMenu extends IMenu implements ActionListener , 47 CharsetListener { 48 49 private static final String [] CHARSET_STRINGS = { 53 54 "UTF-8", "UTF-16", "US-ASCII", 56 57 "windows-1252", "ISO-8859-1", "ISO-8859-15", "ISO-8859-7", 59 "windows-1253", "ISO-8859-3", 60 61 "ISO-8859-4", "ISO-8859-13", "windows-1257", "ISO-8859-2", 63 "ISO-8859-5", "KOI8-R", "windows-1251", 64 65 "GB2312", "GBK", "GB18030", "Big5", "Big5-HKSCS", "EUC-TW", 67 "EUC-JP", "Shift_JIS", "ISO-2022-JP", "MS932", "EUC-KR", "JOHAB", 68 "ISO-2022-KR", 69 70 "TIS620", "ISO-8859-9", "windows-1254", "windows-1258" }; 72 73 private static final Charset [] CHARSETS = createCharsetArray(); 74 75 private static final String [] groups = { "global", "westeurope", 76 "easteurope", "eastasian", "seswasian" }; 77 78 private static final int[] groupOffset = { 0, 3, 9, 16, 29, 33 }; 79 80 private ButtonGroup group; 81 82 private Hashtable hashtable; 83 84 87 92 public CharacterEncodingSubMenu(IFrameMediator mediator) { 93 super(mediator, MailResourceLoader.getString("menu", "mainframe", 94 "menu_view_charset"), "menu_view_charset"); 95 96 98 group = new ButtonGroup (); 99 100 hashtable = new Hashtable (); 101 102 add(createMenuItem(null)); 103 104 CMenu subsubMenu; 106 107 for (int i = 0; i < groups.length; i++) { 108 subsubMenu = new CMenu(MailResourceLoader.getString("menu", 109 "mainframe", "menu_view_charset_" + groups[i]), 110 "menu_view_charset_" + groups[i]); 111 add(subsubMenu); 112 113 for (int j = groupOffset[i]; j < groupOffset[i + 1]; j++) { 114 if (CHARSETS[j] != null) { 115 JMenuItem item = createMenuItem(CHARSETS[j]); 116 subsubMenu.add(item); 117 } 118 } 119 } 120 121 ((CharsetOwnerInterface) controller).addCharsetListener(this); 122 123 charsetChanged(new CharsetEvent(this, 125 ((CharsetOwnerInterface) controller).getCharset())); 126 127 } 128 129 private static Charset [] createCharsetArray() { 130 Charset [] result = new Charset [CHARSET_STRINGS.length]; 131 for (int i = 0; i < CHARSET_STRINGS.length; i++) { 132 try { 133 result[i] = Charset.forName(CHARSET_STRINGS[i]); 134 } catch (UnsupportedCharsetException e) { 135 if (Logging.DEBUG) 136 e.printStackTrace(); 137 138 result[i] = null; 139 } 140 } 141 return result; 142 } 143 144 147 protected CharsetMenuItem createMenuItem(Charset charset) { 148 CharsetMenuItem menuItem = new CharsetMenuItem(charset); 149 group.add(menuItem); 150 menuItem.addActionListener(this); 151 if (charset != null) 152 hashtable.put(charset, menuItem); 153 154 return menuItem; 155 } 156 157 160 public void actionPerformed(ActionEvent e) { 161 ((CharsetOwnerInterface) controller).setCharset(((CharsetMenuItem) e 162 .getSource()).getCharset()); 163 } 164 165 168 public void charsetChanged(CharsetEvent e) { 169 if (e.getCharset() == null) { 171 JRadioButtonMenuItem item = (JRadioButtonMenuItem ) getMenuComponent(0); 172 item.setSelected(true); 173 174 } else { 175 if (hashtable.containsKey(e.getCharset())) { 176 CharsetMenuItem menuItem = (CharsetMenuItem) hashtable.get(e 177 .getCharset()); 178 menuItem.setSelected(true); 179 } 180 } 181 } 182 } | Popular Tags |