diff --git a/src/main/java/seedu/address/logic/Logic.java b/src/main/java/seedu/address/logic/Logic.java index 92cd8fa605a..17d3f23b85f 100644 --- a/src/main/java/seedu/address/logic/Logic.java +++ b/src/main/java/seedu/address/logic/Logic.java @@ -8,6 +8,7 @@ import seedu.address.logic.commands.exceptions.CommandException; import seedu.address.logic.parser.exceptions.ParseException; import seedu.address.model.ReadOnlyAddressBook; +import seedu.address.model.person.Note; import seedu.address.model.person.Person; /** @@ -33,6 +34,8 @@ public interface Logic { /** Returns an unmodifiable view of the filtered list of persons */ ObservableList getFilteredPersonList(); + Note getDisplayedNote(); + /** * Returns the user prefs' address book file path. */ diff --git a/src/main/java/seedu/address/logic/LogicManager.java b/src/main/java/seedu/address/logic/LogicManager.java index 5aa3b91c7d0..efd0f285b29 100644 --- a/src/main/java/seedu/address/logic/LogicManager.java +++ b/src/main/java/seedu/address/logic/LogicManager.java @@ -15,6 +15,7 @@ import seedu.address.logic.parser.exceptions.ParseException; import seedu.address.model.Model; import seedu.address.model.ReadOnlyAddressBook; +import seedu.address.model.person.Note; import seedu.address.model.person.Person; import seedu.address.storage.Storage; @@ -71,6 +72,11 @@ public ObservableList getFilteredPersonList() { return model.getFilteredPersonList(); } + @Override + public Note getDisplayedNote() { + return model.getDisplayNote(); + } + @Override public Path getAddressBookFilePath() { return model.getAddressBookFilePath(); diff --git a/src/main/java/seedu/address/logic/commands/FindCommand.java b/src/main/java/seedu/address/logic/commands/FindCommand.java index 34923b75d58..96092d97708 100644 --- a/src/main/java/seedu/address/logic/commands/FindCommand.java +++ b/src/main/java/seedu/address/logic/commands/FindCommand.java @@ -30,6 +30,7 @@ public FindCommand(IdentityCardNumberMatchesPredicate predicate) { public CommandResult execute(Model model) { requireNonNull(model); model.updateFilteredPersonList(predicate); + model.setDisplayNoteAsFirstFilteredPerson(); return new CommandResult( String.format(Messages.MESSAGE_PERSONS_LISTED_OVERVIEW, model.getFilteredPersonList().size())); } diff --git a/src/main/java/seedu/address/model/AddressBook.java b/src/main/java/seedu/address/model/AddressBook.java index 73397161e84..ee6c7cdb08e 100644 --- a/src/main/java/seedu/address/model/AddressBook.java +++ b/src/main/java/seedu/address/model/AddressBook.java @@ -3,9 +3,11 @@ import static java.util.Objects.requireNonNull; import java.util.List; +import java.util.Optional; import javafx.collections.ObservableList; import seedu.address.commons.util.ToStringBuilder; +import seedu.address.model.person.Note; import seedu.address.model.person.Person; import seedu.address.model.person.UniquePersonList; @@ -28,6 +30,8 @@ public class AddressBook implements ReadOnlyAddressBook { persons = new UniquePersonList(); } + private Optional displayNote = Optional.empty(); + public AddressBook() {} /** @@ -94,6 +98,29 @@ public void removePerson(Person key) { persons.remove(key); } + /** + * Get the display note. + */ + public Note getDisplayNote() { + return displayNote.orElse(Note.DEFAULT); + } + + /** + * Sets the display note to the given note. + * @param note The note to be displayed. + */ + public void setDisplayNote(Note note) { + this.displayNote = Optional.of(note); + } + + /** + * Clears the display note. + */ + public void clearDisplayNote() { + this.displayNote = Optional.empty(); + } + + //// util methods @Override diff --git a/src/main/java/seedu/address/model/Model.java b/src/main/java/seedu/address/model/Model.java index d54df471c1f..6e965e82c7d 100644 --- a/src/main/java/seedu/address/model/Model.java +++ b/src/main/java/seedu/address/model/Model.java @@ -5,6 +5,7 @@ import javafx.collections.ObservableList; import seedu.address.commons.core.GuiSettings; +import seedu.address.model.person.Note; import seedu.address.model.person.Person; /** @@ -84,4 +85,24 @@ public interface Model { * @throws NullPointerException if {@code predicate} is null. */ void updateFilteredPersonList(Predicate predicate); + + Note getDisplayNote(); + + void setDisplayNote(Person person); + + /** + * Replaces the note that is displayed in the note panel. + */ + void setDisplayNote(Note note); + + /** + * Sets the display note to the first filtered person. + * If there is no filtered person, displayed note is unchanged. + */ + void setDisplayNoteAsFirstFilteredPerson(); + + /** + * Clears the note panel display. + */ + void clearDisplayNote(); } diff --git a/src/main/java/seedu/address/model/ModelManager.java b/src/main/java/seedu/address/model/ModelManager.java index 57bc563fde6..b695a7312fd 100644 --- a/src/main/java/seedu/address/model/ModelManager.java +++ b/src/main/java/seedu/address/model/ModelManager.java @@ -11,6 +11,7 @@ import javafx.collections.transformation.FilteredList; import seedu.address.commons.core.GuiSettings; import seedu.address.commons.core.LogsCenter; +import seedu.address.model.person.Note; import seedu.address.model.person.Person; /** @@ -128,6 +129,48 @@ public void updateFilteredPersonList(Predicate predicate) { filteredPersons.setPredicate(predicate); } + //=========== Note Panel ================================================================================ + + @Override + public Note getDisplayNote() { + return addressBook.getDisplayNote(); + } + + @Override + public void setDisplayNote(Note note) { + requireNonNull(note); + addressBook.setDisplayNote(note); + } + + @Override + public void setDisplayNote(Person person) { + requireNonNull(person); + Note displayNote = person.getNote(); + setDisplayNote(displayNote); + } + + /** + * Sets the display note to the first filtered person. + * If there is no filtered person, displayed note is unchanged. + */ + @Override + public void setDisplayNoteAsFirstFilteredPerson() { + if (filteredPersons.isEmpty()) { + logger.warning("No person to display note for."); + return; + } + Person person = filteredPersons.get(0); + setDisplayNote(person); + } + + /** + * Clears the note panel display. + */ + @Override + public void clearDisplayNote() { + addressBook.clearDisplayNote(); + } + @Override public boolean equals(Object other) { if (other == this) { diff --git a/src/main/java/seedu/address/ui/MainWindow.java b/src/main/java/seedu/address/ui/MainWindow.java index 79e74ef37c0..8a9079468da 100644 --- a/src/main/java/seedu/address/ui/MainWindow.java +++ b/src/main/java/seedu/address/ui/MainWindow.java @@ -33,6 +33,7 @@ public class MainWindow extends UiPart { // Independent Ui parts residing in this Ui container private PersonListPanel personListPanel; private ResultDisplay resultDisplay; + private NoteDisplay noteDisplay; private HelpWindow helpWindow; @FXML @@ -50,6 +51,9 @@ public class MainWindow extends UiPart { @FXML private StackPane statusbarPlaceholder; + @FXML + private StackPane patientDetailsPlaceholder; + /** * Creates a {@code MainWindow} with the given {@code Stage} and {@code Logic}. */ @@ -116,6 +120,10 @@ void fillInnerParts() { resultDisplay = new ResultDisplay(); resultDisplayPlaceholder.getChildren().add(resultDisplay.getRoot()); + noteDisplay = new NoteDisplay(); + patientDetailsPlaceholder.getChildren().add(noteDisplay.getRoot()); + noteDisplay.setNoteToUser(logic.getDisplayedNote().value); + StatusBarFooter statusBarFooter = new StatusBarFooter(logic.getAddressBookFilePath()); statusbarPlaceholder.getChildren().add(statusBarFooter.getRoot()); @@ -177,6 +185,7 @@ private CommandResult executeCommand(String commandText) throws CommandException CommandResult commandResult = logic.execute(commandText); logger.info("Result: " + commandResult.getFeedbackToUser()); resultDisplay.setFeedbackToUser(commandResult.getFeedbackToUser()); + noteDisplay.setNoteToUser(logic.getDisplayedNote().value); if (commandResult.isShowHelp()) { handleHelp(); diff --git a/src/main/java/seedu/address/ui/NoteDisplay.java b/src/main/java/seedu/address/ui/NoteDisplay.java new file mode 100644 index 00000000000..7016306c9d3 --- /dev/null +++ b/src/main/java/seedu/address/ui/NoteDisplay.java @@ -0,0 +1,25 @@ +package seedu.address.ui; + +import javafx.fxml.FXML; +import javafx.scene.control.TextArea; +import javafx.scene.layout.Region; + + +/** + * A ui for the patient note that is displayed. + */ +public class NoteDisplay extends UiPart { + + private static final String FXML = "NoteDisplay.fxml"; + + @FXML + private TextArea noteDisplay; + + public NoteDisplay() { + super(FXML); + } + + public void setNoteToUser(String noteToUser) { + noteDisplay.setText(noteToUser); + } +} diff --git a/src/main/resources/view/MainWindow.fxml b/src/main/resources/view/MainWindow.fxml index b2b3e80855c..fcef58d3f4a 100644 --- a/src/main/resources/view/MainWindow.fxml +++ b/src/main/resources/view/MainWindow.fxml @@ -56,8 +56,9 @@ - - + + + diff --git a/src/main/resources/view/NoteDisplay.fxml b/src/main/resources/view/NoteDisplay.fxml new file mode 100644 index 00000000000..8dc161cc35f --- /dev/null +++ b/src/main/resources/view/NoteDisplay.fxml @@ -0,0 +1,9 @@ + + + + + + +