diff --git a/src/main/java/envoy/client/ui/ChatWindow.java b/src/main/java/envoy/client/ui/ChatWindow.java
index e95de1c..8e7dc55 100644
--- a/src/main/java/envoy/client/ui/ChatWindow.java
+++ b/src/main/java/envoy/client/ui/ChatWindow.java
@@ -70,6 +70,7 @@ public class ChatWindow extends JFrame {
private JTextPane textPane = new JTextPane();
private PrimaryButton postButton = new PrimaryButton("Post");
private PrimaryButton settingsButton = new PrimaryButton("Settings");
+ private JPopupMenu contextMenu;
// Contacts Header
private JPanel contactsHeader = new JPanel();
diff --git a/src/main/java/envoy/client/ui/renderer/UserComponentListRenderer.java b/src/main/java/envoy/client/ui/renderer/UserComponentListRenderer.java
new file mode 100644
index 0000000..f762eab
--- /dev/null
+++ b/src/main/java/envoy/client/ui/renderer/UserComponentListRenderer.java
@@ -0,0 +1,78 @@
+package envoy.client.ui.renderer;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.io.Serializable;
+
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import envoy.client.data.Settings;
+import envoy.client.ui.Theme;
+import envoy.client.ui.list.ComponentList;
+import envoy.client.ui.list.ComponentListCellRenderer;
+import envoy.data.User;
+import envoy.data.User.UserStatus;
+
+/**
+ * Project: envoy-client
+ * File: UserComponentListRenderer.java
+ * Created: 15 Mar 2020
+ *
+ * @author Leon Hofmeister
+ * @since Envoy v0.1-beta
+ */
+public class UserComponentListRenderer implements ComponentListCellRenderer, Serializable {
+
+ private static final long serialVersionUID = -2379244319112111284L;
+
+ /**
+ * @since Envoy v0.1-beta
+ */
+ public UserComponentListRenderer() {}
+
+ @Override
+ public JComponent getListCellComponent(ComponentList extends User> list, User value, boolean isSelected) {
+ final JPanel panel = new JPanel();
+ panel.setLayout(new BorderLayout());
+ final Theme theme = Settings.getInstance().getThemes().get(Settings.getInstance().getCurrentTheme());
+
+ // Panel background
+ panel.setBackground(isSelected ? theme.getSelectionColor() : theme.getCellColor());
+ panel.setOpaque(true);
+
+ panel.setPreferredSize(new Dimension(100, 35));
+
+ // TODO add profile picture support in BorderLayout.West
+
+ JLabel username = new JLabel(value.getName());
+ username.setForeground(theme.getUserNameColor());
+ panel.add(username, BorderLayout.CENTER);
+
+ final UserStatus status = value.getStatus();
+ JLabel statusLabel = new JLabel(status.toString());
+ java.awt.Color foreground;
+ switch (status) {
+ case OFFLINE:
+ foreground = java.awt.Color.LIGHT_GRAY;
+ break;
+ case AWAY:
+ foreground = java.awt.Color.YELLOW;
+ break;
+ case BUSY:
+ foreground = java.awt.Color.BLUE;
+ break;
+ case ONLINE:
+ foreground = java.awt.Color.GREEN;
+ break;
+ default:
+ foreground = java.awt.Color.LIGHT_GRAY;
+ break;
+ }
+ statusLabel.setForeground(foreground);
+ panel.add(statusLabel, BorderLayout.NORTH);
+ return panel;
+ }
+
+}