From dcdf9359e602d3357ed2cf9dc2cbb93d5fa802ac Mon Sep 17 00:00:00 2001 From: rongrongrr Date: Mon, 11 Nov 2019 23:39:35 +0800 Subject: [PATCH 1/4] Edit PPP --- docs/team/rongrongrr.adoc | 236 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 236 insertions(+) create mode 100644 docs/team/rongrongrr.adoc diff --git a/docs/team/rongrongrr.adoc b/docs/team/rongrongrr.adoc new file mode 100644 index 00000000000..f866fcd2143 --- /dev/null +++ b/docs/team/rongrongrr.adoc @@ -0,0 +1,236 @@ += rongrongrr(Chan Jing Rong) - Project Portfolio +:site-section: AboutUs +:imagesDir: ../images +:stylesDir: ../stylesheets + +== PROJECT: guiltTrip() + +--- +==== Overview + +Craving for a nice bowl of Mala but can’t seem to save up enough for it? guiltTrip() is the perfect platform for those +*aspiring to be able to afford their Mala*, finally! + +==== Summary of contributions +History: + +* *Major enhancement*: added *Undo and Redo features* +** What it does: allows the user to undo and redo commands. +** Justification: This feature improves the product significantly because it allows the user to be able to modify and easily amend any command line input mistakes. +** Highlights: This feature complements other existing commands and can be used to modify the state of the finance tracker after other commands were executed. + +* *Minor enhancement*: added *History feature* +** What it does: Allows the user to view the list of commands previously entered by the user. +** Justification: This feature improves the product as the user now can review his/her previous commands before using the undo or redo command. +** Highlights: This feature acts as a supporting feature to undo and redo through providing user with visual aid on previously entered commands. + +* *Code contributed*: https://nus-cs2103-ay1920s1.github.io/tp-dashboard/#search=rongrongrr&sort=groupTitle&sortWithin=title&since=2019-09-06&timeframe=commit&mergegroup=false&groupSelect=groupByRepos&breakdown=false[Functional code] + +* *Other contributions*: + +** Project management: +*** Assigned tasks and issues to team members. +*** Managed issues related to *History* and *Budget* +** Documentation: +*** Added the initial UI Mockup (Pull request https://github.com/AY1920S1-CS2103-T16-4/main/pull/38[#38]) +*** Updated the Developer Guide to match the format of User Guide (Pull request https://github.com/AY1920S1-CS2103-T16-4/main/pull/104[#104]) +*** Updated the User Guide (Pull requests https://github.com/AY1920S1-CS2103-T16-4/main/pull/47[#47], https://github.com/AY1920S1-CS2103-T16-4/main/pull/303[#303]) +** Community: +*** Reported bugs and suggestions for other teams (https://github.com/rongrongrr/ped/issues[PE dry run]) +*** Set up the basic structure for the project. (Creation of budget classes, pull request https://github.com/AY1920S1-CS2103-T16-4/main/pull/67[#75]) + +=== Contributions to the User Guide + +=== Undo/ Redo +==== Undo previous command : `undo` +Restores the finance tracker to the state before the previous undoable command was executed or +before the specified number of undoable commands were executed. + +Format: `undo` `undo ` + +* ``: The number of commands to undo. Additionally the step must be greater than zero and positive. +* `undo ` is only executed if the number of undoable commands is more than or equal to ``. +* [NOTE] `undo 1` has the same function as `undo`. + +Example Usage: +[start = 1] +. If you would like to delete a budget, whereby the budget is located at index 1 as shown below, +key in the command `deleteBudget 1`. ++ +image::undo-1.png[] + +. You should see the budget being deleted in the list of budgets as displayed below. ++ +image::undo-2.png[] + +. If you would like to undo your deletion, key in the command `undo`. ++ +image::undo-3.png[] + +. You should see the previously deleted budget back in the list of budgets as displayed below. ++ +image::undo-4.png[] + +Other examples: + +* `delete 1` + +`delete 2` + +`undo 2` (reverses the `delete 2` and `delete 1` commands) + +==== Redo previously undone command : `redo` +Reverses the most recent undone command or the specified number of most recent undone commands. + +Format: `redo` `redo ` + +* ``: The number of undone commands to redo. Additionally the step must be greater than zero and positive. +* `redo ` is only executed if the number of redoable commands is more than or equal to ``. +* [NOTE] `redo 1` has the same function as `redo`. + +Example Usage: +[start = 1] +. If you would like to delete a budget, whereby the budget is located at index 1 as shown below, +key in the command `deleteBudget 1`. ++ +image::undo-1.png[] + +. You should see the budget being deleted in the list of budgets as displayed below. ++ +image::undo-2.png[] + +. If you would like to undo your deletion, key in the command `undo`. ++ +image::undo-3.png[] + +. You should see the previously deleted budget back in the list of budgets as displayed below. ++ +image::undo-4.png[] + +. If you would like to redo your undone command, key in the command `redo'. ++ +image::redo-1.png[] + +. You should see that the deleted budget that you previously have undone is now deleted again. ++ +image::redo-2.png[] + +Other examples: + +* `delete 1` + +`delete 2` + +`undo` (reverses the `delete 2` command) + +`undo` (reverses the `delete 1` command) + +`redo` (reverses the latest `undo` command) + +`redo` (reverse the latest `undo` command) + +* `delete 1` + +`delete 2` + +`undo` (reverses the `delete 2` command) + +`undo` (reverses the `delete 1` command) + +`redo 2` (reverses the 2 latest `undo` commands) + +=== History +==== View the history of commands entered : `history` +Displays the list of commands entered, from most recent to earliest. + +Format: `history` + +* [NOTE] `history` can only be executed if there were commands already entered before trying to use `history`. + +Example Usage: +[start = 1] +. If you would like to display the list of commands entered, key in the command `history`. ++ +image::history-1.png[] + +. You should see that the income and expense lists in the main panel are now replaced with the history panel. ++ +image::history-2.png[] + +. If you would like to return the panel display to its original state, key in the command `list`. ++ +image::history-3.png[] + +. You should see that the income and expense panels are now back to their original positions. ++ +image::history-4.png[] + +== Contributions to the Developer Guide +=== Undo/ Redo + +==== Implementation +The undo/redo mechanism is facilitated by `VersionedGuiltTrip`. +It extends `GuiltTrip` with an undo/redo history, stored internally as an `guiltTripStateList` and `currentStatePointer`. +Additionally, it implements the following operations: + +* `VersionedGuiltTrip#commit()` -- Saves the current finance tracker state in its history. +* `VersionedGuiltTrip#undo()` -- Restores the previous finance trackerk state from its history. +* `VersionedGuiltTrip#redo()` -- Restores a previously undone finance tracker state from its history. + +These operations are exposed in the `Model` interface as `Model#commitGuiltTrip()`, `Model#undoGuiltTrip()` and `Model#redoGuiltTrip()` respectively. + +Given below is an example usage scenario and how the undo/redo mechanism behaves at each step. + +Step 1. The user launches the application for the first time. The `VersionedGuiltTrip` will be initialized with the initial finance tracker state, and the `currentStatePointer` pointing to that single finance tracker state. + +image::UndoRedoState0.png[] + +Step 2. The user executes `delete 5` command to delete the 5th entry in the finance tracker. The `delete` command calls `Model#commitGuiltTrip()`, causing the modified state of the finance tracker after the `delete 5` command executes to be saved in the `guiltTripStateList`, and the `currentStatePointer` is shifted to the newly inserted finance tracker state. + +image::UndoRedoState1.png[] + +Step 3. The user executes `add typ/Expense...` to add a new expense. The `add` command also calls `Model#commitGuiltTrip()`, causing another modified finance tracker state to be saved into the `guiltTripStateList`. + +image::UndoRedoState2.png[] + +[NOTE] +If a command fails its execution, it will not call `Model#commitGuiltTrip()`, so the finance tracker state will not be saved into the `guiltTripStateList`. + +Step 4. The user now decides that adding the expense was a mistake, and decides to undo that action by executing the `undo` command. The `undo` command will call `Model#undoGuiltTrip()`, which will shift the `currentStatePointer` once to the left, pointing it to the previous finance tracker state, and restores the finance tracker to that state. + +image::UndoRedoState3.png[] + +[NOTE] +If the `currentStatePointer` is at index 0, pointing to the initial finance tracker state, then there are no previous finance tracker states to restore. The `undo` command uses `Model#canUndoGuiltTrip()` to check if this is the case. If so, it will return an error to the user rather than attempting to perform the undo. + +The following sequence diagram shows how the undo operation works: + +image::UndoSequenceDiagram.png[] + +NOTE: The lifeline for `UndoCommand` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram. + +The `redo` command does the opposite -- it calls `Model#redoGuiltTrip()`, which shifts the `currentStatePointer` once to the right, pointing to the previously undone state, and restores the finance tracker to that state. + +[NOTE] +If the `currentStatePointer` is at index `guiltTripStateList.size() - 1`, pointing to the latest finance tracker state, then there are no undone finance tracker states to restore. The `redo` command uses `Model#canRedoGuiltTrip()` to check if this is the case. If so, it will return an error to the user rather than attempting to perform the redo. + +Step 5. The user then decides to execute the command `list`. Commands that do not modify the finance tracker, such as `list`, will usually not call `Model#commitGuiltTrip()`, `Model#undoGuiltTrip()` or `Model#redoGuiltTrip()`. Thus, the `guiltTripStateList` remains unchanged. + +image::UndoRedoState4.png[] + +Step 6. The user executes `clear`, which calls `Model#commitGuiltTrip()`. Since the `currentStatePointer` is not pointing at the end of the `guiltTripStateList`, all finance tracker states after the `currentStatePointer` will be purged. We designed it this way because it no longer makes sense to redo the `add typ/Expense ...` command. This is the behavior that most modern desktop applications follow. + +image::UndoRedoState5.png[] + +The following activity diagram summarizes what happens when a user executes a new command: + +image::CommitActivityDiagram.png[] + +==== Design Considerations + +===== Aspect: How undo & redo executes + +* **Alternative 1 (current choice):** Saves the entire GuiltTrip. +** Pros: Easy to implement. +** Cons: May have performance issues in terms of memory usage. +* **Alternative 2:** Individual command knows how to undo/redo by itself. +** Pros: Will use less memory (e.g. for `delete`, just save the person being deleted). +** Cons: We must ensure that the implementation of each individual command are correct. + +===== Aspect: Data structure to support the undo/redo commands + +* **Alternative 1 (current choice):** Use a list to store the history of finance tracker states. +** Pros: Easy to understand and implement. +** Cons: Logic is duplicated twice. For example, when a new command is executed, we must remember to update both `HistoryManager` and `VersionedGuiltTrip`. +* **Alternative 2:** Use `HistoryManager` for undo/redo +** Pros: We do not need to maintain a separate list, and just reuse what is already in the codebase. +** Cons: Requires dealing with commands that have already been undone: We must remember to skip these commands. Violates Single Responsibility Principle and Separation of Concerns as `HistoryManager` now needs to do two different things. From a9a7b2dfc7d534aafa3bd0b50c2d18a11ae359c7 Mon Sep 17 00:00:00 2001 From: rongrongrr Date: Tue, 12 Nov 2019 00:46:52 +0800 Subject: [PATCH 2/4] Edit User Guide --- docs/UserGuide.adoc | 3 +++ docs/images/CommitActivityDiagram.png | Bin 15536 -> 61714 bytes 2 files changed, 3 insertions(+) diff --git a/docs/UserGuide.adoc b/docs/UserGuide.adoc index e1d1bc9bf77..6e207c57815 100644 --- a/docs/UserGuide.adoc +++ b/docs/UserGuide.adoc @@ -859,6 +859,9 @@ Format: `deleteReminder` Restores the finance tracker to the state before the previous undoable command was executed or before the specified number of undoable commands were executed. +[NOTE] +`undo` is not executable for Statistics and UI commands. + Format: `undo` `undo ` * ``: The number of commands to undo. Additionally the step must be greater than zero and positive. diff --git a/docs/images/CommitActivityDiagram.png b/docs/images/CommitActivityDiagram.png index 4de4fa4bf2b2cb7f93b779e6a1b27ea47afb6429..de4a9894dfe47e7f2fc3ab31cb219083a9e14301 100644 GIT binary patch literal 61714 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 j~CUNLQD^VhMYsu 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 Date: Tue, 12 Nov 2019 01:00:47 +0800 Subject: [PATCH 3/4] Edit User Guide --- docs/UserGuide.adoc | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/docs/UserGuide.adoc b/docs/UserGuide.adoc index 9bb6b9da5e6..9cffc9f4456 100644 --- a/docs/UserGuide.adoc +++ b/docs/UserGuide.adoc @@ -436,17 +436,17 @@ Format: `addBudget cat/ n/ amt/ d/ where d/m/y stands for days / months / years respectively e.g. for a period input of 10 days, use 10d -: The category that this budget belongs to. +* ``: The category that this budget belongs to. -: The name of this budget. +* ``: The name of this budget. -: The amount set for this budget. It can contain at most 2 decimal points. +* ``: The amount set for this budget. It can contain at most 2 decimal points. -: The starting date of this budget. +* ``: The starting date of this budget. -: The time period for which the budget is valid for. It can be in the form of either days, months, or years. Refer to example given in format. +* ``: The time period for which the budget is valid for. It can be in the form of either days, months, or years. Refer to example given in format. -: Optional tags for this expense. The tag must not have spaces and most only be alphanumeric. +* ``: Optional tags for this expense. The tag must not have spaces and most only be alphanumeric. Example Usage: [start = 1] @@ -858,6 +858,7 @@ Deletes the selected Reminder. Format: `deleteReminder` // end::reminders[] + === Undo/Redo ==== Undo previous command : `undo` Restores the finance tracker to the state before the previous undoable command was executed or @@ -870,7 +871,8 @@ Format: `undo` `undo ` * ``: The number of commands to undo. Additionally the step must be greater than zero and positive. * `undo ` is only executed if the number of undoable commands is more than or equal to ``. -* [NOTE] `undo 1` has the same function as `undo`. +[NOTE] +`undo 1` has the same function as `undo`. Example Usage: [start = 1] @@ -900,11 +902,16 @@ Other examples: ==== Redo previously undone command : `redo` Reverses the most recent undone command or the specified number of most recent undone commands. +[NOTE] +As `undo` is not executable for Statistics and UI commands, `redo` is not executable +for those commands as well. + Format: `redo` `redo ` * ``: The number of undone commands to redo. Additionally the step must be greater than zero and positive. * `redo ` is only executed if the number of redoable commands is more than or equal to ``. -* [NOTE] `redo 1` has the same function as `redo`. +[NOTE] +`redo 1` has the same function as `redo`. Example Usage: [start = 1] @@ -953,7 +960,8 @@ Displays the list of commands entered, from most recent to earliest. Format: `history` -* [NOTE] `history` can only be executed if there were commands already entered before trying to use `history`. +[NOTE] +`history` can only be executed if there were commands already entered before trying to use `history`. Example Usage: [start = 1] From d35ceac1289dfe22827e89f0883abfea953d8b19 Mon Sep 17 00:00:00 2001 From: rongrongrr Date: Tue, 12 Nov 2019 01:55:29 +0800 Subject: [PATCH 4/4] Edit User Guide and PPP --- docs/UserGuide.adoc | 44 +++++++++++++++++------------ docs/team/rongrongrr.adoc | 59 ++++++++++----------------------------- 2 files changed, 40 insertions(+), 63 deletions(-) diff --git a/docs/UserGuide.adoc b/docs/UserGuide.adoc index 9cffc9f4456..6c937cedaf6 100644 --- a/docs/UserGuide.adoc +++ b/docs/UserGuide.adoc @@ -192,7 +192,7 @@ Adds a new expenditure to your total spending. Some things to take note: Format: `addExpense cat/ n/ amt/ d/ [tg/]` -* ``: The `category` that the expense falls under to. +* ``: The `category` that the expense falls under to. * ``: The name of this expense. * ``: The amount spent for this expense. It can contain at most 2 decimal points. * ``: The date of this expense. @@ -366,8 +366,8 @@ image::AddIncomeAfter.png[] Other examples: -* `add cat/Gifts n/Durian amt/200.00 d/2019 09 09 tg/food` -* `add cat/Business n/business Trip To Mars amt/20000.00 d/2019 09 09` +* `addIncome cat/Gifts n/Durian amt/200.00 d/2019 09 09 tg/food` +* `addIncome cat/Business n/business Trip To Mars amt/20000.00 d/2019 09 09` ==== Listing Incomes: `list` @@ -423,8 +423,8 @@ image::DeleteIncomeAfter.png[] Other examples: -* `add cat/Gifts n/Durian amt/200.00 d/2019 09 09 tg/food` -* `add cat/Business n/business Trip To Mars amt/20000.00 d/2019 09 09` +* `deleteIncome 2` +* `deleteIncome 4` === Budget ==== Adding Budget : `addBudget` @@ -542,30 +542,33 @@ Other Examples: // tag::wishlist[] === WishList -==== Add Wish : `addWishlist` +==== Add Wish : `addWish` Adds a new item to your current wishlist -Format: `addWish n/ cat/ amt/ d/` +Format: `addWish n/ cat/ amt/ d/ [tg/]` Examples: -* `add typ/Wish n/deck mala cat/food amt/5.60 d/2019 10 28` -* `add typ/Wish n/deck mala cat/food amt/5.60 d/01/01/2020` +* `addWish n/deck mala cat/food amt/5.60 d/2019 10 28 tg/foodddddddd` +* `addWish n/deck mala cat/food amt/5.60 d/01/01/2020` ==== List Wish : `listWish` Lists all the wishes on the main panel. Format: `listWish` +[NOTE] +If you would like to return the panel display to its original state with incomes and expenses, key in the command `list`. + ==== Edit Wish : `editWish` edit the description, date, or tags of your wishes. -Format: `editWishlist [n/] [cat/] [amt/] [d/] [tag/]` +Format: `editWish [n/] [cat/] [amt/] [d/] [tg/]` Examples: -* `editWishlist 1 n/1 try the chinatown ri ri hong mala!` -* `editWishlist 1 amt/20 tag/mala tag/expensive` +* `editWish 1 n/1 try the chinatown ri ri hong mala!` +* `editWish 1 amt/20 tg/mala tg/expensive` ==== Delete Wish : `deleteWish` Deletes the item at the stated index from your current wishlist @@ -574,7 +577,7 @@ Format: `deleteWish ` Examples: -* `deleteWishlist 3` +* `deleteWish 3` // end::wishlist[] === Loan [coming in v2.0] @@ -658,7 +661,7 @@ The statistics by percentage will be rounded to the nearest 1 decimal place so a Format: `viewPie [p/]` -* ``: The dates that you would like to display the statistics by. If you are interested in a range of months, you have to make sure that the *startMonth* and *endMonth* is separated by a comma, `,`. +* ``: The dates that you would like to display the statistics by. If you are interested in a range of months, you have to make sure that the *startMonth* and *endMonth* is separated by a comma, `,`. If you're only interested in one month, specify the month in the format `yyyy/MM` Example Usage: [start = 1] @@ -764,6 +767,11 @@ finding `mala food` will show entries with either mala or food or both in their Finding by `Tag` will show all entries with all the tags in them. For example, finding by `tg/eat tg/entertainment` will show entries with only both tags. The reason for this is that tags should be more specific that entry Description. +[NOTE] +For `findIncome` and `findExpense`, user is allowed to find only by months, reasoning being that there are a lot of entries hence finding by day narrows down the user's choices. +For `findBudget`, `findWish` and `findAutoExp`, only the specific days are allowed as there are fewer entries available. + + Format: `findExpense [cat/] [n/] [amt/] [d/] [tg/]` [start = 1] @@ -777,9 +785,9 @@ image::find-2.png[] Other Examples: -* `findExpense cat/food n/mala`: lists each entry in expenditure and income with title containing keyword “mala” and category of Food. -* `findIncome cat/business d/2019-09-09`: lists each entry in expenditure and income with date of "2019-09-09" and category of business. -* `findWish d/2019-09-09 tg/a tg/b`: lists each entry in expenditure and income with date of "2019-09-09" and tags of a and b. +* `findExpense cat/food n/mala`: lists each entry in expenditure with title containing keyword “mala” and category of Food. +* `findIncome cat/business d/2019-09`: lists each entry in income with month of "2019-09" and category of business. +* `findWish d/2019-09-09 tg/a tg/b`: lists each entry in wishlist with date of "2019-09-09" and tags of a and b. // tag::reminders[] === Reminders @@ -1107,7 +1115,7 @@ do so. .. `sortBudget typ/ s/` .. `sortWish typ/ s/` .. `findExpense [cat/] [n/] [amt/] [d/] [t/]` -.. `findIncome [cat/] [n/] amt/] [d/] [tg/]` +.. `findIncome [cat/] [n/] [amt/] [d/] [tg/]` .. `findBudget [cat/] [n/] [d/] [tg/]` .. `findWish [cat/] [n/] [amt/] [d/] [tg/]` diff --git a/docs/team/rongrongrr.adoc b/docs/team/rongrongrr.adoc index f866fcd2143..4144ef71e6d 100644 --- a/docs/team/rongrongrr.adoc +++ b/docs/team/rongrongrr.adoc @@ -37,10 +37,14 @@ History: *** Updated the User Guide (Pull requests https://github.com/AY1920S1-CS2103-T16-4/main/pull/47[#47], https://github.com/AY1920S1-CS2103-T16-4/main/pull/303[#303]) ** Community: *** Reported bugs and suggestions for other teams (https://github.com/rongrongrr/ped/issues[PE dry run]) -*** Set up the basic structure for the project. (Creation of budget classes, pull request https://github.com/AY1920S1-CS2103-T16-4/main/pull/67[#75]) +*** Set up the basic structure for the project. (Creation of budget classes, pull request https://github.com/AY1920S1-CS2103-T16-4/main/pull/75[#75]) === 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._ +|=== + === Undo/ Redo ==== Undo previous command : `undo` Restores the finance tracker to the state before the previous undoable command was executed or @@ -55,11 +59,7 @@ Format: `undo` `undo ` Example Usage: [start = 1] . If you would like to delete a budget, whereby the budget is located at index 1 as shown below, -key in the command `deleteBudget 1`. -+ -image::undo-1.png[] - -. You should see the budget being deleted in the list of budgets as displayed below. +key in the command `deleteBudget 1`. You should see the budget being deleted in the list of budgets as displayed below. + image::undo-2.png[] @@ -88,22 +88,6 @@ Format: `redo` `redo ` Example Usage: [start = 1] -. If you would like to delete a budget, whereby the budget is located at index 1 as shown below, -key in the command `deleteBudget 1`. -+ -image::undo-1.png[] - -. You should see the budget being deleted in the list of budgets as displayed below. -+ -image::undo-2.png[] - -. If you would like to undo your deletion, key in the command `undo`. -+ -image::undo-3.png[] - -. You should see the previously deleted budget back in the list of budgets as displayed below. -+ -image::undo-4.png[] . If you would like to redo your undone command, key in the command `redo'. + @@ -146,15 +130,16 @@ image::history-1.png[] + image::history-2.png[] -. If you would like to return the panel display to its original state, key in the command `list`. -+ -image::history-3.png[] - -. You should see that the income and expense panels are now back to their original positions. +. If you would like to return the panel display to its original state, key in the command `list`. You should see that the income and expense panels are now back to their original positions. + image::history-4.png[] == 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._ +|=== + === Undo/ Redo ==== Implementation @@ -172,23 +157,15 @@ Given below is an example usage scenario and how the undo/redo mechanism behaves Step 1. The user launches the application for the first time. The `VersionedGuiltTrip` will be initialized with the initial finance tracker state, and the `currentStatePointer` pointing to that single finance tracker state. -image::UndoRedoState0.png[] - -Step 2. The user executes `delete 5` command to delete the 5th entry in the finance tracker. The `delete` command calls `Model#commitGuiltTrip()`, causing the modified state of the finance tracker after the `delete 5` command executes to be saved in the `guiltTripStateList`, and the `currentStatePointer` is shifted to the newly inserted finance tracker state. +Step 2. The user executes `deleteExpense 5` command to delete the 5th entry in the finance tracker. The `deleteExpense` command calls `Model#commitGuiltTrip()`, causing the modified state of the finance tracker after the `deleteExpense 5` command executes to be saved in the `guiltTripStateList`, and the `currentStatePointer` is shifted to the newly inserted finance tracker state. -image::UndoRedoState1.png[] - -Step 3. The user executes `add typ/Expense...` to add a new expense. The `add` command also calls `Model#commitGuiltTrip()`, causing another modified finance tracker state to be saved into the `guiltTripStateList`. - -image::UndoRedoState2.png[] +Step 3. The user executes `addExpense...` to add a new expense. The `add` command also calls `Model#commitGuiltTrip()`, causing another modified finance tracker state to be saved into the `guiltTripStateList`. [NOTE] If a command fails its execution, it will not call `Model#commitGuiltTrip()`, so the finance tracker state will not be saved into the `guiltTripStateList`. Step 4. The user now decides that adding the expense was a mistake, and decides to undo that action by executing the `undo` command. The `undo` command will call `Model#undoGuiltTrip()`, which will shift the `currentStatePointer` once to the left, pointing it to the previous finance tracker state, and restores the finance tracker to that state. -image::UndoRedoState3.png[] - [NOTE] If the `currentStatePointer` is at index 0, pointing to the initial finance tracker state, then there are no previous finance tracker states to restore. The `undo` command uses `Model#canUndoGuiltTrip()` to check if this is the case. If so, it will return an error to the user rather than attempting to perform the undo. @@ -205,16 +182,8 @@ If the `currentStatePointer` is at index `guiltTripStateList.size() - 1`, pointi Step 5. The user then decides to execute the command `list`. Commands that do not modify the finance tracker, such as `list`, will usually not call `Model#commitGuiltTrip()`, `Model#undoGuiltTrip()` or `Model#redoGuiltTrip()`. Thus, the `guiltTripStateList` remains unchanged. -image::UndoRedoState4.png[] - Step 6. The user executes `clear`, which calls `Model#commitGuiltTrip()`. Since the `currentStatePointer` is not pointing at the end of the `guiltTripStateList`, all finance tracker states after the `currentStatePointer` will be purged. We designed it this way because it no longer makes sense to redo the `add typ/Expense ...` command. This is the behavior that most modern desktop applications follow. -image::UndoRedoState5.png[] - -The following activity diagram summarizes what happens when a user executes a new command: - -image::CommitActivityDiagram.png[] - ==== Design Considerations ===== Aspect: How undo & redo executes