Browse Source

Add a way to specify event colours.

pull/211/head
Chris Smith 9 years ago
parent
commit
e9f470f95a

+ 21
- 8
res/com/dmdirc/ui/messages/format.yml View File

@@ -1,9 +1,22 @@
1 1
 ---
2
-ChannelModeNoticeEvent: "-{{client}}:{{prefix}}{{channel.name}}- {{message}}"
3
-ChannelNoticeEvent: "-{{client}}:{{channel.name}}- {{message}}"
4
-ChannelMessageEvent: "<{{client}}> {{message}}"
5
-ChannelActionEvent: "* {{client}} {{message}}"
6
-ChannelSelfMessageEvent: "<{{client}}> {{message}}"
7
-ChannelSelfActionEvent: "* {{client}} {{message}}"
8
-ChannelSelfExternalMessageEvent: "<{{client}}> {{message}}"
9
-ChannelSelfExternalActionEvent: "* {{client}} {{message}}"
2
+ChannelModeNoticeEvent:
3
+  format: "-{{client}}:{{prefix}}{{channel.name}}- {{message}}"
4
+  colour: 5
5
+ChannelNoticeEvent:
6
+  format: "-{{client}}:{{channel.name}}- {{message}}"
7
+  colour: 5
8
+ChannelMessageEvent:
9
+  format: "<{{client}}> {{message}}"
10
+ChannelActionEvent:
11
+  format: "* {{client}} {{message}}"
12
+  colour: 6
13
+ChannelSelfMessageEvent:
14
+  format: "<{{client}}> {{message}}"
15
+ChannelSelfActionEvent:
16
+  format: "* {{client}} {{message}}"
17
+  colour: 6
18
+ChannelSelfExternalMessageEvent:
19
+  format: "<{{client}}> {{message}}"
20
+ChannelSelfExternalActionEvent:
21
+  format: "* {{client}} {{message}}"
22
+  colour: 6

+ 0
- 5
src/com/dmdirc/ui/messages/BackBuffer.java View File

@@ -26,11 +26,6 @@ import com.dmdirc.DMDircMBassador;
26 26
 import com.dmdirc.FrameContainer;
27 27
 import com.dmdirc.events.DisplayableEvent;
28 28
 import com.dmdirc.interfaces.config.AggregateConfigProvider;
29
-import com.dmdirc.ui.messages.ColourManagerFactory;
30
-import com.dmdirc.ui.messages.EventFormatter;
31
-import com.dmdirc.ui.messages.Formatter;
32
-import com.dmdirc.ui.messages.IRCDocument;
33
-import com.dmdirc.ui.messages.Styliser;
34 29
 
35 30
 import java.util.Date;
36 31
 

+ 48
- 0
src/com/dmdirc/ui/messages/EventFormat.java View File

@@ -0,0 +1,48 @@
1
+/*
2
+ * Copyright (c) 2006-2014 DMDirc Developers
3
+ *
4
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ * of this software and associated documentation files (the "Software"), to deal
6
+ * in the Software without restriction, including without limitation the rights
7
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ * copies of the Software, and to permit persons to whom the Software is
9
+ * furnished to do so, subject to the following conditions:
10
+ *
11
+ * The above copyright notice and this permission notice shall be included in
12
+ * all copies or substantial portions of the Software.
13
+ *
14
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
+ * SOFTWARE.
21
+ */
22
+
23
+package com.dmdirc.ui.messages;
24
+
25
+import com.dmdirc.util.colours.Colour;
26
+
27
+import com.google.auto.value.AutoValue;
28
+
29
+import java.util.Optional;
30
+
31
+/**
32
+ * Describes a format for an event.
33
+ */
34
+@AutoValue
35
+public abstract class EventFormat {
36
+
37
+    public abstract String getTemplate();
38
+
39
+    // TODO: This should probably be a generic set of properties.
40
+    public abstract Optional<Colour> getDefaultForegroundColour();
41
+
42
+    public static EventFormat create(
43
+            final String template,
44
+            final Optional<Colour> defaultForegroundColour) {
45
+        return new AutoValue_EventFormat(template, defaultForegroundColour);
46
+    }
47
+
48
+}

src/com/dmdirc/ui/messages/EventTemplateProvider.java → src/com/dmdirc/ui/messages/EventFormatProvider.java View File

@@ -27,16 +27,16 @@ import com.dmdirc.events.DisplayableEvent;
27 27
 import java.util.Optional;
28 28
 
29 29
 /**
30
- * Provides templates to be used for displayable events.
30
+ * Provides formats to be used for displayable events.
31 31
  */
