diff --git a/build.gradle b/build.gradle index f4c7ed147d9a..2cf16a253753 100644 --- a/build.gradle +++ b/build.gradle @@ -76,10 +76,10 @@ allprojects { } shadowJar { - archiveName = "addressbook.jar" + archiveName = "agendum.jar" manifest { - attributes "Main-Class": "seedu.address.MainApp" + attributes "Main-Class": "seedu.agendum.MainApp" } destinationDir = file("${buildDir}/jar/") @@ -115,8 +115,8 @@ tasks.coveralls { onlyIf { System.env.'CI' } } -class AddressBookTest extends Test { - public AddressBookTest() { +class AgendumTest extends Test { + public AgendumTest() { forkEvery = 1 systemProperty 'testfx.setup.timeout', '60000' } @@ -130,7 +130,7 @@ class AddressBookTest extends Test { } } -task guiTests(type: AddressBookTest) { +task guiTests(type: AgendumTest) { include 'guitests/**' jacoco { @@ -139,8 +139,8 @@ task guiTests(type: AddressBookTest) { } -task nonGuiTests(type: AddressBookTest) { - include 'seedu/address/**' +task nonGuiTests(type: AgendumTest) { + include 'seedu/agendum/**' jacoco { destinationFile = new File("${buildDir}/jacoco/test.exec") @@ -148,7 +148,7 @@ task nonGuiTests(type: AddressBookTest) { } // Test mode depends on whether headless task has been run -task allTests(type: AddressBookTest) { +task allTests(type: AgendumTest) { jacoco { destinationFile = new File("${buildDir}/jacoco/test.exec") } diff --git a/src/main/java/seedu/agendum/logic/Logic.java b/src/main/java/seedu/agendum/logic/Logic.java index 970cc35537c3..9823eabdcd10 100644 --- a/src/main/java/seedu/agendum/logic/Logic.java +++ b/src/main/java/seedu/agendum/logic/Logic.java @@ -17,5 +17,8 @@ public interface Logic { /** Returns the filtered list of tasks */ ObservableList getFilteredTaskList(); + + /** Returns list of completed tasks */ + ObservableList getCompletedTaskList(); } diff --git a/src/main/java/seedu/agendum/logic/LogicManager.java b/src/main/java/seedu/agendum/logic/LogicManager.java index 394810c19201..fd60e5787031 100644 --- a/src/main/java/seedu/agendum/logic/LogicManager.java +++ b/src/main/java/seedu/agendum/logic/LogicManager.java @@ -38,4 +38,12 @@ public CommandResult execute(String commandText) { public ObservableList getFilteredTaskList() { return model.getFilteredTaskList(); } + + /** + * Requires implementation here + */ + @Override + public ObservableList getCompletedTaskList() { + return null; + } } diff --git a/src/main/java/seedu/agendum/ui/CommandBox.java b/src/main/java/seedu/agendum/ui/CommandBox.java index 6aaba5ce2940..b07364f4eef9 100644 --- a/src/main/java/seedu/agendum/ui/CommandBox.java +++ b/src/main/java/seedu/agendum/ui/CommandBox.java @@ -21,7 +21,7 @@ public class CommandBox extends UiPart { private AnchorPane placeHolderPane; private AnchorPane commandPane; - private ResultDisplay resultDisplay; + private ResultPopUp resultPopUp; String previousCommandTest; private Logic logic; @@ -31,15 +31,15 @@ public class CommandBox extends UiPart { private CommandResult mostRecentResult; public static CommandBox load(Stage primaryStage, AnchorPane commandBoxPlaceholder, - ResultDisplay resultDisplay, Logic logic) { + ResultPopUp resultPopUp, Logic logic) { CommandBox commandBox = UiPartLoader.loadUiPart(primaryStage, commandBoxPlaceholder, new CommandBox()); - commandBox.configure(resultDisplay, logic); + commandBox.configure(resultPopUp, logic); commandBox.addToPlaceholder(); return commandBox; } - public void configure(ResultDisplay resultDisplay, Logic logic) { - this.resultDisplay = resultDisplay; + public void configure(ResultPopUp resultPopUp, Logic logic) { + this.resultPopUp = resultPopUp; this.logic = logic; registerAsAnEventHandler(this); } @@ -66,7 +66,6 @@ public void setPlaceholder(AnchorPane pane) { this.placeHolderPane = pane; } - @FXML private void handleCommandInputChanged() { //Take a copy of the command text @@ -77,11 +76,10 @@ private void handleCommandInputChanged() { */ setStyleToIndicateCorrectCommand(); mostRecentResult = logic.execute(previousCommandTest); - resultDisplay.postMessage(mostRecentResult.feedbackToUser); + resultPopUp.postMessage(mostRecentResult.feedbackToUser); logger.info("Result: " + mostRecentResult.feedbackToUser); } - /** * Sets the command box style to indicate a correct command. */ diff --git a/src/main/java/seedu/agendum/ui/CompletedTaskCard.java b/src/main/java/seedu/agendum/ui/CompletedTaskCard.java new file mode 100644 index 000000000000..c2e147d9b42d --- /dev/null +++ b/src/main/java/seedu/agendum/ui/CompletedTaskCard.java @@ -0,0 +1,56 @@ +package seedu.agendum.ui; + +import javafx.fxml.FXML; +import javafx.scene.Node; +import javafx.scene.control.Label; +import javafx.scene.layout.HBox; +import seedu.agendum.model.task.ReadOnlyTask; + +public class CompletedTaskCard extends UiPart { + + private static final String FXML = "CompletedTaskCard.fxml"; + + @FXML + private HBox cardPane; + @FXML + private Label name; + @FXML + private Label id; + @FXML + private Label tags; + + private ReadOnlyTask task; + private int displayedIndex; + + public CompletedTaskCard(){ + + } + + public static CompletedTaskCard load(ReadOnlyTask task, int displayedIndex){ + CompletedTaskCard card = new CompletedTaskCard(); + card.task = task; + card.displayedIndex = displayedIndex; + return UiPartLoader.loadUiPart(card); + } + + @FXML + public void initialize() { + name.setText(task.getName().fullName); + id.setText(displayedIndex + ". "); + tags.setText(task.tagsString()); + } + + public HBox getLayout() { + return cardPane; + } + + @Override + public void setNode(Node node) { + cardPane = (HBox)node; + } + + @Override + public String getFxmlPath() { + return FXML; + } +} diff --git a/src/main/java/seedu/agendum/ui/CompletedTasksPanel.java b/src/main/java/seedu/agendum/ui/CompletedTasksPanel.java new file mode 100644 index 000000000000..478f5ba68676 --- /dev/null +++ b/src/main/java/seedu/agendum/ui/CompletedTasksPanel.java @@ -0,0 +1,106 @@ +package seedu.agendum.ui; + +import java.util.logging.Logger; + +import javafx.application.Platform; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.scene.Node; +import javafx.scene.control.ListCell; +import javafx.scene.control.ListView; +import javafx.scene.control.SplitPane; +import javafx.scene.layout.AnchorPane; +import javafx.stage.Stage; +import seedu.agendum.commons.events.ui.TaskPanelSelectionChangedEvent; +import seedu.agendum.model.task.ReadOnlyTask; +import seedu.agendum.commons.core.LogsCenter; + +/** + * Panel contains the list of completed tasks + */ +public class CompletedTasksPanel extends UiPart { + private final Logger logger = LogsCenter.getLogger(CompletedTasksPanel.class); + private static final String FXML = "CompletedTasksPanel.fxml"; + private AnchorPane panel; + private AnchorPane placeHolderPane; + + @FXML + private ListView completedTasksListView; + + public CompletedTasksPanel() { + super(); + } + + @Override + public void setNode(Node node) { + panel = (AnchorPane) node; + } + + @Override + public String getFxmlPath() { + return FXML; + } + + @Override + public void setPlaceholder(AnchorPane pane) { + this.placeHolderPane = pane; + } + + public static CompletedTasksPanel load(Stage primaryStage, AnchorPane CompletedTasksPlaceholder, + ObservableList taskList) { + CompletedTasksPanel completedTasksPanel = UiPartLoader.loadUiPart(primaryStage, CompletedTasksPlaceholder, new CompletedTasksPanel()); + completedTasksPanel.configure(taskList); + return completedTasksPanel; + } + + private void configure(ObservableList completedTasks) { + setConnections(completedTasks); + addToPlaceholder(); + } + + private void setConnections(ObservableList completedTasks) { + completedTasksListView.setItems(completedTasks); + completedTasksListView.setCellFactory(listView -> new completedTasksListViewCell()); + setEventHandlerForSelectionChangeEvent(); + } + + private void addToPlaceholder() { + SplitPane.setResizableWithParent(placeHolderPane, false); + placeHolderPane.getChildren().add(panel); + } + + private void setEventHandlerForSelectionChangeEvent() { + completedTasksListView.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> { + if (newValue != null) { + logger.fine("Selection in task list panel changed to : '" + newValue + "'"); + raise(new TaskPanelSelectionChangedEvent(newValue)); + } + }); + } + + public void scrollTo(int index) { + Platform.runLater(() -> { + completedTasksListView.scrollTo(index); + completedTasksListView.getSelectionModel().clearAndSelect(index); + }); + } + + class completedTasksListViewCell extends ListCell { + + public completedTasksListViewCell() { + } + + @Override + protected void updateItem(ReadOnlyTask task, boolean empty) { + super.updateItem(task, empty); + + if (empty || task == null) { + setGraphic(null); + setText(null); + } else { + setGraphic(CompletedTaskCard.load(task, getIndex() + 1).getLayout()); + } + } + } + +} diff --git a/src/main/java/seedu/agendum/ui/MainWindow.java b/src/main/java/seedu/agendum/ui/MainWindow.java index c6b83a2a5c86..915f08e598ff 100644 --- a/src/main/java/seedu/agendum/ui/MainWindow.java +++ b/src/main/java/seedu/agendum/ui/MainWindow.java @@ -3,7 +3,10 @@ import javafx.fxml.FXML; import javafx.scene.Node; import javafx.scene.Scene; +import javafx.scene.control.Menu; import javafx.scene.control.MenuItem; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyCodeCombination; import javafx.scene.input.KeyCombination; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.VBox; @@ -21,7 +24,7 @@ */ public class MainWindow extends UiPart { - private static final String ICON = "/images/address_book_32.png"; + private static final String ICON = "/images/agendum_icon.png"; private static final String FXML = "MainWindow.fxml"; public static final int MIN_HEIGHT = 600; public static final int MIN_WIDTH = 450; @@ -30,8 +33,9 @@ public class MainWindow extends UiPart { // Independent Ui parts residing in this Ui container private BrowserPanel browserPanel; - private TaskListPanel taskListPanel; - private ResultDisplay resultDisplay; + private UpcomingTasksPanel upcomingTasksPanel; + private CompletedTasksPanel completedTasksPanel; + private ResultPopUp resultPopUp; private StatusBarFooter statusBarFooter; private CommandBox commandBox; private Config config; @@ -53,15 +57,14 @@ public class MainWindow extends UiPart { private MenuItem helpMenuItem; @FXML - private AnchorPane taskListPanelPlaceholder; - + private AnchorPane upcomingTasksPlaceHolder; + @FXML - private AnchorPane resultDisplayPlaceholder; - + private AnchorPane completedTasksPlaceHolder; + @FXML private AnchorPane statusbarPlaceholder; - public MainWindow() { super(); } @@ -104,15 +107,16 @@ private void configure(String appTitle, String toDoListName, Config config, User } private void setAccelerators() { - helpMenuItem.setAccelerator(KeyCombination.valueOf("F1")); + helpMenuItem.setAccelerator(new KeyCodeCombination(KeyCode.H, KeyCombination.ALT_DOWN)); } void fillInnerParts() { browserPanel = BrowserPanel.load(browserPlaceholder); - taskListPanel = TaskListPanel.load(primaryStage, getTaskListPlaceholder(), logic.getFilteredTaskList()); - resultDisplay = ResultDisplay.load(primaryStage, getResultDisplayPlaceholder()); + upcomingTasksPanel = UpcomingTasksPanel.load(primaryStage, getUpcomingTasksPlaceHolder(), logic.getFilteredTaskList()); + completedTasksPanel = CompletedTasksPanel.load(primaryStage, getCompletedTasksPlaceHolder(), logic.getCompletedTaskList()); + resultPopUp = ResultPopUp.load(primaryStage); statusBarFooter = StatusBarFooter.load(primaryStage, getStatusbarPlaceholder(), config.getToDoListFilePath()); - commandBox = CommandBox.load(primaryStage, getCommandBoxPlaceholder(), resultDisplay, logic); + commandBox = CommandBox.load(primaryStage, getCommandBoxPlaceholder(), resultPopUp, logic); } private AnchorPane getCommandBoxPlaceholder() { @@ -122,13 +126,13 @@ private AnchorPane getCommandBoxPlaceholder() { private AnchorPane getStatusbarPlaceholder() { return statusbarPlaceholder; } - - private AnchorPane getResultDisplayPlaceholder() { - return resultDisplayPlaceholder; + + public AnchorPane getUpcomingTasksPlaceHolder() { + return upcomingTasksPlaceHolder; } - - public AnchorPane getTaskListPlaceholder() { - return taskListPanelPlaceholder; + + public AnchorPane getCompletedTasksPlaceHolder() { + return completedTasksPlaceHolder; } public void hide() { @@ -182,8 +186,12 @@ private void handleExit() { raise(new ExitAppRequestEvent()); } - public TaskListPanel getTaskListPanel() { - return this.taskListPanel; + public UpcomingTasksPanel getUpcomingTasksPanel() { + return this.upcomingTasksPanel; + } + + public CompletedTasksPanel getCompletedTasksPanel() { + return this.completedTasksPanel; } public void loadTaskPage(ReadOnlyTask task) { diff --git a/src/main/java/seedu/agendum/ui/ResultPopUp.java b/src/main/java/seedu/agendum/ui/ResultPopUp.java new file mode 100644 index 000000000000..217e4115bdd2 --- /dev/null +++ b/src/main/java/seedu/agendum/ui/ResultPopUp.java @@ -0,0 +1,91 @@ +package seedu.agendum.ui; + +import javafx.animation.PauseTransition; +import javafx.beans.property.SimpleStringProperty; +import javafx.beans.property.StringProperty; +import javafx.fxml.FXML; +import javafx.scene.Node; +import javafx.scene.Scene; +import javafx.scene.control.TextArea; +import javafx.scene.layout.AnchorPane; +import javafx.scene.paint.Color; +import javafx.stage.Stage; +import javafx.stage.StageStyle; +import javafx.util.Duration; +import seedu.agendum.commons.core.LogsCenter; + +import java.util.logging.Logger; + +/** + * Pop up window to show command execution result + */ +public class ResultPopUp extends UiPart { + private static final Logger logger = LogsCenter.getLogger(ResultPopUp.class); + private static final String FXML = "ResultPopUp.fxml"; + public static final int HEIGHT = 150; + public static final int WIDTH = 200; + private final StringProperty displayed = new SimpleStringProperty(""); + + private AnchorPane mainPane; + + private Stage dialogStage; + private static Stage root; + + @FXML + private TextArea resultTextArea; + + public static ResultPopUp load(Stage primaryStage) { + logger.fine("Showing command execution result."); + root = primaryStage; + ResultPopUp resultPopUp = UiPartLoader.loadUiPart(primaryStage, new ResultPopUp()); + resultPopUp.configure(); + return resultPopUp; + } + + private void setWindowMinSize() { + dialogStage.setHeight(HEIGHT); + dialogStage.setWidth(WIDTH); + } + + @Override + public void setNode(Node node) { + mainPane = (AnchorPane) node; + } + + @Override + public String getFxmlPath() { + return FXML; + } + + private void configure(){ + + Scene scene = new Scene(mainPane); + dialogStage = createDialogStage(null, null, scene); + dialogStage.setMaximized(false); + setWindowMinSize(); + + scene.setFill(Color.TRANSPARENT); + dialogStage.initStyle(StageStyle.TRANSPARENT); + } + + public void postMessage(String message) { + displayed.setValue(message); + resultTextArea.setText(message); + show(); + + PauseTransition delay = new PauseTransition(Duration.seconds(2)); + delay.setOnFinished( event -> reFocusRoot()); + delay.play(); + } + + public void reFocusRoot() { + dialogStage.setOpacity(0); + root.requestFocus(); + } + + public void show() { + dialogStage.requestFocus(); + dialogStage.setOpacity(1.0); + dialogStage.show(); + } +} diff --git a/src/main/java/seedu/agendum/ui/TaskCard.java b/src/main/java/seedu/agendum/ui/TaskCard.java index 75257ee2f795..9b320a2c7c02 100644 --- a/src/main/java/seedu/agendum/ui/TaskCard.java +++ b/src/main/java/seedu/agendum/ui/TaskCard.java @@ -38,6 +38,11 @@ public void initialize() { name.setText(task.getName().fullName); id.setText(displayedIndex + ". "); tags.setText(task.tagsString()); + if (task.isCompleted()) { + cardPane.setStyle("-fx-background-color: aquamarine"); + } else { + cardPane.setStyle("-fx-background-color: salmon"); + } } public HBox getLayout() { diff --git a/src/main/java/seedu/agendum/ui/UiManager.java b/src/main/java/seedu/agendum/ui/UiManager.java index 76c9de3034e4..6f965d2af91d 100644 --- a/src/main/java/seedu/agendum/ui/UiManager.java +++ b/src/main/java/seedu/agendum/ui/UiManager.java @@ -25,7 +25,7 @@ */ public class UiManager extends ComponentManager implements Ui { private static final Logger logger = LogsCenter.getLogger(UiManager.class); - private static final String ICON_APPLICATION = "/images/address_book_32.png"; + private static final String ICON_APPLICATION = "/images/agendum_icon.png"; private Logic logic; private Config config; @@ -114,7 +114,8 @@ private void handleShowHelpEvent(ShowHelpRequestEvent event) { @Subscribe private void handleJumpToListRequestEvent(JumpToListRequestEvent event) { logger.info(LogsCenter.getEventHandlingLogMessage(event)); - mainWindow.getTaskListPanel().scrollTo(event.targetIndex); +// mainWindow.getTaskListPanel().scrollTo(event.targetIndex); + mainWindow.getUpcomingTasksPanel().scrollTo(event.targetIndex); } @Subscribe diff --git a/src/main/java/seedu/agendum/ui/UpcomingTaskCard.java b/src/main/java/seedu/agendum/ui/UpcomingTaskCard.java new file mode 100644 index 000000000000..e1ca803e80ce --- /dev/null +++ b/src/main/java/seedu/agendum/ui/UpcomingTaskCard.java @@ -0,0 +1,84 @@ +package seedu.agendum.ui; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Optional; + +import javafx.fxml.FXML; +import javafx.scene.Node; +import javafx.scene.control.Label; +import javafx.scene.layout.HBox; +import seedu.agendum.model.task.ReadOnlyTask; + +public class UpcomingTaskCard extends UiPart { + + private static final String FXML = "UpcomingTaskCard.fxml"; + + @FXML + private HBox cardPane; + @FXML + private Label name; + @FXML + private Label id; + @FXML + private Label tags; + @FXML + private Label time; + + private ReadOnlyTask task; + private int displayedIndex; + + public UpcomingTaskCard(){ + + } + + public static UpcomingTaskCard load(ReadOnlyTask task, int displayedIndex){ + UpcomingTaskCard card = new UpcomingTaskCard(); + card.task = task; + card.displayedIndex = displayedIndex; + return UiPartLoader.loadUiPart(card); + } + + @FXML + public void initialize() { + if(task.isCompleted()) { + name.setUnderline(true); + } + name.setText(task.getName().fullName); + id.setText(displayedIndex + ". "); + time.setText(formatTime()); + tags.setText(task.tagsString()); + } + + public String formatTime() { + StringBuilder sb = new StringBuilder(); + Optional start = task.getStartDateTime(); + Optional end = task.getEndDateTime(); + + DateTimeFormatter startFormat = DateTimeFormatter.ofPattern("EEE, dd MMM"); + + if(start.isPresent()) { + sb.append("from ").append(start.get().format(startFormat)); + } + if(end.isPresent()) { + sb.append(sb.length()>0 ? " to " : "by "); + sb.append(end.get().format(startFormat)); + } + + return sb.toString(); + } + + public HBox getLayout() { + return cardPane; + } + + @Override + public void setNode(Node node) { + cardPane = (HBox)node; + } + + @Override + public String getFxmlPath() { + return FXML; + } +} diff --git a/src/main/java/seedu/agendum/ui/UpcomingTasksPanel.java b/src/main/java/seedu/agendum/ui/UpcomingTasksPanel.java new file mode 100644 index 000000000000..b4004f4aa73d --- /dev/null +++ b/src/main/java/seedu/agendum/ui/UpcomingTasksPanel.java @@ -0,0 +1,106 @@ +package seedu.agendum.ui; + +import java.util.logging.Logger; + +import javafx.application.Platform; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.scene.Node; +import javafx.scene.control.ListCell; +import javafx.scene.control.ListView; +import javafx.scene.control.SplitPane; +import javafx.scene.layout.AnchorPane; +import javafx.stage.Stage; +import seedu.agendum.commons.events.ui.TaskPanelSelectionChangedEvent; +import seedu.agendum.model.task.ReadOnlyTask; +import seedu.agendum.commons.core.LogsCenter; + +/** + * Panel contains the list of upcoming tasks + */ +public class UpcomingTasksPanel extends UiPart { + private final Logger logger = LogsCenter.getLogger(UpcomingTasksPanel.class); + private static final String FXML = "UpcomingTasksPanel.fxml"; + private AnchorPane panel; + private AnchorPane placeHolderPane; + + @FXML + private ListView upcomingTasksListView; + + public UpcomingTasksPanel() { + super(); + } + + @Override + public void setNode(Node node) { + panel = (AnchorPane) node; + } + + @Override + public String getFxmlPath() { + return FXML; + } + + @Override + public void setPlaceholder(AnchorPane pane) { + this.placeHolderPane = pane; + } + + public static UpcomingTasksPanel load(Stage primaryStage, AnchorPane UpcomingTasksPlaceholder, + ObservableList taskList) { + UpcomingTasksPanel upcomingTasksPanel = UiPartLoader.loadUiPart(primaryStage, UpcomingTasksPlaceholder, new UpcomingTasksPanel()); + upcomingTasksPanel.configure(taskList); + return upcomingTasksPanel; + } + + private void configure(ObservableList upcomingTasks) { + setConnections(upcomingTasks); + addToPlaceholder(); + } + + private void setConnections(ObservableList upcomingTasks) { + upcomingTasksListView.setItems(upcomingTasks); + upcomingTasksListView.setCellFactory(listView -> new upcomingTasksListViewCell()); + setEventHandlerForSelectionChangeEvent(); + } + + private void addToPlaceholder() { + SplitPane.setResizableWithParent(placeHolderPane, false); + placeHolderPane.getChildren().add(panel); + } + + private void setEventHandlerForSelectionChangeEvent() { + upcomingTasksListView.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> { + if (newValue != null) { + logger.fine("Selection in task list panel changed to : '" + newValue + "'"); + raise(new TaskPanelSelectionChangedEvent(newValue)); + } + }); + } + + public void scrollTo(int index) { + Platform.runLater(() -> { + upcomingTasksListView.scrollTo(index); + upcomingTasksListView.getSelectionModel().clearAndSelect(index); + }); + } + + class upcomingTasksListViewCell extends ListCell { + + public upcomingTasksListViewCell() { + } + + @Override + protected void updateItem(ReadOnlyTask task, boolean empty) { + super.updateItem(task, empty); + + if (empty || task == null) { + setGraphic(null); + setText(null); + } else { + setGraphic(UpcomingTaskCard.load(task, getIndex() + 1).getLayout()); + } + } + } + +} diff --git a/src/main/resources/images/address_book_32.png b/src/main/resources/images/address_book_32.png deleted file mode 100644 index 29810cf1fd93..000000000000 Binary files a/src/main/resources/images/address_book_32.png and /dev/null differ diff --git a/src/main/resources/images/agendum_icon.png b/src/main/resources/images/agendum_icon.png new file mode 100644 index 000000000000..41941a11f5e1 Binary files /dev/null and b/src/main/resources/images/agendum_icon.png differ diff --git a/src/main/resources/view/CompletedTaskCard.fxml b/src/main/resources/view/CompletedTaskCard.fxml new file mode 100644 index 000000000000..92f7584f7e00 --- /dev/null +++ b/src/main/resources/view/CompletedTaskCard.fxml @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/main/resources/view/CompletedTasksPanel.fxml b/src/main/resources/view/CompletedTasksPanel.fxml new file mode 100644 index 000000000000..0f076ef72fa2 --- /dev/null +++ b/src/main/resources/view/CompletedTasksPanel.fxml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/view/DarkTheme.css b/src/main/resources/view/DarkTheme.css index 0d3593de87f1..b5e3d8cfa63a 100644 --- a/src/main/resources/view/DarkTheme.css +++ b/src/main/resources/view/DarkTheme.css @@ -2,27 +2,6 @@ -fx-background-color: derive(#1d1d1d, 20%); } -.label { - -fx-font-size: 11pt; - -fx-font-family: "Segoe UI Semibold"; - -fx-text-fill: #555555; - -fx-opacity: 0.9; -} - -.label-bright { - -fx-font-size: 11pt; - -fx-font-family: "Segoe UI Semibold"; - -fx-text-fill: white; - -fx-opacity: 1; -} - -.label-header { - -fx-font-size: 32pt; - -fx-font-family: "Segoe UI Light"; - -fx-text-fill: white; - -fx-opacity: 1; -} - .text-field { -fx-font-size: 12pt; -fx-font-family: "Segoe UI Semibold"; @@ -63,7 +42,7 @@ -fx-border-insets: 0 10 1 0; } -.table-view .column-header .label { +.table-view .column-header { -fx-font-size: 20pt; -fx-font-family: "Segoe UI Light"; -fx-text-fill: white; @@ -86,26 +65,6 @@ -fx-background-color: derive(#1d1d1d, 20%); } -.list-cell { - -fx-label-padding: 0 0 0 0; - -fx-graphic-text-gap : 0; - -fx-padding: 0 0 0 0; -} - -.list-cell .label { - -fx-text-fill: #010504; -} - -.cell_big_label { - -fx-font-size: 16px; - -fx-text-fill: #010504; -} - -.cell_small_label { - -fx-font-size: 11px; - -fx-text-fill: #010504; -} - .anchor-pane { -fx-background-color: derive(#1d1d1d, 20%); } @@ -125,7 +84,7 @@ -fx-background-color: #ffffff; } -.result-display .label { +.result-display { -fx-text-fill: black !important; } @@ -275,7 +234,7 @@ #cardPane { -fx-background-color: transparent; -fx-border-color: #d6d6d6; - -fx-border-width: 1 1 1 1; + -fx-border-width: 0 0 0 0; } #commandTypeLabel { diff --git a/src/main/resources/view/MainWindow.fxml b/src/main/resources/view/MainWindow.fxml index 79d4181c0333..5c1bcd81e7cf 100644 --- a/src/main/resources/view/MainWindow.fxml +++ b/src/main/resources/view/MainWindow.fxml @@ -1,10 +1,15 @@ - - - - + + + + + + + + + @@ -24,29 +29,32 @@ - + - + - - - - - - + - + - + - + + + + + + + + + - + - + diff --git a/src/main/resources/view/ResultPopUp.css b/src/main/resources/view/ResultPopUp.css new file mode 100644 index 000000000000..094f2ba4f062 --- /dev/null +++ b/src/main/resources/view/ResultPopUp.css @@ -0,0 +1,31 @@ +.pane { + -fx-background-color: transparent; + -fx-padding: 10px; +} + +.hbox { + -fx-background-color: rgb(229,74,63); + -fx-background-radius: 20; +} + +.text-area { + -fx-font-size: 18px; + -fx-background-color: transparent; + -fx-text-fill: white; +} + +.text-area .scroll-pane { + -fx-background-color: transparent; +} + +.text-area .scroll-pane .viewport{ + -fx-background-color: transparent; +} + +.text-area .scroll-pane .content{ + -fx-background-color: transparent; +} + +.text-area *.text { + -fx-text-alignment: center; +} \ No newline at end of file diff --git a/src/main/resources/view/ResultPopUp.fxml b/src/main/resources/view/ResultPopUp.fxml new file mode 100644 index 000000000000..e569df5759e0 --- /dev/null +++ b/src/main/resources/view/ResultPopUp.fxml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + diff --git a/src/main/resources/view/TaskListCard.fxml b/src/main/resources/view/TaskListCard.fxml deleted file mode 100644 index d126739601ae..000000000000 --- a/src/main/resources/view/TaskListCard.fxml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/main/resources/view/TasksPanel.css b/src/main/resources/view/TasksPanel.css new file mode 100644 index 000000000000..cd4947db54dc --- /dev/null +++ b/src/main/resources/view/TasksPanel.css @@ -0,0 +1,59 @@ +.upcoming-pane { + -fx-background-color: #F39C12; + -fx-background-radius: 10; +} + +.completed-pane { + -fx-background-color: #03C9A9; + -fx-background-radius: 10; +} + +.list-view { + -fx-background-color: transparent; + -fx-background-radius: 10; + -fx-background-insets: 0; +} + +.list-cell { + -fx-background-radius: 10; + -fx-background-color: rgba(255,255,255,0.6); +} + +.list-cell:filled { + -fx-background-insets: 3; +} + +.list-cell:empty { + -fx-background-color: transparent; +} + +.list-cell:filled:hover { + -fx-background-color: #00BCD4; + -fx-text-fill: white; +} + +.cell_big_label { + -fx-font-size: 16pt; + -fx-text-fill: #555555; + -fx-opacity: 0.9; +} + +.cell_small_label { + -fx-font-size: 11pt; + -fx-text-fill: #555555; + -fx-opacity: 0.9; +} + +.cell_time_label { + -fx-text-fill: #5284f2; + -fx-font-family: "Segoe UI Light"; + -fx-opacity: 0.9; +} + +.hbox { + -fx-background-radius: 10; +} + +.vbox { + -fx-background-color: transparent; +} \ No newline at end of file diff --git a/src/main/resources/view/UpcomingTaskCard.fxml b/src/main/resources/view/UpcomingTaskCard.fxml new file mode 100644 index 000000000000..a7f1b82c5d9e --- /dev/null +++ b/src/main/resources/view/UpcomingTaskCard.fxml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/view/UpcomingTasksPanel.css b/src/main/resources/view/UpcomingTasksPanel.css new file mode 100644 index 000000000000..138c27c1dc54 --- /dev/null +++ b/src/main/resources/view/UpcomingTasksPanel.css @@ -0,0 +1,44 @@ +.pane { + -fx-background-color: #F39C12; + -fx-background-radius: 10; +} + +.list-view { + -fx-background-color: transparent; + -fx-background-radius: 10; + -fx-background-insets: 0; +} + +.list-cell { + -fx-background-radius: 10; + -fx-background-color: rgba(255,255,255,0.6); +} + +.list-cell:filled { + -fx-background-insets: 3; +} + +.list-cell:empty { + -fx-background-color: transparent; +} + +.list-cell:filled:hover { + -fx-background-color: #00BCD4; + -fx-text-fill: white; +} + +.list-cell .label { + -fx-font-size: 16px; +} + +.cell_big_label { + -fx-font-size: 16px; +} + +.cell_small_label { + -fx-font-size: 11px; +} + +.hbox { + -fx-background-radius: 10; +} \ No newline at end of file diff --git a/src/main/resources/view/UpcomingTasksPanel.fxml b/src/main/resources/view/UpcomingTasksPanel.fxml new file mode 100644 index 000000000000..2524c8edd0d4 --- /dev/null +++ b/src/main/resources/view/UpcomingTasksPanel.fxml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/java/guitests/guihandles/MainMenuHandle.java b/src/test/java/guitests/guihandles/MainMenuHandle.java index eac004292dea..c8c43b30b072 100644 --- a/src/test/java/guitests/guihandles/MainMenuHandle.java +++ b/src/test/java/guitests/guihandles/MainMenuHandle.java @@ -2,6 +2,8 @@ import guitests.GuiRobot; import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyCodeCombination; +import javafx.scene.input.KeyCombination; import javafx.stage.Stage; import seedu.agendum.TestApp; @@ -21,17 +23,17 @@ public GuiHandle clickOn(String... menuText) { } public HelpWindowHandle openHelpWindowUsingMenu() { - clickOn("Help", "F1"); + clickOn("Help", "⌥H"); return new HelpWindowHandle(guiRobot, primaryStage); } public HelpWindowHandle openHelpWindowUsingAccelerator() { - useF1Accelerator(); + useAccelerator(); return new HelpWindowHandle(guiRobot, primaryStage); } - private void useF1Accelerator() { - guiRobot.push(KeyCode.F1); + private void useAccelerator() { + guiRobot.push(new KeyCodeCombination(KeyCode.H, KeyCombination.ALT_DOWN)); guiRobot.sleep(500); } } diff --git a/src/test/java/guitests/guihandles/ResultDisplayHandle.java b/src/test/java/guitests/guihandles/ResultDisplayHandle.java index 4da0bb3b097b..2e298cc7f3ac 100644 --- a/src/test/java/guitests/guihandles/ResultDisplayHandle.java +++ b/src/test/java/guitests/guihandles/ResultDisplayHandle.java @@ -10,7 +10,7 @@ */ public class ResultDisplayHandle extends GuiHandle { - public static final String RESULT_DISPLAY_ID = "#resultDisplay"; + public static final String RESULT_DISPLAY_ID = "#resultTextArea"; public ResultDisplayHandle(GuiRobot guiRobot, Stage primaryStage) { super(guiRobot, primaryStage, TestApp.APP_TITLE); diff --git a/src/test/java/guitests/guihandles/TaskListPanelHandle.java b/src/test/java/guitests/guihandles/TaskListPanelHandle.java index fd0c4de92457..246672ace23e 100644 --- a/src/test/java/guitests/guihandles/TaskListPanelHandle.java +++ b/src/test/java/guitests/guihandles/TaskListPanelHandle.java @@ -25,7 +25,7 @@ public class TaskListPanelHandle extends GuiHandle { public static final int NOT_FOUND = -1; public static final String CARD_PANE_ID = "#cardPane"; - private static final String TASK_LIST_VIEW_ID = "#taskListView"; + private static final String TASK_LIST_VIEW_ID = "#upcomingTasksListView"; public TaskListPanelHandle(GuiRobot guiRobot, Stage primaryStage) { super(guiRobot, primaryStage, TestApp.APP_TITLE); diff --git a/src/test/java/seedu/agendum/commons/util/AppUtilTest.java b/src/test/java/seedu/agendum/commons/util/AppUtilTest.java index 10acdabed286..a91617736f92 100644 --- a/src/test/java/seedu/agendum/commons/util/AppUtilTest.java +++ b/src/test/java/seedu/agendum/commons/util/AppUtilTest.java @@ -15,7 +15,7 @@ public class AppUtilTest { @Test public void getImage_exitingImage(){ - assertNotNull(AppUtil.getImage("/images/address_book_32.png")); + assertNotNull(AppUtil.getImage("/images/agendum_icon.png")); }