PROJECT: Typee
Welcome to my CS2103T project portfolio page for project Typee. The following pieces of software were used in the development of Typee:
Overview
Typee is a desktop engagement manager which helps secretaries and receptionists manage their daily work. Engagements comprise of appointments, interviews and meetings. Secretaries and receptionists are likely to manage these tasks as part of their profession. The primary means of interaction is through the Command Line Interface (CLI) because the application was built with fast typers in mind. The application also provides a Graphical User Interface (GUI) which was created using JavaFX and FXML. The rest of the software was built with Java.
Summary of Contributions
-
Major enhancement: Added the calendar window feature.
-
What it does: The calendar displays general date and engagement information. It is capable of displaying a list of engagements for each displayed date and lets users navigate back and forth between months.
-
Justification: This feature gives the user a visual representation of the engagements that they have for the month. It adds both breadth (engagement information across the entire month) and depth (individual engagement lists for each day) to the application.
-
Highlights: This enhancement was challenging to implement because it required heavy use of JavaFX and FXML, which I was not well-versed in. The calendar window also updates itself in real-time as engagements are added or deleted, which involved careful management of dependencies.
between different areas of the codebase. The implementation involved parsing dates, which can be notoriously tedious in programming. -
Credits: The UI code for the calendar window was adapted from https://github.com/SirGoose3432/javafx-calendar.
-
-
Minor enhancement: Added the help window for the help command. This gives the user a quick command summary and also links to the user guide which contains more detailed information.
-
Code contributed: [Link]
-
Project management:
-
Managed releases
v1.1
-v1.4
(4 releases) on GitHub
-
-
Enhancements to existing features:
-
Documentation:
-
Community:
-
PRs reviewed (with non-trivial review comments): #65
-
Reported bugs and suggestions for other teams in the class: Tagline, MoneyGoWhere
-
Some class mates used parts of the calendar feature which I implemented (TutorAid)
-
-
Tools:
-
Contributions to the User Guide
Given below are parts of my contributions to the User Guide. They showcase my ability to write documentation targeting end-users. |
Displaying the list of engagements for a specified date (calendar view only): calendar c/opendisplay
Opens a separate window displaying the list of engagements for the specified date. Only one such window is allowed per date. Nothing will happen if this command is used with a date which already has an open engagements list window.
Format: calendar c/opendisplay d/[date]
. The date must follow a DD/MM/YYYY format. The range of allowable years is 0001 to 9999.
If a date from another month is used to open an engagement list window, the calendar view will switch to display that specified month. This command can be used to quickly switch to another month which is not immediately before or after the currently displayed month.
All engagement list windows will be closed if something is done to change the displayed calendar month
(e.g. using the calendar c/nextmonth
command). This includes using this command as mentioned in the above paragraph.
Example: The calendar is currently displaying information for November 2019 and there are engagement list windows open for three dates
in the display. If calendar c/opendisplay d/11/12/2019
is entered into the input box, all three engagement list windows will be closed.
The calendar’s display then switches to December 2019 and the engagements list window for 11 December 2019 opens up.
This command does not work if the application is in another tab or the specified date is invalid.
The above calendar window opens up after entering calendar c/opendisplay d/29/10/2019
into the input box while in the
calendar view for November 2019. This does not change the display to October 2019 because 29/10/2019 is displayed in
the calendar view for November 2019, albeit at the top left corner.
Alternatively, you may click on any of the individual cells within the calendar window grid to open the engagement list for that date.
Closing a displayed list of engagements for a specified date (calendar view only): calendar c/closedisplay
Closes the open engagements list window for the specified date. This command does not work if the application if in another tab, the specified date is invalid, or there is no open engagements list window for the specified date.
Format: calendar c/closedisplay d/[date]
. The date must follow a DD/MM/YYYY format. The range of allowable years is 0001 to 9999.
Changing the calendar display to the next month (calendar view only): calendar c/nextmonth
Changes the calendar view to the month following the currently displayed one. This command does not work if the application is in another tab or if attempting to go above the maximum allowable year of 9999.
Format: calendar c/nextmonth
nextmonth
commandAlternatively, you may click on the blue button with the right arrow next to the calendar’s month title to change the display to the next month. The button will not work if the calendar is displaying December 9999.
This command closes any open engagement windows from the current month before updating the display to the next month.
Contributions to the Developer Guide
Given below are parts of my contributions to the Developer Guide. They showcase my ability to write technical documentation and the technical depth of my contributions to the project. |
Calendar Window
The CalendarWindow
provides a visual representation of stored engagements over a monthly period.
Users can choose to change the month being displayed and also open scrolling text windows which
show more detailed descriptions of the stored engagements for a particular day.
Implementation Structure
The CalendarWindow
is part of the MainWindow
. Specifically, it is one possible Tab
which can be
displayed. The CalendarWindow
class and any of its associated UI components can be found under the com.typee.ui.calendar
package.
The following sequence diagram shows the creation of a CalendarWindow
instance when the user switches to the
calendar window tab.
UI Design
The CalendarWindow
class was designed with the observer pattern in mind. The calendar’s display and any open engagements
list windows are automatically updated as engagements are added to or deleted from the application. CalendarDateCell
and
EngagementListViewCell
both have a reference to an ObervableList
of engagements in order to conform to the observer pattern.
The following table shows all UI components which are used and their respective purposes.
UI Component Type | Feature | Purpose | |
---|---|---|---|
|
GridPane |
Displays a grid which represents 35 calendar dates. |
Shows the user the days of the month which is currently being displayed. |
|
StackPane |
Displays the date of a single |
Provides the user with some general engagement information for a particular date. |
|
Button |
Switches the calendar’s display to the previous month. |
Allows the user to navigate to the previous month. |
|
Text |
Indicates the month and year currently being displayed by the calendar window. |
Informs the month and year currently being displayed by the calendar window. |
|
Button |
Switches the calendar’s display to the next month. |
Allows the user to navigate to the next month. |
|
ListView |
Displays a list of engagements for a particular date. |
Lets the user see more detailed information about all of his/her engagements for a particular date |
|
ListCell |
Displays information for a single engagement. |
Allows the user to see detailed information about a single engagement. This is used as the cell factory for ListView. |
Command Execution Workflows
The following command interacts with the CalendarWindow
. It is accompanied by an activity diagram which models its workflow:
-
CalendarOpenDisplayCommand
— Opens the engagements list window for the specified date.
Design Considerations
Aspect: Information being displayed in each calendar cell
-
Alternative 1 (current choice): Only display the number of engagements for each date.
-
Pros: Does not take up a lot of on-screen space. More detailed information about each day’s engagements can be viewed by opening the engagements list window for that particular date.
-
Cons: The information shown in the calendar window is very generalized.
-
-
Alternative 2: Display the descriptions (and maybe more detailed information) of each date’s engagements.
-
Pros: Shows more detailed information in the calendar window.
-
Cons: Might end up distorting the shape of the calendar window’s cells since some engagements have more information than others. The alternative would be to add fixed constraints to the size of each cell but then information would get cut off.
-
PROJECT: Duke Chatbot
A CLI-based which interacts with the user and acts as a task manager (Link).
PROJECT: Slim Jeans Recipe Calorie Counter
A website which is tailored towards counting calories for recipes which are provided by the user (Link).
PROJECT: Kattis Repository
A GitHub repository containing my own solutions to Kattis problems. Kattis is a popular competitive programming website which is used by many programmers to hone their skills (Link).