make LyXView almost pure virtual. Merge implementation with GuiView

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@21566 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
André Pönitz 2007-11-12 23:23:19 +00:00
parent fec095e310
commit 309232d26b
5 changed files with 365 additions and 360 deletions

View File

@ -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

View File

@ -13,9 +13,8 @@
#ifndef LYXVIEW_H #ifndef LYXVIEW_H
#define LYXVIEW_H #define LYXVIEW_H
#include "frontends/Application.h"
#include "frontends/Delegates.h" #include "frontends/Delegates.h"
#include "support/docstring.h" #include "support/strfwd.h"
#include <vector> #include <vector>
@ -23,12 +22,10 @@ namespace lyx {
namespace support { class FileName; } namespace support { class FileName; }
class Font;
class Buffer; class Buffer;
class BufferView; class BufferView;
class FuncRequest; class FuncRequest;
class Inset; class Inset;
class Timeout;
class ToolbarInfo; class ToolbarInfo;
namespace frontend { namespace frontend {
@ -54,7 +51,7 @@ class LyXView
{ {
public: public:
/// ///
LyXView(int id); LyXView(int id) : id_(id) {}
/// ///
virtual ~LyXView(); virtual ~LyXView();
/// ///
@ -110,11 +107,13 @@ public:
//@{ generic accessor functions //@{ generic accessor functions
/// \return the current buffer view. /// \return the current buffer view.
BufferView * view(); virtual BufferView * view() = 0;
/// \return the buffer currently shown in this window /// \return the buffer currently shown in this window
Buffer * buffer(); virtual Buffer * buffer() = 0;
Buffer const * buffer() const; 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; virtual void openLayoutList() = 0;
@ -125,18 +124,15 @@ public:
virtual void openMenu(docstring const & name) = 0; virtual void openMenu(docstring const & name) = 0;
/// get access to the dialogs /// 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. /// load a buffer into the current workarea.
Buffer * loadLyXFile(support::FileName const & name, ///< File to load. virtual Buffer * loadLyXFile(support::FileName const & name, ///< File to load.
bool tolastfiles = true); ///< append to the "Open recent" menu? bool tolastfiles = true) = 0; ///< append to the "Open recent" menu?
/// set a buffer to the current workarea.
void setBuffer(Buffer * b); ///< \c Buffer to set.
/// updates the possible layouts selectable /// updates the possible layouts selectable
virtual void updateLayoutChoice(bool force) = 0; virtual void updateLayoutChoice(bool force) = 0;
@ -157,72 +153,58 @@ public:
virtual void clearMessage() = 0; virtual void clearMessage() = 0;
/// reset autosave timer /// reset autosave timer
void resetAutosaveTimer(); virtual void resetAutosaveTimer() = 0;
/// dispatch to current BufferView /// 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 /** redraw \c inset in all the BufferViews in which it is currently
* visible. If successful return a pointer to the owning Buffer. * 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. /// returns true if this view has the focus.
virtual bool hasFocus() const = 0; virtual bool hasFocus() const = 0;
/// show the error list to the user /// show the error list to the user
void showErrorList(std::string const &); virtual void showErrorList(std::string const &) = 0;
// //
// GuiBufferDelegate // GuiBufferDelegate
// //
/// This function is called when the buffer structure is changed. /// 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. /// This function is called when some parsing error shows up.
void errors(std::string const & err) { showErrorList(err); } void errors(std::string const & err) { showErrorList(err); }
/// Reset autosave timers for all users. /// Reset autosave timers for all users.
void resetAutosaveTimers() { resetAutosaveTimer(); } void resetAutosaveTimers() { resetAutosaveTimer(); }
/// connect to signals in the given BufferView /// connect to signals in the given BufferView
void connectBufferView(BufferView & bv); virtual void connectBufferView(BufferView & bv) = 0;
/// disconnect from signals in the given BufferView /// disconnect from signals in the given BufferView
void disconnectBufferView(); virtual void disconnectBufferView() = 0;
/// connect to signals in the given buffer /// connect to signals in the given buffer
void connectBuffer(Buffer & buf); virtual void connectBuffer(Buffer & buf) = 0;
/// disconnect from signals in the given buffer /// disconnect from signals in the given buffer
void disconnectBuffer(); virtual void disconnectBuffer() = 0;
private: private:
/// noncopyable /// noncopyable
LyXView(LyXView const &); LyXView(LyXView const &);
void operator=(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 /// Bind methods for BufferView messages signal connection
//@{ //@{
void showDialog(std::string const & name); virtual void showDialog(std::string const & name) = 0;
void showDialogWithData(std::string const & name, virtual void showDialogWithData(std::string const & name,
std::string const & data); std::string const & data) = 0;
void showInsetDialog(std::string const & name, virtual void showInsetDialog(std::string const & name,
std::string const & data, Inset * inset); std::string const & data, Inset * inset) = 0;
void updateDialog(std::string const & name, virtual void updateDialog(std::string const & name,
std::string const & data); std::string const & data) = 0;
//@} //@}
protected:
///
void updateToc();
///
void updateEmbeddedFiles();
private: private:
int id_; int id_;
}; };

View File

@ -27,7 +27,6 @@ liblyxfrontends_la_SOURCES = \
FontMetrics.h \ FontMetrics.h \
KeyModifier.h \ KeyModifier.h \
KeySymbol.h \ KeySymbol.h \
LyXView.cpp \
LyXView.h \ LyXView.h \
Painter.cpp \ Painter.cpp \
Painter.h \ Painter.h \

View File

@ -21,6 +21,10 @@
#include "GuiMenubar.h" #include "GuiMenubar.h"
#include "GuiToolbar.h" #include "GuiToolbar.h"
#include "GuiToolbars.h" #include "GuiToolbars.h"
#include "Dialogs.h"
#include "WorkArea.h"
#include "Gui.h"
#include "qt_helpers.h" #include "qt_helpers.h"
#include "frontends/Application.h" #include "frontends/Application.h"
@ -33,24 +37,33 @@
#include "support/lstrings.h" #include "support/lstrings.h"
#include "support/os.h" #include "support/os.h"
#include "buffer_funcs.h"
#include "Buffer.h" #include "Buffer.h"
#include "BufferList.h"
#include "BufferParams.h" #include "BufferParams.h"
#include "BufferView.h" #include "BufferView.h"
#include "BufferList.h"
#include "Cursor.h" #include "Cursor.h"
#include "debug.h" #include "debug.h"
#include "ErrorList.h"
#include "FuncRequest.h" #include "FuncRequest.h"
#include "gettext.h"
#include "Intl.h"
#include "Layout.h" #include "Layout.h"
#include "LyX.h"
#include "LyXFunc.h" #include "LyXFunc.h"
#include "LyX.h"
#include "LyXRC.h" #include "LyXRC.h"
#include "MenuBackend.h" #include "MenuBackend.h"
#include "Paragraph.h" #include "Paragraph.h"
#include "Session.h" #include "Session.h"
#include "TextClass.h" #include "TextClass.h"
#include "Text.h"
#include "ToolbarBackend.h" #include "ToolbarBackend.h"
#include "version.h" #include "version.h"
#include "support/lstrings.h"
#include "support/filetools.h" // OnlyFilename()
#include "support/Timeout.h"
#include <QAction> #include <QAction>
#include <QApplication> #include <QApplication>
#include <QCloseEvent> #include <QCloseEvent>
@ -68,8 +81,16 @@
#include <QToolBar> #include <QToolBar>
#include <QUrl> #include <QUrl>
#include <boost/bind.hpp>
#include <boost/current_function.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::endl;
using std::string; using std::string;
using std::vector; using std::vector;
@ -80,6 +101,11 @@ extern bool quitting;
namespace frontend { namespace frontend {
using support::bformat;
using support::FileName;
using support::makeDisplayPath;
using support::onlyFilename;
namespace { namespace {
int const statusbar_timer_value = 3000; int const statusbar_timer_value = 3000;
@ -126,22 +152,6 @@ private:
struct GuiView::GuiViewPrivate 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() GuiViewPrivate()
: current_work_area_(0), posx_offset(0), posy_offset(0) : current_work_area_(0), posx_offset(0), posy_offset(0)
{} {}
@ -170,19 +180,22 @@ struct GuiView::GuiViewPrivate
QAction * smallIcons = new QAction(iconSizeGroup); QAction * smallIcons = new QAction(iconSizeGroup);
smallIcons->setText(qt_("Small-sized icons")); smallIcons->setText(qt_("Small-sized icons"));
smallIcons->setCheckable(true); smallIcons->setCheckable(true);
QObject::connect(smallIcons, SIGNAL(triggered()), parent, SLOT(smallSizedIcons())); QObject::connect(smallIcons, SIGNAL(triggered()),
parent, SLOT(smallSizedIcons()));
menu->addAction(smallIcons); menu->addAction(smallIcons);
QAction * normalIcons = new QAction(iconSizeGroup); QAction * normalIcons = new QAction(iconSizeGroup);
normalIcons->setText(qt_("Normal-sized icons")); normalIcons->setText(qt_("Normal-sized icons"));
normalIcons->setCheckable(true); normalIcons->setCheckable(true);
QObject::connect(normalIcons, SIGNAL(triggered()), parent, SLOT(normalSizedIcons())); QObject::connect(normalIcons, SIGNAL(triggered()),
parent, SLOT(normalSizedIcons()));
menu->addAction(normalIcons); menu->addAction(normalIcons);
QAction * bigIcons = new QAction(iconSizeGroup); QAction * bigIcons = new QAction(iconSizeGroup);
bigIcons->setText(qt_("Big-sized icons")); bigIcons->setText(qt_("Big-sized icons"));
bigIcons->setCheckable(true); bigIcons->setCheckable(true);
QObject::connect(bigIcons, SIGNAL(triggered()), parent, SLOT(bigSizedIcons())); QObject::connect(bigIcons, SIGNAL(triggered()),
parent, SLOT(bigSizedIcons()));
menu->addAction(bigIcons); menu->addAction(bigIcons);
unsigned int cur = parent->iconSize().width(); unsigned int cur = parent->iconSize().width();
@ -233,16 +246,48 @@ struct GuiView::GuiViewPrivate
return tab_widget; 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; unsigned int GuiView::GuiViewPrivate::lastIconSize = 0;
/// FIXME
LyXView::~LyXView() {}
GuiView::GuiView(int id) GuiView::GuiView(int id)
: QMainWindow(), LyXView(id), quitting_by_menu_(false), : QMainWindow(), LyXView(id),
d(*new GuiViewPrivate) 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 // Qt bug? signal lastWindowClosed does not work
setAttribute(Qt::WA_QuitOnClose, false); setAttribute(Qt::WA_QuitOnClose, false);
setAttribute(Qt::WA_DeleteOnClose, true); setAttribute(Qt::WA_DeleteOnClose, true);
@ -275,6 +320,8 @@ GuiView::GuiView(int id)
GuiView::~GuiView() GuiView::~GuiView()
{ {
delete dialogs_;
delete autosave_timeout_;
delete &d; 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 frontend
} // namespace lyx } // namespace lyx

View File

@ -16,20 +16,20 @@
#define GUI_VIEW_H #define GUI_VIEW_H
#include "frontends/LyXView.h" #include "frontends/LyXView.h"
#include "FuncRequest.h"
#include <QAction>
#include <QCloseEvent>
#include <QMainWindow> #include <QMainWindow>
#include <QTabWidget>
#include <QTimer> #include <QTimer>
class QCloseEvent;
class QDragEnterEvent; class QDragEnterEvent;
class QDropEvent; class QDropEvent;
class QMenu; class QMenu;
class QToolBar;
namespace lyx { namespace lyx {
class Timeout;
namespace frontend { namespace frontend {
class GuiToolbar; class GuiToolbar;
@ -88,10 +88,21 @@ public:
/// menu item has been selected /// menu item has been selected
void activated(FuncRequest const &); void activated(FuncRequest const &);
QMenu* createPopupMenu(); ///
QMenu * createPopupMenu();
///
void addTabWorkArea(); 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: Q_SIGNALS:
void closing(int); void closing(int);
@ -110,7 +121,7 @@ public Q_SLOTS:
void normalSizedIcons(); void normalSizedIcons();
void bigSizedIcons(); void bigSizedIcons();
protected: private:
/// make sure we quit cleanly /// make sure we quit cleanly
virtual void closeEvent(QCloseEvent * e); virtual void closeEvent(QCloseEvent * e);
/// ///
@ -131,7 +142,32 @@ protected:
WorkArea const * currentWorkArea() const; WorkArea const * currentWorkArea() const;
WorkArea * currentWorkArea(); 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); void dragEnterEvent(QDragEnterEvent * ev);
/// ///
@ -142,6 +178,30 @@ private:
bool focusNextPrevChild(bool); bool focusNextPrevChild(bool);
/// ///
QRect updateFloatingGeometry(); 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: private:
/// ///
@ -167,6 +227,11 @@ private:
}; };
ToolbarSize toolbarSize_; ToolbarSize toolbarSize_;
/// auto-saving of buffers
Timeout * const autosave_timeout_;
/// dialogs for this view
Dialogs * dialogs_;
}; };