Project 3: Enhanced Text Editor

For this project you will work on the code repository created by one of the other teams for Project 2. You will extend this implementation by adding support for rich text, including:

You will also add support for word wrapping.

Features

Here are the specific new features that you should add to the existing editor:

Refactoring

You will need to make architectural changes to the existing implementation in order to support the new features. In addition, you will probably discover things in the existing implementation that can be improved. As part of the project, you should improve the structure of the existing code. Even if rich text can be implemented with no architectural changes, you should make at least 3-4 non-trivial structural improvements. You should spend at least 25% of your total time for this project on refactoring; focus on changes that are most important for the new features, or that have the biggest impact on overall complexity.

In your work for this project, don't take the quick-and-dirty approach of making the fewest possible code changes to implement the new features. Instead, think strategically: try to produce the architecture that would have resulted if you had designed the system from the start to support the new features. This is a good general approach to use any time you are enhancing existing code. If you take the fewest-possible-code-changes approach, the code will get more complex and harder to read with each change.

Create a file refactoring in the top-level project directory that summarizes the major architectural changes you made during this project, including the "non-trivial structural improvements" mentioned above.

Unit tests

Update the Junit test suite to reflect any changes you make for this project. As with Project 2, the tests should cover all code related to text management, undo, and redo, and they should use an "isomorphic to the code" structure. You do not need to write unit tests for displaying and event handling code.

Submitting Your Project

To submit your project, create another issue on cs190codereview.appspot.com as follows:

Once you have created the code review, check to make sure it is visible at cs190codereview.appspot.com.

Late Days

If you are planning to use late days for this project, please send me an email before the project deadline so that I know your plans. Send me another email once you eventually upload your code review.