浏览代码

Adds DMDircHTMLEditor kit to TextLabel, this enables the use of DMDirc URLs in the HTML contained within these labels

Change-Id: I9b183b113f740e4549239359b7070e487dfb0fe7
Reviewed-on: http://gerrit.dmdirc.com/756
Automatic-Compile: Chris Smith <chris@dmdirc.com>
Reviewed-by: Chris Smith <chris@dmdirc.com>
tags/0.6.3
Gregory Holmes 14 年前
父节点
当前提交
963c6c458b

+ 73
- 4
src/com/dmdirc/addons/ui_swing/components/text/TextLabel.java 查看文件

22
 
22
 
23
 package com.dmdirc.addons.ui_swing.components.text;
23
 package com.dmdirc.addons.ui_swing.components.text;
24
 
24
 
25
+import com.dmdirc.util.URLBuilder;
26
+
25
 import java.awt.Color;
27
 import java.awt.Color;
26
 import java.awt.Font;
28
 import java.awt.Font;
27
 import java.awt.Insets;
29
 import java.awt.Insets;
30
+import java.net.URL;
28
 
31
 
29
 import javax.swing.JTextPane;
32
 import javax.swing.JTextPane;
30
 import javax.swing.UIManager;
33
 import javax.swing.UIManager;
31
 import javax.swing.plaf.basic.BasicTextPaneUI;
34
 import javax.swing.plaf.basic.BasicTextPaneUI;
32
 import javax.swing.text.DefaultStyledDocument;
35
 import javax.swing.text.DefaultStyledDocument;
36
+import javax.swing.text.Element;
33
 import javax.swing.text.SimpleAttributeSet;
37
 import javax.swing.text.SimpleAttributeSet;
34
 import javax.swing.text.StyleConstants;
38
 import javax.swing.text.StyleConstants;
35
 import javax.swing.text.StyledDocument;
39
 import javax.swing.text.StyledDocument;
40
+import javax.swing.text.View;
41
+import javax.swing.text.ViewFactory;
42
+import javax.swing.text.html.HTML;
36
 import javax.swing.text.html.HTMLDocument;
43
 import javax.swing.text.html.HTMLDocument;
37
 import javax.swing.text.html.HTMLEditorKit;
44
 import javax.swing.text.html.HTMLEditorKit;
45
+import javax.swing.text.html.HTMLEditorKit.HTMLFactory;
46
+import javax.swing.text.html.ImageView;
38
 import javax.swing.text.html.StyleSheet;
47
 import javax.swing.text.html.StyleSheet;
39
 
48
 
40
 /**
49
 /**
75
      */
84
      */
76
     public TextLabel(final String text, final boolean justified) {
85
     public TextLabel(final String text, final boolean justified) {
77
         super(new DefaultStyledDocument());
86
         super(new DefaultStyledDocument());
78
-        setEditorKit(new HTMLEditorKit());
87
+        setEditorKit(new DMDircHTMLEditorKit());
79
         setUI(new BasicTextPaneUI());
88
         setUI(new BasicTextPaneUI());
80
 
89
 
81
-        final StyleSheet styleSheet = ((HTMLDocument) getDocument()).getStyleSheet();
90
+        final StyleSheet styleSheet = ((HTMLDocument) getDocument()).
91
+                getStyleSheet();
82
         final Font font = UIManager.getFont("Label.font");
92
         final Font font = UIManager.getFont("Label.font");
83
         final Color colour = UIManager.getColor("Label.foreground");
93
         final Color colour = UIManager.getColor("Label.foreground");
84
-        styleSheet.addRule("body " 
94
+        styleSheet.addRule("body "
85
                 + "{ font-family: " + font.getFamily() + "; "
95
                 + "{ font-family: " + font.getFamily() + "; "
86
                 + "font-size: " + font.getSize() + "pt; }");
96
                 + "font-size: " + font.getSize() + "pt; }");
87
         styleSheet.addRule("p { margin: 0; }");
97
         styleSheet.addRule("p { margin: 0; }");
88
         styleSheet.addRule("* { color: rgb(" + colour.getRed()
98
         styleSheet.addRule("* { color: rgb(" + colour.getRed()
89
-                + ", " + colour.getGreen() + ", " + colour.getBlue()+"); }");
99
+                + ", " + colour.getGreen() + ", " + colour.getBlue() + "); }");
90
 
100
 
91
         setOpaque(false);
101
         setOpaque(false);
92
         setEditable(false);
102
         setEditable(false);
116
         }
126
         }
117
     }
127
     }
118
 }
128
 }
129
+
130
+/**
131
+ * DMDirc html kit, extends HTMLEditor kit to use DMDircHTMLFactory.
132
+ */
133
+class DMDircHTMLEditorKit extends HTMLEditorKit {
134
+
135
+    private static final long serialVersionUID = 1;
136
+    private ViewFactory defaultFactory = new DMDircHTMLFactory();
137
+
138
+    /** {@inheritDoc} */
139
+    @Override
140
+    public ViewFactory getViewFactory() {
141
+        return defaultFactory;
142
+    }
143
+}
144
+
145
+/**
146
+ * DMDircHTML factory extends HTMLFactory to use DMDircImageView.
147
+ */
148
+class DMDircHTMLFactory extends HTMLFactory {
149
+
150
+    /** {@inheritDoc} */
151
+    @Override
152
+    public View create(Element elem) {
153
+        final View view = super.create(elem);
154
+        if (view instanceof ImageView) {
155
+            return new DMDircImageView(elem);
156
+        }
157
+        return view;
158
+    }
159
+}
160
+
161
+/**
162
+ * DMDirc image view, extends default image view but uses DMDirc URLBuilder.
163
+ */
164
+class DMDircImageView extends ImageView {
165
+
166
+    /**
167
+     * Creates a new DMDirc image view.
168
+     *
169
+     * @param elem element to view
170
+     */
171
+    public DMDircImageView(final Element elem) {
172
+        super(elem);
173
+    }
174
+
175
+    /**
176
+     * {@inheritDoc}
177
+     *
178
+     * @return URL to resource
179
+     */
180
+    @Override
181
+    public URL getImageURL() {
182
+        final String src = (String) getElement().getAttributes().
183
+                getAttribute(HTML.Attribute.SRC);
184
+
185
+        return src == null ? null : URLBuilder.buildURL(src);
186
+    }
187
+}

+ 0
- 1
src/com/dmdirc/addons/ui_swing/dialogs/prefs/CategoryPanel.java 查看文件

29
 import com.dmdirc.addons.ui_swing.components.ToolTipPanel;
29
 import com.dmdirc.addons.ui_swing.components.ToolTipPanel;
30
 import com.dmdirc.config.prefs.PreferencesCategory;
30
 import com.dmdirc.config.prefs.PreferencesCategory;
31
 
31
 
32
-import java.awt.Color;
33
 import java.awt.Window;
32
 import java.awt.Window;
34
 import java.util.Collections;
33
 import java.util.Collections;
35
 import java.util.HashMap;
34
 import java.util.HashMap;

正在加载...
取消
保存