src/main/java/de/unixwork/im/ContactListFrame.java

Thu, 26 Dec 2024 17:19:15 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Thu, 26 Dec 2024 17:19:15 +0100
changeset 3
25a32e2dfde5
parent 2
94c6a715fa44
permissions
-rw-r--r--

update status in contact list and conversations

0
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1 package de.unixwork.im;
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
3 import javax.swing.*;
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
4 import java.awt.*;
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
5 import java.awt.event.MouseAdapter;
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
6 import java.awt.event.MouseEvent;
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
7 import java.util.List;
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
8 import org.jivesoftware.smack.roster.RosterEntry;
2
94c6a715fa44 handle presence messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
9 import org.jxmpp.jid.Jid;
0
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
10
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
11 // Main class for the XMPP contact list window
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
12 public class ContactListFrame extends JFrame {
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
13
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
14 private DefaultListModel<RosterEntry> contactListModel;
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
15 private JList<RosterEntry> contactList;
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
16 private ContactClickListener contactClickListener;
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
17
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
18 public ContactListFrame() {
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
19 setTitle("Contact List");
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
20 setSize(200, 300);
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
21 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
22 setLayout(new BorderLayout());
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
23
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
24 // Create the list model and list view
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
25 contactListModel = new DefaultListModel<>();
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
26 contactList = new JList<>(contactListModel);
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
27 contactList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
28 contactList.setCellRenderer(new DefaultListCellRenderer() {
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
29 @Override
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
30 public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
31 Component c = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
32 if (value instanceof RosterEntry) {
2
94c6a715fa44 handle presence messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
33 RosterEntry entry = (RosterEntry)value;
94c6a715fa44 handle presence messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
34 String xid = entry.getJid().asBareJid().toString();
94c6a715fa44 handle presence messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 0
diff changeset
35 setText(App.getInstance().getStatusForXID(xid) + xid);
0
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
36 }
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
37 return c;
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
38 }
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
39 });
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
40
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
41 // Add mouse listener for click events
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
42 contactList.addMouseListener(new MouseAdapter() {
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
43 @Override
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
44 public void mouseClicked(MouseEvent e) {
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
45 if (e.getClickCount() == 2) { // Double-click detected
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
46 int index = contactList.locationToIndex(e.getPoint());
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
47 if (index >= 0 && contactClickListener != null) {
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
48 contactClickListener.onContactClicked(contactListModel.getElementAt(index));
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
49 }
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
50 }
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
51 }
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
52 });
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
53
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
54 // Add the list to a scroll pane
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
55 JScrollPane scrollPane = new JScrollPane(contactList);
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
56 add(scrollPane, BorderLayout.CENTER);
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
57 }
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
58
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
59 // Method to set the contact list data
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
60 public void setContacts(List<RosterEntry> contacts) {
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
61 contactListModel.clear();
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
62 for (RosterEntry contact : contacts) {
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
63 contactListModel.addElement(contact);
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
64 }
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
65 }
3
25a32e2dfde5 update status in contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
66
25a32e2dfde5 update status in contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
67 public void reload() {
25a32e2dfde5 update status in contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
68 contactList.updateUI();
25a32e2dfde5 update status in contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
69 }
25a32e2dfde5 update status in contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 2
diff changeset
70
0
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
71 // Interface for click callback
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
72 public interface ContactClickListener {
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
73 void onContactClicked(RosterEntry contact);
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
74 }
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
75
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
76 // Method to set the click listener
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
77 public void setContactClickListener(ContactClickListener listener) {
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
78 this.contactClickListener = listener;
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
79 }
f3095cda599e add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
80 }

mercurial