summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar 2xsaiko2021-03-21 18:20:06 +0100
committerGravatar GitHub2021-03-21 18:20:06 +0100
commite5d0ecb928d2b349b9c9a342f51d943a470554e5 (patch)
treec4fedf383b7462266d29ce1806a97b7c93293c63
parentLess strict JRE check (#362) (diff)
parentFix missing icon check (diff)
downloadenigma-e5d0ecb928d2b349b9c9a342f51d943a470554e5.tar.gz
enigma-e5d0ecb928d2b349b9c9a342f51d943a470554e5.tar.xz
enigma-e5d0ecb928d2b349b9c9a342f51d943a470554e5.zip
Merge pull request #363 from Juuxel/svg-icons
Switch to SVG icons
-rw-r--r--enigma-swing/build.gradle1
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/config/LookAndFeel.java1
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java24
-rw-r--r--enigma-swing/src/main/resources/icons/annotation.pngbin877 -> 0 bytes
-rw-r--r--enigma-swing/src/main/resources/icons/annotation.svg112
-rw-r--r--enigma-swing/src/main/resources/icons/class.pngbin768 -> 0 bytes
-rw-r--r--enigma-swing/src/main/resources/icons/class.svg88
-rw-r--r--enigma-swing/src/main/resources/icons/constructor.pngbin751 -> 0 bytes
-rw-r--r--enigma-swing/src/main/resources/icons/constructor.svg113
-rw-r--r--enigma-swing/src/main/resources/icons/enum.pngbin506 -> 0 bytes
-rw-r--r--enigma-swing/src/main/resources/icons/enum.svg88
-rw-r--r--enigma-swing/src/main/resources/icons/field.pngbin534 -> 0 bytes
-rw-r--r--enigma-swing/src/main/resources/icons/field.svg88
-rw-r--r--enigma-swing/src/main/resources/icons/interface.pngbin538 -> 0 bytes
-rw-r--r--enigma-swing/src/main/resources/icons/interface.svg88
-rw-r--r--enigma-swing/src/main/resources/icons/method.pngbin633 -> 0 bytes
-rw-r--r--enigma-swing/src/main/resources/icons/method.svg113
-rw-r--r--enigma-swing/src/main/resources/icons/record.svg88
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/representation/AccessFlags.java4
19 files changed, 797 insertions, 11 deletions
diff --git a/enigma-swing/build.gradle b/enigma-swing/build.gradle
index 06b28bb3..319f73a3 100644
--- a/enigma-swing/build.gradle
+++ b/enigma-swing/build.gradle
@@ -9,6 +9,7 @@ dependencies {
9 9
10 implementation 'net.sf.jopt-simple:jopt-simple:6.0-alpha-3' 10 implementation 'net.sf.jopt-simple:jopt-simple:6.0-alpha-3'
11 implementation 'com.formdev:flatlaf:1.0' 11 implementation 'com.formdev:flatlaf:1.0'
12 implementation 'com.formdev:flatlaf-extras:1.0' // for SVG icons
12 implementation 'de.sciss:syntaxpane:1.2.0' 13 implementation 'de.sciss:syntaxpane:1.2.0'
13 implementation 'com.github.lukeu:swing-dpi:0.9' 14 implementation 'com.github.lukeu:swing-dpi:0.9'
14 implementation 'org.drjekyll:fontchooser:2.4' 15 implementation 'org.drjekyll:fontchooser:2.4'
diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/config/LookAndFeel.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/config/LookAndFeel.java
index e21ef52c..3edc87a2 100644
--- a/enigma-swing/src/main/java/cuchaz/enigma/gui/config/LookAndFeel.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/config/LookAndFeel.java
@@ -36,6 +36,7 @@ public enum LookAndFeel {
36 36
37 public void setGlobalLAF() { 37 public void setGlobalLAF() {
38 // Configure FlatLaf's UI scale to be our scale factor. 38 // Configure FlatLaf's UI scale to be our scale factor.
39 // This is also used for the SVG icons, so it applies even when some other LaF is active.
39 System.setProperty(FlatSystemProperties.UI_SCALE, Float.toString(ScaleUtil.getScaleFactor())); 40 System.setProperty(FlatSystemProperties.UI_SCALE, Float.toString(ScaleUtil.getScaleFactor()));
40 41
41 try { 42 try {
diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java
index 1a86148d..7f08fc25 100644
--- a/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java
@@ -1,28 +1,29 @@
1package cuchaz.enigma.gui.util; 1package cuchaz.enigma.gui.util;
2 2
3import com.formdev.flatlaf.extras.FlatSVGIcon;
3import cuchaz.enigma.gui.Gui; 4import cuchaz.enigma.gui.Gui;
4import cuchaz.enigma.translation.representation.AccessFlags; 5import cuchaz.enigma.translation.representation.AccessFlags;
5import cuchaz.enigma.translation.representation.entry.ClassEntry; 6import cuchaz.enigma.translation.representation.entry.ClassEntry;
6import cuchaz.enigma.translation.representation.entry.MethodEntry; 7import cuchaz.enigma.translation.representation.entry.MethodEntry;
7import cuchaz.enigma.utils.Os; 8import cuchaz.enigma.utils.Os;
8 9
9import javax.imageio.ImageIO;
10import javax.swing.*; 10import javax.swing.*;
11import java.awt.*; 11import java.awt.*;
12import java.awt.event.MouseAdapter; 12import java.awt.event.MouseAdapter;
13import java.awt.event.MouseEvent; 13import java.awt.event.MouseEvent;
14import java.awt.font.TextAttribute; 14import java.awt.font.TextAttribute;
15import java.io.IOException; 15import java.io.IOException;
16import java.io.InputStream;
17import java.net.URI; 16import java.net.URI;
18import java.net.URISyntaxException; 17import java.net.URISyntaxException;
19import java.util.Map; 18import java.util.Map;
19import java.util.NoSuchElementException;
20 20
21public class GuiUtil { 21public class GuiUtil {
22 public static final Icon CLASS_ICON = loadIcon("class"); 22 public static final Icon CLASS_ICON = loadIcon("class");
23 public static final Icon INTERFACE_ICON = loadIcon("interface"); 23 public static final Icon INTERFACE_ICON = loadIcon("interface");
24 public static final Icon ENUM_ICON = loadIcon("enum"); 24 public static final Icon ENUM_ICON = loadIcon("enum");
25 public static final Icon ANNOTATION_ICON = loadIcon("annotation"); 25 public static final Icon ANNOTATION_ICON = loadIcon("annotation");
26 public static final Icon RECORD_ICON = loadIcon("record");
26 public static final Icon METHOD_ICON = loadIcon("method"); 27 public static final Icon METHOD_ICON = loadIcon("method");
27 public static final Icon FIELD_ICON = loadIcon("field"); 28 public static final Icon FIELD_ICON = loadIcon("field");
28 public static final Icon CONSTRUCTOR_ICON = loadIcon("constructor"); 29 public static final Icon CONSTRUCTOR_ICON = loadIcon("constructor");
@@ -79,15 +80,16 @@ public class GuiUtil {
79 } 80 }
80 81
81 public static Icon loadIcon(String name) { 82 public static Icon loadIcon(String name) {
82 try { 83 String path = "icons/" + name + ".svg";
83 InputStream inputStream = GuiUtil.class.getResourceAsStream("/icons/" + name + ".png"); 84
84 Image image = ImageIO.read(inputStream).getScaledInstance(ScaleUtil.scale(16), ScaleUtil.scale(16), Image.SCALE_DEFAULT); 85 // Do an eager check for a missing icon since FlatSVGIcon does it later at render time
85 return new ImageIcon(image); 86 if (GuiUtil.class.getResource('/' + path) == null) {
86 } catch (IOException e) { 87 throw new NoSuchElementException("Missing icon: '" + name + "' at " + path);
87 e.printStackTrace();
88 } 88 }
89 89
90 return null; 90 // Note: the width and height are scaled automatically because the FlatLaf UI scale
91 // is set in LookAndFeel.setGlobalLAF()
92 return new FlatSVGIcon(path, 16, 16, GuiUtil.class.getClassLoader());
91 } 93 }
92 94
93 public static Icon getClassIcon(Gui gui, ClassEntry entry) { 95 public static Icon getClassIcon(Gui gui, ClassEntry entry) {
@@ -100,9 +102,9 @@ public class GuiUtil {
100 return INTERFACE_ICON; 102 return INTERFACE_ICON;
101 } else if (access.isEnum()) { 103 } else if (access.isEnum()) {
102 return ENUM_ICON; 104 return ENUM_ICON;
105 } else if (access.isRecord()) {
106 return RECORD_ICON;
103 } 107 }
104
105 // TODO: Record icon?
106 } 108 }
107 109
108 return CLASS_ICON; 110 return CLASS_ICON;
diff --git a/enigma-swing/src/main/resources/icons/annotation.png b/enigma-swing/src/main/resources/icons/annotation.png
deleted file mode 100644
index 9589a67e..00000000
--- a/enigma-swing/src/main/resources/icons/annotation.png
+++ /dev/null
Binary files differ
diff --git a/enigma-swing/src/main/resources/icons/annotation.svg b/enigma-swing/src/main/resources/icons/annotation.svg
new file mode 100644
index 00000000..b6855571
--- /dev/null
+++ b/enigma-swing/src/main/resources/icons/annotation.svg
@@ -0,0 +1,112 @@
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<svg
3 xmlns:dc="http://purl.org/dc/elements/1.1/"
4 xmlns:cc="http://creativecommons.org/ns#"
5 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
6 xmlns:svg="http://www.w3.org/2000/svg"
7 xmlns="http://www.w3.org/2000/svg"
8 xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
9 xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
10 width="16"
11 height="16"
12 viewBox="0 0 4.2333332 4.2333332"
13 version="1.1"
14 id="svg8"
15 sodipodi:docname="annotation.svg"
16 inkscape:version="1.0.2 (e86c870879, 2021-01-15, custom)">
17 <sodipodi:namedview
18 pagecolor="#ffffff"
19 bordercolor="#666666"
20 borderopacity="1"
21 objecttolerance="10"
22 gridtolerance="10"
23 guidetolerance="10"
24 inkscape:pageopacity="0"
25 inkscape:pageshadow="2"
26 inkscape:window-width="1920"
27 inkscape:window-height="1017"
28 id="namedview16"
29 showgrid="false"
30 inkscape:zoom="26.5625"
31 inkscape:cx="3.1871277"
32 inkscape:cy="11.53424"
33 inkscape:window-x="-8"
34 inkscape:window-y="152"
35 inkscape:window-maximized="1"
36 inkscape:current-layer="layer1" />
37 <defs
38 id="defs2">
39 <filter
40 style="color-interpolation-filters:sRGB;"
41 id="filter1135">
42 <feFlood
43 flood-opacity="0.498039"
44 flood-color="rgb(0,0,0)"
45 result="flood"
46 id="feFlood1125" />
47 <feComposite
48 in="flood"
49 in2="SourceGraphic"
50 operator="in"
51 result="composite1"
52 id="feComposite1127" />
53 <feGaussianBlur
54 in="composite1"
55 stdDeviation="0.1"
56 result="blur"
57 id="feGaussianBlur1129" />
58 <feOffset
59 dx="0"
60 dy="0.2"
61 result="offset"
62 id="feOffset1131" />
63 <feComposite
64 in="SourceGraphic"
65 in2="offset"
66 operator="over"
67 result="composite2"
68 id="feComposite1133" />
69 </filter>
70 </defs>
71 <metadata
72 id="metadata5">
73 <rdf:RDF>
74 <cc:Work
75 rdf:about="">
76 <dc:format>image/svg+xml</dc:format>
77 <dc:type
78 rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
79 <dc:title></dc:title>
80 </cc:Work>
81 </rdf:RDF>
82 </metadata>
83 <g
84 id="layer1">
85 <rect
86 style="fill:#7b1fa2;fill-opacity:1;fill-rule:evenodd;stroke-width:0.264583;stroke-miterlimit:4;stroke-dasharray:none"
87 id="rect18"
88 width="4.2333331"
89 height="4.2333331"
90 x="0"
91 y="0"
92 ry="1.0583333" />
93 <rect
94 style="fill:#9c27b0;fill-opacity:1;stroke:none;stroke-width:0.30868;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
95 id="rect847"
96 width="3.7041664"
97 height="3.7041664"
98 x="0.26458332"
99 y="0.26458332"
100 ry="1.0583333" />
101 <g
102 aria-label="@"
103 transform="scale(1.1079108,0.90259972)"
104 id="text948"
105 style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.0747px;line-height:1.25;font-family:'Roboto Mono';-inkscape-font-specification:'Roboto Mono';fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.401866;filter:url(#filter1135)">
106 <path
107 d="M 3.2137129,2.1376818 Q 3.2231317,1.8056708 3.145427,1.5325271 3.0677223,1.2593833 2.9146676,1.0615896 2.7616129,0.8685052 2.5379176,0.76254426 2.3142223,0.65658332 2.0340144,0.65658332 q -0.3155281,0 -0.5768984,0.13892657 Q 1.1957457,0.93443645 1.005016,1.1746146 0.81193161,1.4195021 0.69890661,1.7491583 0.5882363,2.0788146 0.57646286,2.4532099 q -0.0117734,0.369686 0.0612219,0.671086 0.0729953,0.3014 0.23311407,0.5133219 0.1624734,0.2119218 0.4120703,0.3273015 0.2495969,0.113025 0.5933813,0.113025 0.077705,0 0.1648281,-0.011773 0.087123,-0.00942 0.1742469,-0.032966 0.084769,-0.021192 0.1624734,-0.054158 0.077705,-0.032966 0.1389266,-0.077705 l -0.07535,-0.3084641 q -0.054158,0.028256 -0.1200891,0.054158 -0.065931,0.023547 -0.1389265,0.04003 -0.072995,0.021192 -0.1507,0.030611 -0.07535,0.00942 -0.1483454,0.00942 -0.2378234,0 -0.4191343,-0.080059 Q 1.2828691,3.5669771 1.1651347,3.4045037 1.0450457,3.2467396 0.98853318,3.0089162 0.93437536,2.7687381 0.9461488,2.4532099 0.95556755,2.1329724 1.0356269,1.8668927 1.1156863,1.5984583 1.2569676,1.405374 1.3935394,1.2146443 1.5842691,1.1086833 1.7749988,1.0027224 2.0128223,1.0027224 q 0.2142765,0 0.3791047,0.070641 0.1671828,0.070641 0.2778531,0.2119219 0.1106703,0.1436359 0.1624734,0.3602672 0.054158,0.2166312 0.044739,0.5062578 0,0.181311 -0.021192,0.339075 -0.021192,0.1554094 -0.061222,0.2684344 -0.037675,0.113025 -0.091833,0.1789563 -0.054158,0.063576 -0.1224437,0.063576 -0.025902,0 -0.051803,-0.00706 -0.025901,-0.00706 -0.042384,-0.028256 -0.018837,-0.021192 -0.028256,-0.063577 -0.00942,-0.042384 -0.00471,-0.1177343 L 2.5544004,1.556074 Q 2.4837598,1.480724 2.3683801,1.4265662 2.2553551,1.3700536 2.0787535,1.3700536 q -0.1766016,0 -0.3202375,0.07535 -0.1412812,0.07535 -0.2472422,0.2142765 -0.1059609,0.1412813 -0.1742469,0.339075 -0.065931,0.1954391 -0.089478,0.4403266 -0.018837,0.2001484 0.00471,0.3649766 0.023547,0.1624734 0.087123,0.2802078 0.063577,0.1177344 0.1648282,0.1813109 0.1012515,0.061222 0.2378234,0.061222 0.072995,0 0.1365719,-0.021192 0.065931,-0.023547 0.1247984,-0.063577 0.04003,-0.030611 0.077705,-0.068286 0.037675,-0.04003 0.070641,-0.087123 0.023547,0.051803 0.054158,0.094188 0.032966,0.04003 0.070641,0.070641 0.049448,0.04003 0.113025,0.061222 0.063576,0.018838 0.1342172,0.018838 0.1789562,0 0.3061093,-0.105961 Q 2.9594067,3.1195865 3.0418207,2.9476943 3.1242348,2.7781568 3.1642645,2.5662349 3.2066488,2.3519584 3.2137129,2.1376818 Z m -1.5847047,0.3014 q 0.016483,-0.1742469 0.054158,-0.3084641 0.037675,-0.1342172 0.096542,-0.22605 0.056512,-0.091833 0.1389266,-0.1389265 0.082414,-0.049449 0.1907296,-0.049449 0.028256,0 0.047094,0.00471 0.021192,0.00235 0.037675,0.00706 l -0.089478,1.0478359 -0.00235,0.028256 q -0.021192,0.037675 -0.044739,0.065931 -0.023547,0.028256 -0.047094,0.047094 -0.04003,0.030611 -0.082414,0.044739 -0.042384,0.014128 -0.084769,0.014128 -0.058867,0 -0.1036063,-0.03532 -0.042384,-0.03532 -0.070641,-0.1083156 -0.025902,-0.063576 -0.037675,-0.1624734 -0.00942,-0.1012516 -0.00235,-0.2307594 z"
108 style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:4.8224px;font-family:'Roboto Mono';-inkscape-font-specification:'Roboto Mono Semi-Bold';fill:#ffffff;fill-opacity:1;stroke-width:0.401866"
109 id="path841" />
110 </g>
111 </g>
112</svg>
diff --git a/enigma-swing/src/main/resources/icons/class.png b/enigma-swing/src/main/resources/icons/class.png
deleted file mode 100644
index 17d82ecd..00000000
--- a/enigma-swing/src/main/resources/icons/class.png
+++ /dev/null
Binary files differ
diff --git a/enigma-swing/src/main/resources/icons/class.svg b/enigma-swing/src/main/resources/icons/class.svg
new file mode 100644
index 00000000..bd76406d
--- /dev/null
+++ b/enigma-swing/src/main/resources/icons/class.svg
@@ -0,0 +1,88 @@
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<svg
3 xmlns:dc="http://purl.org/dc/elements/1.1/"
4 xmlns:cc="http://creativecommons.org/ns#"
5 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
6 xmlns:svg="http://www.w3.org/2000/svg"
7 xmlns="http://www.w3.org/2000/svg"
8 width="16"
9 height="16"
10 viewBox="0 0 4.2333332 4.2333332"
11 version="1.1"
12 id="svg8">
13 <defs
14 id="defs2">
15 <filter
16 style="color-interpolation-filters:sRGB;"
17 id="filter1135">
18 <feFlood
19 flood-opacity="0.498039"
20 flood-color="rgb(0,0,0)"
21 result="flood"
22 id="feFlood1125" />
23 <feComposite
24 in="flood"
25 in2="SourceGraphic"
26 operator="in"
27 result="composite1"
28 id="feComposite1127" />
29 <feGaussianBlur
30 in="composite1"
31 stdDeviation="0.1"
32 result="blur"
33 id="feGaussianBlur1129" />
34 <feOffset
35 dx="0"
36 dy="0.2"
37 result="offset"
38 id="feOffset1131" />
39 <feComposite
40 in="SourceGraphic"
41 in2="offset"
42 operator="over"
43 result="composite2"
44 id="feComposite1133" />
45 </filter>
46 </defs>
47 <metadata
48 id="metadata5">
49 <rdf:RDF>
50 <cc:Work
51 rdf:about="">
52 <dc:format>image/svg+xml</dc:format>
53 <dc:type
54 rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
55 <dc:title></dc:title>
56 </cc:Work>
57 </rdf:RDF>
58 </metadata>
59 <g
60 id="layer1">
61 <rect
62 style="fill:#bc245d;fill-opacity:1;fill-rule:evenodd;stroke-width:0.264583;stroke-miterlimit:4;stroke-dasharray:none"
63 id="rect18"
64 width="4.2333331"
65 height="4.2333331"
66 x="0"
67 y="0"
68 ry="1.0583333" />
69 <rect
70 style="fill:#de3e80;fill-opacity:1;stroke:none;stroke-width:0.30868;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
71 id="rect847"
72 width="3.7041664"
73 height="3.7041664"
74 x="0.26458332"
75 y="0.26458332"
76 ry="1.0583333" />
77 <g
78 aria-label="C"
79 transform="scale(1.1079108,0.90259972)"
80 id="text948"
81 style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.0747px;line-height:1.25;font-family:'Roboto Mono';-inkscape-font-specification:'Roboto Mono';fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.401866;filter:url(#filter1135)">
82 <path
83 d="M 3.1407176,2.9947881 H 2.5261441 q -0.011773,0.1554093 -0.056512,0.270789 -0.044739,0.1153797 -0.120089,0.1907297 -0.07535,0.077705 -0.1836656,0.1153797 -0.1083157,0.03532 -0.2472422,0.03532 -0.1106704,0 -0.1977938,-0.028256 Q 1.6360723,3.5504943 1.5654316,3.4963365 1.5018551,3.4445334 1.4524066,3.3691834 1.4053129,3.2938334 1.3723472,3.2020006 1.3276082,3.0795568 1.306416,2.9241474 1.2852238,2.7687381 1.2852238,2.580363 V 2.1094255 q 0,-0.1459906 0.014128,-0.2778531 0.014128,-0.1318625 0.047094,-0.2425328 0.037675,-0.1389266 0.1036062,-0.2448875 0.065931,-0.1083156 0.1601188,-0.1695375 0.061222,-0.044739 0.1389266,-0.068286 0.080059,-0.023547 0.1718921,-0.023547 0.1530547,0 0.2613704,0.042384 0.1106703,0.042384 0.1836656,0.1247985 0.072995,0.082414 0.1106703,0.2025031 0.04003,0.1177344 0.051803,0.2707891 H 3.1430723 Q 3.1171707,1.4595318 3.0276926,1.2476099 2.9382145,1.035688 2.7851598,0.88969739 2.6321051,0.74135208 2.4154738,0.6612927 2.1988426,0.58123332 1.9209894,0.58123332 q -0.195439,0 -0.3626218,0.0518031 Q 1.3911847,0.68248489 1.2546129,0.77667239 1.1015582,0.88263333 0.9838238,1.0333333 0.86844411,1.1840333 0.7954488,1.374763 0.72951755,1.5372365 0.69655192,1.7256115 0.6635863,1.9116318 0.6635863,2.1141349 V 2.580363 q 0,0.2142766 0.0353203,0.4097157 0.0353203,0.195439 0.10360625,0.3602672 0.0682859,0.1671828 0.16953751,0.3061094 0.10360623,0.1365718 0.23546873,0.2354687 0.1412813,0.1036063 0.3202375,0.1601188 0.1789563,0.056513 0.3908782,0.056513 0.263725,0 0.4803562,-0.077705 0.2166313,-0.080059 0.3743953,-0.22605 0.1577641,-0.1459907 0.2519516,-0.3508485 0.094188,-0.2048578 0.1153797,-0.459164 z"
84 style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:4.8224px;font-family:'Roboto Mono';-inkscape-font-specification:'Roboto Mono Semi-Bold';fill:#ffffff;fill-opacity:1;stroke-width:0.401866"
85 id="path841" />
86 </g>
87 </g>
88</svg>
diff --git a/enigma-swing/src/main/resources/icons/constructor.png b/enigma-swing/src/main/resources/icons/constructor.png
deleted file mode 100644
index 3728b554..00000000
--- a/enigma-swing/src/main/resources/icons/constructor.png
+++ /dev/null
Binary files differ
diff --git a/enigma-swing/src/main/resources/icons/constructor.svg b/enigma-swing/src/main/resources/icons/constructor.svg
new file mode 100644
index 00000000..8dd8f679
--- /dev/null
+++ b/enigma-swing/src/main/resources/icons/constructor.svg
@@ -0,0 +1,113 @@
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<svg
3 xmlns:dc="http://purl.org/dc/elements/1.1/"
4 xmlns:cc="http://creativecommons.org/ns#"
5 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
6 xmlns:svg="http://www.w3.org/2000/svg"
7 xmlns="http://www.w3.org/2000/svg"
8 xmlns:xlink="http://www.w3.org/1999/xlink"
9 width="16"
10 height="16"
11 viewBox="0 0 4.2333332 4.2333332"
12 version="1.1"
13 id="svg8">
14 <defs
15 id="defs2">
16 <linearGradient
17 id="linearGradient940">
18 <stop
19 style="stop-color:#44a8f3;stop-opacity:1"
20 offset="0"
21 id="stop936" />
22 <stop
23 style="stop-color:#2196f3;stop-opacity:1"
24 offset="0.49936226"
25 id="stop944" />
26 <stop
27 style="stop-color:#44a8f3;stop-opacity:1"
28 offset="1"
29 id="stop938" />
30 </linearGradient>
31 <linearGradient
32 xlink:href="#linearGradient940"
33 id="linearGradient942"
34 x1="2.1166666"
35 y1="0.26458332"
36 x2="2.1166666"
37 y2="3.9687498"
38 gradientUnits="userSpaceOnUse" />
39 <filter
40 style="color-interpolation-filters:sRGB;"
41 id="filter1135">
42 <feFlood
43 flood-opacity="0.498039"
44 flood-color="rgb(0,0,0)"
45 result="flood"
46 id="feFlood1125" />
47 <feComposite
48 in="flood"
49 in2="SourceGraphic"
50 operator="in"
51 result="composite1"
52 id="feComposite1127" />
53 <feGaussianBlur
54 in="composite1"
55 stdDeviation="0.1"
56 result="blur"
57 id="feGaussianBlur1129" />
58 <feOffset
59 dx="0"
60 dy="0.2"
61 result="offset"
62 id="feOffset1131" />
63 <feComposite
64 in="SourceGraphic"
65 in2="offset"
66 operator="over"
67 result="composite2"
68 id="feComposite1133" />
69 </filter>
70 </defs>
71 <metadata
72 id="metadata5">
73 <rdf:RDF>
74 <cc:Work
75 rdf:about="">
76 <dc:format>image/svg+xml</dc:format>
77 <dc:type
78 rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
79 <dc:title></dc:title>
80 </cc:Work>
81 </rdf:RDF>
82 </metadata>
83 <g
84 id="layer1">
85 <rect
86 style="fill:#1976d2;fill-opacity:1;fill-rule:evenodd;stroke-width:0.264583;stroke-miterlimit:4;stroke-dasharray:none"
87 id="rect18"
88 width="4.2333331"
89 height="4.2333331"
90 x="1.9629277e-07"
91 y="0"
92 ry="1.0583333" />
93 <rect
94 style="fill:#2196f3;fill-opacity:1;stroke:none;stroke-width:0.264583;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
95 id="rect847"
96 width="3.7041667"
97 height="3.7041667"
98 x="0.26458332"
99 y="0.26458332"
100 ry="1.0583333"
101 rx="1.0583334" />
102 <g
103 aria-label="C"
104 transform="scale(1.1079108,0.90259972)"
105 id="text948"
106 style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.0747px;line-height:1.25;font-family:'Roboto Mono';-inkscape-font-specification:'Roboto Mono';fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.401866;filter:url(#filter1135)">
107 <path
108 d="M 3.1407176,2.9947881 H 2.5261441 q -0.011773,0.1554093 -0.056512,0.270789 -0.044739,0.1153797 -0.120089,0.1907297 -0.07535,0.077705 -0.1836656,0.1153797 -0.1083157,0.03532 -0.2472422,0.03532 -0.1106704,0 -0.1977938,-0.028256 Q 1.6360723,3.5504943 1.5654316,3.4963365 1.5018551,3.4445334 1.4524066,3.3691834 1.4053129,3.2938334 1.3723472,3.2020006 1.3276082,3.0795568 1.306416,2.9241474 1.2852238,2.7687381 1.2852238,2.580363 V 2.1094255 q 0,-0.1459906 0.014128,-0.2778531 0.014128,-0.1318625 0.047094,-0.2425328 0.037675,-0.1389266 0.1036062,-0.2448875 0.065931,-0.1083156 0.1601188,-0.1695375 0.061222,-0.044739 0.1389266,-0.068286 0.080059,-0.023547 0.1718921,-0.023547 0.1530547,0 0.2613704,0.042384 0.1106703,0.042384 0.1836656,0.1247985 0.072995,0.082414 0.1106703,0.2025031 0.04003,0.1177344 0.051803,0.2707891 H 3.1430723 Q 3.1171707,1.4595318 3.0276926,1.2476099 2.9382145,1.035688 2.7851598,0.88969739 2.6321051,0.74135208 2.4154738,0.6612927 2.1988426,0.58123332 1.9209894,0.58123332 q -0.195439,0 -0.3626218,0.0518031 Q 1.3911847,0.68248489 1.2546129,0.77667239 1.1015582,0.88263333 0.9838238,1.0333333 0.86844411,1.1840333 0.7954488,1.374763 0.72951755,1.5372365 0.69655192,1.7256115 0.6635863,1.9116318 0.6635863,2.1141349 V 2.580363 q 0,0.2142766 0.0353203,0.4097157 0.0353203,0.195439 0.10360625,0.3602672 0.0682859,0.1671828 0.16953751,0.3061094 0.10360623,0.1365718 0.23546873,0.2354687 0.1412813,0.1036063 0.3202375,0.1601188 0.1789563,0.056513 0.3908782,0.056513 0.263725,0 0.4803562,-0.077705 0.2166313,-0.080059 0.3743953,-0.22605 0.1577641,-0.1459907 0.2519516,-0.3508485 0.094188,-0.2048578 0.1153797,-0.459164 z"
109 style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:4.8224px;font-family:'Roboto Mono';-inkscape-font-specification:'Roboto Mono Semi-Bold';fill:#ffffff;fill-opacity:1;stroke-width:0.401866"
110 id="path846" />
111 </g>
112 </g>
113</svg>
diff --git a/enigma-swing/src/main/resources/icons/enum.png b/enigma-swing/src/main/resources/icons/enum.png
deleted file mode 100644
index b64dc829..00000000
--- a/enigma-swing/src/main/resources/icons/enum.png
+++ /dev/null
Binary files differ
diff --git a/enigma-swing/src/main/resources/icons/enum.svg b/enigma-swing/src/main/resources/icons/enum.svg
new file mode 100644
index 00000000..25eaf0bb
--- /dev/null
+++ b/enigma-swing/src/main/resources/icons/enum.svg
@@ -0,0 +1,88 @@
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<svg
3 xmlns:dc="http://purl.org/dc/elements/1.1/"
4 xmlns:cc="http://creativecommons.org/ns#"
5 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
6 xmlns:svg="http://www.w3.org/2000/svg"
7 xmlns="http://www.w3.org/2000/svg"
8 width="16"
9 height="16"
10 viewBox="0 0 4.2333332 4.2333332"
11 version="1.1"
12 id="svg8">
13 <defs
14 id="defs2">
15 <filter
16 style="color-interpolation-filters:sRGB;"
17 id="filter1135">
18 <feFlood
19 flood-opacity="0.498039"
20 flood-color="rgb(0,0,0)"
21 result="flood"
22 id="feFlood1125" />
23 <feComposite
24 in="flood"
25 in2="SourceGraphic"
26 operator="in"
27 result="composite1"
28 id="feComposite1127" />
29 <feGaussianBlur
30 in="composite1"
31 stdDeviation="0.1"
32 result="blur"
33 id="feGaussianBlur1129" />
34 <feOffset
35 dx="0"
36 dy="0.2"
37 result="offset"
38 id="feOffset1131" />
39 <feComposite
40 in="SourceGraphic"
41 in2="offset"
42 operator="over"
43 result="composite2"
44 id="feComposite1133" />
45 </filter>
46 </defs>
47 <metadata
48 id="metadata5">
49 <rdf:RDF>
50 <cc:Work
51 rdf:about="">
52 <dc:format>image/svg+xml</dc:format>
53 <dc:type
54 rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
55 <dc:title></dc:title>
56 </cc:Work>
57 </rdf:RDF>
58 </metadata>
59 <g
60 id="layer1">
61 <rect
62 style="fill:#e56b00;fill-opacity:1;fill-rule:evenodd;stroke-width:0.264583;stroke-miterlimit:4;stroke-dasharray:none"
63 id="rect18"
64 width="4.2333331"
65 height="4.2333331"
66 x="0"
67 y="0"
68 ry="1.0583333" />
69 <rect
70 style="fill:#ff8800;fill-opacity:1;stroke:none;stroke-width:0.30868;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
71 id="rect847"
72 width="3.7041664"
73 height="3.7041664"
74 x="0.26458332"
75 y="0.26458332"
76 ry="1.0583333" />
77 <g
78 aria-label="E"
79 transform="scale(1.1079108,0.90259972)"
80 id="text948"
81 style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.0747px;line-height:1.25;font-family:'Roboto Mono';-inkscape-font-specification:'Roboto Mono';fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.401866;filter:url(#filter1135)">
82 <path
83 d="M 2.8558004,2.5403334 V 2.0482037 H 1.4429879 V 1.1345849 H 3.0842051 V 0.63068176 H 0.82605974 V 4.0591068 H 3.0936238 V 3.5599131 H 1.4429879 V 2.5403334 Z"
84 style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:4.8224px;font-family:'Roboto Mono';-inkscape-font-specification:'Roboto Mono Semi-Bold';fill:#ffffff;fill-opacity:1;stroke-width:0.401866"
85 id="path841" />
86 </g>
87 </g>
88</svg>
diff --git a/enigma-swing/src/main/resources/icons/field.png b/enigma-swing/src/main/resources/icons/field.png
deleted file mode 100644
index 4ac1aab9..00000000
--- a/enigma-swing/src/main/resources/icons/field.png
+++ /dev/null
Binary files differ
diff --git a/enigma-swing/src/main/resources/icons/field.svg b/enigma-swing/src/main/resources/icons/field.svg
new file mode 100644
index 00000000..6a89f3a8
--- /dev/null
+++ b/enigma-swing/src/main/resources/icons/field.svg
@@ -0,0 +1,88 @@
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<svg
3 xmlns:dc="http://purl.org/dc/elements/1.1/"
4 xmlns:cc="http://creativecommons.org/ns#"
5 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
6 xmlns:svg="http://www.w3.org/2000/svg"
7 xmlns="http://www.w3.org/2000/svg"
8 width="16"
9 height="16"
10 viewBox="0 0 4.2333332 4.2333332"
11 version="1.1"
12 id="svg8">
13 <defs
14 id="defs2">
15 <filter
16 style="color-interpolation-filters:sRGB;"
17 id="filter1135">
18 <feFlood
19 flood-opacity="0.498039"
20 flood-color="rgb(0,0,0)"
21 result="flood"
22 id="feFlood1125" />
23 <feComposite
24 in="flood"
25 in2="SourceGraphic"
26 operator="in"
27 result="composite1"
28 id="feComposite1127" />
29 <feGaussianBlur
30 in="composite1"
31 stdDeviation="0.1"
32 result="blur"
33 id="feGaussianBlur1129" />
34 <feOffset
35 dx="0"
36 dy="0.2"
37 result="offset"
38 id="feOffset1131" />
39 <feComposite
40 in="SourceGraphic"
41 in2="offset"
42 operator="over"
43 result="composite2"
44 id="feComposite1133" />
45 </filter>
46 </defs>
47 <metadata
48 id="metadata5">
49 <rdf:RDF>
50 <cc:Work
51 rdf:about="">
52 <dc:format>image/svg+xml</dc:format>
53 <dc:type
54 rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
55 <dc:title></dc:title>
56 </cc:Work>
57 </rdf:RDF>
58 </metadata>
59 <g
60 id="layer1">
61 <rect
62 style="fill:#388e3c;fill-opacity:1;fill-rule:evenodd;stroke-width:0.264583;stroke-miterlimit:4;stroke-dasharray:none"
63 id="rect18"
64 width="4.2333331"
65 height="4.2333331"
66 x="1.9629277e-07"
67 y="0"
68 ry="1.0583333" />
69 <rect
70 style="fill:#4caf50;fill-opacity:1;stroke:none;stroke-width:0.264583;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
71 id="rect847"
72 width="3.7041667"
73 height="3.7041667"
74 x="0.26458332"
75 y="0.26458332"
76 ry="1.0583333" />
77 <g
78 aria-label="F"
79 transform="scale(1.1079108,0.90259972)"
80 id="text948"
81 style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.0747px;line-height:1.25;font-family:'Roboto Mono';-inkscape-font-specification:'Roboto Mono';fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.401866;filter:url(#filter1135)">
82 <path
83 d="M 2.9123129,2.6203927 V 2.1188443 H 1.4524066 V 1.1345849 H 3.107752 V 0.63068176 H 0.83547849 V 4.0591068 H 1.4524066 V 2.6203927 Z"
84 style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:4.8224px;font-family:'Roboto Mono';-inkscape-font-specification:'Roboto Mono Semi-Bold';fill:#ffffff;fill-opacity:1;stroke-width:0.401866"
85 id="path841" />
86 </g>
87 </g>
88</svg>
diff --git a/enigma-swing/src/main/resources/icons/interface.png b/enigma-swing/src/main/resources/icons/interface.png
deleted file mode 100644
index fc2bfe56..00000000
--- a/enigma-swing/src/main/resources/icons/interface.png
+++ /dev/null
Binary files differ
diff --git a/enigma-swing/src/main/resources/icons/interface.svg b/enigma-swing/src/main/resources/icons/interface.svg
new file mode 100644
index 00000000..750e8125
--- /dev/null
+++ b/enigma-swing/src/main/resources/icons/interface.svg
@@ -0,0 +1,88 @@
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<svg
3 xmlns:dc="http://purl.org/dc/elements/1.1/"
4 xmlns:cc="http://creativecommons.org/ns#"
5 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
6 xmlns:svg="http://www.w3.org/2000/svg"
7 xmlns="http://www.w3.org/2000/svg"
8 width="16"
9 height="16"
10 viewBox="0 0 4.2333332 4.2333332"
11 version="1.1"
12 id="svg8">
13 <defs
14 id="defs2">
15 <filter
16 style="color-interpolation-filters:sRGB;"
17 id="filter1135">
18 <feFlood
19 flood-opacity="0.498039"
20 flood-color="rgb(0,0,0)"
21 result="flood"
22 id="feFlood1125" />
23 <feComposite
24 in="flood"
25 in2="SourceGraphic"
26 operator="in"
27 result="composite1"
28 id="feComposite1127" />
29 <feGaussianBlur
30 in="composite1"
31 stdDeviation="0.1"
32 result="blur"
33 id="feGaussianBlur1129" />
34 <feOffset
35 dx="0"
36 dy="0.2"
37 result="offset"
38 id="feOffset1131" />
39 <feComposite
40 in="SourceGraphic"
41 in2="offset"
42 operator="over"
43 result="composite2"
44 id="feComposite1133" />
45 </filter>
46 </defs>
47 <metadata
48 id="metadata5">
49 <rdf:RDF>
50 <cc:Work
51 rdf:about="">
52 <dc:format>image/svg+xml</dc:format>
53 <dc:type
54 rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
55 <dc:title></dc:title>
56 </cc:Work>
57 </rdf:RDF>
58 </metadata>
59 <g
60 id="layer1">
61 <rect
62 style="fill:#7b1fa2;fill-opacity:1;fill-rule:evenodd;stroke-width:0.264583;stroke-miterlimit:4;stroke-dasharray:none"
63 id="rect18"
64 width="4.2333331"
65 height="4.2333331"
66 x="0"
67 y="0"
68 ry="1.0583333" />
69 <rect
70 style="fill:#9c27b0;fill-opacity:1;stroke:none;stroke-width:0.30868;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
71 id="rect847"
72 width="3.7041664"
73 height="3.7041664"
74 x="0.26458332"
75 y="0.26458332"
76 ry="1.0583333" />
77 <g
78 aria-label="I"
79 transform="scale(1.1079108,0.90259972)"
80 id="text948"
81 style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.0747px;line-height:1.25;font-family:'Roboto Mono';-inkscape-font-specification:'Roboto Mono';fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.401866;filter:url(#filter1135)">
82 <path
83 d="M 0.9084738,0.63068176 V 1.1322302 H 1.5913332 V 3.5599131 H 0.9084738 V 4.0591068 H 2.9099582 V 3.5599131 H 2.2082613 V 1.1322302 H 2.9099582 V 0.63068176 Z"
84 style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:4.8224px;font-family:'Roboto Mono';-inkscape-font-specification:'Roboto Mono Semi-Bold';fill:#ffffff;fill-opacity:1;stroke-width:0.401866"
85 id="path841" />
86 </g>
87 </g>
88</svg>
diff --git a/enigma-swing/src/main/resources/icons/method.png b/enigma-swing/src/main/resources/icons/method.png
deleted file mode 100644
index e4e96797..00000000
--- a/enigma-swing/src/main/resources/icons/method.png
+++ /dev/null
Binary files differ
diff --git a/enigma-swing/src/main/resources/icons/method.svg b/enigma-swing/src/main/resources/icons/method.svg
new file mode 100644
index 00000000..751ea55d
--- /dev/null
+++ b/enigma-swing/src/main/resources/icons/method.svg
@@ -0,0 +1,113 @@
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<svg
3 xmlns:dc="http://purl.org/dc/elements/1.1/"
4 xmlns:cc="http://creativecommons.org/ns#"
5 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
6 xmlns:svg="http://www.w3.org/2000/svg"
7 xmlns="http://www.w3.org/2000/svg"
8 xmlns:xlink="http://www.w3.org/1999/xlink"
9 width="16"
10 height="16"
11 viewBox="0 0 4.2333332 4.2333332"
12 version="1.1"
13 id="svg8">
14 <defs
15 id="defs2">
16 <linearGradient
17 id="linearGradient940">
18 <stop
19 style="stop-color:#44a8f3;stop-opacity:1"
20 offset="0"
21 id="stop936" />
22 <stop
23 style="stop-color:#2196f3;stop-opacity:1"
24 offset="0.49936226"
25 id="stop944" />
26 <stop
27 style="stop-color:#44a8f3;stop-opacity:1"
28 offset="1"
29 id="stop938" />
30 </linearGradient>
31 <linearGradient
32 xlink:href="#linearGradient940"
33 id="linearGradient942"
34 x1="2.1166666"
35 y1="0.26458332"
36 x2="2.1166666"
37 y2="3.9687498"
38 gradientUnits="userSpaceOnUse" />
39 <filter
40 style="color-interpolation-filters:sRGB;"
41 id="filter1135">
42 <feFlood
43 flood-opacity="0.498039"
44 flood-color="rgb(0,0,0)"
45 result="flood"
46 id="feFlood1125" />
47 <feComposite
48 in="flood"
49 in2="SourceGraphic"
50 operator="in"
51 result="composite1"
52 id="feComposite1127" />
53 <feGaussianBlur
54 in="composite1"
55 stdDeviation="0.1"
56 result="blur"
57 id="feGaussianBlur1129" />
58 <feOffset
59 dx="0"
60 dy="0.2"
61 result="offset"
62 id="feOffset1131" />
63 <feComposite
64 in="SourceGraphic"
65 in2="offset"
66 operator="over"
67 result="composite2"
68 id="feComposite1133" />
69 </filter>
70 </defs>
71 <metadata
72 id="metadata5">
73 <rdf:RDF>
74 <cc:Work
75 rdf:about="">
76 <dc:format>image/svg+xml</dc:format>
77 <dc:type
78 rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
79 <dc:title></dc:title>
80 </cc:Work>
81 </rdf:RDF>
82 </metadata>
83 <g
84 id="layer1">
85 <rect
86 style="fill:#1976d2;fill-opacity:1;fill-rule:evenodd;stroke-width:0.264583;stroke-miterlimit:4;stroke-dasharray:none"
87 id="rect18"
88 width="4.2333331"
89 height="4.2333331"
90 x="1.9629277e-07"
91 y="0"
92 ry="1.0583333" />
93 <rect
94 style="fill:#2196f3;fill-opacity:1;stroke:none;stroke-width:0.264583;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
95 id="rect847"
96 width="3.7041667"
97 height="3.7041667"
98 x="0.26458332"
99 y="0.26458332"
100 ry="1.0583333"
101 rx="1.0583334" />
102 <g
103 aria-label="M"
104 transform="scale(1.1079108,0.90259972)"
105 id="text948"
106 style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.0747px;line-height:1.25;font-family:'Roboto Mono';-inkscape-font-specification:'Roboto Mono';fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.401866;filter:url(#filter1135)">
107 <path
108 d="M 1.5348207,0.63068176 H 0.77190192 V 4.0591068 H 1.3417363 V 2.9712412 l -0.030611,-1.507 0.4403265,1.5022906 H 2.0622707 L 2.5520457,1.4030193 2.5214348,2.9712412 V 4.0591068 H 3.0912692 V 0.63068176 H 2.3283504 L 1.909216,2.008174 Z"
109 style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:4.8224px;font-family:'Roboto Mono';-inkscape-font-specification:'Roboto Mono Semi-Bold';fill:#ffffff;fill-opacity:1;stroke-width:0.401866"
110 id="path846" />
111 </g>
112 </g>
113</svg>
diff --git a/enigma-swing/src/main/resources/icons/record.svg b/enigma-swing/src/main/resources/icons/record.svg
new file mode 100644
index 00000000..32f2e5f0
--- /dev/null
+++ b/enigma-swing/src/main/resources/icons/record.svg
@@ -0,0 +1,88 @@
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<svg
3 xmlns:dc="http://purl.org/dc/elements/1.1/"
4 xmlns:cc="http://creativecommons.org/ns#"
5 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
6 xmlns:svg="http://www.w3.org/2000/svg"
7 xmlns="http://www.w3.org/2000/svg"
8 width="16"
9 height="16"
10 viewBox="0 0 4.2333332 4.2333332"
11 version="1.1"
12 id="svg8">
13 <defs
14 id="defs2">
15 <filter
16 style="color-interpolation-filters:sRGB;"
17 id="filter1135">
18 <feFlood
19 flood-opacity="0.498039"
20 flood-color="rgb(0,0,0)"
21 result="flood"
22 id="feFlood1125" />
23 <feComposite
24 in="flood"
25 in2="SourceGraphic"
26 operator="in"
27 result="composite1"
28 id="feComposite1127" />
29 <feGaussianBlur
30 in="composite1"
31 stdDeviation="0.1"
32 result="blur"
33 id="feGaussianBlur1129" />
34 <feOffset
35 dx="0"
36 dy="0.2"
37 result="offset"
38 id="feOffset1131" />
39 <feComposite
40 in="SourceGraphic"
41 in2="offset"
42 operator="over"
43 result="composite2"
44 id="feComposite1133" />
45 </filter>
46 </defs>
47 <metadata
48 id="metadata5">
49 <rdf:RDF>
50 <cc:Work
51 rdf:about="">
52 <dc:format>image/svg+xml</dc:format>
53 <dc:type
54 rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
55 <dc:title></dc:title>
56 </cc:Work>
57 </rdf:RDF>
58 </metadata>
59 <g
60 id="layer1">
61 <rect
62 style="fill:#bc245d;fill-opacity:1;fill-rule:evenodd;stroke-width:0.264583;stroke-miterlimit:4;stroke-dasharray:none"
63 id="rect18"
64 width="4.2333331"
65 height="4.2333331"
66 x="0"
67 y="0"
68 ry="1.0583333" />
69 <rect
70 style="fill:#de3e80;fill-opacity:1;stroke:none;stroke-width:0.30868;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
71 id="rect847"
72 width="3.7041664"
73 height="3.7041664"
74 x="0.26458332"
75 y="0.26458332"
76 ry="1.0583333" />
77 <g
78 aria-label="R"
79 transform="scale(1.1079108,0.90259972)"
80 id="text948"
81 style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.0747px;line-height:1.25;font-family:'Roboto Mono';-inkscape-font-specification:'Roboto Mono';fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.401866;filter:url(#filter1135)">
82 <path
83 d="M 1.9516004,2.7546099 2.6014941,4.0591068 H 3.258452 V 4.0284959 L 2.5237895,2.6039099 q 0.1412812,-0.063576 0.2543062,-0.1507 0.1153797,-0.087123 0.2001485,-0.2048578 0.080059,-0.113025 0.1247984,-0.2590156 0.044739,-0.1459907 0.044739,-0.3249469 0,-0.2566609 -0.089478,-0.4497453 Q 2.9711801,1.0215599 2.8087067,0.89440677 2.6438785,0.76489895 2.4178285,0.6989677 2.1917785,0.63068176 1.9162801,0.63068176 H 0.7954488 V 4.0591068 H 1.4100222 V 2.7546099 Z M 1.4100222,2.2530615 v -1.123186 h 0.5062579 q 0.1412812,0 0.2519515,0.03532 0.1106704,0.03532 0.1907297,0.1012516 0.084769,0.070641 0.1271532,0.1813109 0.044739,0.1083157 0.044739,0.2495969 0,0.1224438 -0.037675,0.2213406 -0.03532,0.096542 -0.1036062,0.1648282 -0.080059,0.082414 -0.2001485,0.1271531 -0.1177344,0.042384 -0.2684344,0.042384 z"
84 style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:4.8224px;font-family:'Roboto Mono';-inkscape-font-specification:'Roboto Mono Semi-Bold';fill:#ffffff;fill-opacity:1;stroke-width:0.401866"
85 id="path841" />
86 </g>
87 </g>
88</svg>
diff --git a/enigma/src/main/java/cuchaz/enigma/translation/representation/AccessFlags.java b/enigma/src/main/java/cuchaz/enigma/translation/representation/AccessFlags.java
index e8480a26..21e6ef4e 100644
--- a/enigma/src/main/java/cuchaz/enigma/translation/representation/AccessFlags.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/representation/AccessFlags.java
@@ -39,6 +39,10 @@ public class AccessFlags {
39 return (flags & Opcodes.ACC_ENUM) != 0; 39 return (flags & Opcodes.ACC_ENUM) != 0;
40 } 40 }
41 41
42 public boolean isRecord() {
43 return (flags & Opcodes.ACC_RECORD) != 0;
44 }
45
42 public boolean isBridge() { 46 public boolean isBridge() {
43 return (flags & Opcodes.ACC_BRIDGE) != 0; 47 return (flags & Opcodes.ACC_BRIDGE) != 0;
44 } 48 }