Browse Source

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 years ago
parent
commit
963c6c458b

+ 73
- 4
src/com/dmdirc/addons/ui_swing/components/text/TextLabel.java View File

@@ -22,19 +22,28 @@
22 22
 
23 23
 package com.dmdirc.addons.ui_swing.components.text;
24 24
 
25
+import com.dmdirc.util.URLBuilder;
26
+
25 27
 import java.awt.Color;
26 28
 import java.awt.Font;
27 29
 import java.awt.Insets;
30
+import java.net.URL;
28 31
 
29 32
 import javax.swing.JTextPane;
30 33
 import javax.swing.UIManager;
31 34
 import javax.swing.plaf.basic.BasicTextPaneUI;
32 35
 import javax.swing.text.DefaultStyledDocument;
36
+import javax.swing.text.Element;
33 37
 import javax.swing.text.SimpleAttributeSet;
34 38
 import javax.swing.text.StyleConstants;
35 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 43
 import javax.swing.text.html.HTMLDocument;
37 44
 import javax.swing.text.html.HTMLEditorKit;
45
+import javax.swing.text.html.HTMLEditorKit.HTMLFactory;
46
+import javax.swing.text.html.ImageView;
38 47
 import javax.swing.text.html.StyleSheet;
39 48
 
40 49
 /**
@@ -75,18 +84,19 @@ public class TextLabel extends JTextPane {
75 84
      */
76 85
     public TextLabel(final String text, final boolean justified) {
77 86
         super(new DefaultStyledDocument());
78
-        setEditorKit(new HTMLEditorKit());
87
+        setEditorKit(new DMDircHTMLEditorKit());
79 88
         setUI(new BasicTextPaneUI());
80 89
 
81
-        final StyleSheet styleSheet = ((HTMLDocument) getDocument()).getStyleSheet();
90
+        final StyleSheet styleSheet = ((HTMLDocument) getDocument()).
91
+                getStyleSheet();
82 92
         final Font font = UIManager.getFont("Label.font");
83 93
         final Color colour = UIManager.getColor("Label.foreground");
84
-        styleSheet.addRule("body " 
94
+        styleSheet.addRule("body "
85 95
                 + "{ font-family: " + font.getFamily() + "; "
86 96
                 + "font-size: " + font.getSize() + "pt; }");
87 97
         styleSheet.addRule("p { margin: 0; }");
88 98
         styleSheet.addRule("* { color: rgb(" + colour.getRed()
89
-                + ", " + colour.getGreen() + ", " + colour.getBlue()+"); }");
99
+                + ", " + colour.getGreen() + ", " + colour.getBlue() + "); }");
90 100
 
91 101
         setOpaque(false);
92 102
         setEditable(false);
@@ -116,3 +126,62 @@ public class TextLabel extends JTextPane {
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 View File

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

Loading…
Cancel
Save