]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/Application.h
* src/frontends/qt4/Dialogs.cpp:
[lyx.git] / src / frontends / Application.h
index fa4d49ebf78c0b5966d8643a07c42628bdcce6f6..bfe4a9229f924925cf30880c98f0e4bb68caef4b 100644 (file)
@@ -19,7 +19,7 @@ namespace lyx {
 
 class BufferView;
 class LyXView;
-class LColor_color;
+class Color_color;
 struct RGBColor;
 
 namespace frontend {
@@ -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
 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 can be only one Buffer displayed in a 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
 {
@@ -45,12 +105,12 @@ public:
        ///
        virtual ~Application() {}
 
-       /// Start the main event loop, after executing the given batch
-       /// commands.
-       int start(std::string const & batch);
        ///
        virtual Gui & gui() = 0;
-       ///
+
+       /// Start the main event loop.
+       /// The batch command is programmed to be execute once
+       /// the event loop is started.
        virtual int const exec() = 0;
 
        /// Quit running LyX.
@@ -85,17 +145,17 @@ public:
        * The function returns true if successful.
        * It returns false on failure and sets r, g, b to 0.
        */
-       virtual bool getRgbColor(LColor_color col, RGBColor & rgbcol) = 0;
+       virtual bool getRgbColor(Color_color col, RGBColor & rgbcol) = 0;
 
-       /** Eg, passing LColor::black returns "000000",
-       *      passing LColor::white returns "ffffff".
+       /** Eg, passing Color::black returns "000000",
+       *      passing Color::white returns "ffffff".
        */
-       virtual std::string const hexName(LColor_color col) = 0;
+       virtual std::string const hexName(Color_color col) = 0;
 
        /**
        * update an altered GUI color
        */
-       virtual void updateColor(LColor_color col) = 0;
+       virtual void updateColor(Color_color col) = 0;
 
        /**
        * add a callback for socket read notification
@@ -112,22 +172,28 @@ public:
 
        /// Create the main window with given geometry settings.
        LyXView & createView(unsigned int width, unsigned int height,
-               int posx, int posy, bool maximize);
-       
+               int posx, int posy, int maximized,
+               unsigned int iconSizeXY, const std::string & geometryArg);
+
+       ///
+       LyXView const * currentView() const;
+
+       ///
+       LyXView * currentView();
+
        ///
-       void setBufferView(BufferView * buffer_view);
+       void setCurrentView(LyXView & current_view);
 
-protected:
-       /// This BufferView is the one receiving Clipboard and Selection
+private:
+       /// This LyXView is the one receiving Clipboard and Selection
        /// Events
-       /// FIXME: \todo use Gui::currentView() in the future
-       BufferView * buffer_view_;
+       LyXView * current_view_;
 
 }; // Application
 
 } // namespace frontend
 
-extern frontend::Application * theApp;
+frontend::Application * theApp();
 frontend::Application * createApplication(int & argc, char * argv[]);