Adjusted ChatWindow and ContactsChooserDialog to new interface
This commit is contained in:
		| @@ -25,6 +25,7 @@ import envoy.client.net.WriteProxy; | ||||
| import envoy.client.ui.ContextMenu; | ||||
| import envoy.client.ui.Theme; | ||||
| import envoy.client.ui.list.ComponentList; | ||||
| import envoy.client.ui.list.ComponentList.SelectionMode; | ||||
| import envoy.client.ui.list.ComponentListModel; | ||||
| import envoy.client.ui.primary.PrimaryButton; | ||||
| import envoy.client.ui.primary.PrimaryScrollPane; | ||||
| @@ -125,18 +126,21 @@ public class ChatWindow extends JFrame { | ||||
| 		contentPane.setLayout(gbl_contentPane); | ||||
|  | ||||
| 		messageList.setBorder(new EmptyBorder(space, space, space, space)); | ||||
| 		messageList.setSelectionMode(SelectionMode.SINGLE); | ||||
| 		Map<String, ActionListener> commands = new HashMap<>() { | ||||
|  | ||||
| 			private static final long serialVersionUID = -2755235774946990126L; | ||||
|  | ||||
| 			{ | ||||
| 				put("forward selected message", | ||||
| 						evt -> forwardMessageToMultipleUsers(messageList.getSelection().get(0), | ||||
| 								ContactsChooserDialog.showForwardingDialog("Forward selected message to", messageList.getSelection().get(0), client))); | ||||
| 						evt -> forwardMessageToMultipleUsers(messageList | ||||
| 							.getSingleSelectedElement(), | ||||
| 								ContactsChooserDialog | ||||
| 									.showForwardingDialog("Forward selected message to", messageList.getSingleSelectedElement(), client))); | ||||
| 				put("copy", evt -> { | ||||
| 					// TODO should be enhanced to allow also copying of message attachments, | ||||
| 					// especially pictures | ||||
| 					StringSelection copy = new StringSelection(messageList.getSelection().get(0).getText()); | ||||
| 					StringSelection copy = new StringSelection(messageList.getSingleSelectedElement().getText()); | ||||
| 					Toolkit.getDefaultToolkit().getSystemClipboard().setContents(copy, copy); | ||||
| 				}); | ||||
| 				// TODO insert implementation to edit and delete messages | ||||
|   | ||||
| @@ -15,6 +15,7 @@ import envoy.client.data.Settings; | ||||
| import envoy.client.net.Client; | ||||
| import envoy.client.ui.Theme; | ||||
| import envoy.client.ui.list.ComponentList; | ||||
| import envoy.client.ui.list.ComponentList.SelectionMode; | ||||
| import envoy.client.ui.list.ComponentListModel; | ||||
| import envoy.client.ui.renderer.MessageListRenderer; | ||||
| import envoy.client.ui.renderer.UserComponentListRenderer; | ||||
| @@ -69,7 +70,7 @@ public class ContactsChooserDialog extends JDialog { | ||||
| 		dialog.getContentPanel() | ||||
| 			.add(new MessageListRenderer(client.getSender().getId()).getListCellComponent(null, message, false), BorderLayout.NORTH); | ||||
| 		List<User> results = new ArrayList<>(); | ||||
| 		dialog.addOkButtonActionListener(e -> { results.addAll(dialog.getContactList().getSelection()); dialog.dispose(); }); | ||||
| 		dialog.addOkButtonActionListener(e -> { results.addAll(dialog.getContactList().getSelectedElements()); dialog.dispose(); }); | ||||
| 		ComponentListModel<User> contactListModel = dialog.getContactList().getModel(); | ||||
| 		client.getContacts().getContacts().forEach(user -> contactListModel.add(user)); | ||||
| 		dialog.setVisible(true); | ||||
| @@ -82,7 +83,7 @@ public class ContactsChooserDialog extends JDialog { | ||||
| 	 * @since Envoy v0.1-beta | ||||
| 	 */ | ||||
| 	private ContactsChooserDialog() { | ||||
| 		contactList.enableMultipleSelection(); | ||||
| 		contactList.setSelectionMode(SelectionMode.MULTIPLE); | ||||
| 		// setBounds(100, 100, 450, 300); | ||||
| 		setModal(true); | ||||
| 		getContentPane().setLayout(new BorderLayout()); | ||||
|   | ||||
| @@ -30,8 +30,26 @@ public class ComponentList<E> extends JPanel { | ||||
|  | ||||
| 	private static final long serialVersionUID = 1759644503942876737L; | ||||
|  | ||||
| 	/** | ||||
| 	 * Defines the possible modes of selection that can be performed by the user | ||||
| 	 * | ||||
| 	 * @since Envoy v0.1-beta | ||||
| 	 */ | ||||
| 	public static enum SelectionMode { | ||||
| 		NONE, SINGLE, MULTIPLE | ||||
| 		/** | ||||
| 		 * Selection is completely ignored. | ||||
| 		 */ | ||||
| 		NONE, | ||||
|  | ||||
| 		/** | ||||
| 		 * Only a single element can be selected. | ||||
| 		 */ | ||||
| 		SINGLE, | ||||
|  | ||||
| 		/** | ||||
| 		 * Multiple elements can be selected regardless of their position. | ||||
| 		 */ | ||||
| 		MULTIPLE | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| @@ -202,6 +220,30 @@ public class ComponentList<E> extends JPanel { | ||||
| 	 */ | ||||
| 	public Set<Integer> getSelection() { return selection; } | ||||
|  | ||||
| 	/** | ||||
| 	 * @return a set of all selected elements | ||||
| 	 * @since Envoy v0.1-beta | ||||
| 	 */ | ||||
| 	public Set<E> getSelectedElements() { | ||||
| 		var selectedElements = new HashSet<E>(); | ||||
| 		selection.forEach(i -> selectedElements.add(model.get(i))); | ||||
| 		return selectedElements; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * @return the index of an arbitrary selected element | ||||
| 	 * @throws java.util.NoSuchElementException if no selection is present | ||||
| 	 * @since Envoy v0.1-beta | ||||
| 	 */ | ||||
| 	public int getSingleSelection() { return selection.iterator().next(); } | ||||
|  | ||||
| 	/** | ||||
| 	 * @return an arbitrary selected element | ||||
| 	 * @throws java.util.NoSuchElementException if no selection is present | ||||
| 	 * @since Envoy v0.1-beta | ||||
| 	 */ | ||||
| 	public E getSingleSelectedElement() { return model.get(getSingleSelection()); } | ||||
|  | ||||
| 	/** | ||||
| 	 * @return the model | ||||
| 	 * @since Envoy v0.1-beta | ||||
| @@ -221,13 +263,13 @@ public class ComponentList<E> extends JPanel { | ||||
| 	public void setRenderer(ComponentListCellRenderer<E> renderer) { this.renderer = renderer; } | ||||
|  | ||||
| 	/** | ||||
| 	 * @return the selectionMode | ||||
| 	 * @return the selection mode | ||||
| 	 * @since Envoy v0.1-beta | ||||
| 	 */ | ||||
| 	public SelectionMode getSelectionMode() { return selectionMode; } | ||||
|  | ||||
| 	/** | ||||
| 	 * @param selectionMode the selectionMode to set | ||||
| 	 * @param selectionMode the selection mode to set | ||||
| 	 * @since Envoy v0.1-beta | ||||
| 	 */ | ||||
| 	public void setSelectionMode(SelectionMode selectionMode) { this.selectionMode = selectionMode; } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user