Added renderer to ContactsChooserDialog
This commit is contained in:
		| @@ -4,7 +4,10 @@ import java.awt.*; | ||||
| import java.awt.datatransfer.StringSelection; | ||||
| import java.awt.event.*; | ||||
| import java.io.IOException; | ||||
| import java.util.*; | ||||
| import java.util.Arrays; | ||||
| import java.util.Collection; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| import java.util.logging.Level; | ||||
| import java.util.logging.Logger; | ||||
|  | ||||
| @@ -126,30 +129,19 @@ public class ChatWindow extends JFrame { | ||||
| 			comp.setBackground(isSelected ? theme.getSelectionColor() : theme.getCellColor()); | ||||
|  | ||||
| 			// ContextMenu | ||||
| 			Map<String, ActionListener> commands = new HashMap<>() { | ||||
| 			Map<String, ActionListener> commands = Map.of("forward selected message", evt -> { | ||||
| 				final Message	selectedMessage	= messageList.getSingleSelectedElement(); | ||||
| 				List<User>		chosenContacts	= ContactsChooserDialog | ||||
| 					.showForwardingDialog("Forward selected message to", null, selectedMessage, localDb.getUsers().values()); | ||||
| 				if (chosenContacts != null && chosenContacts.size() > 0) forwardMessage(selectedMessage, chosenContacts.toArray(new User[0])); | ||||
| 			}, "copy", evt -> { | ||||
| 				// TODO should be enhanced to allow also copying of message attachments, | ||||
| 				// especially pictures | ||||
| 				StringSelection copy = new StringSelection(messageList.getSingleSelectedElement().getText()); | ||||
| 				Toolkit.getDefaultToolkit().getSystemClipboard().setContents(copy, copy); | ||||
| 				// TODO insert implementation to edit and delete messages | ||||
| 			}, "delete", evt -> {}, "edit", evt -> {}, "quote", evt -> {}); | ||||
|  | ||||
| 				private static final long serialVersionUID = -2755235774946990126L; | ||||
|  | ||||
| 				{ | ||||
| 					put("forward selected message", evt -> { | ||||
| 						final Message selectedMessage = messageList.getSingleSelectedElement(); | ||||
| 						forwardMessage(selectedMessage, | ||||
| 								ContactsChooserDialog | ||||
| 									.showForwardingDialog("Forward selected message to", null, selectedMessage, localDb.getUsers().values()) | ||||
| 									.toArray(new User[0])); | ||||
| 					}); | ||||
| 					put("copy", evt -> { | ||||
| 						// TODO should be enhanced to allow also copying of message attachments, | ||||
| 						// especially pictures | ||||
| 						StringSelection copy = new StringSelection(messageList.getSingleSelectedElement().getText()); | ||||
| 						Toolkit.getDefaultToolkit().getSystemClipboard().setContents(copy, copy); | ||||
| 					}); | ||||
| 					// TODO insert implementation to edit and delete messages | ||||
| 					put("delete", evt -> {}); | ||||
| 					put("edit", evt -> {}); | ||||
| 					put("quote", evt -> {}); | ||||
| 				} | ||||
| 			}; | ||||
| 			if (isSelected) { | ||||
| 				contextMenu = new ContextMenu(null, comp, commands, null, null).build(); | ||||
| 				contextMenu.show(comp, 0, 0); | ||||
| @@ -210,7 +202,7 @@ public class ChatWindow extends JFrame { | ||||
| 		gbc_messageEnterTextArea.fill	= GridBagConstraints.BOTH; | ||||
| 		gbc_messageEnterTextArea.gridx	= 1; | ||||
| 		gbc_messageEnterTextArea.gridy	= 3; | ||||
| 		gbc_messageEnterTextArea.insets = insets; | ||||
| 		gbc_messageEnterTextArea.insets	= insets; | ||||
| 		contentPane.add(messageEnterTextArea, gbc_messageEnterTextArea); | ||||
|  | ||||
| 		// Post Button | ||||
| @@ -218,7 +210,7 @@ public class ChatWindow extends JFrame { | ||||
| 		gbc_postButton.fill		= GridBagConstraints.BOTH; | ||||
| 		gbc_postButton.gridx	= 2; | ||||
| 		gbc_postButton.gridy	= 3; | ||||
| 		gbc_postButton.insets = insets; | ||||
| 		gbc_postButton.insets	= insets; | ||||
| 		postButton.addActionListener((evt) -> { postMessage(); }); | ||||
| 		postButton.setEnabled(false); | ||||
| 		contentPane.add(postButton, gbc_postButton); | ||||
|   | ||||
| @@ -18,6 +18,7 @@ import envoy.client.ui.Theme; | ||||
| import envoy.client.ui.list.ComponentList; | ||||
| import envoy.client.ui.list.ComponentList.SelectionMode; | ||||
| import envoy.client.ui.list.Model; | ||||
| import envoy.client.ui.list_component.UserComponent; | ||||
| import envoy.data.Message; | ||||
| import envoy.data.User; | ||||
|  | ||||
| @@ -35,7 +36,8 @@ public class ContactsChooserDialog extends JDialog { | ||||
|  | ||||
| 	private static final long serialVersionUID = -5774558118579032256L; | ||||
|  | ||||
| 	private ComponentList<User>	contactList		= new ComponentList<User>().setModel(new Model<User>()); | ||||
| 	private ComponentList<User>	contactList		= new ComponentList<User>().setModel(new Model<User>()) | ||||
| 		.setRenderer((list, user) -> new UserComponent(user)); | ||||
| 	private JButton				okButton		= new JButton("Ok"); | ||||
| 	private JButton				cancelButton	= new JButton("Cancel"); | ||||
|  | ||||
| @@ -77,6 +79,7 @@ public class ContactsChooserDialog extends JDialog { | ||||
| 		dialog.addOkButtonActionListener(e -> { results.addAll(dialog.getContactList().getSelectedElements()); dialog.dispose(); }); | ||||
| 		Model<User> contactListModel = dialog.getContactList().getModel(); | ||||
| 		users.forEach(contactListModel::add); | ||||
| 		dialog.setModalityType(ModalityType.APPLICATION_MODAL); | ||||
| 		dialog.setVisible(true); | ||||
| 		dialog.repaint(); | ||||
| 		dialog.revalidate(); | ||||
| @@ -90,12 +93,16 @@ public class ContactsChooserDialog extends JDialog { | ||||
| 	 */ | ||||
| 	private ContactsChooserDialog(Component parent) { | ||||
| 		contactList.setSelectionMode(SelectionMode.MULTIPLE); | ||||
| 		contactList.setSelectionHandler((user, comp, isSelected) -> { | ||||
| 			final var theme = Settings.getInstance().getCurrentTheme(); | ||||
| 			comp.setBackground(isSelected ? theme.getSelectionColor() : theme.getCellColor()); | ||||
| 		}); | ||||
| 		// setBounds(100, 100, 450, 300); | ||||
| 		setModal(true); | ||||
| 		setLocationRelativeTo(parent); | ||||
| 		getContentPane().setLayout(new BorderLayout()); | ||||
| 		setBackground(theme.getBackgroundColor()); | ||||
| 		setForeground(theme.getTextColor()); | ||||
| 		setSize(400, 400); | ||||
| 		contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5)); | ||||
| 		getContentPane().add(contentPanel, BorderLayout.CENTER); | ||||
| 		contentPanel.setLayout(new BorderLayout(0, 0)); | ||||
| @@ -117,6 +124,17 @@ public class ContactsChooserDialog extends JDialog { | ||||
| 				buttonPane.add(cancelButton, BorderLayout.WEST); | ||||
| 			} | ||||
| 		} | ||||
| 		applyTheme(Settings.getInstance().getCurrentTheme()); | ||||
| 	} | ||||
|  | ||||
| 	private void applyTheme(Theme theme) { | ||||
| 		contentPanel.setBackground(theme.getBackgroundColor()); | ||||
| 		contentPanel.setForeground(theme.getTextColor()); | ||||
| 		contactList.setBackground(theme.getCellColor()); | ||||
| 		okButton.setBackground(theme.getInteractableBackgroundColor()); | ||||
| 		okButton.setForeground(theme.getTextColor()); | ||||
| 		cancelButton.setBackground(theme.getInteractableBackgroundColor()); | ||||
| 		cancelButton.setForeground(theme.getTextColor()); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
|   | ||||
| @@ -83,17 +83,18 @@ public class ComponentList<E> extends JPanel { | ||||
| 	 */ | ||||
| 	public void selectElement(int index) { | ||||
| 		final JComponent element = getComponent(index); | ||||
|  | ||||
| 		if (selection.contains(index)) { | ||||
|  | ||||
| 			// Remove selection of element at index | ||||
| 			// Deselect if clicked again | ||||
| 			if (selectionHandler != null) selectionHandler.selectionChanged(model.get(index), element, true); | ||||
| 			selection.remove(index); | ||||
|  | ||||
| 		} else { | ||||
|  | ||||
| 			// Remove old selection if single selection is enabled | ||||
| 			if (selectionMode == SelectionMode.SINGLE) clearSelection(); | ||||
|  | ||||
| 			// Select item | ||||
| 			if (selectionMode != SelectionMode.NONE) { | ||||
|  | ||||
| 				// Assign new selection | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 delvh
					delvh