mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-25 05:55:34 +00:00
Some documentation on how the MVC separation is achieved in LyX.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@16005 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
4076494889
commit
1a0fdcc09f
@ -36,6 +36,66 @@ initialisation should be done before the instanciation of this class.
|
|||||||
|
|
||||||
\todo The work areas handling could be moved to a base virtual class
|
\todo The work areas handling could be moved to a base virtual class
|
||||||
common to all frontends.
|
common to all frontends.
|
||||||
|
|
||||||
|
Model/View/Controller separation in LyX:
|
||||||
|
|
||||||
|
1) The Model: \c Buffer
|
||||||
|
|
||||||
|
The Buffer is the in-memory representation of a LyX file format. The
|
||||||
|
Buffer does not (should not) have any information on what part of it
|
||||||
|
is represented on screen. There is one unique Buffer per opened LyX
|
||||||
|
file.
|
||||||
|
|
||||||
|
|
||||||
|
2) The Controller: \c BufferView / \c Painter
|
||||||
|
|
||||||
|
The BufferView is a tool used by the view that translates a part of
|
||||||
|
the Buffer contents into drawing routines. The BufferView asks each
|
||||||
|
inset of the Buffer to draw itself onto the screen using the Painter.
|
||||||
|
There is only Buffer loaded per BufferView. While there is the
|
||||||
|
possibility to switch Buffer inside the BufferView, the goal is to
|
||||||
|
instantiate a new BufferView on each Buffer switch.
|
||||||
|
|
||||||
|
\todo Instantiate a new BufferView on each Buffer switch.
|
||||||
|
|
||||||
|
The \c Painter is just a virtual interface to formalize each kind of
|
||||||
|
drawing routines (text, line, rectangle, etc).
|
||||||
|
|
||||||
|
The \c BufferView also contains a Cursor which may or may not be
|
||||||
|
visible on screen. The cursor is really just a bookmark to remember
|
||||||
|
where the next Buffer insertion/deletion is going to take place.
|
||||||
|
|
||||||
|
|
||||||
|
3) The View: \c WorkArea (and it's qt4 specialisation GuiWorkArea)
|
||||||
|
|
||||||
|
This contains the real screen area where the drawing is done by the
|
||||||
|
Painter. One WorkArea holds one unique \c BufferView. While it could be
|
||||||
|
possible that multiple WorkArea share one BufferView, this is not
|
||||||
|
possible right now.
|
||||||
|
The WorkArea also provide a scrollbar which position is translated
|
||||||
|
into scrolling command to the inner \c BufferView.
|
||||||
|
|
||||||
|
The WorkArea use the BufferView to translate each keyboard or mouse
|
||||||
|
events into terms that the Buffer can understand:
|
||||||
|
- insert/delete char
|
||||||
|
- select char
|
||||||
|
- etc.
|
||||||
|
|
||||||
|
|
||||||
|
4) The Window: \c LyXView (and its qt4 specialisation \c GuiView)
|
||||||
|
|
||||||
|
This is a full window containing a menubar, toolbars, a tabbar and a
|
||||||
|
WorkArea. One LyXView could in theory contain multiple WorkArea
|
||||||
|
(ex: with split window) but this number is limited to one only for
|
||||||
|
now. In any case, there would be only one WorkArea that gets the focus
|
||||||
|
at a time.
|
||||||
|
|
||||||
|
Now, concerning the TabBar versus TabWidget issue. Right now, there is
|
||||||
|
only one WorkArea and the TabBar just used to tell the BufferView inside
|
||||||
|
the WorkArea to switch to this another Buffer.
|
||||||
|
|
||||||
|
With a TabWidget, each Tab would own its own \c WorkArea. Clicking on a tab
|
||||||
|
would switch a WorkArea instead of a Buffer.
|
||||||
*/
|
*/
|
||||||
class Application
|
class Application
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user