X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2FLyXView.h;h=3f2acfe95291dbca68a52f3b98545aa28d117c78;hb=558e849e692cc72ea74ac3859405b85e54c6e315;hp=fe50626c23481d92cd93caac1dbb7bd9ef097ea5;hpb=1e394731004491d04abe436112b5a89521bbd19a;p=lyx.git diff --git a/src/frontends/LyXView.h b/src/frontends/LyXView.h index fe50626c23..3f2acfe952 100644 --- a/src/frontends/LyXView.h +++ b/src/frontends/LyXView.h @@ -1,132 +1,184 @@ // -*- C++ -*- - -#ifndef LYXVIEW_BASE_H -#define LYXVIEW_BASE_H - -#ifdef __GNUG__ -#pragma interface -#endif - -#include "LString.h" - -#include "support/types.h" +/** + * \file LyXView.h + * 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. + */ + +#ifndef LYXVIEW_H +#define LYXVIEW_H #include +#include +#include #include +#include class Buffer; -class Toolbar; -class MiniBuffer; +class Toolbars; +class InsetBase; class Intl; class Menubar; class BufferView; class Dialogs; class LyXFunc; +class LyXFont; class Timeout; - -/// +class FuncRequest; + +namespace lyx { +namespace frontend { +class ControlCommandBuffer; +} // namespace frontend +} // namespace lyx + +/** + * LyXView - main LyX window + * + * This class represents the main LyX window and provides + * accessor functions to its content. + * + * The eventual intention is that LyX will support a number + * of containing LyXViews. Currently a lot of code still + * relies on there being a single top-level view. + * + * Additionally we would like to support multiple views + * in a single LyXView. + */ class LyXView : public boost::signals::trackable, boost::noncopyable { public: - /// - LyXView(); - /// - virtual ~LyXView(); - /// - virtual void init() = 0; - /// - virtual void setPosition(int, int) = 0; - /// - virtual void show(int, int, string const &) = 0; - /// Redraw the main form. - virtual void redraw() = 0; - /// Resize all BufferViews in this LyXView (because the width changed) - void resize(); + LyXView(); - /// returns the buffer currently shown in the main form. - Buffer * buffer() const; + virtual ~LyXView(); - /// - BufferView * view() const; + /** + * This is called after the concrete view has been created. + * We have to have the toolbar and the other stuff created + * before we can populate it with this call. + */ + void init(); - /// return a pointer to the toolbar - Toolbar * getToolbar() const; + /// show busy cursor + virtual void busy(bool) const = 0; - /// sets the layout in the toolbar layout combox - void setLayout(string const & layout); - /// update the toolbar - void updateToolbar(); + //@{ generic accessor functions - /// return a pointer to the lyxfunc - LyXFunc * getLyXFunc() const; + /** return the current buffer view + Returned as a shared_ptr so that anything wanting to cache the + buffer view can do so safely using a boost::weak_ptr. + */ + boost::shared_ptr const & view() const; - /// return a pointer to the minibuffer - MiniBuffer * getMiniBuffer() const; + /// return the buffer currently shown in this window + Buffer * buffer() const; + /// return the LyX function handler for this view + LyXFunc & getLyXFunc() { return *lyxfunc_.get(); } /// - void message(string const &); - /// - void messagePush(string const & str); - /// - void messagePop(); + LyXFunc const & getLyXFunc() const { return *lyxfunc_.get(); } + /// return the toolbar for this view + Toolbars & getToolbars() { return *toolbars_.get(); } /// - Menubar * getMenubar() const; + Toolbars const & getToolbasr() const { return *toolbars_.get(); } + /// return the menubar for this view + Menubar & getMenubar() { return *menubar_.get(); } /// - void updateMenubar(); + Menubar const & getMenubar() const { return *menubar_.get(); } + /// get access to the dialogs + Dialogs & getDialogs() { return *dialogs_.get(); } /// - Intl * getIntl() const; + Dialogs const & getDialogs() const { return *dialogs_.get(); } + /// get this view's keyboard map handler + Intl & getIntl() { return *intl_.get(); } /// - Dialogs * getDialogs() { return dialogs_; } + Intl const & getIntl() const { return *intl_.get(); } - /// + //@} + + /// sets the layout in the toolbar layout selection + void setLayout(std::string const & layout); + /// updates the possible layouts selectable void updateLayoutChoice(); - /// Updates the title of the window - void updateWindowTitle(); + /// update the toolbar + void updateToolbars(); + /// update the menubar + void updateMenubar(); - /// Show state (toolbar and font in minibuffer) - void showState(); + /// focus the command buffer (minibuffer) + boost::signal0 focus_command_buffer; - /// Reset autosave timer + /// view state string changed + boost::signal0 view_state_changed; + + /// display a message in the view + virtual void message(std::string const &) = 0; + + /// clear any temporary message and replace with current status + virtual void clearMessage() = 0; + + /// updates the title of the window + void updateWindowTitle(); + + /// reset autosave timer void resetAutosaveTimer(); - /// - virtual void prohibitInput() const = 0; - /// - virtual void allowInput() const = 0; + + /// dispatch to current BufferView + void dispatch(FuncRequest const & cmd); + + /** redraw \c inset in all the BufferViews in which it is currently + * visible. If successful return a pointer to the owning Buffer. + */ + Buffer const * const updateInset(InsetBase const *) const; + protected: - /// - Menubar * menubar; - /// - Toolbar * toolbar; - /** This is supposed to be a pointer or a list of pointers to the - BufferViews currently being shown in the LyXView. So far - this is not used, but that should change pretty soon. (Lgb) */ - BufferView * bufferview; - /// - MiniBuffer * minibuffer; - /// - Intl * intl; - /// - Timeout * autosave_timeout; - /// A callback - void AutoSave(); - /// - void invalidateLayoutChoice(); + /// view of a buffer. Eventually there will be several. + boost::shared_ptr bufferview_; + + /// view's menubar + boost::scoped_ptr menubar_; + private: - /// - LyXFunc * lyxfunc; - /// - Dialogs * dialogs_; - /// - virtual void setWindowTitle(string const &, string const &) = 0; - /** The last textclass layout list in the layout choice selector - This should probably be moved to the toolbar, but for now it's - here. (Asger) */ - int last_textclass; + /** + * setWindowTitle - set title of window + * @param t main window title + * @param it iconified (short) title + */ + virtual void setWindowTitle(std::string const & t, std::string const & it) = 0; + + /// called on timeout + void autoSave(); + + /// view's toolbar + boost::scoped_ptr toolbars_; + /// keyboard mapping object + boost::scoped_ptr const intl_; + /// auto-saving of buffers + boost::scoped_ptr const autosave_timeout_; + /// our function handler + boost::scoped_ptr lyxfunc_; + /// dialogs for this view + boost::scoped_ptr dialogs_; + +protected: + /// view's command buffer controller + // this has to be declared _after_ lyxfunc_ as its initialization depends + // on it! + typedef boost::scoped_ptr + CommandBufferPtr; + + CommandBufferPtr const controlcommand_; }; -#endif + +#endif // LYXVIEW_H