PROJECT: MODdy


Overview

MODdy is a desktop application used by NUS Computing students to track their course progression, manage modules and manage deadlines. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.

Summary of contributions

  • Major enhancement: developed the whole User Interface and User Experience (UI/UX) for MODdy

    1. Developed the deadline management UI

      • What it does: allows the user’s input tasks to be permanently display in the main window. The tasks are sorted by date then time and each deadline card has an accompanying colour strip to indicate their respective module. Different module will have different coloured strip.

      • Justification: This feature improves the product significantly as it creates a neat deadline management interface that allows the user to stay organised.

      • Highlights: This enhancement affects existing commands dealing with deadlines. It requires an in-depth understanding of the interaction between FilteredList and the UI. The implementation too was challenging as it required accurate sorting of the deadlines, taking into consideration that some tasks do not have a deadline. Furthermore, additional tagging to the module was required to achieve the differentiated coloured strip.

      • Credits: The ideas in the backend code of Address Book UI were adapted as the foundation blocks of the panel.

    2. Developed the profile overview UI

      • What it does: allows the user to view a neat and concise overview of their academic data in MODdy. It shows their profile information, current CAP and also all the modules taken organised by Year and Semester.

      • Justification: This feature improves the product significantly as the user can now conveniently keep track of their academic progression.

      • Highlights: This enhancement involves working with many different JavaFX layout. It requires an in-depth understanding of each layout and the interaction between them and the commands that changes the object the layout store. The implementation too was challenging as it required careful design and implementation consideration of each layout to ensure high functionality and usability.

  • Minor enhancement:

    1. Developed the semester information course information, focus area information and module information UI.

    2. Integrated UI with MODdy commands.

    3. Implemented the home and home command.

    4. Redesigned pop-up help window.

  • Code contributed: [Functional code and test code]

  • Other contributions:

    • Project management:

      • Managed releases v1.1 - v1.4 (4 releases) on GitHub

    • Enhancements to existing features:

      • Redesigned the UI (Pull requests #74, #97, #125, #136)

      • Wrote additional tests for existing features to increase coverage from 57% to 60% (Pull requests #322, #38)

    • Documentation:

      • Updated the README.adoc such that it correspond to our project: #16

      • Contributed to home and help command documentation in our User Guide: #146, #169, #283

      • Contributed to the UI component documentation in our Developer Guide: #146, #169, #283

      • Did cosmetic tweaks and added detailed images to existing contents of the User Guide: #331

    • Community:

      • PRs reviewed (with non-trivial review comments): #274

      • Reported bugs and suggestions for other teams in the class (examples: 1, 2, 3, 4)

    • Tools:

      • Integrated three new Github plugin (AppVeyor, Coveralls and Netlify) to the team repo and added the respective badges to link to the repo (Pull requests #16, #18)

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.

Viewing help : help

If you are unsure about the commands and want to seek help, this command opens up a pop-up help window where there are examples for basic command formats. For more detailed help, you can visit the link provided in the window, as shown in Figure 3 below. The link directs you to this User Guide where you can get more information on how to use each feature in MODdy.

Format: help

Help
Figure 1. Help window of MODdy

Returning to Homepage : home

If you want to return to MODdy's Homepage, use this command, as shown in the Figure 21 below.

Format: home

Home
Figure 2. Homepage of MODdy shown in Main Panel

Calculating Cumulative Average Point (CAP)

Tired of calculating your CAP on your own? Fret not! MODdy has an in-built CAP calculator feature which automatically updates your CAP when you input your module grades.

Example: If you are currently in Year 2 Semester 2, and all the modules taken in previous semesters are added with their grades, your current CAP will be calculated for you. This example is highlighted in Figure 20 below.

CAPCalculator
Figure 3. Current CAP is being calculated and reflected in the CAP Panel
If you want to simulate your future CAP, you can add grades into modules in your future semesters.

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.

UI component

UiClassDiagram
Figure 4. Structure of the UI Component

API : Ui.java

The UI consists of a MainWindow that is made up of parts namely CommandBox, ResultDisplay, ProfileListPanel, DeadlineListPanel, CoursePanel, FocusAreaPanel, IndividualModulePanel, OverviewPanel, ModuleListPanel, WelcomeView, HelpWindow and StatusBarFooter. All these, including the MainWindow, inherit from the abstract UiPart class.

The following panels are made up of one or more parts. For example,

  • ProfileListPanel consists of ProfileCard,

  • DeadlinePanel consists of DeadlineCard,

  • OverviewPanel consists of ProfileCard and OverviewModuleCard,

  • ModuleListPanel consists of ModuleCard,

  • FocusAreaPanel consists of ModuleCard,

  • CoursePanel consists of CourseFocusAreaCard and CourseRequirementCard.

The UI component uses JavaFx UI framework. The layout of these UI parts are defined in matching .fxml files that are in the src/main/resources/view folder. For example, the layout of the MainWindow is specified in MainWindow.fxml

The UI component,

  • Executes user commands using the Logic component.

  • Listens for changes to Model data so that the UI can be updated with the modified data.

Help Feature

The help feature allows the user to view the pop-up HelpWindow with the command help. This feature allows the user to have a quick view of sample inputs if they run into trouble while using the application.

Current Implementations

HelpCommand extends from the Command class and uses the inheritance to facilitate the implementation.

Design Considerations

  • Alternative 1 (current choice): HelpWindow exists as a pop-up window

    • Pros: Easier for user to refer to while typing different commands in the CommandBox in MainWindow.

    • Cons: As it exists as a separate window, it might cause hindrance for user when use MODdy.

  • Alternative 2: HelpWindow appears in MainWindow

    • Pros: Integral with the whole MainWindow.

    • Cons: The HelpWindow might be replaced by user input command, and user would have to enter help command again to view the HelpWindow.

Eventually, we decided on alternative 1 due to the benefits of allowing user to cross-reference the commands while using the application.

Home Feature

The home feature allows the user to return to the homepage.

Current Implementations

HomeCommand extends from the Command class and uses the inheritance to facilitate the implementation.