]> git.lyx.org Git - features.git/commitdiff
make LyXView almost pure virtual. Merge implementation with GuiView
authorAndré Pönitz <poenitz@gmx.net>
Mon, 12 Nov 2007 23:23:19 +0000 (23:23 +0000)
committerAndré Pönitz <poenitz@gmx.net>
Mon, 12 Nov 2007 23:23:19 +0000 (23:23 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@21566 a592a061-630c-0410-9148-cb99ea01b6c8

src/frontends/LyXView.cpp [deleted file]
src/frontends/LyXView.h
src/frontends/Makefile.am
src/frontends/qt4/GuiView.cpp
src/frontends/qt4/GuiView.h

diff --git a/src/frontends/LyXView.cpp b/src/frontends/LyXView.cpp
deleted file mode 100644 (file)
index eeceb2f..0000000
+++ /dev/null
@@ -1,283 +0,0 @@
-/**
- * \file LyXView.cpp
- * This file is part of LyX, the document processor.
- * Licence details can be found in the file COPYING.
- *
- * \author Lars Gullik Bjønnes
- * \author John Levon
- *
- * Full author contact details are available in file CREDITS.
- */
-
-#include <config.h>
-
-#include "LyXView.h"
-
-#include "Dialogs.h"
-#include "WorkArea.h"
-#include "Gui.h"
-
-#include "Buffer.h"
-#include "buffer_funcs.h"
-#include "BufferList.h"
-#include "BufferParams.h"
-#include "BufferView.h"
-#include "Cursor.h"
-#include "debug.h"
-#include "ErrorList.h"
-#include "FuncRequest.h"
-#include "gettext.h"
-#include "Intl.h"
-#include "Layout.h"
-#include "LyX.h"
-#include "LyXFunc.h"
-#include "LyXRC.h"
-#include "MenuBackend.h"
-#include "Paragraph.h"
-#include "Session.h"
-#include "Text.h"
-
-#include "support/lstrings.h"
-#include "support/filetools.h" // OnlyFilename()
-#include "support/Timeout.h"
-
-#include <boost/bind.hpp>
-
-
-#ifdef HAVE_SYS_TIME_H
-# include <sys/time.h>
-#endif
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-
-using std::endl;
-using std::string;
-
-namespace lyx {
-
-using support::bformat;
-using support::FileName;
-using support::makeDisplayPath;
-using support::onlyFilename;
-
-namespace frontend {
-
-LyXView::LyXView(int id)
-       : autosave_timeout_(new Timeout(5000)),
-         dialogs_(new Dialogs(*this)),
-         id_(id)
-{
-       // Start autosave timer
-       if (lyxrc.autosave) {
-               autosave_timeout_->timeout.connect(boost::bind(&LyXView::autoSave, this));
-               autosave_timeout_->setTimeout(lyxrc.autosave * 1000);
-               autosave_timeout_->start();
-       }
-}
-
-
-LyXView::~LyXView()
-{
-       delete dialogs_;
-       delete autosave_timeout_;
-}
-
-
-Buffer * LyXView::buffer()
-{
-       WorkArea * work_area = currentWorkArea();
-       if (work_area)
-               return &work_area->bufferView().buffer();
-       return 0;
-}
-
-
-Buffer const * LyXView::buffer() const
-{
-       WorkArea const * work_area = currentWorkArea();
-       if (work_area)
-               return &work_area->bufferView().buffer();
-       return 0;
-}
-
-
-void LyXView::setBuffer(Buffer * newBuffer)
-{
-       BOOST_ASSERT(newBuffer);
-       setBusy(true);
-
-       WorkArea * wa = workArea(*newBuffer);
-       if (wa == 0) {
-               updateLabels(*newBuffer->masterBuffer());
-               wa = addWorkArea(*newBuffer);
-       } else {
-               //Disconnect the old buffer...there's no new one.
-               disconnectBuffer();
-       }
-       connectBuffer(*newBuffer);
-       connectBufferView(wa->bufferView());
-       setCurrentWorkArea(wa);
-
-       setBusy(false);
-}
-
-
-Buffer * LyXView::loadLyXFile(FileName const & filename, bool tolastfiles)
-{
-       setBusy(true);
-
-       Buffer * newBuffer = checkAndLoadLyXFile(filename);
-
-       if (!newBuffer) {
-               message(_("Document not loaded."));
-               updateStatusBar();
-               setBusy(false);
-               return 0;
-       }
-
-       WorkArea * wa = workArea(*newBuffer);
-       if (wa == 0)
-               wa = addWorkArea(*newBuffer);
-
-       // scroll to the position when the file was last closed
-       if (lyxrc.use_lastfilepos) {
-               LastFilePosSection::FilePos filepos =
-                       LyX::ref().session().lastFilePos().load(filename);
-               // if successfully move to pit (returned par_id is not zero),
-               // update metrics and reset font
-               wa->bufferView().moveToPosition(filepos.pit, filepos.pos, 0, 0);
-       }
-
-       if (tolastfiles)
-               LyX::ref().session().lastFiles().add(filename);
-
-       setBusy(false);
-       return newBuffer;
-}
-
-
-void LyXView::connectBuffer(Buffer & buf)
-{
-       buf.setGuiDelegate(this);
-}
-
-
-void LyXView::disconnectBuffer()
-{
-       if (WorkArea * work_area = currentWorkArea())
-               work_area->bufferView().setGuiDelegate(0);
-}
-
-
-void LyXView::connectBufferView(BufferView & bv)
-{
-       bv.setGuiDelegate(this);
-}
-
-
-void LyXView::disconnectBufferView()
-{
-       if (WorkArea * work_area = currentWorkArea())
-               work_area->bufferView().setGuiDelegate(0);
-}
-
-
-void LyXView::showErrorList(string const & error_type)
-{
-       ErrorList & el = buffer()->errorList(error_type);
-       if (!el.empty())
-               getDialogs().show("errorlist", error_type);
-}
-
-
-void LyXView::showDialog(string const & name)
-{
-       getDialogs().show(name);
-}
-
-
-void LyXView::showDialogWithData(string const & name, string const & data)
-{
-       getDialogs().show(name, data);
-}
-
-
-void LyXView::showInsetDialog(string const & name, string const & data,
-               Inset * inset)
-{
-       getDialogs().show(name, data, inset);
-}
-
-
-void LyXView::updateDialog(string const & name, string const & data)
-{
-       if (getDialogs().visible(name))
-               getDialogs().update(name, data);
-}
-
-
-BufferView * LyXView::view()
-{
-       WorkArea * wa = currentWorkArea();
-       return wa? &wa->bufferView() : 0;
-}
-
-
-void LyXView::updateToc()
-{
-       updateDialog("toc", "");
-}
-
-
-void LyXView::updateEmbeddedFiles()
-{
-       updateDialog("embedding", "");
-}
-
-
-void LyXView::autoSave()
-{
-       LYXERR(Debug::INFO) << "Running autoSave()" << endl;
-
-       if (buffer())
-               view()->buffer().autoSave();
-}
-
-
-void LyXView::resetAutosaveTimer()
-{
-       if (lyxrc.autosave)
-               autosave_timeout_->restart();
-}
-
-
-void LyXView::dispatch(FuncRequest const & cmd)
-{
-       string const argument = to_utf8(cmd.argument());
-       switch(cmd.action) {
-               case LFUN_BUFFER_SWITCH:
-                       setBuffer(theBufferList().getBuffer(to_utf8(cmd.argument())));
-                       break;
-               default:
-                       theLyXFunc().setLyXView(this);
-                       lyx::dispatch(cmd);
-       }
-}
-
-
-Buffer const * LyXView::updateInset(Inset const * inset)
-{
-       WorkArea * work_area = currentWorkArea();
-       if (!work_area)
-               return 0;
-
-       if (inset) {
-               BOOST_ASSERT(work_area);
-               work_area->scheduleRedraw();
-       }
-       return &work_area->bufferView().buffer();
-}
-
-} // namespace frontend
-} // namespace lyx
index 58d461f5cceda5289cc4546a72229cec2f89416f..c52f2dbd0bfd0a84d42103fed6f3ab44cf52c8e2 100644 (file)
@@ -13,9 +13,8 @@
 #ifndef LYXVIEW_H
 #define LYXVIEW_H
 
-#include "frontends/Application.h"
 #include "frontends/Delegates.h"
-#include "support/docstring.h"
+#include "support/strfwd.h"
 
 #include <vector>
 
@@ -23,12 +22,10 @@ namespace lyx {
 
 namespace support { class FileName; }
 
-class Font;
 class Buffer;
 class BufferView;
 class FuncRequest;
 class Inset;
-class Timeout;
 class ToolbarInfo;
 
 namespace frontend {
@@ -54,7 +51,7 @@ class LyXView
 {
 public:
        ///
-       LyXView(int id);
+       LyXView(int id) : id_(id) {}
        ///
        virtual ~LyXView();
        ///
@@ -110,11 +107,13 @@ public:
        //@{ generic accessor functions
 
        /// \return the current buffer view.
-       BufferView * view();
+       virtual BufferView * view() = 0;
 
        /// \return the buffer currently shown in this window
-       Buffer * buffer();
-       Buffer const * buffer() const;
+       virtual Buffer * buffer() = 0;
+       virtual Buffer const * buffer() const = 0;
+       /// set a buffer to the current workarea.
+       virtual void setBuffer(Buffer * b) = 0; ///< \c Buffer to set.
 
        ///
        virtual void openLayoutList() = 0;
@@ -125,18 +124,15 @@ public:
        virtual void openMenu(docstring const & name) = 0;
 
        /// get access to the dialogs
-       Dialogs & getDialogs() { return *dialogs_; }
+       virtual Dialogs & getDialogs() = 0;
        ///
-       Dialogs const & getDialogs() const { return *dialogs_; }
+       virtual Dialogs const & getDialogs() const = 0;
 
        //@}
 
        /// load a buffer into the current workarea.
-       Buffer * loadLyXFile(support::FileName const &  name, ///< File to load.
-               bool tolastfiles = true);  ///< append to the "Open recent" menu?
-
-       /// set a buffer to the current workarea.
-       void setBuffer(Buffer * b); ///< \c Buffer to set.
+       virtual Buffer * loadLyXFile(support::FileName const &  name, ///< File to load.
+               bool tolastfiles = true) = 0;  ///< append to the "Open recent" menu?
 
        /// updates the possible layouts selectable
        virtual void updateLayoutChoice(bool force) = 0;
@@ -157,72 +153,58 @@ public:
        virtual void clearMessage() = 0;
 
        /// reset autosave timer
-       void resetAutosaveTimer();
+       virtual void resetAutosaveTimer() = 0;
 
        /// dispatch to current BufferView
-       void dispatch(FuncRequest const & cmd);
+       virtual void dispatch(FuncRequest const & cmd) = 0;
 
        /** redraw \c inset in all the BufferViews in which it is currently
         *  visible. If successful return a pointer to the owning Buffer.
         */
-       Buffer const * updateInset(Inset const *);
+       virtual Buffer const * updateInset(Inset const *) = 0;
 
        /// returns true if this view has the focus.
        virtual bool hasFocus() const = 0;
 
        /// show the error list to the user
-       void showErrorList(std::string const &);
+       virtual void showErrorList(std::string const &) = 0;
 
        
        //
        // GuiBufferDelegate
        //
        /// This function is called when the buffer structure is changed.
-       void structureChanged() { updateToc(); }
+       virtual void structureChanged() = 0;
        /// This function is called when some parsing error shows up.
        void errors(std::string const & err) { showErrorList(err); }
        /// Reset autosave timers for all users.
        void resetAutosaveTimers() { resetAutosaveTimer(); }
 
        /// connect to signals in the given BufferView
-       void connectBufferView(BufferView & bv);
+       virtual void connectBufferView(BufferView & bv) = 0;
        /// disconnect from signals in the given BufferView
-       void disconnectBufferView();
+       virtual void disconnectBufferView() = 0;
        /// connect to signals in the given buffer
-       void connectBuffer(Buffer & buf);
+       virtual void connectBuffer(Buffer & buf) = 0;
        /// disconnect from signals in the given buffer
-       void disconnectBuffer();
+       virtual void disconnectBuffer() = 0;
 
 private:
        /// noncopyable
        LyXView(LyXView const &);
        void operator=(LyXView const &);
 
-       /// called on timeout
-       void autoSave();
-
-       /// auto-saving of buffers
-       Timeout * const autosave_timeout_;
-       /// dialogs for this view
-       Dialogs * dialogs_;
-
        /// Bind methods for BufferView messages signal connection
        //@{
-       void showDialog(std::string const & name);
-       void showDialogWithData(std::string const & name,
-               std::string const & data);
-       void showInsetDialog(std::string const & name,
-               std::string const & data, Inset * inset);
-       void updateDialog(std::string const & name,
-               std::string const & data);
+       virtual void showDialog(std::string const & name) = 0;
+       virtual void showDialogWithData(std::string const & name,
+               std::string const & data) = 0;
+       virtual void showInsetDialog(std::string const & name,
+               std::string const & data, Inset * inset) = 0;
+       virtual void updateDialog(std::string const & name,
+               std::string const & data) = 0;
        //@}
 
-protected:
-       ///
-       void updateToc();
-       ///
-       void updateEmbeddedFiles();
-
 private:
        int id_;
 };
index eabbacbe086afe962a8649e6cf4ef641fe863163..c67e83a72b46a4599f0d1f2acc209a07c6e9d2e1 100644 (file)
@@ -27,7 +27,6 @@ liblyxfrontends_la_SOURCES = \
        FontMetrics.h \
        KeyModifier.h \
        KeySymbol.h \
-       LyXView.cpp \
        LyXView.h \
        Painter.cpp \
        Painter.h \
index 9fed4ddbc2931ec8d1bb192ed2adb0859005bb21..962e22fe95fa940aafe14f3deac31142de52efd5 100644 (file)
 #include "GuiMenubar.h"
 #include "GuiToolbar.h"
 #include "GuiToolbars.h"
+#include "Dialogs.h"
+#include "WorkArea.h"
+#include "Gui.h"
+
 #include "qt_helpers.h"
 
 #include "frontends/Application.h"
 #include "support/lstrings.h"
 #include "support/os.h"
 
+#include "buffer_funcs.h"
 #include "Buffer.h"
+#include "BufferList.h"
 #include "BufferParams.h"
 #include "BufferView.h"
-#include "BufferList.h"
 #include "Cursor.h"
 #include "debug.h"
+#include "ErrorList.h"
 #include "FuncRequest.h"
+#include "gettext.h"
+#include "Intl.h"
 #include "Layout.h"
-#include "LyX.h"
 #include "LyXFunc.h"
+#include "LyX.h"
 #include "LyXRC.h"
 #include "MenuBackend.h"
 #include "Paragraph.h"
 #include "Session.h"
 #include "TextClass.h"
+#include "Text.h"
 #include "ToolbarBackend.h"
 #include "version.h"
 
+#include "support/lstrings.h"
+#include "support/filetools.h" // OnlyFilename()
+#include "support/Timeout.h"
+
 #include <QAction>
 #include <QApplication>
 #include <QCloseEvent>
 #include <QToolBar>
 #include <QUrl>
 
+#include <boost/bind.hpp>
 #include <boost/current_function.hpp>
 
+#ifdef HAVE_SYS_TIME_H
+# include <sys/time.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
 using std::endl;
 using std::string;
 using std::vector;
@@ -80,6 +101,11 @@ extern bool quitting;
 
 namespace frontend {
 
+using support::bformat;
+using support::FileName;
+using support::makeDisplayPath;
+using support::onlyFilename;
+
 namespace {
 
 int const statusbar_timer_value = 3000;
@@ -126,22 +152,6 @@ private:
 
 struct GuiView::GuiViewPrivate
 {
-       string cur_title;
-
-       int posx_offset;
-       int posy_offset;
-
-       GuiWorkArea * current_work_area_;
-       QSplitter * splitter_;
-       QStackedWidget * stack_widget_;
-       BackgroundWidget * bg_widget_;
-       /// view's menubar
-       GuiMenubar * menubar_;
-       /// view's toolbars
-       GuiToolbars * toolbars_;
-       ///
-       docstring current_layout;
-
        GuiViewPrivate()
                : current_work_area_(0), posx_offset(0), posy_offset(0)
        {}
@@ -170,19 +180,22 @@ struct GuiView::GuiViewPrivate
                QAction * smallIcons = new QAction(iconSizeGroup);
                smallIcons->setText(qt_("Small-sized icons"));
                smallIcons->setCheckable(true);
-               QObject::connect(smallIcons, SIGNAL(triggered()), parent, SLOT(smallSizedIcons()));
+               QObject::connect(smallIcons, SIGNAL(triggered()),
+                       parent, SLOT(smallSizedIcons()));
                menu->addAction(smallIcons);
 
                QAction * normalIcons = new QAction(iconSizeGroup);
                normalIcons->setText(qt_("Normal-sized icons"));
                normalIcons->setCheckable(true);
-               QObject::connect(normalIcons, SIGNAL(triggered()), parent, SLOT(normalSizedIcons()));
+               QObject::connect(normalIcons, SIGNAL(triggered()),
+                       parent, SLOT(normalSizedIcons()));
                menu->addAction(normalIcons);
 
                QAction * bigIcons = new QAction(iconSizeGroup);
                bigIcons->setText(qt_("Big-sized icons"));
                bigIcons->setCheckable(true);
-               QObject::connect(bigIcons, SIGNAL(triggered()), parent, SLOT(bigSizedIcons()));
+               QObject::connect(bigIcons, SIGNAL(triggered()),
+                       parent, SLOT(bigSizedIcons()));
                menu->addAction(bigIcons);
 
                unsigned int cur = parent->iconSize().width();
@@ -233,16 +246,48 @@ struct GuiView::GuiViewPrivate
 
                return tab_widget;
        }
+
+public:
+       ///
+       string cur_title;
+
+       GuiWorkArea * current_work_area_;
+       int posx_offset;
+       int posy_offset;
+
+       QSplitter * splitter_;
+       QStackedWidget * stack_widget_;
+       BackgroundWidget * bg_widget_;
+       /// view's menubar
+       GuiMenubar * menubar_;
+       /// view's toolbars
+       GuiToolbars * toolbars_;
+       ///
+       docstring current_layout;
 };
 
 
 unsigned int GuiView::GuiViewPrivate::lastIconSize = 0;
 
 
+/// FIXME
+LyXView::~LyXView() {}
+
+
 GuiView::GuiView(int id)
-       : QMainWindow(), LyXView(id), quitting_by_menu_(false),
-         d(*new GuiViewPrivate)
+       : QMainWindow(), LyXView(id),
+         d(*new GuiViewPrivate),
+               quitting_by_menu_(false),
+               autosave_timeout_(new Timeout(5000)),
+         dialogs_(new Dialogs(*this))
 {
+       // Start autosave timer
+       if (lyxrc.autosave) {
+               autosave_timeout_->timeout.connect(boost::bind(&GuiView::autoSave, this));
+               autosave_timeout_->setTimeout(lyxrc.autosave * 1000);
+               autosave_timeout_->start();
+       }
+
        // Qt bug? signal lastWindowClosed does not work
        setAttribute(Qt::WA_QuitOnClose, false);
        setAttribute(Qt::WA_DeleteOnClose, true);
@@ -275,6 +320,8 @@ GuiView::GuiView(int id)
 
 GuiView::~GuiView()
 {
+       delete dialogs_;
+       delete autosave_timeout_;
        delete &d;
 }
 
@@ -1024,6 +1071,201 @@ void GuiView::toggleToolbarState(string const & name, bool allowauto)
 }
 
 
+Buffer * GuiView::buffer()
+{
+       WorkArea * work_area = currentWorkArea();
+       if (work_area)
+               return &work_area->bufferView().buffer();
+       return 0;
+}
+
+
+Buffer const * GuiView::buffer() const
+{
+       WorkArea const * work_area = currentWorkArea();
+       if (work_area)
+               return &work_area->bufferView().buffer();
+       return 0;
+}
+
+
+void GuiView::setBuffer(Buffer * newBuffer)
+{
+       BOOST_ASSERT(newBuffer);
+       setBusy(true);
+
+       WorkArea * wa = workArea(*newBuffer);
+       if (wa == 0) {
+               updateLabels(*newBuffer->masterBuffer());
+               wa = addWorkArea(*newBuffer);
+       } else {
+               //Disconnect the old buffer...there's no new one.
+               disconnectBuffer();
+       }
+       connectBuffer(*newBuffer);
+       connectBufferView(wa->bufferView());
+       setCurrentWorkArea(wa);
+
+       setBusy(false);
+}
+
+
+Buffer * GuiView::loadLyXFile(FileName const & filename, bool tolastfiles)
+{
+       setBusy(true);
+
+       Buffer * newBuffer = checkAndLoadLyXFile(filename);
+
+       if (!newBuffer) {
+               message(_("Document not loaded."));
+               updateStatusBar();
+               setBusy(false);
+               return 0;
+       }
+
+       WorkArea * wa = workArea(*newBuffer);
+       if (wa == 0)
+               wa = addWorkArea(*newBuffer);
+
+       // scroll to the position when the file was last closed
+       if (lyxrc.use_lastfilepos) {
+               LastFilePosSection::FilePos filepos =
+                       LyX::ref().session().lastFilePos().load(filename);
+               // if successfully move to pit (returned par_id is not zero),
+               // update metrics and reset font
+               wa->bufferView().moveToPosition(filepos.pit, filepos.pos, 0, 0);
+       }
+
+       if (tolastfiles)
+               LyX::ref().session().lastFiles().add(filename);
+
+       setBusy(false);
+       return newBuffer;
+}
+
+
+void GuiView::connectBuffer(Buffer & buf)
+{
+       buf.setGuiDelegate(this);
+}
+
+
+void GuiView::disconnectBuffer()
+{
+       if (WorkArea * work_area = currentWorkArea())
+               work_area->bufferView().setGuiDelegate(0);
+}
+
+
+void GuiView::connectBufferView(BufferView & bv)
+{
+       bv.setGuiDelegate(this);
+}
+
+
+void GuiView::disconnectBufferView()
+{
+       if (WorkArea * work_area = currentWorkArea())
+               work_area->bufferView().setGuiDelegate(0);
+}
+
+
+void GuiView::showErrorList(string const & error_type)
+{
+       ErrorList & el = buffer()->errorList(error_type);
+       if (!el.empty())
+               getDialogs().show("errorlist", error_type);
+}
+
+
+void GuiView::showDialog(string const & name)
+{
+       getDialogs().show(name);
+}
+
+
+void GuiView::showDialogWithData(string const & name, string const & data)
+{
+       getDialogs().show(name, data);
+}
+
+
+void GuiView::showInsetDialog(string const & name, string const & data,
+               Inset * inset)
+{
+       getDialogs().show(name, data, inset);
+}
+
+
+void GuiView::updateDialog(string const & name, string const & data)
+{
+       if (getDialogs().visible(name))
+               getDialogs().update(name, data);
+}
+
+
+BufferView * GuiView::view()
+{
+       WorkArea * wa = currentWorkArea();
+       return wa ? &wa->bufferView() : 0;
+}
+
+
+void GuiView::updateToc()
+{
+       updateDialog("toc", "");
+}
+
+
+void GuiView::updateEmbeddedFiles()
+{
+       updateDialog("embedding", "");
+}
+
+
+void GuiView::autoSave()
+{
+       LYXERR(Debug::INFO) << "Running autoSave()" << endl;
+
+       if (buffer())
+               view()->buffer().autoSave();
+}
+
+
+void GuiView::resetAutosaveTimer()
+{
+       if (lyxrc.autosave)
+               autosave_timeout_->restart();
+}
+
+
+void GuiView::dispatch(FuncRequest const & cmd)
+{
+       string const argument = to_utf8(cmd.argument());
+       switch(cmd.action) {
+               case LFUN_BUFFER_SWITCH:
+                       setBuffer(theBufferList().getBuffer(to_utf8(cmd.argument())));
+                       break;
+               default:
+                       theLyXFunc().setLyXView(this);
+                       lyx::dispatch(cmd);
+       }
+}
+
+
+Buffer const * GuiView::updateInset(Inset const * inset)
+{
+       WorkArea * work_area = currentWorkArea();
+       if (!work_area)
+               return 0;
+
+       if (inset) {
+               BOOST_ASSERT(work_area);
+               work_area->scheduleRedraw();
+       }
+       return &work_area->bufferView().buffer();
+}
+
 } // namespace frontend
 } // namespace lyx
 
index b5b44668589efd55ac462880cf38363cd74be384..2c4daad81c4e1cdc13736aea3ea98f46dc827d6c 100644 (file)
 #define GUI_VIEW_H
 
 #include "frontends/LyXView.h"
-#include "FuncRequest.h"
 
-#include <QAction>
-#include <QCloseEvent>
 #include <QMainWindow>
-#include <QTabWidget>
 #include <QTimer>
 
+class QCloseEvent;
 class QDragEnterEvent;
 class QDropEvent;
 class QMenu;
-class QToolBar;
+
 
 namespace lyx {
+
+class Timeout;
+
 namespace frontend {
 
 class GuiToolbar;
@@ -88,10 +88,21 @@ public:
        /// menu item has been selected
        void activated(FuncRequest const &);
 
-       QMenu* createPopupMenu();
+       ///
+       QMenu * createPopupMenu();
 
+       ///
        void addTabWorkArea();
 
+       /// dispatch to current BufferView
+       void dispatch(FuncRequest const & cmd);
+
+       /// \return the buffer currently shown in this window
+       Buffer * buffer();
+       Buffer const * buffer() const;
+       /// set a buffer to the current workarea.
+       void setBuffer(Buffer * b); ///< \c Buffer to set.
+
 Q_SIGNALS:
        void closing(int);
 
@@ -110,7 +121,7 @@ public Q_SLOTS:
        void normalSizedIcons();
        void bigSizedIcons();
 
-protected:
+private:
        /// make sure we quit cleanly
        virtual void closeEvent(QCloseEvent * e);
        ///
@@ -131,7 +142,32 @@ protected:
        WorkArea const * currentWorkArea() const;
        WorkArea * currentWorkArea();
 
-private:
+       ///
+       void resetAutosaveTimer();
+       ///
+       void showErrorList(std::string const & error_type);
+       ///
+       void structureChanged() { updateToc(); }
+       ///
+       void connectBuffer(Buffer & buf);
+       ///
+       void disconnectBuffer();
+       ///
+       void connectBufferView(BufferView & bv);
+       ///
+       void disconnectBufferView();
+       ////
+       void showDialog(std::string const & name);
+       void showDialogWithData(std::string const & name,
+               std::string const & data);
+       void showInsetDialog(std::string const & name,
+               std::string const & data, Inset * inset);
+       void updateDialog(std::string const & name,
+               std::string const & data);
+       
+       ///
+       void updateToc();
+
        ///
        void dragEnterEvent(QDragEnterEvent * ev);
        ///
@@ -142,6 +178,30 @@ private:
        bool focusNextPrevChild(bool);
        ///
        QRect updateFloatingGeometry();
+       /// called on timeout
+       void autoSave();
+       ///
+       void updateEmbeddedFiles();
+
+       /// \return the current buffer view.
+       BufferView * view();
+
+       /// get access to the dialogs
+       Dialogs & getDialogs() { return *dialogs_; }
+       ///
+       Dialogs const & getDialogs() const { return *dialogs_; }
+
+       //@}
+
+       /// load a buffer into the current workarea.
+       Buffer * loadLyXFile(support::FileName const &  name, ///< File to load.
+               bool tolastfiles = true);  ///< append to the "Open recent" menu?
+
+       /** redraw \c inset in all the BufferViews in which it is currently
+        *  visible. If successful return a pointer to the owning Buffer.
+        */
+       Buffer const * updateInset(Inset const *);
+
 
 private:
        ///
@@ -167,6 +227,11 @@ private:
        };
 
        ToolbarSize toolbarSize_;
+
+       /// auto-saving of buffers
+       Timeout * const autosave_timeout_;
+       /// dialogs for this view
+       Dialogs * dialogs_;
 };