From 1e0ccf7dbef07dbda099acc80b795c86ccd1af1f Mon Sep 17 00:00:00 2001 From: yuxunn Date: Tue, 24 Oct 2023 18:36:46 +0800 Subject: [PATCH] Add CSS to view --- .../address/logic/commands/CommandResult.java | 11 ++- .../address/logic/commands/ExitCommand.java | 2 +- .../address/logic/commands/HelpCommand.java | 2 +- .../address/logic/commands/ListCommand.java | 1 + .../address/logic/commands/ViewCommand.java | 5 +- .../java/seedu/address/ui/MainWindow.java | 59 +++++++++++++- .../java/seedu/address/ui/ViewWindow.java | 74 ++++++++++++++++++ src/main/resources/images/profile.png | Bin 0 -> 14456 bytes src/main/resources/images/smartphone-call.png | Bin 0 -> 2820 bytes src/main/resources/view/MainWindow.fxml | 2 +- src/main/resources/view/ViewWindow.css | 21 +++++ src/main/resources/view/ViewWindow.fxml | 73 +++++++++++++++++ 12 files changed, 241 insertions(+), 9 deletions(-) create mode 100644 src/main/java/seedu/address/ui/ViewWindow.java create mode 100644 src/main/resources/images/profile.png create mode 100644 src/main/resources/images/smartphone-call.png create mode 100644 src/main/resources/view/ViewWindow.css create mode 100644 src/main/resources/view/ViewWindow.fxml diff --git a/src/main/java/seedu/address/logic/commands/CommandResult.java b/src/main/java/seedu/address/logic/commands/CommandResult.java index 249b6072d0d..984905acf57 100644 --- a/src/main/java/seedu/address/logic/commands/CommandResult.java +++ b/src/main/java/seedu/address/logic/commands/CommandResult.java @@ -19,13 +19,16 @@ public class CommandResult { /** The application should exit. */ private final boolean exit; + private String state; + /** * Constructs a {@code CommandResult} with the specified fields. */ - public CommandResult(String feedbackToUser, boolean showHelp, boolean exit) { + public CommandResult(String feedbackToUser, boolean showHelp, boolean exit, String state) { this.feedbackToUser = requireNonNull(feedbackToUser); this.showHelp = showHelp; this.exit = exit; + this.state = state; } /** @@ -33,7 +36,7 @@ public CommandResult(String feedbackToUser, boolean showHelp, boolean exit) { * and other fields set to their default value. */ public CommandResult(String feedbackToUser) { - this(feedbackToUser, false, false); + this(feedbackToUser, false, false, "null"); } public String getFeedbackToUser() { @@ -48,6 +51,10 @@ public boolean isExit() { return exit; } + public String checkState() { + return state; + } + @Override public boolean equals(Object other) { if (other == this) { diff --git a/src/main/java/seedu/address/logic/commands/ExitCommand.java b/src/main/java/seedu/address/logic/commands/ExitCommand.java index 3dd85a8ba90..a1eb8126c9d 100644 --- a/src/main/java/seedu/address/logic/commands/ExitCommand.java +++ b/src/main/java/seedu/address/logic/commands/ExitCommand.java @@ -13,7 +13,7 @@ public class ExitCommand extends Command { @Override public CommandResult execute(Model model) { - return new CommandResult(MESSAGE_EXIT_ACKNOWLEDGEMENT, false, true); + return new CommandResult(MESSAGE_EXIT_ACKNOWLEDGEMENT, false, true, "exit"); } } diff --git a/src/main/java/seedu/address/logic/commands/HelpCommand.java b/src/main/java/seedu/address/logic/commands/HelpCommand.java index bf824f91bd0..b33639d6e34 100644 --- a/src/main/java/seedu/address/logic/commands/HelpCommand.java +++ b/src/main/java/seedu/address/logic/commands/HelpCommand.java @@ -16,6 +16,6 @@ public class HelpCommand extends Command { @Override public CommandResult execute(Model model) { - return new CommandResult(SHOWING_HELP_MESSAGE, true, false); + return new CommandResult(SHOWING_HELP_MESSAGE, true, false, "help"); } } diff --git a/src/main/java/seedu/address/logic/commands/ListCommand.java b/src/main/java/seedu/address/logic/commands/ListCommand.java index 84be6ad2596..dcdf8ceb3df 100644 --- a/src/main/java/seedu/address/logic/commands/ListCommand.java +++ b/src/main/java/seedu/address/logic/commands/ListCommand.java @@ -14,6 +14,7 @@ public class ListCommand extends Command { public static final String MESSAGE_SUCCESS = "Listed all persons"; + public static final String state = "list"; @Override public CommandResult execute(Model model) { diff --git a/src/main/java/seedu/address/logic/commands/ViewCommand.java b/src/main/java/seedu/address/logic/commands/ViewCommand.java index a91ca30c413..d0f2eb2e1ac 100644 --- a/src/main/java/seedu/address/logic/commands/ViewCommand.java +++ b/src/main/java/seedu/address/logic/commands/ViewCommand.java @@ -17,6 +17,8 @@ public class ViewCommand extends Command { public static final String COMMAND_WORD = "view"; + public static final String state = "view"; + public static final String MESSAGE_USAGE = COMMAND_WORD + ": Views the person identified by the index number used.\n" @@ -39,6 +41,7 @@ public CommandResult execute(Model model) throws CommandException { if (targetIndex.getZeroBased() < 0 || targetIndex.getZeroBased() >= model.getFilteredPersonList().size()) { + logger.info(targetIndex.getZeroBased() + "+ " + model.getFilteredPersonList().size()); throw new CommandException(Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX); } @@ -47,7 +50,7 @@ public CommandResult execute(Model model) throws CommandException { logger.info("Target Index: " + targetIndex.getZeroBased()); logger.info("Client to View: " + personToView); - return new CommandResult(MESSAGE_SUCCESS); + return new CommandResult(MESSAGE_SUCCESS, false, false, "view"); } @Override public boolean equals(Object other) { diff --git a/src/main/java/seedu/address/ui/MainWindow.java b/src/main/java/seedu/address/ui/MainWindow.java index c0a14a5569b..c8ffa5591de 100644 --- a/src/main/java/seedu/address/ui/MainWindow.java +++ b/src/main/java/seedu/address/ui/MainWindow.java @@ -2,6 +2,7 @@ import java.util.logging.Logger; +import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.control.MenuItem; @@ -9,10 +10,14 @@ import javafx.scene.input.KeyCombination; import javafx.scene.input.KeyEvent; import javafx.scene.layout.StackPane; +import javafx.stage.Modality; import javafx.stage.Stage; +import javafx.scene.Scene; import seedu.address.commons.core.GuiSettings; +import seedu.address.model.person.Person; import seedu.address.commons.core.LogsCenter; import seedu.address.logic.Logic; +import javafx.stage.StageStyle; import seedu.address.logic.commands.CommandResult; import seedu.address.logic.commands.exceptions.CommandException; import seedu.address.logic.parser.exceptions.ParseException; @@ -28,12 +33,17 @@ public class MainWindow extends UiPart { private final Logger logger = LogsCenter.getLogger(getClass()); private Stage primaryStage; + private Logic logic; // Independent Ui parts residing in this Ui container private PersonListPanel personListPanel; private ResultDisplay resultDisplay; private HelpWindow helpWindow; + private ViewWindow viewWindow; + @FXML + private StackPane viewWindowPlaceholder; + @FXML private StackPane commandBoxPlaceholder; @@ -64,14 +74,15 @@ public MainWindow(Stage primaryStage, Logic logic) { this.primaryStage = primaryStage; this.logic = logic; + // Configure the UI setWindowDefaultSize(logic.getGuiSettings()); setAccelerators(); - helpWindow = new HelpWindow(); } + public Stage getPrimaryStage() { return primaryStage; } @@ -109,7 +120,6 @@ private void setAccelerator(MenuItem menuItem, KeyCombination keyCombination) { } }); } - /** * Fills up all the placeholders of this window. */ @@ -166,7 +176,40 @@ private void handleExit() { helpWindow.hide(); primaryStage.hide(); } + @FXML + public void handleView(Person selectedPerson, int displayedIndex) { + logger.info("handleView"); + showViewWindow(selectedPerson, displayedIndex); + } + + + private void showViewWindow(Person selectedPerson, int displayedIndex) { + try { + if (viewWindow != null && viewWindowPlaceholder != null) { + clearViewContent(); + viewWindowPlaceholder.getChildren().add(viewWindow.getRoot()); + personListPanelPlaceholder.setVisible(false); + personListPanelPlaceholder.setManaged(false); + viewWindowPlaceholder.setVisible(true); + viewWindowPlaceholder.setManaged(true); + } else { + + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + public void clearViewContent() { + viewWindowPlaceholder.getChildren().clear(); + } + private void hideViewWindow() { + if (viewWindow != null && viewWindowPlaceholder != null) { + viewWindowPlaceholder.setVisible(false); + personListPanelPlaceholder.setVisible(true); + } + } public PersonListPanel getPersonListPanel() { return personListPanel; } @@ -177,9 +220,11 @@ public PersonListPanel getPersonListPanel() { * @see seedu.address.logic.Logic#execute(String) */ private CommandResult executeCommand(String commandText) throws CommandException, ParseException { + try { CommandResult commandResult = logic.execute(commandText); logger.info("Result: " + commandResult.getFeedbackToUser()); + logger.info("reached here: " + logic.getFilteredPersonList()); resultDisplay.setFeedbackToUser(commandResult.getFeedbackToUser()); if (commandResult.isShowHelp()) { @@ -190,6 +235,15 @@ private CommandResult executeCommand(String commandText) throws CommandException handleExit(); } + if (commandResult.checkState().equals("view")) { + ObservableList allPersons = logic.getFilteredPersonList(); + Person selectedPerson = allPersons.get(0); + viewWindow = new ViewWindow(selectedPerson, 1); + + handleView(selectedPerson, 0); + } else { + hideViewWindow(); + } return commandResult; } catch (CommandException | ParseException e) { logger.info("An error occurred while executing command: " + commandText); @@ -197,5 +251,4 @@ private CommandResult executeCommand(String commandText) throws CommandException throw e; } } - } diff --git a/src/main/java/seedu/address/ui/ViewWindow.java b/src/main/java/seedu/address/ui/ViewWindow.java new file mode 100644 index 00000000000..e369529a1c0 --- /dev/null +++ b/src/main/java/seedu/address/ui/ViewWindow.java @@ -0,0 +1,74 @@ +package seedu.address.ui; + +import java.util.Comparator; +import java.util.logging.Logger; + +import javafx.fxml.FXML; +import javafx.scene.control.Label; +import javafx.scene.layout.FlowPane; +import javafx.scene.layout.HBox; +import javafx.scene.layout.Region; +import seedu.address.commons.core.LogsCenter; +import seedu.address.logic.commands.ViewCommand; +import seedu.address.model.person.Person; + +/** + * An UI component that displays information of a {@code Person}. + */ +public class ViewWindow extends UiPart { + + private static final String FXML = "ViewWindow.fxml"; + + /** + * Note: Certain keywords such as "location" and "resources" are reserved keywords in JavaFX. + * As a consequence, UI elements' variable names cannot be set to such keywords + * or an exception will be thrown by JavaFX during runtime. + * + * @see The issue on AddressBook level 4 + */ + + public final Person person; + + @FXML + private HBox cardPane; + @FXML + private Label name; + @FXML + private Label id; + @FXML + private Label phone; + @FXML + private Label address; + @FXML + private Label email; + @FXML + private FlowPane tags; + + @FXML + private Label otherInfo; + private static final Logger logger = LogsCenter.getLogger(ViewWindow.class); + + /** + * Creates a {@code PersonCode} with the given {@code Person} and index to display. + */ + public ViewWindow(Person person, int displayedIndex) { + super(FXML); + this.person = person; + id.setText(displayedIndex + "."); + name.setText(person.getName().fullName); + phone.setText(person.getPhone().value); + address.setText(person.getAddress().value); + email.setText(person.getEmail().value); + + Label label = new Label(person.getType().value); + if (person.isClient()) { + label.getStyleClass().add("client-label"); + } else { + label.getStyleClass().add("lead-label"); + } + tags.getChildren().add(label); + person.getTags().stream() + .sorted(Comparator.comparing(tag -> tag.tagName)) + .forEach(tag -> tags.getChildren().add(new Label(tag.tagName))); + } +} diff --git a/src/main/resources/images/profile.png b/src/main/resources/images/profile.png new file mode 100644 index 0000000000000000000000000000000000000000..f0e07c6ff3e5e499d9342b045f5cdf7d78709e51 GIT binary patch literal 14456 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/view/MainWindow.fxml b/src/main/resources/view/MainWindow.fxml index 7778f666a0a..fe26539cff4 100644 --- a/src/main/resources/view/MainWindow.fxml +++ b/src/main/resources/view/MainWindow.fxml @@ -51,8 +51,8 @@ + - diff --git a/src/main/resources/view/ViewWindow.css b/src/main/resources/view/ViewWindow.css new file mode 100644 index 00000000000..c71e4002ea8 --- /dev/null +++ b/src/main/resources/view/ViewWindow.css @@ -0,0 +1,21 @@ +#cardPane { + -fx-background-color: #FBFBD4; +} +.label { + -fx-font-family: "Arial"; + -fx-font-size: 18px; +} +.cell_big_label { + -fx-font-size: 24px; + -fx-font-weight: bold; + -fx-text-fill: #666; + -fx-padding: 10px; +} + + +.cell_small_label { + -fx-font-size: 18px; + -fx-text-fill: #999; + -fx-padding: 5px; +} + diff --git a/src/main/resources/view/ViewWindow.fxml b/src/main/resources/view/ViewWindow.fxml new file mode 100644 index 00000000000..a15fd59f4ea --- /dev/null +++ b/src/main/resources/view/ViewWindow.fxml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +