feat: move toolbar outside of chat
This commit is contained in:
parent
20001fae9c
commit
93924d1bbd
10 changed files with 183 additions and 82 deletions
|
@ -2,6 +2,7 @@ package fr.insa.clavardator.ui;
|
|||
|
||||
import com.jfoenix.controls.JFXSnackbar;
|
||||
import fr.insa.clavardator.ui.chat.ChatController;
|
||||
import fr.insa.clavardator.ui.dialogs.AboutDialogController;
|
||||
import fr.insa.clavardator.ui.dialogs.EditUsernameDialogController;
|
||||
import fr.insa.clavardator.ui.dialogs.SnackbarController;
|
||||
import fr.insa.clavardator.ui.users.UserListController;
|
||||
|
@ -21,9 +22,13 @@ public class MainController implements Initializable {
|
|||
@FXML
|
||||
private StackPane root;
|
||||
|
||||
@FXML
|
||||
private ToolbarController toolbarController;
|
||||
@FXML
|
||||
private EditUsernameDialogController editUserDialogController;
|
||||
@FXML
|
||||
private AboutDialogController aboutDialogController;
|
||||
@FXML
|
||||
private UserListController userListController;
|
||||
@FXML
|
||||
private ChatController chatController;
|
||||
|
@ -31,7 +36,6 @@ public class MainController implements Initializable {
|
|||
private JFXSnackbar snackbar;
|
||||
|
||||
private void openEditUsernameDialog() throws IOException {
|
||||
editUserDialogController.setMode(EditUsernameDialogController.Mode.EDIT);
|
||||
editUserDialogController.setOnSuccessListener(() -> {
|
||||
System.out.println("success");
|
||||
try {
|
||||
|
@ -46,13 +50,12 @@ public class MainController implements Initializable {
|
|||
e.printStackTrace();
|
||||
}
|
||||
});
|
||||
editUserDialogController.show(root);
|
||||
editUserDialogController.show(root, EditUsernameDialogController.Mode.EDIT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initialize(URL url, ResourceBundle rb) {
|
||||
snackbar = new JFXSnackbar(root);
|
||||
chatController.setCurrentUser(CurrentUser.getInstance());
|
||||
userListController.addRefreshUserListener(() -> {
|
||||
System.out.println("refresh event");
|
||||
});
|
||||
|
@ -66,12 +69,15 @@ public class MainController implements Initializable {
|
|||
chatController.addSendListener(() -> {
|
||||
System.out.println("send event");
|
||||
});
|
||||
chatController.addEditListener(() -> {
|
||||
toolbarController.addEditListener(() -> {
|
||||
try {
|
||||
openEditUsernameDialog();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
});
|
||||
toolbarController.addAboutListener(() -> {
|
||||
aboutDialogController.show(root);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
42
src/main/java/fr/insa/clavardator/ui/ToolbarController.java
Normal file
42
src/main/java/fr/insa/clavardator/ui/ToolbarController.java
Normal file
|
@ -0,0 +1,42 @@
|
|||
package fr.insa.clavardator.ui;
|
||||
|
||||
import fr.insa.clavardator.users.CurrentUser;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.fxml.Initializable;
|
||||
import javafx.scene.control.Label;
|
||||
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
public class ToolbarController implements Initializable {
|
||||
|
||||
@FXML
|
||||
private Label currentUsernameLabel;
|
||||
|
||||
private List<ButtonPressEvent> editListeners;
|
||||
private List<ButtonPressEvent> aboutListeners;
|
||||
|
||||
public void addEditListener(ButtonPressEvent listener) {
|
||||
editListeners.add(listener);
|
||||
}
|
||||
public void addAboutListener(ButtonPressEvent listener) {
|
||||
aboutListeners.add(listener);
|
||||
}
|
||||
|
||||
public void onEditPress() {
|
||||
editListeners.forEach(ButtonPressEvent::onPress);
|
||||
}
|
||||
|
||||
public void onAboutPress() {
|
||||
aboutListeners.forEach(ButtonPressEvent::onPress);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initialize(URL location, ResourceBundle resources) {
|
||||
currentUsernameLabel.setText(CurrentUser.getInstance().getUsername());
|
||||
editListeners = new ArrayList<>();
|
||||
aboutListeners = new ArrayList<>();
|
||||
}
|
||||
}
|
|
@ -5,10 +5,8 @@ import fr.insa.clavardator.chat.Message;
|
|||
import fr.insa.clavardator.ui.ButtonPressEvent;
|
||||
import fr.insa.clavardator.ui.NoSelectionModel;
|
||||
import fr.insa.clavardator.users.ActiveUser;
|
||||
import fr.insa.clavardator.users.CurrentUser;
|
||||
import fr.insa.clavardator.users.PeerUser;
|
||||
import javafx.collections.FXCollections;
|
||||
import javafx.collections.ObservableList;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.fxml.Initializable;
|
||||
import javafx.scene.control.ListView;
|
||||
|
@ -26,9 +24,6 @@ public class ChatController implements Initializable {
|
|||
@FXML
|
||||
private ChatHeaderController chatHeaderController;
|
||||
|
||||
private CurrentUser currentUser;
|
||||
private PeerUser remoteUser;
|
||||
|
||||
public void addAttachmentListener(ButtonPressEvent listener) {
|
||||
chatFooterController.addAttachmentListener(listener);
|
||||
}
|
||||
|
@ -37,18 +32,7 @@ public class ChatController implements Initializable {
|
|||
chatFooterController.addSendListener(listener);
|
||||
}
|
||||
|
||||
public void addEditListener(ButtonPressEvent listener) {
|
||||
chatHeaderController.addEditListener(listener);
|
||||
}
|
||||
|
||||
|
||||
public void setCurrentUser(CurrentUser currentUser) {
|
||||
this.chatHeaderController.setCurrentUser(currentUser);
|
||||
this.currentUser = currentUser;
|
||||
}
|
||||
|
||||
public void setRemoteUser(PeerUser remoteUser) {
|
||||
this.remoteUser = remoteUser;
|
||||
this.chatHeaderController.setRemoteUser(remoteUser);
|
||||
this.chatFooterController.setEnabled(remoteUser instanceof ActiveUser);
|
||||
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
package fr.insa.clavardator.ui.chat;
|
||||
|
||||
import fr.insa.clavardator.ui.ButtonPressEvent;
|
||||
import fr.insa.clavardator.ui.users.UserActiveIndicatorController;
|
||||
import fr.insa.clavardator.users.CurrentUser;
|
||||
import fr.insa.clavardator.users.PeerUser;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.fxml.Initializable;
|
||||
|
@ -10,46 +8,20 @@ import javafx.scene.control.Label;
|
|||
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
public class ChatHeaderController implements Initializable {
|
||||
|
||||
@FXML
|
||||
private Label currentUsernameLabel;
|
||||
@FXML
|
||||
private Label remoteUsernameLabel;
|
||||
@FXML
|
||||
private UserActiveIndicatorController indicatorController;
|
||||
|
||||
private List<ButtonPressEvent> editListeners;
|
||||
|
||||
private CurrentUser currentUser;
|
||||
private PeerUser remoteUser;
|
||||
|
||||
public void addEditListener(ButtonPressEvent listener) {
|
||||
editListeners.add(listener);
|
||||
}
|
||||
|
||||
public void onEditPress() {
|
||||
editListeners.forEach(ButtonPressEvent::onPress);
|
||||
}
|
||||
|
||||
public void onAboutPress() {
|
||||
|
||||
}
|
||||
@Override
|
||||
public void initialize(URL location, ResourceBundle resources) {
|
||||
editListeners = new ArrayList<>();
|
||||
}
|
||||
|
||||
public void setCurrentUser(CurrentUser currentUser) {
|
||||
this.currentUser = currentUser;
|
||||
currentUsernameLabel.setText(currentUser.getUsername());
|
||||
}
|
||||
|
||||
public void setRemoteUser(PeerUser remoteUser) {
|
||||
this.remoteUser = remoteUser;
|
||||
remoteUsernameLabel.setText(remoteUser.getUsername());
|
||||
indicatorController.setUser(remoteUser);
|
||||
indicatorController.setSize(10.0);
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
package fr.insa.clavardator.ui.dialogs;
|
||||
|
||||
import com.jfoenix.controls.JFXButton;
|
||||
import com.jfoenix.controls.JFXDialog;
|
||||
import com.jfoenix.controls.JFXTextField;
|
||||
import com.jfoenix.validation.base.ValidatorBase;
|
||||
import fr.insa.clavardator.ui.ButtonPressEvent;
|
||||
import javafx.beans.property.ReadOnlyBooleanWrapper;
|
||||
import javafx.beans.value.ObservableValue;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.fxml.Initializable;
|
||||
import javafx.scene.control.Label;
|
||||
import javafx.scene.layout.StackPane;
|
||||
|
||||
import java.net.URL;
|
||||
import java.util.ResourceBundle;
|
||||
import java.util.Timer;
|
||||
import java.util.TimerTask;
|
||||
|
||||
public class AboutDialogController implements Initializable {
|
||||
|
||||
@FXML
|
||||
private JFXDialog dialog;
|
||||
|
||||
public void show(StackPane root) {
|
||||
dialog.show(root);
|
||||
}
|
||||
|
||||
public void hide() {
|
||||
dialog.close();
|
||||
}
|
||||
|
||||
public void onDismiss() {
|
||||
hide();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initialize(URL location, ResourceBundle resources) {
|
||||
}
|
||||
}
|
|
@ -47,10 +47,10 @@ public class EditUsernameDialogController implements Initializable {
|
|||
this.successListener = listener;
|
||||
}
|
||||
|
||||
public void show(StackPane root) {
|
||||
public void show(StackPane root, Mode mode) {
|
||||
setLocked(false);
|
||||
setFieldError(State.VALID);
|
||||
textField.setText("");
|
||||
setMode(mode);
|
||||
dialog.show(root);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,38 +1,18 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?import com.jfoenix.controls.JFXButton?>
|
||||
<?import javafx.geometry.Insets?>
|
||||
<?import javafx.scene.control.Label?>
|
||||
<?import javafx.scene.layout.*?>
|
||||
<?import javafx.scene.shape.Circle?>
|
||||
<?import org.kordamp.ikonli.javafx.FontIcon?>
|
||||
<VBox xmlns="http://javafx.com/javafx"
|
||||
xmlns:fx="http://javafx.com/fxml"
|
||||
<?import javafx.scene.layout.HBox?>
|
||||
<?import javafx.scene.layout.VBox?>
|
||||
<VBox xmlns:fx="http://javafx.com/fxml"
|
||||
xmlns="http://javafx.com/javafx"
|
||||
fx:controller="fr.insa.clavardator.ui.chat.ChatHeaderController"
|
||||
stylesheets="@../styles.css" styleClass="container">
|
||||
<HBox alignment="CENTER_LEFT" prefHeight="64.0" spacing="10">
|
||||
<padding>
|
||||
<Insets left="20" right="20"/>
|
||||
</padding>
|
||||
<Label text="Connecté en tant que : "/>
|
||||
<Label text="<USERNAME>" fx:id="currentUsernameLabel"/>
|
||||
<JFXButton mnemonicParsing="false" onMouseClicked="#onEditPress">
|
||||
<graphic>
|
||||
<FontIcon iconLiteral="fas-user-edit" iconSize="24"/>
|
||||
</graphic>
|
||||
</JFXButton>
|
||||
<Pane HBox.hgrow="ALWAYS"/>
|
||||
<JFXButton mnemonicParsing="false" onMouseClicked="#onAboutPress">
|
||||
<graphic>
|
||||
<FontIcon iconLiteral="fas-info" iconSize="24"/>
|
||||
</graphic>
|
||||
</JFXButton>
|
||||
</HBox>
|
||||
<HBox alignment="CENTER_LEFT" spacing="5" prefHeight="45">
|
||||
<HBox alignment="CENTER_LEFT" spacing="5" prefHeight="64">
|
||||
<padding>
|
||||
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0"/>
|
||||
</padding>
|
||||
<fx:include source="../users/userActiveIndicator.fxml" fx:id="indicator" />
|
||||
<fx:include source="../users/userActiveIndicator.fxml" fx:id="indicator"/>
|
||||
<Label text="USER NAME" styleClass="current-user" fx:id="remoteUsernameLabel"/>
|
||||
</HBox>
|
||||
</VBox>
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?import com.jfoenix.controls.JFXButton?>
|
||||
<?import com.jfoenix.controls.JFXDialog?>
|
||||
<?import com.jfoenix.controls.JFXTextField?>
|
||||
<?import javafx.geometry.Insets?>
|
||||
<?import javafx.scene.control.Label?>
|
||||
<?import javafx.scene.layout.*?>
|
||||
<?import org.kordamp.ikonli.javafx.FontIcon?>
|
||||
<JFXDialog xmlns:fx="http://javafx.com/fxml"
|
||||
xmlns="http://javafx.com/javafx"
|
||||
fx:controller="fr.insa.clavardator.ui.dialogs.AboutDialogController"
|
||||
stylesheets="@../styles.css" fx:id="dialog">
|
||||
<AnchorPane
|
||||
prefWidth="600"
|
||||
prefHeight="400" styleClass="container">
|
||||
<VBox AnchorPane.topAnchor="0" AnchorPane.rightAnchor="0" AnchorPane.leftAnchor="0" AnchorPane.bottomAnchor="0">
|
||||
<padding>
|
||||
<Insets left="10" right="10" bottom="10" top="10"/>
|
||||
</padding>
|
||||
<VBox VBox.vgrow="ALWAYS" spacing="10">
|
||||
<padding>
|
||||
<Insets bottom="10"/>
|
||||
</padding>
|
||||
<Label styleClass="dialog-title" >À Propos</Label>
|
||||
<VBox VBox.vgrow="ALWAYS" alignment="CENTER" spacing="30">
|
||||
<Label VBox.vgrow="ALWAYS">Application réalisée par Yohan SIMARD et Arnaud VERGNET</Label>
|
||||
<Label VBox.vgrow="ALWAYS">INSA Toulouse 2020-2021</Label>
|
||||
<Label VBox.vgrow="ALWAYS">4IR Projet POO/COO</Label>
|
||||
</VBox>
|
||||
</VBox>
|
||||
<HBox spacing="50" alignment="CENTER">
|
||||
<JFXButton text="OK" styleClass="background-success" onAction="#onDismiss">
|
||||
<graphic>
|
||||
<FontIcon iconLiteral="fas-check"/>
|
||||
</graphic>
|
||||
</JFXButton>
|
||||
</HBox>
|
||||
</VBox>
|
||||
</AnchorPane>
|
||||
</JFXDialog>
|
||||
|
|
@ -3,11 +3,16 @@
|
|||
<!--suppress JavaFxUnresolvedFxIdReference -->
|
||||
<?import javafx.scene.layout.HBox?>
|
||||
<?import javafx.scene.layout.StackPane?>
|
||||
<?import javafx.scene.layout.VBox?>
|
||||
<StackPane xmlns:fx="http://javafx.com/fxml/1"
|
||||
xmlns="http://javafx.com/javafx/11.0.1" fx:controller="fr.insa.clavardator.ui.MainController" fx:id="root">
|
||||
<fx:include source="dialogs/editUsernameDialog.fxml" fx:id="editUserDialog"/>
|
||||
<HBox>
|
||||
<fx:include source="dialogs/aboutDialog.fxml" fx:id="aboutDialog"/>
|
||||
<VBox>
|
||||
<fx:include source="toolbar.fxml" fx:id="toolbar"/>
|
||||
<HBox VBox.vgrow="ALWAYS">
|
||||
<fx:include source="users/userList.fxml" fx:id="userList"/>
|
||||
<fx:include source="chat/chat.fxml" fx:id="chat" HBox.hgrow="ALWAYS"/>
|
||||
</HBox>
|
||||
</VBox>
|
||||
</StackPane>
|
||||
|
|
30
src/main/resources/fr/insa/clavardator/ui/toolbar.fxml
Normal file
30
src/main/resources/fr/insa/clavardator/ui/toolbar.fxml
Normal file
|
@ -0,0 +1,30 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?import com.jfoenix.controls.JFXButton?>
|
||||
<?import javafx.geometry.Insets?>
|
||||
<?import javafx.scene.control.Label?>
|
||||
<?import javafx.scene.layout.*?>
|
||||
<?import org.kordamp.ikonli.javafx.FontIcon?>
|
||||
<VBox xmlns="http://javafx.com/javafx"
|
||||
xmlns:fx="http://javafx.com/fxml"
|
||||
fx:controller="fr.insa.clavardator.ui.ToolbarController"
|
||||
stylesheets="@styles.css" styleClass="container">
|
||||
<HBox alignment="CENTER_LEFT" prefHeight="64.0" spacing="10">
|
||||
<padding>
|
||||
<Insets left="20" right="20"/>
|
||||
</padding>
|
||||
<Label text="Connecté en tant que : "/>
|
||||
<Label text="<USERNAME>" fx:id="currentUsernameLabel"/>
|
||||
<JFXButton mnemonicParsing="false" onMouseClicked="#onEditPress">
|
||||
<graphic>
|
||||
<FontIcon iconLiteral="fas-user-edit" iconSize="24"/>
|
||||
</graphic>
|
||||
</JFXButton>
|
||||
<Pane HBox.hgrow="ALWAYS"/>
|
||||
<JFXButton mnemonicParsing="false" onMouseClicked="#onAboutPress">
|
||||
<graphic>
|
||||
<FontIcon iconLiteral="fas-info" iconSize="24"/>
|
||||
</graphic>
|
||||
</JFXButton>
|
||||
</HBox>
|
||||
</VBox>
|
Loading…
Reference in a new issue