Abdelrazak Younes wrote:
> Peter Kümmel wrote:
>> Abdelrazak Younes wrote:
>>> Peter Kümmel wrote:
>>>
>>>> A other solution is to somehow handle within the views which part
>>>> of the buffer is viewed.
>>> This is what we have already: Each LyXView (WorkArea really) has its own
>>> unique BufferView which is a view of one part of the document. Except
>>> for some cursor bug (the famous dEPM bug), this is working fine.
>>>
>>> Abdel.
>>>
>>>
>>
>> Ah, didn't know that. So could you describe the design a little bit
>> with the MVC language, I think this will help a lot of people to
>> read and understand the code.
>>
>> Something like this:
>>
>> model:
>>  - buffer the one big buffer
>>
>> view:
>>  - WorkArea partly view of the buffer
>>  - lyxview frontent impl of the view
> 
> OK, here is my try at it:
> 
> 1) The Model: 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: BufferView/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.
> 
> The Painter is just a virtual interface to formalize each kind of
> drawing routines (text, line, rectangle, etc).
> 
> The 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: 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 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 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: LyXView (and its qt4 specialisation 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 WorkArea. Clicking on a tab
> would switch a WorkArea instead of a Buffer.
> 
> That's all, I hope my English is clear enough and that helps some of you
> better understand the global picture. Back to my real work.
> 
> Abdel.


We could also add it some where in to development/.


-- 
Peter Kümmel

Reply via email to