diff --git a/src/main/java/seedu/address/commons/events/ui/TaskPanelSelectionChangedEvent.java b/src/main/java/seedu/address/commons/events/ui/TaskPanelSelectionChangedEvent.java new file mode 100644 index 000000000000..7a7576cf770f --- /dev/null +++ b/src/main/java/seedu/address/commons/events/ui/TaskPanelSelectionChangedEvent.java @@ -0,0 +1,28 @@ +//@@author jasmoon +package seedu.address.commons.events.ui; + +import seedu.address.commons.events.BaseEvent; +import seedu.address.ui.TaskCard; + +/** + * Represents a selection change in the Task List Panel + */ +public class TaskPanelSelectionChangedEvent extends BaseEvent { + + + private final TaskCard newSelection; + + public TaskPanelSelectionChangedEvent(TaskCard newSelection) { + this.newSelection = newSelection; + } + + @Override + public String toString() { + return this.getClass().getSimpleName(); + } + + public TaskCard getNewSelection() { + return newSelection; + } + +} diff --git a/src/main/java/seedu/address/ui/EventListPanel.java b/src/main/java/seedu/address/ui/EventListPanel.java index bc32c1233a52..e265785d0b99 100644 --- a/src/main/java/seedu/address/ui/EventListPanel.java +++ b/src/main/java/seedu/address/ui/EventListPanel.java @@ -47,7 +47,7 @@ private void setEventHandlerForSelectionChangeEvent() { eventListView.getSelectionModel().selectedItemProperty() .addListener((observable, oldValue, newValue) -> { if (newValue != null) { - logger.fine("Selection in activity list panel changed to : '" + newValue + "'"); + logger.fine("Selection in event list panel changed to : '" + newValue + "'"); raise(new EventPanelSelectionChangedEvent(newValue)); } }); diff --git a/src/main/java/seedu/address/ui/MainWindow.java b/src/main/java/seedu/address/ui/MainWindow.java index 1871cf3ebda3..cf9f050fa5fa 100644 --- a/src/main/java/seedu/address/ui/MainWindow.java +++ b/src/main/java/seedu/address/ui/MainWindow.java @@ -34,7 +34,7 @@ public class MainWindow extends UiPart { private Logic logic; // Independent Ui parts residing in this Ui container - private ActivityListPanel activityListPanel; + private TaskListPanel taskListPanel; private Config config; private EventListPanel eventListPanel; private UserPrefs prefs; @@ -49,7 +49,7 @@ public class MainWindow extends UiPart { private MenuItem helpMenuItem; @FXML - private StackPane activityListPanelPlaceholder; + private StackPane taskListPanelPlaceholder; @FXML private StackPane eventListPanelPlaceholder; @@ -119,10 +119,10 @@ private void setAccelerator(MenuItem menuItem, KeyCombination keyCombination) { * Fills up all the placeholders of this window. */ void fillInnerParts() { - activityListPanel = new ActivityListPanel(logic.getFilteredActivitiesList()); - activityListPanelPlaceholder.getChildren().add(activityListPanel.getRoot()); - //@@author jasmoon + taskListPanel = new TaskListPanel(logic.getFilteredTaskList()); + taskListPanelPlaceholder.getChildren().add(taskListPanel.getRoot()); + eventListPanel = new EventListPanel(logic.getFilteredEventList()); eventListPanelPlaceholder.getChildren().add(eventListPanel.getRoot()); @@ -185,10 +185,6 @@ private void handleExit() { raise(new ExitAppRequestEvent()); } - public ActivityListPanel getActivityListPanel() { - return this.activityListPanel; - } - @Subscribe private void handleShowHelpEvent(ShowHelpRequestEvent event) { logger.info(LogsCenter.getEventHandlingLogMessage(event)); diff --git a/src/main/java/seedu/address/ui/TaskCard.java b/src/main/java/seedu/address/ui/TaskCard.java new file mode 100644 index 000000000000..50985db692d1 --- /dev/null +++ b/src/main/java/seedu/address/ui/TaskCard.java @@ -0,0 +1,60 @@ +//@@author jasmoon +package seedu.address.ui; + +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.model.activity.Task; + +/** + * An UI component that displays information of a {@code Task}. + */ +public class TaskCard extends UiPart { + + private static final String FXML = "TaskListCard.fxml"; + + public final Task task; + + @FXML + private HBox cardPane; + @FXML + private Label name; + @FXML + private Label id; + @FXML + private Label dateTime; + @FXML + private Label remark; + @FXML + private FlowPane tags; + + public TaskCard(Task task, int displayedIndex) { + super(FXML); + this.task = task; + id.setText(displayedIndex + ". "); + name.setText(task.getName().fullName); + dateTime.setText(task.getDateTime().toString()); + remark.setText(task.getRemark().value); + task.getTags().forEach(tag -> tags.getChildren().add(new Label(tag.tagName))); + } + + @Override + public boolean equals(Object other) { + // short circuit if same object + if (other == this) { + return true; + } + + // instanceof handles nulls + if (!(other instanceof TaskCard)) { + return false; + } + + // state check + TaskCard card = (TaskCard) other; + return id.getText().equals(card.id.getText()) + && task.equals(card.task); + } +} diff --git a/src/main/java/seedu/address/ui/TaskListPanel.java b/src/main/java/seedu/address/ui/TaskListPanel.java new file mode 100644 index 000000000000..730001c6c515 --- /dev/null +++ b/src/main/java/seedu/address/ui/TaskListPanel.java @@ -0,0 +1,89 @@ +//@@author jasmoon +package seedu.address.ui; + +import java.util.logging.Logger; + +import org.fxmisc.easybind.EasyBind; + +import com.google.common.eventbus.Subscribe; + +import javafx.application.Platform; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.scene.control.ListCell; +import javafx.scene.control.ListView; +import javafx.scene.layout.Region; +import seedu.address.commons.core.LogsCenter; +import seedu.address.commons.events.ui.JumpToListRequestEvent; +import seedu.address.commons.events.ui.TaskPanelSelectionChangedEvent; +import seedu.address.model.activity.Task; + +/** + * Panel containing the list of activities. + */ +public class TaskListPanel extends UiPart { + private static final String FXML = "TaskListPanel.fxml"; + private final Logger logger = LogsCenter.getLogger(TaskListPanel.class); + + @FXML + private ListView taskListView; + + public TaskListPanel(ObservableList taskList) { + super(FXML); + setConnections(taskList); + registerAsAnEventHandler(this); + } + + private void setConnections(ObservableList taskList) { + ObservableList mappedList = EasyBind.map( + taskList, (activity) -> new TaskCard(activity, taskList.indexOf(activity) + 1)); + taskListView.setItems(mappedList); + taskListView.setCellFactory(listView -> new TaskListViewCell()); + setEventHandlerForSelectionChangeEvent(); + } + + private void setEventHandlerForSelectionChangeEvent() { + taskListView.getSelectionModel().selectedItemProperty() + .addListener((observable, oldValue, newValue) -> { + if (newValue != null) { + logger.fine("Selection in task list panel changed to : '" + newValue + "'"); + raise(new TaskPanelSelectionChangedEvent(newValue)); + } + }); + } + + /** + * Scrolls to the {@code TaskCard} at the {@code index} and selects it. + */ + private void scrollTo(int index) { + Platform.runLater(() -> { + taskListView.scrollTo(index); + taskListView.getSelectionModel().clearAndSelect(index); + }); + } + + @Subscribe + private void handleJumpToListRequestEvent(JumpToListRequestEvent event) { + logger.info(LogsCenter.getEventHandlingLogMessage(event)); + scrollTo(event.targetIndex); + } + + /** + * Custom {@code ListCell} that displays the graphics of a {@code TaskCard}. + */ + class TaskListViewCell extends ListCell { + + @Override + protected void updateItem(TaskCard activity, boolean empty) { + super.updateItem(activity, empty); + + if (empty || activity == null) { + setGraphic(null); + setText(null); + } else { + setGraphic(activity.getRoot()); + } + } + } + +} diff --git a/src/main/resources/view/MainWindow.fxml b/src/main/resources/view/MainWindow.fxml index f774b10b5cca..ebb8cb1db9b6 100644 --- a/src/main/resources/view/MainWindow.fxml +++ b/src/main/resources/view/MainWindow.fxml @@ -44,7 +44,7 @@ - diff --git a/src/main/resources/view/TaskListCard.fxml b/src/main/resources/view/TaskListCard.fxml new file mode 100644 index 000000000000..30b341a57309 --- /dev/null +++ b/src/main/resources/view/TaskListCard.fxml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/view/TaskListPanel.fxml b/src/main/resources/view/TaskListPanel.fxml new file mode 100644 index 000000000000..62c4277f92ee --- /dev/null +++ b/src/main/resources/view/TaskListPanel.fxml @@ -0,0 +1,9 @@ + + + + + + + + +