32
-public interface EventTemplateProvider {
32
+public interface EventFormatProvider {
33 33
 
34 34
     /**
35
-     * Gets the template to be used, if any, for the given event type.
35
+     * Gets the format to be used, if any, for the given event type.
36 36
      *
37
-     * @param eventType The type of event to retrieve a template for.
38
-     * @return The template to use, or an absent optional if no template is defined.
37
+     * @param eventType The type of event to retrieve a format for.
38
+     * @return The format to use, or an absent optional if no format is defined.
39 39
      */
40
-    Optional<String> getTemplate(final Class<? extends DisplayableEvent> eventType);
40
+    Optional<EventFormat> getFormat(final Class<? extends DisplayableEvent> eventType);
41 41
 
42 42
 }

+ 6
- 6
src/com/dmdirc/ui/messages/EventFormatter.java View File

@@ -47,20 +47,20 @@ public class EventFormatter {
47 47
     private static final String ERROR_STRING = "<FormatError>";
48 48
 
49 49
     private final EventPropertyManager propertyManager;
50
-    private final EventTemplateProvider templateProvider;
50
+    private final EventFormatProvider formatProvider;
51 51
 
52 52
     @Inject
53 53
     public EventFormatter(final EventPropertyManager propertyManager,
54
-            final EventTemplateProvider templateProvider) {
54
+            final EventFormatProvider formatProvider) {
55 55
         this.propertyManager = propertyManager;
56
-        this.templateProvider = templateProvider;
56
+        this.formatProvider = formatProvider;
57 57
     }
58 58
 
59 59
     public Optional<String> format(final DisplayableEvent event) {
60
-        final Optional<String> template = templateProvider.getTemplate(event.getClass());
60
+        final Optional<EventFormat> template = formatProvider.getFormat(event.getClass());
61 61
 
62 62
         if (template.isPresent()) {
63
-            final StringBuilder builder = new StringBuilder(template.get());
63
+            final StringBuilder builder = new StringBuilder(template.get().getTemplate());
64 64
             int tagStart = builder.indexOf("{{");
65 65
             while (tagStart > -1) {
66 66
                 final int tagEnd = builder.indexOf("}}", tagStart);
@@ -68,7 +68,7 @@ public class EventFormatter {
68 68
                 builder.replace(tagStart, tagEnd + 2, getReplacement(event, tag));
69 69
                 tagStart = builder.indexOf("{{");
70 70
             }
71
-            return Optional.ofNullable(builder.toString());
71
+            return Optional.of(builder.toString());
72 72
         }
73 73
 
74 74
         return Optional.empty();

+ 7
- 3
src/com/dmdirc/ui/messages/UiMessagesModule.java View File

@@ -22,6 +22,7 @@
22 22
 
23 23
 package com.dmdirc.ui.messages;
24 24
 
25
+import com.dmdirc.ClientModule.GlobalConfig;
25 26
 import com.dmdirc.DMDircMBassador;
26 27
 import com.dmdirc.commandline.CommandLineOptionsModule.Directory;
27 28
 
@@ -42,10 +43,13 @@ public class UiMessagesModule {
42 43
 
43 44
     @Provides
44 45
     @Singleton
45
-    public EventTemplateProvider getTemplateProvider(@Directory(BASE) final Path directory,
46
+    public EventFormatProvider getTemplateProvider(
47
+            @Directory(BASE) final Path directory,
48
+            @GlobalConfig final ColourManager colourManager,
46 49
             final DMDircMBassador eventBus) {
47
-        final YamlEventTemplateProvider provider =
48
-                new YamlEventTemplateProvider(directory.resolve("format.yml"), eventBus);
50
+        final YamlEventFormatProvider provider =
51
+                new YamlEventFormatProvider(directory.resolve("format.yml"), eventBus,
52
+                        colourManager);
49 53
         provider.load();
50 54
         return provider;
51 55
     }

src/com/dmdirc/ui/messages/YamlEventTemplateProvider.java → src/com/dmdirc/ui/messages/YamlEventFormatProvider.java View File

@@ -26,6 +26,7 @@ import com.dmdirc.DMDircMBassador;
26 26
 import com.dmdirc.events.AppErrorEvent;
27 27
 import com.dmdirc.events.DisplayableEvent;
28 28
 import com.dmdirc.logger.ErrorLevel;
29
+import com.dmdirc.util.colours.Colour;
29 30
 
30 31
 import java.io.IOException;
31 32
 import java.io.InputStream;
@@ -41,20 +42,23 @@ import com.esotericsoftware.yamlbeans.YamlReader;
41 42
 import static com.dmdirc.util.YamlReaderUtils.asMap;
42 43
 
43 44
 /**
44
- * YAML-backed supplier of event templates.
45
+ * YAML-backed supplier of event formats.
45 46
  */
46
-public class YamlEventTemplateProvider implements EventTemplateProvider {
47
+public class YamlEventFormatProvider implements EventFormatProvider {
47 48
 
48 49
     /** The charset to use when reading and writing files. */
49 50
     private static final String CHARSET = "UTF-8";
50 51
 
51 52
     private final Path path;
52 53
     private final DMDircMBassador eventBus;
53
-    private final Map<String, String> formats = new HashMap<>();
54
+    private final ColourManager colourManager;
55
+    private final Map<String, EventFormat> formats = new HashMap<>();
54 56
 
55
-    public YamlEventTemplateProvider(final Path path, final DMDircMBassador eventBus) {
57
+    public YamlEventFormatProvider(final Path path, final DMDircMBassador eventBus,
58
+            final ColourManager colourManager) {
56 59
         this.path = path;
57 60
         this.eventBus = eventBus;
61
+        this.colourManager = colourManager;
58 62
     }
59 63
 
60 64
     public void load() {
@@ -82,7 +86,7 @@ public class YamlEventTemplateProvider implements EventTemplateProvider {
82 86
             final YamlReader yamlReader = new YamlReader(reader);
83 87
             final Object root = yamlReader.read();
84 88
             final Map<Object, Object> entries = asMap(root);
85
-            entries.forEach((k, v) -> formats.put(k.toString(), v.toString()));
89
+            entries.forEach((k, v) -> formats.put(k.toString(), readFormat(v)));
86 90
             yamlReader.close();
87 91
         } catch (IOException e) {
88 92
             eventBus.publishAsync(new AppErrorEvent(ErrorLevel.LOW, e,
@@ -90,8 +94,18 @@ public class YamlEventTemplateProvider implements EventTemplateProvider {
90 94
         }
91 95
     }
92 96
 
97
+    private EventFormat readFormat(final Object format) {
98
+        final Map<Object, Object> info = asMap(format);
99
+        final String template = info.get("format").toString();
100
+        final Optional<Colour> foregroundColour = info.containsKey("colour")
101
+                ? Optional.of(colourManager.getColourFromIrcCode(
102
+                        Integer.parseInt(info.get("colour").toString())))
103
+                : Optional.empty();
104
+        return EventFormat.create(template, foregroundColour);
105
+    }
106
+
93 107
     @Override
94
-    public Optional<String> getTemplate(final Class<? extends DisplayableEvent> eventType) {
108
+    public Optional<EventFormat> getFormat(final Class<? extends DisplayableEvent> eventType) {
95 109
         return Optional.ofNullable(formats.get(eventType.getSimpleName()));
96 110
     }
97 111
 

+ 8
- 5
test/com/dmdirc/ui/messages/EventFormatterTest.java View File

@@ -40,7 +40,7 @@ import static org.mockito.Mockito.when;
40 40
 public class EventFormatterTest {
41 41
 
42 42
     @Mock private EventPropertyManager propertyManager;
43
-    @Mock private EventTemplateProvider templateProvider;
43
+    @Mock private EventFormatProvider templateProvider;
44 44
     @Mock private Channel channel;
45 45
     private ChannelMessageEvent messageEvent;
46 46
     private EventFormatter formatter;
@@ -54,8 +54,9 @@ public class EventFormatterTest {
54 54
     public void testBasicFormat() {
55 55
         messageEvent = new ChannelMessageEvent(channel, null, null);
56 56
 
57
-        when(templateProvider.getTemplate(ChannelMessageEvent.class))
58
-                .thenReturn(Optional.ofNullable("Template {{channel}} meep"));
57
+        when(templateProvider.getFormat(ChannelMessageEvent.class))
58
+                .thenReturn(Optional.ofNullable(
59
+                        EventFormat.create("Template {{channel}} meep", Optional.empty())));
59 60
         when(propertyManager.getProperty(messageEvent, ChannelMessageEvent.class, "channel"))
60 61
                 .thenReturn(Optional.of("MONKEY"));
61 62
 
@@ -66,8 +67,10 @@ public class EventFormatterTest {
66 67
     public void testFormatWithFunction() {
67 68
         messageEvent = new ChannelMessageEvent(channel, null, null);
68 69
 
69
-        when(templateProvider.getTemplate(ChannelMessageEvent.class))
70
-                .thenReturn(Optional.ofNullable("Template {{channel|lowercase}} meep"));
70
+        when(templateProvider.getFormat(ChannelMessageEvent.class))
71
+                .thenReturn(Optional.ofNullable(
72
+                        EventFormat.create("Template {{channel|lowercase}} meep",
73
+                                Optional.empty())));
71 74
         when(propertyManager.getProperty(messageEvent, ChannelMessageEvent.class, "channel"))
72 75
                 .thenReturn(Optional.of("MONKEY"));
73 76
         when(propertyManager.applyFunction("MONKEY", "lowercase")).thenReturn("monkey");

Loading…
Cancel
Save