Difference between revisions of "Writer/ToDo/Writer Refactoring/SwDoc ViewShell SwRootFrm"
m (→Solution) |
m (→Status) |
||
Line 47: | Line 47: | ||
Ongoing | Ongoing | ||
Use new member ViewShell::pLayout in all member functions of ViewShell, where needed. | Use new member ViewShell::pLayout in all member functions of ViewShell, where needed. | ||
+ | Resync with milestone m241 | ||
Next minor steps | Next minor steps | ||
Line 53: | Line 54: | ||
simply by replacing pDoc->GetRootFrm() with GetLayout() (in member functiona of ViewShell) | simply by replacing pDoc->GetRootFrm() with GetLayout() (in member functiona of ViewShell) | ||
or with pSh->GetLayout() (in member functions of SwViewImp) | or with pSh->GetLayout() (in member functions of SwViewImp) | ||
− | Add a new member | + | Add a new member function GetCurrentViewShell() to SwDoc. |
− | + | Use this new function to reactivate the remaining "comment out" code. |
Revision as of 12:52, 19 December 2007
Modularization: View Model
Writer refactoring
As a part of our Writer refactoring we are planning to change the dependencies between the Writer model and its views.
The Writer model contains all paragraphs, tables, drawing object etc. and their properties. It is represented in the class SwDoc.
The class ViewShell represents visualizations of this model, every window (e.g. the normal document view, the print preview, the online view) needs a ViewShell.
The class SwRootFrm is another part of the view, it contains the formatting information for the document objects. I.e. for every visible object (character, table, drawing object...) it contains the position and size. The ViewShell calls its Paint(..) function to display document content.
Today's structure
Today we have the following structure regarding SwDoc, ViewShell, SwRootFrm...
Each SwDoc has a member pLayout which points to a SwRootFrm. It has no direct connection to a ViewShell.
Every ViewShell has a member pDoc which points to a SwDoc. It has no direct connection to a SwRootFrm.
The ViewShells are organized as a Ring, i.e. ViewShells with the same SwDoc are connected via pPrev, pNext pointers.
Every SwRootFrm has a member pCurrShell which points to a ViewShell. It has no direct connection to the SwDoc.
Problem
The layout (SwRootFrm) is logically a part of the view, but currently hosted at the model (SwDoc). If there are several views to the model, they have to share one layout. This results in the effect that views with different layout are impossible, e.g two online views or a normal view and a online view.
Solution
Moving the layout(SwRootFrm) from the model(SwDoc) to the view(ViewShell).
1. Step
Move member pLayout (SwRootFrm*) from class SwDoc to class ViewShell. Create a function GetCurrentViewShell() at class SwDoc. Establish a 1:1 relationship between view and layout. Connect SwDoc and its ViewShells with a broadcasting mechanism.
2. Step
Solve all problems resulting from 1. ;-)
Status
Done
Move member pLayout (SwRootFrm*) from class SwDoc to class ViewShell. Comment out code if removed SwDoc::pLayout has been used. Writer is buildable . Create SwRootFrm in ViewShell::Init(..) Resync with milestone src680m237
Ongoing
Use new member ViewShell::pLayout in all member functions of ViewShell, where needed. Resync with milestone m241
Next minor steps
Make swrefactor071015 able to build again after resync. Check all code which has been comment out because of missed SwDoc::pLayout if it can be reactivated simply by replacing pDoc->GetRootFrm() with GetLayout() (in member functiona of ViewShell) or with pSh->GetLayout() (in member functions of SwViewImp) Add a new member function GetCurrentViewShell() to SwDoc. Use this new function to reactivate the remaining "comment out" code.