1 19 20 package org.netbeans.modules.editor.options; 21 22 import java.awt.Color ; 23 import java.awt.Font ; 24 import java.io.IOException ; 25 import java.util.Iterator ; 26 import java.util.HashMap ; 27 import java.util.Map ; 28 29 import org.netbeans.editor.Coloring; 30 import org.netbeans.editor.Settings; 31 import org.netbeans.editor.SettingsDefaults; 32 import org.netbeans.editor.SettingsNames; 33 import org.netbeans.editor.SettingsUtil; 34 import org.openide.xml.XMLUtil; 35 36 import org.w3c.dom.Document ; 37 import org.w3c.dom.Element ; 38 import org.w3c.dom.Node ; 39 import org.w3c.dom.NodeList ; 40 41 48 public class FontsColorsMIMEOptionFile extends MIMEOptionFile{ 49 50 51 public static final String TAG_ROOT = "fontscolors"; static final String TAG_FONTCOLOR = "fontcolor"; static final String TAG_ELEMENTCOLOR = "elementcolor"; static final String TAG_FONT = "font"; 56 57 static final String ATTR_NAME = "name"; static final String ATTR_COLOR = "color"; 60 61 static final String ATTR_SYNTAXNAME = "syntaxName"; static final String ATTR_FORECOLOR = "foreColor"; static final String ATTR_BGCOLOR = "bgColor"; 65 66 static final String ATTR_SIZE = "size"; static final String ATTR_STYLE = "style"; 69 70 static final String FILENAME = "fontsColors"; 72 public FontsColorsMIMEOptionFile(BaseOptions base, Object proc) { 73 super(base, proc); 74 } 75 76 78 protected void loadSettings(boolean propagate){ 79 synchronized (Settings.class) { 80 if (base.usesNewOptionsDialog()){ 81 return; 82 } 83 Document doc = dom; 84 Element rootElement = doc.getDocumentElement(); 85 86 if (!TAG_ROOT.equals(rootElement.getTagName())) { 87 return; 89 } 90 91 Map cm = new HashMap ( SettingsUtil.getColoringMap(base.getKitClass(), false, true) ); cm.put(null, base.getKitClass().getName() ); 95 Map mapa = cm; 96 properties.clear(); 97 98 NodeList fc = rootElement.getElementsByTagName(TAG_FONTCOLOR); 99 for (int i=0;i<fc.getLength();i++){ 100 Node node = fc.item(i); 101 Element FCElement = (Element )node; 102 103 if (FCElement == null){ 104 continue; 105 } 106 107 String foreColor = null; 109 String bgColor = null; 110 String fontName = null; 111 String fontSize = null; 112 String fontStyle = null; 113 114 String syntaxName = FCElement.getAttribute(ATTR_SYNTAXNAME); 115 116 foreColor = FCElement.getAttribute(ATTR_FORECOLOR); 117 bgColor = FCElement.getAttribute(ATTR_BGCOLOR); 118 119 NodeList fnt = FCElement.getElementsByTagName(TAG_FONT); 121 for (int j=0;j<fnt.getLength();j++){ 122 Node nodeFnt = fnt.item(j); 123 Element FNTElement = (Element )nodeFnt; 124 if (FNTElement == null){ 125 continue; 126 } 127 fontName = FNTElement.getAttribute(ATTR_NAME); 128 if (fontName.length() == 0) fontName=null; 129 fontSize = FNTElement.getAttribute(ATTR_SIZE); 130 if (fontSize.length() == 0) fontSize=null; 131 fontStyle = FNTElement.getAttribute(ATTR_STYLE); 132 if (fontStyle.length() == 0) fontStyle=null; 133 } 134 135 Coloring clr = SettingsUtil.getColoring(base.getKitClass(),syntaxName,false); 137 138 if (clr==null) clr = SettingsUtil.getColoring(base.getKitClass(),SettingsNames.DEFAULT_COLORING,false); 140 141 Font font = clr.getFont(); 144 145 if (font==null){ 146 Coloring def = SettingsUtil.getColoring(base.getKitClass(),SettingsNames.DEFAULT_COLORING,false); 147 if (def!=null) font = def.getFont(); 148 } 149 150 int fontSizeInt; 151 int fontStyleInt; 152 Font newFont = null; 153 154 if ((fontName!=null) || (fontSize!=null) || (fontStyle!=null)){ 155 if (fontName == null) { 157 if (font!=null) { 159 fontName = font.getName(); 160 } 161 } 163 164 if (fontSize == null) { 166 fontSizeInt = (font != null)? font.getSize() : 12; 167 } else { 168 fontSizeInt = OptionUtilities.string2Int(fontSize); 169 if (fontSizeInt == -1) { 170 fontSizeInt = (font != null)? font.getSize() : 12; 171 } 172 } 173 174 if (fontStyle == null){ 176 fontStyleInt = (font != null)? font.getStyle() : 0; 177 } else{ 178 fontStyleInt = OptionUtilities.getFontStyle(fontStyle); 179 } 180 newFont = new Font (fontName, fontStyleInt, fontSizeInt); 181 } 182 183 Coloring coloring = new Coloring(newFont,OptionUtilities.string2Color(foreColor),OptionUtilities.string2Color(bgColor)); 185 186 if (mapa.containsKey(syntaxName)){ 187 mapa.put(syntaxName,coloring); 188 properties.put(syntaxName,coloring); 190 } 191 } 192 193 if ( (propagate) && (properties.size()>0)){ 195 base.setColoringMap(mapa, false); 196 } 197 198 NodeList ec = rootElement.getElementsByTagName(TAG_ELEMENTCOLOR); 200 for (int i=0;i<ec.getLength();i++){ 201 Node node = ec.item(i); 202 Element FCElement = (Element )node; 203 204 if (FCElement == null){ 205 continue; 206 } 207 208 String elementName = FCElement.getAttribute(ATTR_NAME); 209 String elementColorString = FCElement.getAttribute(ATTR_COLOR); 210 Color elementColor = OptionUtilities.string2Color(elementColorString); 211 212 if (elementColor==null) continue; 213 214 boolean validProperty = false; 215 216 if (SettingsNames.TEXT_LIMIT_LINE_COLOR.equalsIgnoreCase(elementName)){ 217 if (propagate) base.setTextLimitLineColor(elementColor,false); 218 validProperty = true; 219 } 220 221 else if (SettingsNames.CARET_COLOR_INSERT_MODE.equalsIgnoreCase(elementName)){ 222 if (propagate) base.setCaretColorInsertMode(elementColor, false); 223 validProperty = true; 224 } 225 226 else if (SettingsNames.CARET_COLOR_OVERWRITE_MODE.equalsIgnoreCase(elementName)){ 227 if (propagate) base.setCaretColorOverwriteMode(elementColor, false); 228 validProperty = true; 229 } 230 231 if (validProperty) properties.put(elementName,elementColor); 233 } 234 if (propagate) setLoaded(true); 235 } 236 } 237 238 240 protected void updateSettings(Map changedProp){ 241 synchronized (Settings.class) { 242 properties.putAll(changedProp); 244 245 Document doc = XMLUtil.createDocument(TAG_ROOT, null, processor.getPublicID(), processor.getSystemID()); 247 Element rootElem = doc.getDocumentElement(); 248 249 Map elementColors = new HashMap (); 250 251 for( Iterator i = properties.keySet().iterator(); i.hasNext(); ) { 253 String key = (String )i.next(); 254 if (properties.get(key) instanceof Coloring){ 255 256 Coloring coloring = (Coloring)properties.get(key); 257 258 Element fontColorElem = doc.createElement(TAG_FONTCOLOR); 259 fontColorElem.setAttribute(ATTR_SYNTAXNAME, key); 261 262 if (coloring.getForeColor()!=null){ 264 fontColorElem.setAttribute(ATTR_FORECOLOR, OptionUtilities.color2String(coloring.getForeColor())); 265 } 266 267 if (coloring.getBackColor()!=null){ 269 fontColorElem.setAttribute(ATTR_BGCOLOR, OptionUtilities.color2String(coloring.getBackColor())); 270 } 271 272 Font font = coloring.getFont(); 273 274 if (font!=null){ 275 Element fontElement = doc.createElement(TAG_FONT); 276 if (font.getName()!=null){ 278 fontElement.setAttribute(ATTR_NAME,font.getName()); 279 } 280 fontElement.setAttribute(ATTR_SIZE,Integer.toString(font.getSize())); 282 fontElement.setAttribute(ATTR_STYLE,OptionUtilities.style2String(font.getStyle())); 284 fontColorElem.appendChild(fontElement); 285 } 286 rootElem.appendChild(fontColorElem); 287 }else if (properties.get(key) instanceof Color ){ 288 elementColors.put(key, properties.get(key)); 290 } 291 } 292 293 for( Iterator i = elementColors.keySet().iterator(); i.hasNext(); ) { 295 String key = (String )i.next(); 296 Element elementColor = doc.createElement(TAG_ELEMENTCOLOR); 297 elementColor.setAttribute(ATTR_NAME, key); 298 elementColor.setAttribute(ATTR_COLOR, OptionUtilities.color2String((Color )elementColors.get(key))); 299 rootElem.appendChild(elementColor); 300 } 301 302 doc.getDocumentElement().normalize(); 303 304 saveSettings(doc); 305 } 306 } 307 308 } 309 | Popular Tags |