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.
Thanks Abdel, this is very good. We should add it some where in the wiki. Peter