Overview
U-Schedule is a desktop scheduler application, that is targeted towards university students who want a way to manage their schedules. It allows users to manage 2 types of events: Calendar Events, which are events which one normally enters into a calendar, and ToDoListEvents, which are tasks that the user wants to keep track of. The primary interface is the command line, and the GUI is created with JavaFX. U-Scheduler is written in Java, and has about 10kLoC.
Summary of contributions
-
Major enhancement: Added the GUI to display calendar events in a calendar.
-
What it does: Allows the user to view calendar events graphically, as well as navigate around their timetable.
-
Justification: This feature is a critical addition to a scheduler product. Without a visual representation of a calendar, the user would be relying on date and time strings, which would be extremely non-user-friendly even when in standard format.
-
Highlights: I designed a class to contain the third-party library for rendering events as a calendar. The class acts as a wrapper around the calendar and contains the logic for controlling the calendar. I implemented the controls needed for navigating around the calendar GUI. I also implemented quality of life features such as automatically navigating to show events that the user selected, as well as opening a pop-up dialog when the user double clicks on events in the calendar.
-
Credits: Used jxtras.Agenda for rendering events visually.
-
-
Code contributed:
-
Other contributions:
-
Project management:
-
Helped with issue tracking.
-
-
Enhancements to existing features:
-
Prototyped fuzzy search for finding events. (#48)
-
Wrote an initial set of utility methods using the fuzzywuzzy library.
-
Modified the original find command to use fuzzy search.
-
-
Designed FsList (FilteredSortedList), a list that allows filtering by multiple predicates and sorting all in one. (#116)
-
Improved TestApp to support the improved Find command and the todo list. (#116, #130)
-
-
Documentation:
-
Updated class diagrams in the Developer Guide: (#117)
-
-
Community:
-
Tools:
-
Contributions to the User Guide
Given below are sections I contributed to the User Guide. They showcase my ability to write documentation targeting end-users. |
Using the Calendar Display
Manual navigation:
Navigating the calendar to viewing the events:
-
←: Display previous week
-
→: Display next week
-
↑: Scroll up to events earlier in the day
-
↓: Scroll down to events later in the day
Scrolling with the mouse wheel is also possible. |
The calendar display must be in focus in order to navigate with the arrow keys. |
Automatic Navigation:
When selecting an event, either by the select
command or clicking in the list of calendar events,
the calendar display will navigate to that event and attempt to centralize it in the calendar.
Viewing Event Details
The compact display of the calendar does not allow all the information of the event to be displayed. To view full details of an event, double click on it to open a dialog box containing the details of the event.
FAQ
Q: How do I transfer my data to another Computer?
A: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous U-Schedule folder.
Q: Why is the calendar display not responding to the arrow keys?
A: The calendar display must be in focus in order for it to receive the arrow key events. Try clicking on the calendar display. If a blue highlight is present around the edges, the calendar display is in focus and will now receive the key presses.
Q: The date time parser is parsing dates unexpectedly!
A: The Natural Language Parser we used tries its best to parse a datetime out of any input. Hence, there are some inputs which even humans would not consider a valid date, but the parser would still try to find a best fit. Most of the time, if a human can understand the input, the parser will parse the input correctly.
Contributions to the Developer Guide
Given below are sections I contributed to the Developer Guide. They showcase my ability to write technical documentation and the technical depth of my contributions to the project. |
Calendar Display
Implementation
Overview
The Calendar Display is implemented using jfxtras.Agenda
.
jfxtras
is a third-party library
containing more feature-rich UI controls.
Agenda Summary
Agenda
defines the Agenda.Appointment
interface, which must be
implemented for all events that it displays.
Agenda
also defines Agenda.AppointmentImplLocal
,
which is a bare-bones implementation
of the Agenda.Appointment
interface.
The full documentation for Agenda
can be found
here.
Integration with our Project
CalendarEvent
extends Agenda.AppointmentImplLocal
,
so as to streamline the process
of displaying CalendarEvent
s.
The CalendarDisplay
class acts as a wrapper around Agenda
.
CalendarDisplay
will:
-
Initialize the
Agenda
UI with the desired settings. -
Listen for changes in the list of calendar events in
Model
and updateAgenda
accordingly. -
Respond to the user selecting calendar events by displaying the selected event to the user.
-
Extend the in-built UI controls of
Agenda
by including functionality to navigate the calendar.
Design Considerations
Updating the Calendar
Unlike a ListView
, Agenda
does not provide a way to directly set
a list of Appointments
to be displayed.
Therefore, CalendarDisplay
takes the list of calendar events to be displayed
and adds them to Agenda
.
CalendarDisplay
then listens for changes in
changes in the Model
and forwards the same changes to Agenda
.
Trimming Excess Functionality
Agenda
provides some default functionality for responding to user
interactions with the UI, such as adding, editing and deleting Appointment
s.
This features could have been implemented by setting the
appropriate callbacks in Agenda
. Changes to the data in Agenda
could then be updated in Model
.
However, these features would not be very useful for a product that is
designed to be used with the command line.
Their implementation would also make the data flow bi-directional, and
increase coupling between Agenda
and Model
.
Therefore, these functions have been disabled so as to make Agenda
solely for displaying the user’s events as a calendar.
Calendar Display Navigation
Current Implementation
The navigation features available are:
-
View a
CalendarEvent
in the calendar display by selecting the event. The calendar display will jump to the correct time period and attempt to centralize the selected event. -
View the next/previous week or using the
left
andright
arrow keys. -
The user can scroll up and down the 24-hour timeline using the
up
anddown
arrow keys, or by using the mouse scroll wheel.
Implementation
-
Implemented by having
CalendarDisplay
listen forJumpToDateTimeEvent
.CalendarDisplay
would then setAgenda
to display the target date and time. -
Implemented using an
EventFilter
inCalendarDisplay
.CalendarDisplay
would then setAgenda
to display the target date and time. -
In-built into
Agenda
.
Design considerations
Keyboard Navigation
Initially, the keyboard navigation features
were implemented for ease of testing CalendarDisplay
,
with the intention to implement
Command Line Interface commands in the future.
This would agree with the project direction,
since this application is intended to be controlled
using the command line.
However, Agenda
's calendar display was implemented
using a customized ScrollPane, which could be scrolled using the
up and down arrow keys and the scroll wheel.
Hence, using the left and right arrow keys for
navigation felt very natural and user-friendly.
Furthermore, Agenda
did not expose any way for the user
to scroll the calendar display programmatically.
So if the user wanted to interact with the UI,
the user would still be forced to use either the up and down
arrow keys or the scroll wheel to navigate.
Therefore, while this feature is not a CLI feature, it was retained as a fast and easy way to navigate around the calendar display.
Further Extensions
Command Line Navigation
To make the command line instruction set more complete, it would be good if users are able to navigate the calendar display using the command line as well. Some possible extensions could be:
View Next and Previous Week
-
User executes
view next
. -
The command is parsed and the correct date to navigate to is calculated. A
ChangePeriodCommand
containing the target date is created. -
ChangePeriodCommand#execute
raises a JumpToDateTimeEvent. -
CalendarDisplay
responds by settingAgenda
to display the specified date and time.
Jump to a Specified Date
One common use case for a calendar is when the user wants to check what events he/she has at a particular time. An example scenario would be:
-
User executes
view 20th nov
. -
The command is parsed, creating a
ChangePeriodCommand
containing the target date. -
ChangePeriodCommand#execute
raises a JumpToDateTimeEvent. -
CalendarDisplay
responds by settingAgenda
to display the specified date and time.