annotate dwtx/jface/resource/FontRegistry.d @ 104:04b47443bb01

Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections. These new wrappers now use the tango.util.containers instead of the tango.util.collections.
author Frank Benoit <benoit@tionex.de>
date Thu, 07 Aug 2008 15:01:33 +0200
parents 7ffeace6c47f
children e4589de2eed6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1 /*******************************************************************************
90
7ffeace6c47f Update 3.4M7 to 3.4
Frank Benoit <benoit@tionex.de>
parents: 63
diff changeset
2 * Copyright (c) 2000, 2008 IBM Corporation and others.
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
6 * http://www.eclipse.org/legal/epl-v10.html
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
7 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
8 * Contributors:
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
9 * IBM Corporation - initial API and implementation
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
10 * Port to the D programming language:
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
11 * Frank Benoit <benoit@tionex.de>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
12 *******************************************************************************/
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
13 module dwtx.jface.resource.FontRegistry;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
14
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
15 import dwtx.jface.resource.ResourceRegistry;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
16 import dwtx.jface.resource.FontDescriptor;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
17 import dwtx.jface.resource.StringConverter;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
18 import dwtx.jface.resource.JFaceResources;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
19 import dwtx.jface.resource.DataFormatException;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
20
49
115258985f10 JHashMapT into FontRegistry
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
21 import dwtx.dwtxhelper.JHashMap;
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
22 // import java.util.Arrays;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
23 // import java.util.Collections;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
24 // import java.util.Enumeration;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
25 // import java.util.HashMap;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
26 // import java.util.Iterator;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
27 // import java.util.List;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
28 // import java.util.Map;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
29 // import java.util.MissingResourceException;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
30 // import java.util.Set;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
31
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
32 import dwt.DWT;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
33 import dwt.graphics.Font;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
34 import dwt.graphics.FontData;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
35 import dwt.widgets.Display;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
36 import dwt.widgets.Shell;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
37 import dwtx.core.runtime.Assert;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
38
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
39 import dwt.dwthelper.ResourceBundle;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
40 import dwt.dwthelper.utils;
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
41 import dwtx.dwtxhelper.Collection;
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
42 import dwt.dwthelper.Runnable;
41
1ab001d67011 implement win version detection
Frank Benoit <benoit@tionex.de>
parents: 39
diff changeset
43 version(Windows) import dwt.internal.win32.OS;
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
44
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
45 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
46 * A font registry maintains a mapping between symbolic font names
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
47 * and DWT fonts.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
48 * <p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
49 * A font registry owns all of the font objects registered
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
50 * with it, and automatically disposes of them when the DWT Display
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
51 * that creates the fonts is disposed. Because of this, clients do
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
52 * not need to (indeed, must not attempt to) dispose of font
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
53 * objects themselves.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
54 * </p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
55 * <p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
56 * A special constructor is provided for populating a font registry
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
57 * from a property files using the standard Java resource bundle mechanism.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
58 * </p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
59 * <p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
60 * Methods are provided for registering listeners that will be kept
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
61 * apprised of changes to list of registed fonts.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
62 * </p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
63 * <p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
64 * Clients may instantiate this class (it was not designed to be subclassed).
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
65 * </p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
66 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
67 * Since 3.0 this class extends ResourceRegistry.
90
7ffeace6c47f Update 3.4M7 to 3.4
Frank Benoit <benoit@tionex.de>
parents: 63
diff changeset
68 * @noextend This class is not intended to be subclassed by clients.
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
69 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
70 public class FontRegistry : ResourceRegistry {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
71
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
72 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
73 * FontRecord is a private helper class that holds onto a font
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
74 * and can be used to generate its bold and italic version.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
75 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
76 private class FontRecord {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
77
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
78 Font baseFont;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
79
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
80 Font boldFont;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
81
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
82 Font italicFont;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
83
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
84 FontData[] baseData;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
85
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
86 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
87 * Create a new instance of the receiver based on the
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
88 * plain font and the data for it.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
89 * @param plainFont The base looked up font.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
90 * @param data The data used to look it up.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
91 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
92 this(Font plainFont, FontData[] data) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
93 baseFont = plainFont;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
94 baseData = data;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
95 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
96
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
97 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
98 * Dispose any of the fonts created for this record.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
99 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
100 void dispose() {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
101 baseFont.dispose();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
102 if (boldFont !is null) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
103 boldFont.dispose();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
104 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
105 if (italicFont !is null) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
106 italicFont.dispose();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
107 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
108 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
109
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
110 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
111 * Return the base Font.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
112 * @return Font
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
113 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
114 public Font getBaseFont() {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
115 return baseFont;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
116 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
117
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
118 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
119 * Return the bold Font. Create a bold version
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
120 * of the base font to get it.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
121 * @return Font
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
122 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
123 public Font getBoldFont() {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
124 if (boldFont !is null) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
125 return boldFont;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
126 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
127
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
128 FontData[] boldData = getModifiedFontData(DWT.BOLD);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
129 boldFont = new Font(Display.getCurrent(), boldData);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
130 return boldFont;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
131 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
132
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
133 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
134 * Get a version of the base font data with the specified
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
135 * style.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
136 * @param style the new style
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
137 * @return the font data with the style {@link FontData#FontData(String, int, int)}
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
138 * @see DWT#ITALIC
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
139 * @see DWT#NORMAL
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
140 * @see DWT#BOLD
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
141 * @todo Generated comment
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
142 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
143 private FontData[] getModifiedFontData(int style) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
144 FontData[] styleData = new FontData[baseData.length];
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
145 for (int i = 0; i < styleData.length; i++) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
146 FontData base = baseData[i];
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
147 styleData[i] = new FontData(base.getName(), base.getHeight(),
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
148 base.getStyle() | style);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
149 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
150
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
151 return styleData;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
152 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
153
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
154 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
155 * Return the italic Font. Create an italic version of the
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
156 * base font to get it.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
157 * @return Font
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
158 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
159 public Font getItalicFont() {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
160 if (italicFont !is null) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
161 return italicFont;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
162 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
163
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
164 FontData[] italicData = getModifiedFontData(DWT.ITALIC);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
165 italicFont = new Font(Display.getCurrent(), italicData);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
166 return italicFont;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
167 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
168
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
169 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
170 * Add any fonts that were allocated for this record to the
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
171 * stale fonts. Anything that matches the default font will
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
172 * be skipped.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
173 * @param defaultFont The system default.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
174 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
175 void addAllocatedFontsToStale(Font defaultFont) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
176 //Return all of the fonts allocated by the receiver.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
177 //if any of them are the defaultFont then don't bother.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
178 if (defaultFont !is baseFont && baseFont !is null) {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
179 staleFonts.add(baseFont);
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
180 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
181 if (defaultFont !is boldFont && boldFont !is null) {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
182 staleFonts.add(boldFont);
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
183 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
184 if (defaultFont !is italicFont && italicFont !is null) {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
185 staleFonts.add(italicFont);
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
186 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
187 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
188 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
189
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
190 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
191 * Table of known fonts, keyed by symbolic font name
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
192 * (key type: <code>String</code>,
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
193 * value type: <code>FontRecord</code>.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
194 */
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
195 private Map stringToFontRecord;
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
196
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
197 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
198 * Table of known font data, keyed by symbolic font name
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
199 * (key type: <code>String</code>,
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
200 * value type: <code>dwt.graphics.FontData[]</code>).
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
201 */
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
202 private Map stringToFontData;
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
203
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
204 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
205 * Collection of Fonts that are now stale to be disposed
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
206 * when it is safe to do so (i.e. on shutdown).
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
207 * @see List
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
208 */
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
209 private List staleFonts;
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
210
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
211 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
212 * Runnable that cleans up the manager on disposal of the display.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
213 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
214 protected Runnable displayRunnable;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
215
90
7ffeace6c47f Update 3.4M7 to 3.4
Frank Benoit <benoit@tionex.de>
parents: 63
diff changeset
216 private bool displayDisposeHooked;
7ffeace6c47f Update 3.4M7 to 3.4
Frank Benoit <benoit@tionex.de>
parents: 63
diff changeset
217
7ffeace6c47f Update 3.4M7 to 3.4
Frank Benoit <benoit@tionex.de>
parents: 63
diff changeset
218 private final bool cleanOnDisplayDisposal;
7ffeace6c47f Update 3.4M7 to 3.4
Frank Benoit <benoit@tionex.de>
parents: 63
diff changeset
219
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
220 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
221 * Creates an empty font registry.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
222 * <p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
223 * There must be an DWT Display created in the current
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
224 * thread before calling this method.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
225 * </p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
226 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
227 public this() {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
228 this(Display.getCurrent(), true);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
229 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
230
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
231 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
232 * Creates a font registry and initializes its content from
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
233 * a property file.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
234 * <p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
235 * There must be an DWT Display created in the current
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
236 * thread before calling this method.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
237 * </p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
238 * <p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
239 * The OS name (retrieved using <code>System.getProperty("os.name")</code>)
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
240 * is converted to lowercase, purged of whitespace, and appended
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
241 * as suffix (separated by an underscore <code>'_'</code>) to the given
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
242 * location string to yield the base name of a resource bundle
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
243 * acceptable to <code>ResourceBundle.getBundle</code>.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
244 * The standard Java resource bundle mechanism is then used to locate
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
245 * and open the appropriate properties file, taking into account
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
246 * locale specific variations.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
247 * </p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
248 * <p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
249 * For example, on the Windows 2000 operating system the location string
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
250 * <code>"com.example.myapp.Fonts"</code> yields the base name
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
251 * <code>"com.example.myapp.Fonts_windows2000"</code>. For the US English locale,
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
252 * this further elaborates to the resource bundle name
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
253 * <code>"com.example.myapp.Fonts_windows2000_en_us"</code>.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
254 * </p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
255 * <p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
256 * If no appropriate OS-specific resource bundle is found, the
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
257 * process is repeated using the location as the base bundle name.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
258 * </p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
259 * <p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
260 * The property file contains entries that look like this:
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
261 * <pre>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
262 * textfont.0=MS Sans Serif-regular-10
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
263 * textfont.1=Times New Roman-regular-10
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
264 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
265 * titlefont.0=MS Sans Serif-regular-12
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
266 * titlefont.1=Times New Roman-regular-12
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
267 * </pre>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
268 * Each entry maps a symbolic font names (the font registry keys) with
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
269 * a "<code>.<it>n</it></code> suffix to standard font names
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
270 * on the right. The suffix indicated order of preference:
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
271 * "<code>.0</code>" indicates the first choice,
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
272 * "<code>.1</code>" indicates the second choice, and so on.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
273 * </p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
274 * The following example shows how to use the font registry:
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
275 * <pre>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
276 * FontRegistry registry = new FontRegistry("com.example.myapp.fonts");
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
277 * Font font = registry.get("textfont");
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
278 * control.setFont(font);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
279 * ...
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
280 * </pre>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
281 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
282 * @param location the name of the resource bundle
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
283 * @param loader the ClassLoader to use to find the resource bundle
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
284 * @exception MissingResourceException if the resource bundle cannot be found
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
285 * @since 2.1
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
286 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
287 public this(String location, /+ClassLoader+/Object loader){
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
288 initInstance();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
289 Display display = Display.getCurrent();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
290 Assert.isNotNull(display);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
291 // FIXE: need to respect loader
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
292 //readResourceBundle(location, loader);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
293 readResourceBundle(location);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
294
90
7ffeace6c47f Update 3.4M7 to 3.4
Frank Benoit <benoit@tionex.de>
parents: 63
diff changeset
295 cleanOnDisplayDisposal = true;
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
296 hookDisplayDispose(display);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
297 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
298
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
299 private void initInstance(){
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
300 displayRunnable = new class Runnable {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
301 public void run() {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
302 clearCaches();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
303 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
304 };
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
305 stringToFontRecord = new HashMap(7);
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
306 stringToFontData = new HashMap(7);
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
307 staleFonts = new ArrayList();
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
308 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
309
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
310 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
311 * Load the FontRegistry using the ClassLoader from the PlatformUI
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
312 * plug-in
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
313 * @param location the location to read the resource bundle from
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
314 * @throws MissingResourceException Thrown if a resource is missing
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
315 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
316 public this(String location) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
317 // FIXE:
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
318 // this(location, WorkbenchPlugin.getDefault().getDescriptor().getPluginClassLoader());
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
319 this(location, null);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
320 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
321
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
322 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
323 * Read the resource bundle at location. Look for a file with the
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
324 * extension _os_ws first, then _os then just the name.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
325 * @param location - String - the location of the file.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
326 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
327
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
328 private void readResourceBundle(String location) {
39
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
329 // String osname = System.getProperty("os.name").trim(); //$NON-NLS-1$
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
330 // String wsname = DWT.getPlatform();
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
331 // osname = StringConverter.removeWhiteSpaces(osname).toLowerCase();
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
332 // wsname = StringConverter.removeWhiteSpaces(wsname).toLowerCase();
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
333 // String OSLocation = location;
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
334 // String WSLocation = location;
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
335 ResourceBundle bundle = null;
39
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
336 // if (osname !is null) {
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
337 // OSLocation = location ~ "_" ~ osname; //$NON-NLS-1$
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
338 // if (wsname !is null) {
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
339 // WSLocation = OSLocation ~ "_" ~ wsname; //$NON-NLS-1$
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
340 // }
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
341 // }
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
342 String errorLocation = "dwtx.jface.resource.FontRegistry properties";
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
343 const char[] prefix = "dwtx.jface.resource.jfacefonts_";
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
344 const char[] postfix = ".properties";
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
345 version( linux ){
49
115258985f10 JHashMapT into FontRegistry
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
346 ImportData propdata = getImportData!( prefix ~ "linux_gtk" ~ postfix );
39
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
347 }
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
348 else version( Windows ){
49
115258985f10 JHashMapT into FontRegistry
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
349 ImportData propdata;
41
1ab001d67011 implement win version detection
Frank Benoit <benoit@tionex.de>
parents: 39
diff changeset
350 if( OS.IsWin95 && OS.WIN32_VERSION >= OS.VERSION (4, 10 )){
49
115258985f10 JHashMapT into FontRegistry
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
351 propdata = getImportData!( prefix ~ "windows98" ~ postfix );
41
1ab001d67011 implement win version detection
Frank Benoit <benoit@tionex.de>
parents: 39
diff changeset
352 }
1ab001d67011 implement win version detection
Frank Benoit <benoit@tionex.de>
parents: 39
diff changeset
353 else if( OS.WIN32_VERSION >= OS.VERSION (5, 1 )){
49
115258985f10 JHashMapT into FontRegistry
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
354 propdata = getImportData!( prefix ~ "windowsxp" ~ postfix );
41
1ab001d67011 implement win version detection
Frank Benoit <benoit@tionex.de>
parents: 39
diff changeset
355 }
1ab001d67011 implement win version detection
Frank Benoit <benoit@tionex.de>
parents: 39
diff changeset
356 else if( OS.WIN32_VERSION >= OS.VERSION (5, 0)){
49
115258985f10 JHashMapT into FontRegistry
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
357 propdata = getImportData!( prefix ~ "windows2000" ~ postfix );
41
1ab001d67011 implement win version detection
Frank Benoit <benoit@tionex.de>
parents: 39
diff changeset
358 }
1ab001d67011 implement win version detection
Frank Benoit <benoit@tionex.de>
parents: 39
diff changeset
359 else if( OS.WIN32_VERSION >= OS.VERSION (4, 0)){
49
115258985f10 JHashMapT into FontRegistry
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
360 propdata = getImportData!( prefix ~ "windowsnt" ~ postfix );
41
1ab001d67011 implement win version detection
Frank Benoit <benoit@tionex.de>
parents: 39
diff changeset
361 }
1ab001d67011 implement win version detection
Frank Benoit <benoit@tionex.de>
parents: 39
diff changeset
362 else{
1ab001d67011 implement win version detection
Frank Benoit <benoit@tionex.de>
parents: 39
diff changeset
363 assert( false, "TODO: detect windows version" );
1ab001d67011 implement win version detection
Frank Benoit <benoit@tionex.de>
parents: 39
diff changeset
364 }
39
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
365 }
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
366 else {
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
367 static assert( false, "unknown plattform" );
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
368 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
369
39
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
370 // try {
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
371 bundle = ResourceBundle.getBundle(propdata);
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
372 readResourceBundle(bundle, errorLocation);
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
373 // } catch (MissingResourceException wsException) {
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
374 // try {
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
375 // bundle = ResourceBundle.getBundle(OSLocation);
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
376 // readResourceBundle(bundle, WSLocation);
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
377 // } catch (MissingResourceException osException) {
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
378 // if (location !is OSLocation) {
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
379 // bundle = ResourceBundle.getBundle(location);
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
380 // readResourceBundle(bundle, WSLocation);
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
381 // } else {
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
382 // throw osException;
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
383 // }
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
384 // }
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
385 // }
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
386 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
387
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
388 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
389 * Creates an empty font registry.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
390 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
391 * @param display the Display
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
392 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
393 public this(Display display) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
394 this(display, true);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
395 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
396
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
397 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
398 * Creates an empty font registry.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
399 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
400 * @param display
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
401 * the <code>Display</code>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
402 * @param cleanOnDisplayDisposal
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
403 * whether all fonts allocated by this <code>FontRegistry</code>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
404 * should be disposed when the display is disposed
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
405 * @since 3.1
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
406 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
407 public this(Display display, bool cleanOnDisplayDisposal) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
408 initInstance();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
409 Assert.isNotNull(display);
90
7ffeace6c47f Update 3.4M7 to 3.4
Frank Benoit <benoit@tionex.de>
parents: 63
diff changeset
410 this.cleanOnDisplayDisposal = cleanOnDisplayDisposal;
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
411 if (cleanOnDisplayDisposal) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
412 hookDisplayDispose(display);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
413 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
414 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
415
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
416 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
417 * Find the first valid fontData in the provided list. If none are valid
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
418 * return the first one regardless. If the list is empty return null. Return
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
419 * <code>null</code> if one cannot be found.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
420 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
421 * @param fonts the font list
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
422 * @param display the display used
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
423 * @return the font data of the like describe above
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
424 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
425 * @deprecated use bestDataArray in order to support Motif multiple entry
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
426 * fonts.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
427 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
428 public FontData bestData(FontData[] fonts, Display display) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
429 for (int i = 0; i < fonts.length; i++) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
430 FontData fd = fonts[i];
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
431
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
432 if (fd is null) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
433 break;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
434 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
435
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
436 FontData[] fixedFonts = display.getFontList(fd.getName(), false);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
437 if (isFixedFont(fixedFonts, fd)) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
438 return fd;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
439 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
440
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
441 FontData[] scalableFonts = display.getFontList(fd.getName(), true);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
442 if (scalableFonts.length > 0) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
443 return fd;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
444 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
445 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
446
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
447 //None of the provided datas are valid. Return the
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
448 //first one as it is at least the first choice.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
449 if (fonts.length > 0) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
450 return fonts[0];
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
451 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
452
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
453 //Nothing specified
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
454 return null;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
455 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
456
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
457 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
458 * Find the first valid fontData in the provided list.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
459 * If none are valid return the first one regardless.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
460 * If the list is empty return <code>null</code>.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
461 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
462 * @param fonts list of fonts
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
463 * @param display the display
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
464 * @return font data like described above
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
465 * @deprecated use filterData in order to preserve
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
466 * multiple entry fonts on Motif
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
467 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
468 public FontData[] bestDataArray(FontData[] fonts, Display display) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
469
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
470 FontData bestData = bestData(fonts, display);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
471 if (bestData is null) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
472 return null;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
473 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
474
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
475 FontData[] datas = new FontData[1];
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
476 datas[0] = bestData;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
477 return datas;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
478 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
479
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
480 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
481 * Removes from the list all fonts that do not exist in this system.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
482 * If none are valid, return the first irregardless. If the list is
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
483 * empty return <code>null</code>.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
484 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
485 * @param fonts the fonts to check
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
486 * @param display the display to check against
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
487 * @return the list of fonts that have been found on this system
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
488 * @since 3.1
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
489 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
490 public FontData [] filterData(FontData [] fonts, Display display) {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
491 ArrayList good = new ArrayList(fonts.length);
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
492 for (int i = 0; i < fonts.length; i++) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
493 FontData fd = fonts[i];
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
494
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
495 if (fd is null) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
496 continue;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
497 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
498
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
499 FontData[] fixedFonts = display.getFontList(fd.getName(), false);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
500 if (isFixedFont(fixedFonts, fd)) {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
501 good.add(fd);
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
502 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
503
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
504 FontData[] scalableFonts = display.getFontList(fd.getName(), true);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
505 if (scalableFonts.length > 0) {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
506 good.add(fd);
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
507 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
508 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
509
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
510
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
511 //None of the provided datas are valid. Return the
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
512 //first one as it is at least the first choice.
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
513 if (good.isEmpty() && fonts.length > 0) {
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
514 good.add(fonts[0]);
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
515 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
516 else if (fonts.length is 0) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
517 return null;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
518 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
519
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
520 return arraycast!(FontData)(good.toArray());
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
521 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
522
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
523
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
524 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
525 * Creates a new font with the given font datas or <code>null</code>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
526 * if there is no data.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
527 * @return FontRecord for the new Font or <code>null</code>.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
528 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
529 private FontRecord createFont(String symbolicName, FontData[] fonts) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
530 Display display = Display.getCurrent();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
531 if (display is null) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
532 return null;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
533 }
90
7ffeace6c47f Update 3.4M7 to 3.4
Frank Benoit <benoit@tionex.de>
parents: 63
diff changeset
534 if (cleanOnDisplayDisposal && !displayDisposeHooked) {
7ffeace6c47f Update 3.4M7 to 3.4
Frank Benoit <benoit@tionex.de>
parents: 63
diff changeset
535 hookDisplayDispose(display);
7ffeace6c47f Update 3.4M7 to 3.4
Frank Benoit <benoit@tionex.de>
parents: 63
diff changeset
536 }
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
537
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
538 FontData[] validData = filterData(fonts, display);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
539 if (validData.length is 0) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
540 //Nothing specified
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
541 return null;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
542 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
543
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
544 //Do not fire the update from creation as it is not a property change
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
545 put(symbolicName, validData, false);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
546 Font newFont = new Font(display, validData);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
547 return new FontRecord(newFont, validData);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
548 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
549
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
550 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
551 * Calculates the default font and returns the result.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
552 * This method creates a font that must be disposed.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
553 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
554 Font calculateDefaultFont() {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
555 Display current = Display.getCurrent();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
556 if (current is null) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
557 Shell shell = new Shell();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
558 Font font = new Font(null, shell.getFont().getFontData());
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
559 shell.dispose();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
560 return font;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
561 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
562 return new Font(current, current.getSystemFont().getFontData());
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
563 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
564
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
565 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
566 * Returns the default font data. Creates it if necessary.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
567 * @return Font
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
568 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
569 public Font defaultFont() {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
570 return defaultFontRecord().getBaseFont();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
571 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
572
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
573 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
574 * Returns the font descriptor for the font with the given symbolic
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
575 * font name. Returns the default font if there is no special value
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
576 * associated with that name
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
577 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
578 * @param symbolicName symbolic font name
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
579 * @return the font descriptor (never null)
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
580 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
581 * @since 3.3
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
582 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
583 public FontDescriptor getDescriptor(String symbolicName) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
584 Assert.isTrue(symbolicName.length > 0);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
585 return FontDescriptor.createFrom(getFontData(symbolicName));
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
586 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
587
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
588
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
589
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
590 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
591 * Returns the default font record.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
592 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
593 private FontRecord defaultFontRecord() {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
594
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
595 FontRecord record = cast(FontRecord) stringToFontRecord
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
596 .get(JFaceResources.DEFAULT_FONT);
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
597 if (record is null) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
598 Font defaultFont = calculateDefaultFont();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
599 record = createFont(JFaceResources.DEFAULT_FONT, defaultFont
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
600 .getFontData());
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
601 defaultFont.dispose();
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
602 stringToFontRecord.put(stringcast(JFaceResources.DEFAULT_FONT), record);
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
603 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
604 return record;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
605 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
606
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
607 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
608 * Returns the default font data. Creates it if necessary.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
609 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
610 private FontData[] defaultFontData() {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
611 return defaultFontRecord().baseData;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
612 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
613
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
614 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
615 * Returns the font data associated with the given symbolic font name.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
616 * Returns the default font data if there is no special value associated
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
617 * with that name.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
618 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
619 * @param symbolicName symbolic font name
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
620 * @return the font
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
621 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
622 public FontData[] getFontData(String symbolicName) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
623
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
624 Assert.isTrue(symbolicName.length > 0);
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
625 Object result = stringToFontData.get(symbolicName);
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
626 if (result is null) {
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
627 return defaultFontData();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
628 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
629
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
630 return arrayFromObject!(FontData)(result);
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
631 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
632
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
633 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
634 * Returns the font associated with the given symbolic font name.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
635 * Returns the default font if there is no special value associated
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
636 * with that name.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
637 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
638 * @param symbolicName symbolic font name
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
639 * @return the font
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
640 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
641 public Font get(String symbolicName) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
642
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
643 return getFontRecord(symbolicName).getBaseFont();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
644 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
645
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
646 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
647 * Returns the bold font associated with the given symbolic font name.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
648 * Returns the bolded default font if there is no special value associated
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
649 * with that name.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
650 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
651 * @param symbolicName symbolic font name
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
652 * @return the font
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
653 * @since 3.0
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
654 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
655 public Font getBold(String symbolicName) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
656
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
657 return getFontRecord(symbolicName).getBoldFont();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
658 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
659
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
660 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
661 * Returns the italic font associated with the given symbolic font name.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
662 * Returns the italic default font if there is no special value associated
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
663 * with that name.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
664 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
665 * @param symbolicName symbolic font name
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
666 * @return the font
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
667 * @since 3.0
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
668 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
669 public Font getItalic(String symbolicName) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
670
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
671 return getFontRecord(symbolicName).getItalicFont();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
672 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
673
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
674 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
675 * Return the font record for the key.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
676 * @param symbolicName The key for the record.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
677 * @return FontRecird
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
678 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
679 private FontRecord getFontRecord(String symbolicName) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
680 Assert.isNotNull(symbolicName);
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
681 auto result = stringToFontRecord.get(symbolicName);
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
682 if (result !is null) {
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
683 return cast(FontRecord) result;
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
684 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
685
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
686 result = stringToFontData.get(symbolicName);
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
687
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
688 FontRecord fontRecord;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
689
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
690 if (result is null) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
691 fontRecord = defaultFontRecord();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
692 } else {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
693 fontRecord = createFont(symbolicName, arrayFromObject!(FontData)(result));
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
694 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
695
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
696 if (fontRecord is null) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
697 fontRecord = defaultFontRecord();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
698 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
699
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
700 stringToFontRecord.put(symbolicName.dup, fontRecord);
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
701 return fontRecord;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
702
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
703 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
704
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
705 /* (non-Javadoc)
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
706 * @see dwtx.jface.resource.ResourceRegistry#getKeySet()
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
707 */
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
708 public override Set getKeySet() {
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
709 return Collections.unmodifiableSet(stringToFontData.keySet());
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
710 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
711
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
712 /* (non-Javadoc)
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
713 * @see dwtx.jface.resource.ResourceRegistry#hasValueFor(java.lang.String)
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
714 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 41
diff changeset
715 public override bool hasValueFor(String fontKey) {
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
716 return stringToFontData.containsKey(fontKey);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
717 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
718
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
719 /* (non-Javadoc)
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
720 * @see dwtx.jface.resource.ResourceRegistry#clearCaches()
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
721 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 41
diff changeset
722 protected override void clearCaches() {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
723
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
724 Iterator iterator = stringToFontRecord.values().iterator();
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
725 while (iterator.hasNext()) {
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
726 Object next = iterator.next();
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
727 (cast(FontRecord) next).dispose();
39
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
728 }
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
729
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
730 disposeFonts(staleFonts.iterator());
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
731 stringToFontRecord.clear();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
732 staleFonts.clear();
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
733
90
7ffeace6c47f Update 3.4M7 to 3.4
Frank Benoit <benoit@tionex.de>
parents: 63
diff changeset
734 displayDisposeHooked = false;
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
735 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
736
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
737 /**
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
738 * Dispose of all of the fonts in this iterator.
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
739 * @param iterator over Collection of Font
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
740 */
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
741 private void disposeFonts(Iterator iterator) {
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
742 while (iterator.hasNext()) {
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
743 Object next = iterator.next();
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
744 (cast(Font) next).dispose();
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
745 }
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
746 }
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
747
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
748 /**
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
749 * Hook a dispose listener on the DWT display.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
750 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
751 private void hookDisplayDispose(Display display) {
90
7ffeace6c47f Update 3.4M7 to 3.4
Frank Benoit <benoit@tionex.de>
parents: 63
diff changeset
752 displayDisposeHooked = true;
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
753 display.disposeExec(displayRunnable);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
754 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
755
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
756 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
757 * Checks whether the given font is in the list of fixed fonts.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
758 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
759 private bool isFixedFont(FontData[] fixedFonts, FontData fd) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
760 // Can't use FontData.equals() since some values aren't
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
761 // set if a fontdata isn't used.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
762 int height = fd.getHeight();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
763 String name = fd.getName();
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
764 for (int i = 0; i < fixedFonts.length; i++) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
765 FontData fixed = fixedFonts[i];
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
766 if (fixed.getHeight() is height && fixed.getName().equals(name)) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
767 return true;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
768 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
769 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
770 return false;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
771 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
772
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
773 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
774 * Converts a String into a FontData object.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
775 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
776 private FontData makeFontData(String value) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
777 try {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
778 return StringConverter.asFontData(value.trim());
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
779 } catch (DataFormatException e) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
780 throw new MissingResourceException(
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
781 "Wrong font data format. Value is: \"" ~ value ~ "\"", this.classinfo.name, value); //$NON-NLS-2$//$NON-NLS-1$
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
782 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
783 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
784
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
785 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
786 * Adds (or replaces) a font to this font registry under the given
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
787 * symbolic name.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
788 * <p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
789 * A property change event is reported whenever the mapping from
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
790 * a symbolic name to a font changes. The source of the event is
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
791 * this registry; the property name is the symbolic font name.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
792 * </p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
793 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
794 * @param symbolicName the symbolic font name
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
795 * @param fontData an Array of FontData
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
796 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
797 public void put(String symbolicName, FontData[] fontData) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
798 put(symbolicName, fontData, true);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
799 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
800
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
801 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
802 * Adds (or replaces) a font to this font registry under the given
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
803 * symbolic name.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
804 * <p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
805 * A property change event is reported whenever the mapping from
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
806 * a symbolic name to a font changes. The source of the event is
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
807 * this registry; the property name is the symbolic font name.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
808 * </p>
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
809 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
810 * @param symbolicName the symbolic font name
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
811 * @param fontData an Array of FontData
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
812 * @param update - fire a font mapping changed if true. False
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
813 * if this method is called from the get method as no setting
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
814 * has changed.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
815 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
816 private void put(String symbolicName, FontData[] fontData, bool update) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
817
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
818 Assert.isNotNull(symbolicName);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
819 Assert.isTrue(fontData.length > 0 );
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
820
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
821 FontData[] existing = arrayFromObject!(FontData)( stringToFontData.get(stringcast(symbolicName)));
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
822 if (ArrayEquals(existing, fontData)) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
823 return;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
824 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
825
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
826 FontRecord oldFont = cast(FontRecord) stringToFontRecord.remove(stringcast(symbolicName));
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
827 stringToFontData.put(symbolicName.dup, new ArrayWrapperObject(fontData));
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
828 if (update) {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
829 fireMappingChanged(symbolicName, new ArrayWrapperT!(FontData)(existing), new ArrayWrapperObject(arraycast!(Object)(fontData)));
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
830 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
831
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
832 if (oldFont !is null) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
833 oldFont.addAllocatedFontsToStale(defaultFontRecord().getBaseFont());
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
834 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
835 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
836
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
837 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
838 * Reads the resource bundle. This puts FontData[] objects
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
839 * in the mapping table. These will lazily be turned into
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
840 * real Font objects when requested.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
841 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
842 private void readResourceBundle(ResourceBundle bundle, String bundleName) {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
843 auto keys = bundle.getKeys();
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
844 foreach ( key; keys ) {
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
845 int pos = key.lastIndexOf('.');
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
846 if (pos is -1) {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
847 stringToFontData.put(stringcast(key.dup), new ArrayWrapperObject(arraycast!(Object)([ makeFontData(bundle
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
848 .getString(key)) ])));
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
849 } else {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
850 String name = key.substring(0, pos);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
851 int i = 0;
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
852 try {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
853 i = tango.text.convert.Integer.toInt(key.substring(pos + 1));
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
854 } catch (IllegalArgumentException e) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
855 //Panic the file can not be parsed.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
856 throw new MissingResourceException(
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
857 "Wrong key format ", bundleName, key); //$NON-NLS-1$
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
858 }
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
859 FontData[] elements = arrayFromObject!(FontData)( stringToFontData.get(stringcast(name)));
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
860 if (elements is null) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
861 elements = new FontData[8];
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
862 stringToFontData.put(name.dup, new ArrayWrapperObject(elements));
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
863 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
864 if (i > elements.length) {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
865 FontData[] na = new FontData[i + 8];
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
866 System.arraycopy(elements, 0, na, 0, elements.length);
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
867 elements = na;
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
868 stringToFontData.put(name.dup, new ArrayWrapperObject(elements));
7
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
869 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
870 elements[i] = makeFontData(bundle.getString(key));
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
871 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
872 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
873 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
874
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
875 /**
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
876 * Returns the font descriptor for the JFace default font.
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
877 *
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
878 * @return the font descriptor for the JFace default font
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
879 * @since 3.3
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
880 */
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
881 public FontDescriptor defaultFontDescriptor() {
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
882 return FontDescriptor.createFrom(defaultFontData());
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
883 }
8a302fdb4140 Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
884 }