Apply suggestions by @kske
This commit is contained in:
		@@ -1,12 +1,10 @@
 | 
			
		||||
package envoy.client.event;
 | 
			
		||||
 | 
			
		||||
import envoy.data.User;
 | 
			
		||||
import envoy.data.User.UserStatus;
 | 
			
		||||
import envoy.event.Event;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Conveys the action that the currently logged in {@link User} has changed his
 | 
			
		||||
 * status (manually).
 | 
			
		||||
 * Signifies a manual status change of the client user.
 | 
			
		||||
 *
 | 
			
		||||
 * @author Leon Hofmeister
 | 
			
		||||
 * @since Envoy Client v0.3-beta
 | 
			
		||||
@@ -16,7 +14,7 @@ public class OwnStatusChange extends Event<UserStatus> {
 | 
			
		||||
	private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * @param value the new user status of the currently logged in user
 | 
			
		||||
	 * @param value the new user status of the client user
 | 
			
		||||
	 * @since Envoy Client v0.3-beta
 | 
			
		||||
	 */
 | 
			
		||||
	public OwnStatusChange(UserStatus value) { super(value); }
 | 
			
		||||
 
 | 
			
		||||
@@ -22,8 +22,18 @@ public final class ShutdownHelper {
 | 
			
		||||
	 *
 | 
			
		||||
	 * @since Envoy Client v0.2-beta
 | 
			
		||||
	 */
 | 
			
		||||
	public static void exit() {
 | 
			
		||||
		if (Settings.getInstance().isHideOnClose() && StatusTrayIcon.isSupported()) Context.getInstance().getStage().setIconified(true);
 | 
			
		||||
	public static void exit() { exit(false); }
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Exits Envoy immediately if {@code force = true},
 | 
			
		||||
	 * else it can exit or minimize Envoy, depending on the current state of
 | 
			
		||||
	 * {@link Settings#isHideOnClose()} and {@link StatusTrayIcon#isSupported()}.
 | 
			
		||||
	 *
 | 
			
		||||
	 * @param force whether to close in any case.
 | 
			
		||||
	 * @since Envoy Client v0.2-beta
 | 
			
		||||
	 */
 | 
			
		||||
	public static void exit(boolean force) {
 | 
			
		||||
		if (!force && Settings.getInstance().isHideOnClose() && StatusTrayIcon.isSupported()) Context.getInstance().getStage().setIconified(true);
 | 
			
		||||
		else {
 | 
			
		||||
			EventBus.getInstance().dispatch(new EnvoyCloseEvent());
 | 
			
		||||
			System.exit(0);
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,7 @@ import java.awt.TrayIcon.MessageType;
 | 
			
		||||
import javafx.application.Platform;
 | 
			
		||||
import javafx.stage.Stage;
 | 
			
		||||
 | 
			
		||||
import envoy.client.event.OwnStatusChange;
 | 
			
		||||
import envoy.client.helper.ShutdownHelper;
 | 
			
		||||
import envoy.client.util.*;
 | 
			
		||||
import envoy.data.Message;
 | 
			
		||||
@@ -56,27 +57,28 @@ public final class StatusTrayIcon implements EventListener {
 | 
			
		||||
 | 
			
		||||
		// Adding the exit menu item
 | 
			
		||||
		final var exitMenuItem = new MenuItem("Exit");
 | 
			
		||||
		exitMenuItem.addActionListener(evt -> ShutdownHelper.exit());
 | 
			
		||||
		exitMenuItem.addActionListener(evt -> ShutdownHelper.exit(true));
 | 
			
		||||
		popup.add(exitMenuItem);
 | 
			
		||||
 | 
			
		||||
		// Adding the logout menu item
 | 
			
		||||
		final var logoutMenuItem = new MenuItem("Logout");
 | 
			
		||||
		logoutMenuItem.addActionListener(evt -> { hide(); UserUtil.logout(); });
 | 
			
		||||
		popup.add(exitMenuItem);
 | 
			
		||||
		logoutMenuItem.addActionListener(evt -> { hide(); Platform.runLater(UserUtil::logout); });
 | 
			
		||||
		popup.add(logoutMenuItem);
 | 
			
		||||
 | 
			
		||||
		// Adding the status change items
 | 
			
		||||
		final var statusSubMenu = new Menu("Change status");
 | 
			
		||||
		for (final var status : UserStatus.values()) {
 | 
			
		||||
			final var statusMenuItem = new MenuItem(status.toString().toLowerCase());
 | 
			
		||||
			statusMenuItem.addActionListener(evt -> UserUtil.changeStatus(status));
 | 
			
		||||
			statusMenuItem.addActionListener(evt -> Platform.runLater(() -> UserUtil.changeStatus(status)));
 | 
			
		||||
			statusSubMenu.add(statusMenuItem);
 | 
			
		||||
		}
 | 
			
		||||
		popup.add(statusSubMenu);
 | 
			
		||||
 | 
			
		||||
		trayIcon.setPopupMenu(popup);
 | 
			
		||||
 | 
			
		||||
		// Only display messages if the stage is not focused
 | 
			
		||||
		stage.focusedProperty().addListener((ov, onHidden, onShown) -> displayMessages = !ov.getValue());
 | 
			
		||||
		// Only display messages if the stage is not focused and the current user status
 | 
			
		||||
		// is not BUSY (if BUSY, displayMessages will be false)
 | 
			
		||||
		stage.focusedProperty().addListener((ov, wasFocused, isFocused) -> displayMessages = !displayMessages && wasFocused ? false : !isFocused);
 | 
			
		||||
 | 
			
		||||
		// Show the window if the user clicks on the icon
 | 
			
		||||
		trayIcon.addActionListener(evt -> Platform.runLater(() -> { stage.setIconified(false); stage.toFront(); stage.requestFocus(); }));
 | 
			
		||||
@@ -103,6 +105,9 @@ public final class StatusTrayIcon implements EventListener {
 | 
			
		||||
	 */
 | 
			
		||||
	public void hide() { SystemTray.getSystemTray().remove(trayIcon); }
 | 
			
		||||
 | 
			
		||||
	@Event
 | 
			
		||||
	private void onOwnStatusChange(OwnStatusChange statusChange) { displayMessages = !statusChange.get().equals(UserStatus.BUSY); }
 | 
			
		||||
 | 
			
		||||
	@Event
 | 
			
		||||
	private void onMessage(Message message) {
 | 
			
		||||
		if (displayMessages) trayIcon
 | 
			
		||||
 
 | 
			
		||||
@@ -74,7 +74,7 @@ public final class ChatSceneCommands {
 | 
			
		||||
				alert.setContentText("Please provide an existing status");
 | 
			
		||||
				alert.showAndWait();
 | 
			
		||||
			}
 | 
			
		||||
		}).setDescription("Changes your status to the given status.").setNumberOfArguments(1).setDefaults("OFFLINE").build("status");
 | 
			
		||||
		}).setDescription("Changes your status to the given status.").setNumberOfArguments(1).setDefaults("").build("status");
 | 
			
		||||
 | 
			
		||||
		// Selection of a new message initialization
 | 
			
		||||
		messageDependantAction("s",
 | 
			
		||||
 
 | 
			
		||||
@@ -194,7 +194,6 @@ public final class ChatScene implements EventListener, Restorable {
 | 
			
		||||
		settingsButton.setAlignment(Pos.BOTTOM_RIGHT);
 | 
			
		||||
		HBox.setHgrow(spaceBetweenUserAndSettingsButton, Priority.ALWAYS);
 | 
			
		||||
		generateOwnStatusControl();
 | 
			
		||||
		System.out.println(ownContactControl.getChildren());
 | 
			
		||||
 | 
			
		||||
		Platform.runLater(() -> {
 | 
			
		||||
			final var online = client.isOnline();
 | 
			
		||||
@@ -270,9 +269,6 @@ public final class ChatScene implements EventListener, Restorable {
 | 
			
		||||
		});
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Event(eventType = OwnStatusChange.class, priority = 50)
 | 
			
		||||
	private void onOwnStatusChange() { generateOwnStatusControl(); }
 | 
			
		||||
 | 
			
		||||
	@Event
 | 
			
		||||
	private void onContactOperation(ContactOperation operation) {
 | 
			
		||||
		final var contact = operation.get();
 | 
			
		||||
@@ -379,6 +375,7 @@ public final class ChatScene implements EventListener, Restorable {
 | 
			
		||||
				recipientProfilePic.setImage(IconUtil.loadIconThemeSensitive("user_icon", 43));
 | 
			
		||||
			} else {
 | 
			
		||||
				topBarStatusLabel.setText(currentChat.getRecipient().getContacts().size() + " members");
 | 
			
		||||
				topBarStatusLabel.getStyleClass().clear();
 | 
			
		||||
				recipientProfilePic.setImage(IconUtil.loadIconThemeSensitive("group_icon", 43));
 | 
			
		||||
			}
 | 
			
		||||
			final var clip = new Rectangle();
 | 
			
		||||
@@ -719,6 +716,7 @@ public final class ChatScene implements EventListener, Restorable {
 | 
			
		||||
		attachmentView.setVisible(visible);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Event(eventType = OwnStatusChange.class, priority = 50)
 | 
			
		||||
	private void generateOwnStatusControl() {
 | 
			
		||||
		final var ownUserControl = new ContactControl(localDB.getUser());
 | 
			
		||||
		ownUserControl.setAlignment(Pos.CENTER_LEFT);
 | 
			
		||||
 
 | 
			
		||||
@@ -59,11 +59,7 @@ public final class GeneralSettingsPane extends SettingsPane {
 | 
			
		||||
		statusComboBox.getItems().setAll(UserStatus.values());
 | 
			
		||||
		statusComboBox.setValue(context.getLocalDB().getUser().getStatus());
 | 
			
		||||
		statusComboBox.setTooltip(new Tooltip("Change your current status"));
 | 
			
		||||
		statusComboBox.setOnAction(e -> {
 | 
			
		||||
			final var status = statusComboBox.getValue();
 | 
			
		||||
			if (status == null) return;
 | 
			
		||||
			else UserUtil.changeStatus(status);
 | 
			
		||||
		});
 | 
			
		||||
		statusComboBox.setOnAction(e -> UserUtil.changeStatus(statusComboBox.getValue()));
 | 
			
		||||
		getChildren().add(statusComboBox);
 | 
			
		||||
 | 
			
		||||
		final var logoutButton = new Button("Logout");
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user