mirror of
https://github.com/michaelrausch/Party-Parrots-At-Sea.git
synced 2026-05-09 14:28:43 +00:00
c8dc448a52
#story[1245]
90 lines
3.4 KiB
Java
90 lines
3.4 KiB
Java
package seng302.visualiser.fxObjects;
|
|
|
|
import java.util.Arrays;
|
|
import javafx.collections.ListChangeListener;
|
|
import javafx.scene.Node;
|
|
import javafx.scene.control.ScrollPane;
|
|
import javafx.scene.paint.Paint;
|
|
import javafx.scene.text.Text;
|
|
import javafx.scene.text.TextFlow;
|
|
|
|
/**
|
|
* Extension of a ScrollPane that contains a TextFlow. Has an addMessage() function to parse and
|
|
* display chatter text.
|
|
*/
|
|
public class ChatHistory extends ScrollPane {
|
|
|
|
private TextFlow textFlow = new TextFlow();
|
|
|
|
public ChatHistory() {
|
|
this.setContent(textFlow);
|
|
this.setFitToWidth(true);
|
|
this.setFitToHeight(true);
|
|
this.setMaxHeight(Double.MAX_VALUE);
|
|
this.setMaxWidth(Double.MAX_VALUE);
|
|
this.setVbarPolicy(ScrollBarPolicy.AS_NEEDED);
|
|
this.setHbarPolicy(ScrollBarPolicy.NEVER);
|
|
this.lookup(".scroll-pane").setStyle("-fx-background: rgba(135, 206, 235, 0.0); -fx-background-color: rgba(135, 206, 235, 0.0);");
|
|
|
|
this.textFlow.setStyle(
|
|
"-fx-background: rgba(135, 206, 235, 0.0); -fx-background-color: rgba(135, 206, 235, 0.0); -fx-padding: 10px"
|
|
);
|
|
//This makes the window auto scroll.
|
|
textFlow.getChildren().addListener((ListChangeListener<Node>) c ->
|
|
this.setVvalue(1.0)
|
|
);
|
|
//This just makes it so that the ChatHistory is on focus it passes it off to the parent.
|
|
this.parentProperty().addListener((obs, old, parent) ->
|
|
this.focusedProperty().addListener((obsVal, oldVal, onFocus) -> {
|
|
if (onFocus) {
|
|
parent.requestFocus();
|
|
}
|
|
})
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Adds a message to chat history. Messages should be either of the form:
|
|
* "[HH:MM:ss] player_name: message_text" or
|
|
* "SERVER: message_text"
|
|
* @param colour The colour of the user sending the message
|
|
* @param Text The chatter text message to be displayed
|
|
*/
|
|
public void addMessage (Paint colour, String Text) {
|
|
String[] words = Text.split(":");
|
|
if (words[0].trim().equals("SERVER")) {
|
|
Text text = new Text(Text + "\n");
|
|
text.setStyle("-fx-font-weight: bolder");
|
|
textFlow.getChildren().add(text);
|
|
} else {
|
|
Text timePlayer = new Text(
|
|
String.join(":", Arrays.copyOfRange(words, 0, 3)) + ":"
|
|
);
|
|
timePlayer.setStyle("-fx-font-weight: bold");
|
|
timePlayer.setFill(colour);
|
|
Text message = new Text(
|
|
String.join(":", Arrays.copyOfRange(words, 3, words.length)) + "\n"
|
|
);
|
|
message.wrappingWidthProperty().bind(this.widthProperty());
|
|
textFlow.getChildren().addAll(timePlayer, message);
|
|
}
|
|
|
|
}
|
|
|
|
public void increaseOpacity() {
|
|
this.lookup(".scroll-pane").setStyle("-fx-background: rgba(255, 255, 255, 0.2); -fx-background-color: rgba(255, 255, 255, 0.2);");
|
|
|
|
this.textFlow.setStyle(
|
|
"-fx-background: rgba(255, 255, 255, 0.2); -fx-background-color: rgba(255, 255, 255, 0.2); -fx-padding: 10px"
|
|
);
|
|
}
|
|
|
|
public void decreaseOpacity() {
|
|
this.lookup(".scroll-pane").setStyle("-fx-background: rgba(135, 206, 235, 0.0); -fx-background-color: rgba(135, 206, 235, 0.0);");
|
|
|
|
this.textFlow.setStyle(
|
|
"-fx-background: rgba(135, 206, 235, 0.0); -fx-background-color: rgba(135, 206, 235, 0.0); -fx-padding: 10px"
|
|
);
|
|
}
|
|
}
|