diff --git a/images/cross.png b/images/cross.png new file mode 100644 index 00000000..bd4192e3 Binary files /dev/null and b/images/cross.png differ diff --git a/src/main/java/org/javaFX/EncryWindow.java b/src/main/java/org/javaFX/EncryWindow.java index a6a4c8fb..9e789835 100644 --- a/src/main/java/org/javaFX/EncryWindow.java +++ b/src/main/java/org/javaFX/EncryWindow.java @@ -1,13 +1,17 @@ package org.javaFX; import javafx.application.Application; +import javafx.application.Platform; +import javafx.event.EventHandler; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; import javafx.scene.image.Image; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.BorderPane; import javafx.stage.Stage; +import javafx.stage.WindowEvent; import org.javaFX.controller.DataHandler; +import org.javaFX.controller.impl.handler.InfoDialogHandler; import org.javaFX.model.JUserState; import org.javaFX.util.DelayAuthentication; @@ -23,7 +27,7 @@ public class EncryWindow extends Application { private BorderPane rootLayout; private final String windowTitle = "ENCRY Telegram Client"; - private final String pathToLogoImage = "file:/images/logo.png"; + private final String pathToLogoImage = "images/logo.png"; private final static String pathToRootLayout = "view/rootLayout.fxml"; @@ -45,10 +49,10 @@ public class EncryWindow extends Application { public final static String pathToStartWindowFXML = "view/startWindow.fxml"; - private String currentWindowStr ; private static String userPhoneNumber; + private static String userCountry; private DataHandler rootLayoutHandler; @@ -66,6 +70,13 @@ public void start(Stage primaryStage) { initRootLayout(); launchStartWindow(); primaryStage.show(); + + primaryStage.setOnCloseRequest(new EventHandler() { + @Override + public void handle(WindowEvent e) { + Platform.exit(); + System.exit(0); + }}); } public void launchStartWindow(){ @@ -152,12 +163,19 @@ public static String getUserPhoneNumber(){ } public static void setUserPhoneNumber(String phoneNumber){ - if(userPhoneNumber == null){ - userPhoneNumber = phoneNumber; - } + userPhoneNumber = phoneNumber; + } + + public static String getUserCountry(){ + return userCountry; + } + + public static void setUserCountry(String newUserCountry){ + userCountry = newUserCountry; } public String getCurrentWindowStr() { return currentWindowStr; } + } \ No newline at end of file diff --git a/src/main/java/org/javaFX/controller/DialogController.java b/src/main/java/org/javaFX/controller/DialogController.java index fb84010c..e683afc3 100644 --- a/src/main/java/org/javaFX/controller/DialogController.java +++ b/src/main/java/org/javaFX/controller/DialogController.java @@ -58,4 +58,5 @@ public void closeDialog(){ getDialogStage().close(); } + } diff --git a/src/main/java/org/javaFX/controller/MainWindowBasicHandler.java b/src/main/java/org/javaFX/controller/MainWindowBasicHandler.java index 564fb6a2..d49b76d1 100644 --- a/src/main/java/org/javaFX/controller/MainWindowBasicHandler.java +++ b/src/main/java/org/javaFX/controller/MainWindowBasicHandler.java @@ -2,8 +2,8 @@ import javafx.animation.AnimationTimer; import javafx.fxml.FXML; -import javafx.scene.control.Button; import javafx.scene.control.TextArea; +import javafx.scene.image.Image; import javafx.util.Duration; import org.encryfoundation.tg.javaIntegration.BackMsg; import org.javaFX.EncryWindow; @@ -12,15 +12,12 @@ import org.javaFX.util.observers.JWindowObserver; import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicInteger; + public abstract class MainWindowBasicHandler extends DataHandler{ private final Duration duration = Duration.millis(5) ; - @FXML - protected TextArea searchMessageTextArea; - @FXML protected TextArea sendMessageTextArea; diff --git a/src/main/java/org/javaFX/controller/impl/handler/ChatsWindowHandler.java b/src/main/java/org/javaFX/controller/impl/handler/ChatsWindowHandler.java index 6d17fd37..75def898 100644 --- a/src/main/java/org/javaFX/controller/impl/handler/ChatsWindowHandler.java +++ b/src/main/java/org/javaFX/controller/impl/handler/ChatsWindowHandler.java @@ -1,6 +1,8 @@ package org.javaFX.controller.impl.handler; import javafx.animation.AnimationTimer; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.fxml.FXML; @@ -19,6 +21,7 @@ import org.javaFX.controller.MainWindowBasicHandler; import org.javaFX.model.JChat; import org.javaFX.model.nodes.VBoxChatCell; +import org.javaFX.model.nodes.VBoxDialogTextMessageCell; import org.javaFX.model.nodes.VBoxMessageCell; import org.javaFX.util.KeyboardHandler; @@ -28,8 +31,8 @@ public class ChatsWindowHandler extends MainWindowBasicHandler { - private final String pathToBlueButton = "file:images/sendMessageBlue.png"; - private final String pathToGreyButton ="file:images/sendMessage.png"; + private final String pathToBlueButton = "images/sendMessageBlue.png"; + private final String pathToGreyButton ="images/sendMessage.png"; @FXML private ListView chatsListView; @@ -70,13 +73,16 @@ public class ChatsWindowHandler extends MainWindowBasicHandler { @FXML private ImageView searchImg; + @FXML + private ImageView crossImg; //todo: remove after updating chat by front msg private int chatsLimit = 20; private long activeChatId; - public ChatsWindowHandler(){ - } + private ObservableList chatHistoryBackup; + + public ChatsWindowHandler(){} @FXML private void onMouseEntered(){ @@ -85,7 +91,9 @@ private void onMouseEntered(){ @FXML private void onMouseExited(){ - sendMessageImage.setImage(new Image(pathToGreyButton)); + if(sendMessageTextArea.getText().isEmpty()){ + sendMessageImage.setImage(new Image(pathToGreyButton)); + } } @Override @@ -96,19 +104,25 @@ public void updateEncryWindow(EncryWindow encryWindow) { initializeDialogArea(); } enableMenuBar(); - FrontMsg a = getUserStateRef().get().inQueue.poll(); - if (a != null) { - if (a.code() == FrontMsg.Codes$.MODULE$.newMsgsInChat()) { - FrontMsg.NewMsgsInChat msg = (FrontMsg.NewMsgsInChat) a; + updateDialogArea(); + } + + private void updateDialogArea(){ + FrontMsg frontMsg = getUserStateRef().get().inQueue.poll(); + if (frontMsg != null ) { + if (frontMsg.code() == FrontMsg.Codes$.MODULE$.newMsgsInChat()) { + FrontMsg.NewMsgsInChat msg = (FrontMsg.NewMsgsInChat) frontMsg; ObservableList observableChatList = FXCollections.observableArrayList(); msg.msgs().forEach(msgCell -> observableChatList.add(msgCell)); + msg.msgs().forEach(msgCell -> chatHistoryBackup.add(msgCell)); messagesListView.scrollTo(1); messagesListView.setItems(observableChatList); - } else if (a.code() == FrontMsg.Codes$.MODULE$.historyMsgs()) { - FrontMsg.HistoryMsgs msg = (FrontMsg.HistoryMsgs) a; - if (msg.chatId() == activeChatId) { + } else if (frontMsg.code() == FrontMsg.Codes$.MODULE$.historyMsgs()) { + FrontMsg.HistoryMsgs msg = (FrontMsg.HistoryMsgs) frontMsg; + if (msg.chatId() == activeChatId && messagesListView.getItems().size() > 0) { ObservableList observableChatList = FXCollections.observableArrayList(); msg.msgs().forEach(msgCell -> observableChatList.add(msgCell)); + msg.msgs().forEach(msgCell -> chatHistoryBackup.add(msgCell)); VBoxMessageCell prevLastCell = messagesListView.getItems().get(0); messagesListView.getItems().forEach(cell -> observableChatList.add(cell)); messagesListView.setItems(observableChatList); @@ -117,7 +131,6 @@ public void updateEncryWindow(EncryWindow encryWindow) { } else { System.out.println("Unknown msg"); } - } } @@ -196,18 +209,18 @@ protected void initializeTable() { @FXML private ObservableList getObservableJMessageList(){ ObservableList observableMessageList = FXCollections.observableArrayList(); - getUserStateRef().get().messagesListView.getItems().forEach ( - message -> - observableMessageList.add(message) - ); - forceListRefreshOn(); + String previousMsgAuthor = ""; + for(VBoxMessageCell messageCell: getUserStateRef().get().messagesListView.getItems() ){ + String currentMsgAuthor = messageCell.getElement().getAuthor(); + messageCell.getElement().setPreviousSameAuthor(currentMsgAuthor.equals(previousMsgAuthor)); + if( currentMsgAuthor.equals(previousMsgAuthor) ){ + ((VBoxDialogTextMessageCell) messageCell).recreateMessageCell(); + } + previousMsgAuthor = currentMsgAuthor; + observableMessageList.add(messageCell); + } + messagesListView.setItems(observableMessageList); return observableMessageList; - - /* - new way of initialization - final String searchingStr = searchMessageTextField.getText().trim(); - ObservableList observableMessageList = findMessagesByStr(searchingStr); - return observableMessageList;*/ } @FXML @@ -221,7 +234,12 @@ private void showLeftPane(){ messagesListView.setVisible(true); rightBottomAnchorPane.setVisible(true); selectChatLabel.setVisible(false); - chatNameLabel.setText(chatsListView.getSelectionModel().getSelectedItem().getChatTitle()); + String chatTitleStr = chatsListView.getSelectionModel().getSelectedItem().getChatTitle(); + if(chatTitleStr.length() > 30 ){ + chatTitleStr = chatTitleStr.substring(0, 27)+"..."; + } + chatNameLabel.setText( chatTitleStr ); + searchMessageTextField.setText(""); } public void hideLeftPane(){ @@ -233,6 +251,7 @@ public void hideLeftPane(){ @FXML protected void clickItem() { + chatHistoryBackup = FXCollections.observableArrayList(); getUserStateRef().get().setActiveDialog(messagesListView); if( messagesListView.getItems().size() == 0 ){ showStartMessagingArea(); @@ -241,9 +260,7 @@ protected void clickItem() { refreshColors(activeChat); activeChatId = activeChat.chatIdProperty().get(); BackMsg msg = new BackMsg.SetActiveChat(activeChatId); - initializeDialogArea(); - ObservableList observableMessageList = FXCollections.observableArrayList(); - messagesListView.setItems(observableMessageList); + refreshBasicElements(); try { getUserStateRef().get().outQueue.put(msg); } catch (InterruptedException e) { @@ -252,6 +269,12 @@ protected void clickItem() { showLeftPane(); } + private void refreshBasicElements(){ + initializeDialogArea(); + sendMessageTextArea.setText(""); + sendMessageImage.setImage(new Image(pathToGreyButton)); + } + private void refreshColors(VBoxChatCell activeChat){ for(VBoxChatCell cell: chatsListView.getItems()){ cell.resetPaneColor(); @@ -259,12 +282,6 @@ private void refreshColors(VBoxChatCell activeChat){ activeChat.updatePaneColor(); } - private void forceListRefreshOn() { - ObservableList items = messagesListView.getItems(); - messagesListView.getItems().clear(); - messagesListView.setItems(items); - } - @FXML private void searchContactByKeyboard(){ AtomicBoolean keysPressed = KeyboardHandler.handleEnterPressed(searchThroughChatsTextField); @@ -278,10 +295,10 @@ public void handle(long now) { }.start(); } - private void findContact(){ final String searchingStr = searchThroughChatsTextField.getText().trim(); chatsListView.setItems(initTableBySubstr(searchingStr)); + notFoundChatLabel.setVisible((chatsListView.getItems().size() == 0 )); } private ObservableList initTableBySubstr(String searchingStr){ @@ -298,25 +315,23 @@ private ObservableList initTableBySubstr(String searchingStr){ initChatCell(observableList, chat, chatCellWidth); } ); - notFoundChatLabel.setVisible((observableList.size() == 0 )); return observableList; } @FXML public void findContentInDialog(){ final String searchingStr = searchMessageTextField.getText().trim(); - // findMessagesByStr(searchingStr); + messagesListView.setItems( getMessagesByStr(searchingStr) ); } - private ObservableList findMessagesByStr(String searchingStr){ - ObservableList observableMessageList = FXCollections.observableArrayList(); - getUserStateRef().get().messagesListView.getItems() - .filtered(message->message.getContentText().contains(searchingStr)) + private ObservableList getMessagesByStr(String searchingStr){ + ObservableList observableMessageList = FXCollections.observableArrayList(); + chatHistoryBackup.filtered(message->message.getContentText().toLowerCase().contains(searchingStr.toLowerCase())) .forEach ( message -> observableMessageList.add(message) ); - forceListRefreshOn(); + messagesListView.setItems(observableMessageList); return observableMessageList; } @@ -333,6 +348,25 @@ public void handle(long now) { }.start(); } + + @FXML + private void onKeyTypedSearchMessage(){ + searchMessageTextField.textProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue observable, + String oldValue, String newValue) { + String searchingStr = searchMessageTextField.getText().trim(); + if(searchingStr.isEmpty()){ + crossImg.setVisible(false); + } + else { + crossImg.setVisible(true); + } + } + }); + + } + private void showStartMessagingArea(){ selectChatLabel.setText("There is no messages in this dialogue"); } @@ -349,4 +383,22 @@ private void handleSearchImg(){ }); } + @FXML + private void cleanTextField(){ + searchMessageTextField.setText(""); + messagesListView.setItems( getMessagesByStr("") ); + crossImg.setVisible(false); + } + + + @FXML + public void onSendTextKeyTyped() { + String inputText = sendMessageTextArea.getText(); + if(!inputText.isEmpty()){ + sendMessageImage.setImage(new Image(pathToBlueButton)); + } + else { + sendMessageImage.setImage(new Image(pathToGreyButton)); + } + } } \ No newline at end of file diff --git a/src/main/java/org/javaFX/controller/impl/handler/CommunitiesWindowHandler.java b/src/main/java/org/javaFX/controller/impl/handler/CommunitiesWindowHandler.java index 5e729e33..af82458c 100644 --- a/src/main/java/org/javaFX/controller/impl/handler/CommunitiesWindowHandler.java +++ b/src/main/java/org/javaFX/controller/impl/handler/CommunitiesWindowHandler.java @@ -13,7 +13,7 @@ public abstract class CommunitiesWindowHandler extends DataHandler { private ScheduledExecutorService service; - private Duration period = Duration.millis(10); + private final Duration period = Duration.millis(10); public CommunitiesWindowHandler() { runDelayedInitialization(); diff --git a/src/main/java/org/javaFX/controller/impl/handler/CreateNewLocalCommunityHandler.java b/src/main/java/org/javaFX/controller/impl/handler/CreateNewLocalCommunityHandler.java index e2cb04c9..03b630fd 100644 --- a/src/main/java/org/javaFX/controller/impl/handler/CreateNewLocalCommunityHandler.java +++ b/src/main/java/org/javaFX/controller/impl/handler/CreateNewLocalCommunityHandler.java @@ -16,7 +16,6 @@ import org.javaFX.EncryWindow; import org.javaFX.model.JLocalCommunity; import org.javaFX.model.JSingleContact; -import org.javaFX.model.nodes.VBoxChatCell; import org.javaFX.model.nodes.VBoxContactCell; import org.javaFX.util.InfoContainer; import org.javaFX.util.KeyboardHandler; @@ -41,7 +40,7 @@ public class CreateNewLocalCommunityHandler extends CommunitiesWindowHandler { private Label communityNameLabel; @FXML - private Separator blueSeparator; + private Separator separator; @FXML private Label notFoundInfoLabel; @@ -62,21 +61,28 @@ public CreateNewLocalCommunityHandler() { @Override public void updateEncryWindow(EncryWindow encryWindow) { for(VBoxContactCell cell : contactsListView.getItems()){ - cell.setSeparatorLineSize(blueSeparator.getWidth()- 40); + cell.setSeparatorLineSize(separator.getWidth()- 40); } super.updateEncryWindow(encryWindow); } private ObservableList getObservableUserList(){ final String searchingStr = searchContactTextField.getText().trim(); - ObservableList observableList = initTableBySubstr(searchingStr); + ObservableList observableList = getFilteredList(initTableBySubstr(searchingStr), searchingStr); + observableList.sort(new Comparator() { + @Override + public int compare(VBoxContactCell o1, VBoxContactCell o2) { + return o1.getCurrentContact().getFullName() + .compareTo(o2.getCurrentContact().getFullName()); + } + }); return observableList; } @Override protected void initChatsTable(){ - ObservableList t = getObservableUserList(); - contactsListView.setItems(t); + ObservableList observableUserList = getObservableUserList(); + contactsListView.setItems(observableUserList); shutDownScheduledService(); } @@ -85,6 +91,7 @@ private void changeCheckBoxValue() { VBoxContactCell clickedCell = contactsListView.getSelectionModel().getSelectedItem(); JSingleContact communityMember = clickedCell.getCurrentContact(); refreshColors(clickedCell); + nobodyChosenErrorLabel.setVisible(false); if(communityMember.getUserId() > 0L ){ boolean isChosen = communityMember.isChosen(); communityMember.setChosen(!isChosen); @@ -190,7 +197,6 @@ private void toChatsWindow(){ getEncryWindow().launchWindowByPathToFXML(EncryWindow.pathToChatsWindowFXML); } - @FXML private void handleSearchContactKeyTyped(){ searchContactTextField.addEventFilter(KeyEvent.KEY_TYPED, KeyboardHandler.maxLengthHandler(40)); @@ -199,6 +205,7 @@ private void handleSearchContactKeyTyped(){ @FXML private void handleСomNameKeyTyped(){ newCommunityNameTextField.addEventFilter(KeyEvent.KEY_TYPED, KeyboardHandler.maxLengthHandler(40)); + communityNameLabel.setTextFill(Color.valueOf("#00b6ff")); } @FXML @@ -213,6 +220,4 @@ private void handleSearchImg(){ }); } - - } \ No newline at end of file diff --git a/src/main/java/org/javaFX/controller/impl/handler/EnterPasswordHandler.java b/src/main/java/org/javaFX/controller/impl/handler/EnterPasswordHandler.java index 53e5115c..bec4b2aa 100644 --- a/src/main/java/org/javaFX/controller/impl/handler/EnterPasswordHandler.java +++ b/src/main/java/org/javaFX/controller/impl/handler/EnterPasswordHandler.java @@ -23,7 +23,7 @@ public class EnterPasswordHandler extends DataHandler { private ImageView nextButtonImg; @FXML - private Label error; + private Label errorLabel; @FXML private Label promptLabel; @@ -34,7 +34,9 @@ public EnterPasswordHandler() { @FXML private void handleConfirmPasswordAction(){ String passwordStr = passwordField.getCharacters().toString(); - if (passwordStr.isEmpty()) error.setText("Empty password :( Please enter it!"); + if (passwordStr.isEmpty()) { + errorLabel.setVisible(true); + } else try { getUserStateRef().get().outQueue.put(new BackMsg.SetPass(passwordStr)); FrontMsg nextStep = getUserStateRef().get().inQueue.take(); @@ -49,7 +51,7 @@ private void handleConfirmPasswordAction(){ EncryWindow.pathToChatsWindowFXML, EncryWindow.afterInitializationWidth, EncryWindow.afterInitializationHeight ); } else if (nextStep.code() == FrontMsg.Codes$.MODULE$.error()) { - error.setText("Incorrect password"); + errorLabel.setText("Incorrect password"); } } catch (InterruptedException e) { e.printStackTrace(); @@ -60,6 +62,7 @@ private void handleConfirmPasswordAction(){ @FXML private void handlePasswordAreaPressed(){ handlePasswordAccepted(nextButtonImg); + errorLabel.setVisible(false); } private void handlePasswordAccepted(Node node){ diff --git a/src/main/java/org/javaFX/controller/impl/handler/EnterPhoneNumberHandler.java b/src/main/java/org/javaFX/controller/impl/handler/EnterPhoneNumberHandler.java index 72793a35..f6184f6c 100644 --- a/src/main/java/org/javaFX/controller/impl/handler/EnterPhoneNumberHandler.java +++ b/src/main/java/org/javaFX/controller/impl/handler/EnterPhoneNumberHandler.java @@ -1,7 +1,6 @@ package org.javaFX.controller.impl.handler; import javafx.animation.AnimationTimer; -import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.scene.Node; @@ -21,6 +20,12 @@ public class EnterPhoneNumberHandler extends DataHandler { + private final static String BELARUS_STR = "Belarus"; + private final static String RUSSIAN_FEDERATION_STR = "Russian Federation"; + + private final static String BLR_COUNTRY_CODE_STR = "375"; + private final static String RUS_COUNTRY_CODE_STR = "7"; + @FXML private TextField phoneNumberTextField; @@ -43,7 +48,7 @@ public class EnterPhoneNumberHandler extends DataHandler { private MenuItem belarusMenuItem; @FXML - private Label error; + private Label errorLabel; public EnterPhoneNumberHandler() {} @@ -60,13 +65,21 @@ else if(selectCountryMenu.getText().equals(belarusMenuItem.getText())){ @FXML private void handleConfirmNumberAction(){ String phoneNumberStr = phoneNumberTextField.getCharacters().toString(); - if (phoneNumberStr.isEmpty()) error.setText("Empty phone field :( Please enter it!"); + String country = null; + if (phoneNumberStr.isEmpty()) { + errorLabel.setVisible(true); + phoneNumberTextField.setStyle("-fx-border-color: Red;"); + } else { if (selectCountryMenu.getText().equals(russianFederationMenuItem.getText())) { phoneNumberStr = "7" + phoneNumberStr; + country = RUSSIAN_FEDERATION_STR; } else if (selectCountryMenu.getText().equals(belarusMenuItem.getText())) { phoneNumberStr = "375" + phoneNumberStr; + country = BELARUS_STR; } + EncryWindow.setUserPhoneNumber(phoneNumberStr); + EncryWindow.setUserCountry(country); getUserStateRef().get().setPhoneNumber(phoneNumberStr); try { getUserStateRef().get().outQueue.put(new BackMsg.SetPhone(phoneNumberStr)); @@ -82,7 +95,7 @@ private void handleConfirmNumberAction(){ EncryWindow.pathToChatsWindowFXML, EncryWindow.afterInitializationWidth, EncryWindow.afterInitializationHeight ); } else if (nextStep.code() == FrontMsg.Codes$.MODULE$.error()) { - error.setText("Oops error!"); + errorLabel.setText("Oops error!"); } } catch (InterruptedException e) { e.printStackTrace(); @@ -92,6 +105,8 @@ private void handleConfirmNumberAction(){ @FXML private void handlePhoneNumberAreaPressed(){ + errorLabel.setVisible(false); + phoneNumberTextField.setStyle("-fx-border-color: #00B6FF;"); handleNumberAccepted(nextButtonImg); } @@ -128,14 +143,39 @@ private void setCountryMenuItem(String country, String code, String promptText){ } @FXML - private void setRussiaDefault(){ - setCountryMenuItem(russianFederationMenuItem.getText(), "+7", "--- --- -- --"); + public void setRussiaDefault(){ + setCountryMenuItem(russianFederationMenuItem.getText(), + "+"+RUS_COUNTRY_CODE_STR, "--- --- -- --"); } @FXML - private void setBelarusDefault(){ - setCountryMenuItem(belarusMenuItem.getText(), "+375", "-- --- -- --"); + public void setBelarusDefault(){ + setCountryMenuItem(belarusMenuItem.getText(), + "+"+ + BLR_COUNTRY_CODE_STR, "-- --- -- --"); + } + + + public void initFieldsIfNotEmpty(){ + if(!EncryWindow.getUserCountry().isEmpty() && !EncryWindow.getUserPhoneNumber().isEmpty() ){ + if(EncryWindow.getUserCountry().equals(RUSSIAN_FEDERATION_STR)){ + setRussiaDefault(); + } + else if(EncryWindow.getUserCountry().equals(BELARUS_STR)){ + setBelarusDefault(); + } + phoneNumberTextField.setText(trimPhoneNumber(EncryWindow.getUserPhoneNumber())); + } } + private String trimPhoneNumber (String userPhoneNumber){ + if(userPhoneNumber.startsWith(BLR_COUNTRY_CODE_STR)){ + return userPhoneNumber.substring(3); + } + else if(userPhoneNumber.startsWith(RUS_COUNTRY_CODE_STR)){ + return userPhoneNumber.substring(1); + } + return ""; + } } diff --git a/src/main/java/org/javaFX/controller/impl/handler/EnterVerificationCodeHandler.java b/src/main/java/org/javaFX/controller/impl/handler/EnterVerificationCodeHandler.java index 88ac727f..2098d97b 100644 --- a/src/main/java/org/javaFX/controller/impl/handler/EnterVerificationCodeHandler.java +++ b/src/main/java/org/javaFX/controller/impl/handler/EnterVerificationCodeHandler.java @@ -28,9 +28,10 @@ public class EnterVerificationCodeHandler extends DataHandler { private Label phoneNumberLabel; @FXML - private Label error; + private Label errorLabel; - public EnterVerificationCodeHandler() {} + public EnterVerificationCodeHandler() { + } @FXML private void handleKeyTyped(){ @@ -40,7 +41,9 @@ private void handleKeyTyped(){ @FXML private void handleConfirmVCAction() { String verificationCodeStr = verificationCodeTextField.getCharacters().toString(); - if (verificationCodeStr.isEmpty()) error.setText("Empty vc code :( Please enter it!"); + if (verificationCodeStr.isEmpty()) { + errorLabel.setVisible(true); + } else try { getUserStateRef().get().outQueue.put(new BackMsg.SetVCCode(verificationCodeStr)); FrontMsg nextStep = getUserStateRef().get().inQueue.take(); @@ -55,7 +58,7 @@ private void handleConfirmVCAction() { EncryWindow.pathToChatsWindowFXML, EncryWindow.afterInitializationWidth, EncryWindow.afterInitializationHeight ); } else if (nextStep.code() == FrontMsg.Codes$.MODULE$.error()) { - error.setText("Incorrect vc code"); + errorLabel.setText("Incorrect vc code"); } } catch (InterruptedException e) { e.printStackTrace(); @@ -65,6 +68,7 @@ private void handleConfirmVCAction() { @FXML private void handleVerificationCodeAreaPressed(){ handleVerificationCodeAccepted(nextButtonImg); + errorLabel.setVisible(false); } private void handleVerificationCodeAccepted(Node node){ @@ -91,11 +95,12 @@ private EventHandler maxVCLength() { @FXML private void backToEnterPhoneNumberPage(){ getEncryWindow().launchWindowByPathToFXML(EncryWindow.pathToEnterPhoneNumberWindowFXML); + ((EnterPhoneNumberHandler) getEncryWindow().getCurrentController()) + .initFieldsIfNotEmpty(); } public void setPhoneNumberLabelText(String text){ phoneNumberLabel.setText(text); } -} - +} \ No newline at end of file diff --git a/src/main/java/org/javaFX/controller/impl/handler/InfoDialogHandler.java b/src/main/java/org/javaFX/controller/impl/handler/InfoDialogHandler.java index bc724823..e3bdc647 100644 --- a/src/main/java/org/javaFX/controller/impl/handler/InfoDialogHandler.java +++ b/src/main/java/org/javaFX/controller/impl/handler/InfoDialogHandler.java @@ -13,6 +13,7 @@ public class InfoDialogHandler extends DialogController { @Override public void setDialogStage(Stage dialogStage) { super.setDialogStage(dialogStage); + dialogStage.setOnCloseRequest((WindowEvent we) -> { aboutMenuItem.setDisable(false); }); diff --git a/src/main/java/org/javaFX/controller/impl/handler/LocalCommunitiesWindowHandler.java b/src/main/java/org/javaFX/controller/impl/handler/LocalCommunitiesWindowHandler.java index 8784e8ab..409b4fb5 100644 --- a/src/main/java/org/javaFX/controller/impl/handler/LocalCommunitiesWindowHandler.java +++ b/src/main/java/org/javaFX/controller/impl/handler/LocalCommunitiesWindowHandler.java @@ -19,6 +19,7 @@ import org.javaFX.util.KeyboardHandler; import java.io.IOException; +import java.util.Comparator; import java.util.concurrent.atomic.AtomicBoolean; public class LocalCommunitiesWindowHandler extends CommunitiesWindowHandler { @@ -58,13 +59,19 @@ public void updateEncryWindow(EncryWindow encryWindow) { private ObservableList getObservableCommunityList(){ final String searchingStr = searchCommunityTextField.getText().trim(); - ObservableList observableList = initTableBySubstr(searchingStr); + ObservableList observableList = getFilteredList(initTableBySubstr(searchingStr), searchingStr); if(observableList.size() == 0 ){ notFoundInfoLabel.setVisible(true); } return observableList; } + private ObservableList getFilteredList(ObservableList rawList, final String searchString ){ + rawList.sort( Comparator.comparing(contactCell -> ((VBoxCommunityCell)contactCell) + .getCurrentCommunity().getCommunityName().indexOf(searchString.toLowerCase()))); + return rawList; + } + @Override protected void initChatsTable(){ communitiesListView.setItems(getObservableCommunityList()); @@ -119,7 +126,6 @@ private ObservableList initTableBySubstr(String searchingStr) notFoundInfoLabel.setVisible(true); } else { - System.out.println("notFoundInfoLabel.setVisible(false);"); notFoundInfoLabel.setVisible(false); } return observableList; @@ -133,7 +139,13 @@ private void launchDialog(JLocalCommunity localCommunity){ controller.setDialogStage(dialogStage); controller.setLocalCommunity(localCommunity); controller.setUserStateRef(getUserStateRef()); - controller.setSecretChatNameText(localCommunity.getCommunityName()); + final String secretChatName = privateChatNameTestField.getText(); + if(!secretChatName.isEmpty()){ + controller.setSecretChatNameText(secretChatName); + } + else{ + controller.setSecretChatNameText(localCommunity.getCommunityName()); + } dialogStage.show(); } diff --git a/src/main/java/org/javaFX/controller/impl/handler/SingleCommunityDialogHandler.java b/src/main/java/org/javaFX/controller/impl/handler/SingleCommunityDialogHandler.java index f8ef13b3..29fcb350 100644 --- a/src/main/java/org/javaFX/controller/impl/handler/SingleCommunityDialogHandler.java +++ b/src/main/java/org/javaFX/controller/impl/handler/SingleCommunityDialogHandler.java @@ -40,7 +40,7 @@ private void deleteConference() { e.printStackTrace(); } getDialogStage().close(); - getEncryWindow().launchWindowByPathToFXML(EncryWindow.pathToChatsWindowFXML); + getEncryWindow().launchWindowByPathToFXML(EncryWindow.pathToCommunitiesListWindowFXML); } public void setSecretChatNameText(String secretChatNameStr) { diff --git a/src/main/java/org/javaFX/images/checkboxNeutralSmall.png b/src/main/java/org/javaFX/images/checkboxNeutralSmall.png new file mode 100644 index 00000000..3773fe8b Binary files /dev/null and b/src/main/java/org/javaFX/images/checkboxNeutralSmall.png differ diff --git a/src/main/java/org/javaFX/images/checkboxSelectedSmall.png b/src/main/java/org/javaFX/images/checkboxSelectedSmall.png new file mode 100644 index 00000000..3dd72170 Binary files /dev/null and b/src/main/java/org/javaFX/images/checkboxSelectedSmall.png differ diff --git a/src/main/java/org/javaFX/images/cross.png b/src/main/java/org/javaFX/images/cross.png new file mode 100644 index 00000000..bd4192e3 Binary files /dev/null and b/src/main/java/org/javaFX/images/cross.png differ diff --git a/src/main/java/org/javaFX/images/delete.png b/src/main/java/org/javaFX/images/delete.png index f5296aa6..16200fad 100644 Binary files a/src/main/java/org/javaFX/images/delete.png and b/src/main/java/org/javaFX/images/delete.png differ diff --git a/src/main/java/org/javaFX/images/delete1.png b/src/main/java/org/javaFX/images/delete1.png new file mode 100644 index 00000000..9051448f Binary files /dev/null and b/src/main/java/org/javaFX/images/delete1.png differ diff --git a/src/main/java/org/javaFX/model/nodes/VBoxCell.java b/src/main/java/org/javaFX/model/nodes/VBoxCell.java index 186b4ea3..c8b8fa1d 100644 --- a/src/main/java/org/javaFX/model/nodes/VBoxCell.java +++ b/src/main/java/org/javaFX/model/nodes/VBoxCell.java @@ -13,7 +13,7 @@ public abstract class VBoxCell extends VBox { public VBoxCell(T sourceElement){ this.element = sourceElement; - setIsYourMessage(sourceElement); + setMessageCredentials(sourceElement); initNodes(sourceElement); setNodesToRootPane(sourceElement); } @@ -21,12 +21,12 @@ public VBoxCell(T sourceElement){ public VBoxCell(T sourceElement, double parentWidth){ this.element = sourceElement; this.parentWidth = parentWidth; - setIsYourMessage(sourceElement); + setMessageCredentials(sourceElement); initNodes(sourceElement); setNodesToRootPane(sourceElement); } - protected void setIsYourMessage(T sourceElement){} + protected void setMessageCredentials(T sourceElement){} protected abstract void initNodes(T sourceElement); diff --git a/src/main/java/org/javaFX/model/nodes/VBoxChatCell.java b/src/main/java/org/javaFX/model/nodes/VBoxChatCell.java index 3b742504..4be4c649 100644 --- a/src/main/java/org/javaFX/model/nodes/VBoxChatCell.java +++ b/src/main/java/org/javaFX/model/nodes/VBoxChatCell.java @@ -8,10 +8,12 @@ import javafx.scene.paint.Color; import javafx.scene.paint.Paint; import javafx.scene.shape.Circle; +import javafx.scene.shape.Rectangle; import javafx.scene.text.Font; import javafx.scene.text.FontWeight; import javafx.scene.text.Text; import javafx.scene.text.TextAlignment; +import org.javaFX.EncryWindow; import org.javaFX.model.JChat; import org.javaFX.util.RandomChooser; import org.javaFX.util.TimeParser; @@ -21,7 +23,7 @@ public class VBoxChatCell extends VBoxCell{ private Label chatTitleLabel; private Label lastMessageLabel; private Label timeLabel; - private Circle smallCircle; + private Rectangle smallRectangle; private Text unreadMsgsNumberText; private Circle bigCircle; private Text abbreviationText; @@ -35,7 +37,7 @@ public class VBoxChatCell extends VBoxCell{ private final String selectedBackGroundStyle = "-fx-background-color:#D4D3D4;"; private double smallCircleRightIndent = 9.0; - private double smallCircleTextRightIndent = 21.0; + private double smallCircleTextRightIndent = 27.0; public VBoxChatCell(JChat jChat, double parentWidth) { super(jChat, parentWidth); @@ -54,8 +56,8 @@ protected void initNodes(JChat jChat){ initBigCircleText(jChat); initSeparator(); if(jChat.getUnreadMessagesNumber().get() > 0 ){ - initSmallCircle(); initSmallCircleText((String.valueOf(jChat.getUnreadMessagesNumber().get()))); + initSmallFigure((String.valueOf(jChat.getUnreadMessagesNumber().get()))); } } @@ -65,11 +67,11 @@ protected void setNodesToRootPane(JChat sourceElement){ getRootPane().getChildren().add(lastMessageLabel); getRootPane().getChildren().add(timeLabel); AnchorPane.setLeftAnchor(timeLabel, chatTitleLabel.getWidth() + 70); - if(smallCircle != null){ - getRootPane().getChildren().add(smallCircle); - AnchorPane.setLeftAnchor(smallCircle, 70 + lastMessageLabel.getWidth() - smallCircleRightIndent); + if(smallRectangle != null){ + getRootPane().getChildren().add(smallRectangle); + AnchorPane.setLeftAnchor(smallRectangle, 70 + lastMessageLabel.getWidth() - smallCircleRightIndent); getRootPane().getChildren().add(unreadMsgsNumberText); - AnchorPane.setLeftAnchor(unreadMsgsNumberText,70 + lastMessageLabel.getWidth()- smallCircleTextRightIndent); + AnchorPane.setLeftAnchor(unreadMsgsNumberText,70 + lastMessageLabel.getWidth() - smallCircleTextRightIndent); } getRootPane().getChildren().add(bigCircle); getRootPane().getChildren().add(abbreviationText); @@ -169,18 +171,38 @@ private void initBigCircleText(JChat jChat){ abbreviationText.setFill(Color.WHITE); } - private void initSmallCircle(){ - smallCircle = new Circle(); - int smallCircleIndent = 20; - smallCircle.setLayoutX(getParentWidth()-smallCircleIndent); - smallCircle.setLayoutY(42); - smallCircle.setRadius(16); - smallCircle.setFill(Color.valueOf(innerContentCircleColorStr)); + + private void initSmallFigure(String unreadMessagedNumberStr){ + smallRectangle = new Rectangle(); + smallRectangle.setLayoutY(32); + smallRectangle.setHeight(20); + resizeUnreadMessagesFigureWidth(unreadMessagedNumberStr); + smallRectangle.setArcWidth(20); + smallRectangle.setArcHeight(20); + smallRectangle.setFill(Color.valueOf(innerContentCircleColorStr)); + } + + private void resizeUnreadMessagesFigureWidth(String unreadMessagedNumberStr){ + if(unreadMessagedNumberStr.length() == 1){ + smallRectangle.setWidth(20); + } + else if (unreadMessagedNumberStr.length() == 2){ + smallRectangle.setWidth(26); + } + else if (unreadMessagedNumberStr.length() == 3){ + smallRectangle.setWidth(32); + } + else if (unreadMessagedNumberStr.length() == 4){ + smallRectangle.setWidth(38); + } + else { + smallRectangle.setWidth(45); + } } private void initSmallCircleText(String unreadMessagedNumberStr){ unreadMsgsNumberText = new Text(); - unreadMsgsNumberText.setFont(new Font(10)); + unreadMsgsNumberText.setFont(new Font(11)); int smallCircleTextIndent = 24; unreadMsgsNumberText.setLayoutX(getParentWidth()-smallCircleTextIndent); unreadMsgsNumberText.setLayoutY(47); @@ -198,6 +220,7 @@ public LongProperty chatIdProperty() { } public String getChatTitle(){ + //if (chatTitleLabel.getText().equals(EncryWindow.state.get().)) return chatTitleLabel.getText(); } @@ -208,33 +231,34 @@ public String getLastMessage(){ public void updateLastMessage(String newText, Long newTime, Integer unreadCount) { lastMessageLabel.setText(newText); timeLabel.setText(TimeParser.parseDataString ( newTime.toString() ) ); - if (unreadMsgsNumberText != null && smallCircle != null) + if (unreadMsgsNumberText != null && smallRectangle != null) { if (unreadCount > 0) { - if (!smallCircle.isVisible()) { + if (!smallRectangle.isVisible()) { unreadMsgsNumberText.setVisible(true); - smallCircle.setVisible(true); + smallRectangle.setVisible(true); updateMessageCircle(); } unreadMsgsNumberText.setText(unreadCount.toString()); } else { unreadMsgsNumberText.setVisible(false); - smallCircle.setVisible(false); + smallRectangle.setVisible(false); } } else { - initSmallCircle(); + initSmallFigure(unreadCount.toString()); initSmallCircleText(unreadCount.toString()); } } private void updateMessageCircle(){ - getRootPane().getChildren().remove(smallCircle); + getRootPane().getChildren().remove(smallRectangle); getRootPane().getChildren().remove(unreadMsgsNumberText); - getRootPane().getChildren().add(smallCircle); - AnchorPane.setLeftAnchor(smallCircle, 82 + lastMessageLabel.getWidth() - smallCircleRightIndent); + resizeUnreadMessagesFigureWidth(unreadMsgsNumberText.getText()); + getRootPane().getChildren().add(smallRectangle); + AnchorPane.setLeftAnchor(smallRectangle, 82 + lastMessageLabel.getWidth() - smallCircleRightIndent); getRootPane().getChildren().add(unreadMsgsNumberText); AnchorPane.setLeftAnchor(unreadMsgsNumberText,107 + lastMessageLabel.getWidth() - smallCircleTextRightIndent); } - + } \ No newline at end of file diff --git a/src/main/java/org/javaFX/model/nodes/VBoxCommonChatTextMessageCell.java b/src/main/java/org/javaFX/model/nodes/VBoxCommonChatTextMessageCell.java index 757de045..1b83943d 100644 --- a/src/main/java/org/javaFX/model/nodes/VBoxCommonChatTextMessageCell.java +++ b/src/main/java/org/javaFX/model/nodes/VBoxCommonChatTextMessageCell.java @@ -49,7 +49,7 @@ protected void setNodesToRootPane(JMessage jMessage) { @Override protected void setLayoutsContentLabel(JMessage jMessage) { if( jMessage.isMine() ){ - getContentLabel().setLayoutX(indent +16 + getParentWidth() / 3 ); + getContentLabel().setLayoutX(indent + 16 + getParentWidth() / 3 ); getContentLabel().setLayoutY(1); getContentLabel().setTextFill(Color.WHITE); } diff --git a/src/main/java/org/javaFX/model/nodes/VBoxCommunityCell.java b/src/main/java/org/javaFX/model/nodes/VBoxCommunityCell.java index 290fe43b..5c1d0b56 100644 --- a/src/main/java/org/javaFX/model/nodes/VBoxCommunityCell.java +++ b/src/main/java/org/javaFX/model/nodes/VBoxCommunityCell.java @@ -2,12 +2,11 @@ import javafx.scene.control.Label; import javafx.scene.control.Separator; -import javafx.scene.image.Image; -import javafx.scene.image.ImageView; import javafx.scene.layout.AnchorPane; import javafx.scene.paint.Paint; import javafx.scene.text.Font; import javafx.scene.text.FontPosture; +import javafx.scene.text.FontWeight; import org.javaFX.model.JLocalCommunity; import org.javaFX.util.JavaFXTableBuilder; @@ -41,7 +40,7 @@ private void initCommunityIDLabel(JLocalCommunity sourceElement) { communityIDLabel.setText(" " + sourceElement.getCommunityID()); communityIDLabel.setLayoutX(0); communityIDLabel.setLayoutY(20); - communityIDLabel.setFont(Font.font("Roboto", FontPosture.REGULAR,18 )); + communityIDLabel.setFont(Font.font("Roboto", FontWeight.BOLD, FontPosture.REGULAR,18 )); } private void initCommunityNameLabel(JLocalCommunity sourceElement) { @@ -49,14 +48,14 @@ private void initCommunityNameLabel(JLocalCommunity sourceElement) { communityNameLabel.setText(sourceElement.getCommunityName()); communityNameLabel.setLayoutX(240); communityNameLabel.setLayoutY(20); - communityNameLabel.setFont(Font.font("Roboto", FontPosture.REGULAR,18 )); + communityNameLabel.setFont(Font.font("Roboto", FontWeight.BOLD, FontPosture.REGULAR,18 )); } private void initNumberOfMembersLabel(JLocalCommunity sourceElement) { numberOfMembersLabel = new Label(); numberOfMembersLabel.setText(sourceElement.getCommunitySize().get()+""); numberOfMembersLabel.setLayoutY(20); - numberOfMembersLabel.setFont(Font.font("Roboto", FontPosture.REGULAR,18 )); + numberOfMembersLabel.setFont(Font.font("Roboto", FontWeight.BOLD, FontPosture.REGULAR,18 )); } private void initSeparatorLine(){ @@ -78,6 +77,7 @@ protected void setNodesToRootPane(JLocalCommunity jLocalCommunity) { protected void initRootPane(JLocalCommunity sourceElement){ setRootPane(new AnchorPane() ); getRootPane().setPrefHeight(60); + getRootPane().setStyle(backGroundStyle); } public void resetPaneColor(){ diff --git a/src/main/java/org/javaFX/model/nodes/VBoxContactCell.java b/src/main/java/org/javaFX/model/nodes/VBoxContactCell.java index 32b87810..c341fcd1 100644 --- a/src/main/java/org/javaFX/model/nodes/VBoxContactCell.java +++ b/src/main/java/org/javaFX/model/nodes/VBoxContactCell.java @@ -9,13 +9,14 @@ import javafx.scene.paint.Paint; import javafx.scene.text.Font; import javafx.scene.text.FontPosture; +import javafx.scene.text.FontWeight; import org.javaFX.model.JSingleContact; import org.javaFX.util.JavaFXTableBuilder; public class VBoxContactCell extends VBoxCell { - private final String pathToCheckboxNeutralImage = "file:images/checkboxNeutralSmall.png"; - private final String pathToCheckboxSelectedImage = "file:images/checkboxSelectedSmall.png"; + private final String pathToCheckboxNeutralImage = "images/checkboxNeutralSmall.png"; + private final String pathToCheckboxSelectedImage = "images/checkboxSelectedSmall.png"; private Label contactNameLabel; private Label phoneNumberLabel; private ImageView checkBoxImg; @@ -40,13 +41,26 @@ protected void initNodes(JSingleContact sourceElement) { initSeparatorLine(); } - private void initContactNameLabel(JSingleContact communityMember){ contactNameLabel = new Label(); - contactNameLabel.setText(" " + communityMember.getFullName()); + String preparedFullName = cutNameIfNecessary(communityMember.getFullName()); + contactNameLabel.setText(" " + preparedFullName); contactNameLabel.setLayoutX(0); contactNameLabel.setLayoutY(20); - contactNameLabel.setFont(Font.font("Roboto", FontPosture.REGULAR,18 )); + contactNameLabel.setFont(Font.font("Roboto", FontWeight.BOLD, FontPosture.REGULAR,18 )); + } + + private String cutNameIfNecessary(String communityMemberName){ + String[] nameWords = communityMemberName.split(" "); + StringBuilder sb = new StringBuilder(); + for( String partOFName: nameWords){ + if(partOFName.length() > 15){ + partOFName = partOFName.substring(0,12)+"..."; + } + sb.append(partOFName); + sb.append(" "); + } + return sb.toString().trim(); } private void initPhoneNumberLabel(JSingleContact communityMember){ @@ -54,7 +68,7 @@ private void initPhoneNumberLabel(JSingleContact communityMember){ phoneNumberLabel.setText(getPreparedTelNumber(communityMember)); phoneNumberLabel.setLayoutX(300); phoneNumberLabel.setLayoutY(20); - phoneNumberLabel.setFont(Font.font("Roboto", FontPosture.REGULAR,18 )); + phoneNumberLabel.setFont(Font.font("Roboto", FontWeight.BOLD, FontPosture.REGULAR,18 )); } private void initCheckBoxImg(){ diff --git a/src/main/java/org/javaFX/model/nodes/VBoxDialogTextMessageCell.java b/src/main/java/org/javaFX/model/nodes/VBoxDialogTextMessageCell.java index 781a84e8..dce9ff14 100644 --- a/src/main/java/org/javaFX/model/nodes/VBoxDialogTextMessageCell.java +++ b/src/main/java/org/javaFX/model/nodes/VBoxDialogTextMessageCell.java @@ -1,14 +1,19 @@ package org.javaFX.model.nodes; import javafx.scene.control.Label; +import javafx.scene.layout.AnchorPane; import javafx.scene.paint.Color; import javafx.scene.shape.Rectangle; import javafx.scene.shape.Shape; import org.javaFX.model.JMessage; +import org.javaFX.util.StringHandler; + +import java.util.Objects; public class VBoxDialogTextMessageCell extends VBoxMessageCell{ private Label contentLabel; + private final String backGroundStyle = "-fx-background-color: #FBFBFB;"; public VBoxDialogTextMessageCell(JMessage jMessage) { super(jMessage, 583); @@ -30,10 +35,45 @@ private Label createContentLabel(JMessage jMessage){ String textContent = jMessage.getContent().toString().trim(); contentLabel.setText(jMessage.getAuthor()+"\n"+textContent); contentLabel.setWrapText(true); - contentLabel.setPrefSize(getCellWidth() - 5 , getCellHeight()); + contentLabel.setPrefSize(getCellWidth() - 5, getCellHeight()); return contentLabel; } + public void recreateMessageCell(){ + contentLabel.setText(contentLabel.getText().substring(contentLabel.getText().indexOf("\n"))); + recreateAllNodes(getElement()); + } + + private void recreateAllNodes(JMessage jMessage){ + resetRootPane(jMessage); + initMessageRectangle(jMessage); + initAngleRectangle(jMessage); + } + + private void resetRootPane(JMessage jMessage) { + AnchorPane pane = new AnchorPane(); + String textContent = contentLabel.getText().trim(); + int multiplier = + textContent.length() % 40 == 0 ? textContent.length() / 40: (textContent.length()/40) + 1; + int numberOfNewLines = StringHandler.countCharactersInStr(textContent,'\n'); + multiplier += numberOfNewLines; + setCellWidth(getParentWidth() - getParentWidth() / 3); + if(!jMessage.isPreviousSameAuthor()){ + ++multiplier; + } + setCellHeight( 27 * multiplier ); + if (jMessage.isMine()) { + pane.setLayoutX(getParentWidth() / 3); + } + else { + pane.setLayoutX(1); + } + pane.setPrefSize(getCellWidth(), getCellHeight()); + pane.setMinSize(getCellWidth(), getCellHeight()); + pane.setStyle(backGroundStyle); + setRootPane(pane); + } + protected void setLayoutsContentLabel(JMessage jMessage){ if( jMessage.isMine() ){ contentLabel.setLayoutX(16 + getParentWidth() / 3 ); @@ -110,4 +150,18 @@ public void setContentLabel(Label contentLabel) { this.contentLabel = contentLabel; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + VBoxDialogTextMessageCell that = (VBoxDialogTextMessageCell) o; + return contentLabel.getText().equals(that.contentLabel.getText()) + && that.getTimeText().getText().equals(getTimeText().getText()); + } + + @Override + public int hashCode() { + return Objects.hash(contentLabel); + } } \ No newline at end of file diff --git a/src/main/java/org/javaFX/model/nodes/VBoxMessageCell.java b/src/main/java/org/javaFX/model/nodes/VBoxMessageCell.java index 99044cc5..0c6dfa88 100644 --- a/src/main/java/org/javaFX/model/nodes/VBoxMessageCell.java +++ b/src/main/java/org/javaFX/model/nodes/VBoxMessageCell.java @@ -40,7 +40,7 @@ private void setStyle(){ } @Override - protected void setIsYourMessage(JMessage jMessage) { + protected void setMessageCredentials(JMessage jMessage) { if(jMessage.getContent().toString().length() < 12){ return; } @@ -98,11 +98,14 @@ protected void initRootPane(JMessage jMessage) { AnchorPane pane = new AnchorPane(); String textContent = jMessage.getContent().toString().trim(); int multiplier = - textContent.length()%40 == 0 ? textContent.length()/40: (textContent.length()/40) +1; + textContent.length() % 40 == 0 ? textContent.length() / 40: (textContent.length()/40) + 1; int numberOfNewLines = StringHandler.countCharactersInStr(textContent,'\n'); multiplier += numberOfNewLines; cellWidth = getParentWidth() - getParentWidth() / 3; - cellHeight = 27 * (multiplier +1); + if(!jMessage.isPreviousSameAuthor()){ + ++multiplier; + } + cellHeight = 27 * multiplier ; if (jMessage.isMine()) { pane.setLayoutX(getParentWidth() / 3); } @@ -173,6 +176,14 @@ public double getCellHeight() { return cellHeight; } + public void setCellWidth(double cellWidth) { + this.cellWidth = cellWidth; + } + + public void setCellHeight(double cellHeight) { + this.cellHeight = cellHeight; + } + public String getYouMessagesBackgroundColor() { return youMessagesBackgroundColor; } diff --git a/src/main/java/org/javaFX/styles/chatsBackStyle.css b/src/main/java/org/javaFX/styles/chatsBackStyle.css index 29fa9f53..0f747df8 100644 --- a/src/main/java/org/javaFX/styles/chatsBackStyle.css +++ b/src/main/java/org/javaFX/styles/chatsBackStyle.css @@ -10,7 +10,6 @@ -fx-padding:0; } - .list-cell { -fx-padding: 2px ; -fx-background-color: transparent, -fx-background ; @@ -21,6 +20,4 @@ -fx-padding: 2px ; -fx-background-color: transparent ; -fx-background-insets: 0 ; -} - - +} \ No newline at end of file diff --git a/src/main/java/org/javaFX/styles/headerChatsBackStyle.css b/src/main/java/org/javaFX/styles/headerChatsBackStyle.css new file mode 100644 index 00000000..7856af8e --- /dev/null +++ b/src/main/java/org/javaFX/styles/headerChatsBackStyle.css @@ -0,0 +1,6 @@ +.label{ + -fx-font-size: 14px; + -fx-font-weight: Regular; + -fx-font-family: "SF Pro Text"; +} + diff --git a/src/main/java/org/javaFX/view/chatsWindow.fxml b/src/main/java/org/javaFX/view/chatsWindow.fxml index a38eac34..beab8746 100644 --- a/src/main/java/org/javaFX/view/chatsWindow.fxml +++ b/src/main/java/org/javaFX/view/chatsWindow.fxml @@ -1,5 +1,6 @@ + @@ -32,7 +33,7 @@ -