#define LYXVIEW_H
#include "frontends/Application.h"
-#include "frontends/Toolbars.h"
+#include "frontends/Delegates.h"
+#include "support/docstring.h"
-#include "lyxfunc.h"
-#include <boost/scoped_ptr.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/signal.hpp>
-#include <boost/signals/trackable.hpp>
-#include <boost/utility.hpp>
+#include <boost/noncopyable.hpp>
#include <vector>
namespace lyx {
-class Buffer;
-class InsetBase;
-class Menubar;
+namespace support { class FileName; }
+class Font;
+class Buffer;
class BufferView;
-class Dialogs;
-class LyXFunc;
-class LyXFont;
-class Timeout;
class FuncRequest;
+class Inset;
+class Timeout;
+class ToolbarInfo;
namespace frontend {
-class WorkArea;
-class ControlCommandBuffer;
-} // namespace frontend
+class Dialogs;
+class WorkArea;
/**
* LyXView - main LyX window
* Additionally we would like to support multiple views
* in a single LyXView.
*/
-class LyXView : public boost::signals::trackable, boost::noncopyable {
+class LyXView : boost::noncopyable,
+ public GuiBufferViewDelegate, public GuiBufferDelegate
+{
public:
-
+ ///
LyXView(int id);
-
+ ///
virtual ~LyXView();
-
- int const id() const { return id_; }
-
+ ///
+ int id() const { return id_; }
+ ///
virtual void close() = 0;
+ ///
+ virtual void setFocus() = 0;
- std::vector<int> const & workAreaIds() const { return work_area_ids_; }
-
- void setWorkArea(frontend::WorkArea * work_area);
-
- /// This signal is emitted with the LyXView id when it is closed.
- boost::signal<void(int)> closed;
+ ///
+ virtual WorkArea * workArea(Buffer & buffer) = 0;
+ ///
+ virtual WorkArea * addWorkArea(Buffer & buffer) = 0;
+ ///
+ virtual void setCurrentWorkArea(WorkArea * work_area) = 0;
+ ///
+ virtual void removeWorkArea(WorkArea * work_area) = 0;
+ /// return the current WorkArea (the one that has the focus).
+ virtual WorkArea const * currentWorkArea() const = 0;
+ /// FIXME: This non-const access is needed because of
+ /// a mis-designed \c ControlSpellchecker.
+ virtual WorkArea * currentWorkArea() = 0;
/**
* This is called after the concrete view has been created.
*/
virtual void init() = 0;
+ enum Maximized {
+ NotMaximized,
+ VerticallyMaximized,
+ HorizontallyMaximized,
+ CompletelyMaximized
+ };
+
///
virtual void setGeometry(
unsigned int width,
unsigned int height,
int posx, int posy,
- bool maximize,
+ int maximize,
unsigned int iconSizeXY,
const std::string & geometryArg) = 0;
virtual void saveGeometry() = 0;
/// show busy cursor
- virtual void busy(bool) = 0;
-
- virtual Toolbars::ToolbarPtr makeToolbar(ToolbarBackend::Toolbar const & tbb) = 0;
+ virtual void setBusy(bool) = 0;
//@{ generic accessor functions
- /** 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.
- */
- BufferView * view() const;
+ /// \return the current buffer view.
+ BufferView * view();
- /// return the buffer currently shown in this window
- Buffer * buffer() const;
+ /// \return the buffer currently shown in this window
+ Buffer * buffer();
+ Buffer const * buffer() const;
- /// return the toolbar for this view
- Toolbars & getToolbars() { return *toolbars_.get(); }
///
- Toolbars const & getToolbars() const { return *toolbars_.get(); }
-
- /// return the menubar for this view
- Menubar & getMenubar() { return *menubar_.get(); }
+ virtual void openLayoutList() = 0;
///
- Menubar const & getMenubar() const { return *menubar_.get(); }
+ virtual bool isToolbarVisible(std::string const & id) = 0;
+ ///
+ virtual void showMiniBuffer(bool visible) = 0;
+ virtual void openMenu(docstring const & name) = 0;
/// get access to the dialogs
- Dialogs & getDialogs() { return *dialogs_.get(); }
+ Dialogs & getDialogs() { return *dialogs_; }
///
- Dialogs const & getDialogs() const { return *dialogs_.get(); }
+ Dialogs const & getDialogs() const { return *dialogs_; }
//@}
- /// load a buffer into the current workarea
- bool loadLyXFile(std::string const & name, bool tolastfiles = true);
+ /// 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);
+ /// set a buffer to the current workarea.
+ void setBuffer(Buffer * b); ///< \c Buffer to set.
/// updates the possible layouts selectable
- void updateLayoutChoice();
+ virtual void updateLayoutChoice() = 0;
/// update the toolbar
- void updateToolbars();
- /// get toolbar state
- ToolbarBackend::Flags getToolbarState(std::string const & name);
+ virtual void updateToolbars() = 0;
+ /// get toolbar info
+ virtual ToolbarInfo * getToolbarInfo(std::string const & name) = 0;
/// toggle toolbar state
- void toggleToolbarState(std::string const & name);
- /// update the menubar
- void updateMenubar();
+ virtual void toggleToolbarState(std::string const & name, bool allowauto) = 0;
/// update the status bar
virtual void updateStatusBar() = 0;
- /// focus the command buffer (minibuffer)
- boost::signal<void()> focus_command_buffer;
-
/// display a message in the view
virtual void message(docstring const &) = 0;
/// updates the title of the window
void updateWindowTitle();
- /// updates the tab view
- virtual void updateTab() = 0;
-
/// reset autosave timer
void resetAutosaveTimer();
/** 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;
+ Buffer const * updateInset(Inset const *);
/// 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 &);
+
+ //
+ // GuiBufferDelegate
+ //
+ /// This function is called when the buffer structure is changed.
+ void structureChanged() { updateToc(); }
+ /// This function is called when some parsing error shows up.
+ void errors(std::string const & err) { showErrorList(err); }
+ /// This function is called when the buffer readonly status change.
+ void setReadOnly(bool on);
+ /// Update window titles of all users.
+ void updateTitles() { updateWindowTitle(); }
+ /// Reset autosave timers for all users.
+ void resetAutosaveTimers() { resetAutosaveTimer(); }
+
/// connect to signals in the given BufferView
void connectBufferView(BufferView & bv);
/// disconnect from signals in the given BufferView
void disconnectBufferView();
-
-protected:
- /// current work area (screen view of a BufferView).
- /**
- \todo FIXME: there is only one workArea per LyXView for now.
- */
- frontend::WorkArea * work_area_;
-
- /// view's menubar
- boost::scoped_ptr<Menubar> menubar_;
+ /// connect to signals in the given buffer
+ void connectBuffer(Buffer & buf);
+ /// disconnect from signals in the given buffer
+ void disconnectBuffer();
private:
/**
/// called on timeout
void autoSave();
- /// view's toolbar
- boost::scoped_ptr<Toolbars> toolbars_;
/// auto-saving of buffers
- boost::scoped_ptr<Timeout> const autosave_timeout_;
- /// our function handler
- boost::scoped_ptr<LyXFunc> lyxfunc_;
+ Timeout * const autosave_timeout_;
/// dialogs for this view
- boost::scoped_ptr<Dialogs> dialogs_;
-
- /// buffer changed signal connection
- boost::signals::connection bufferChangedConnection_;
- /// buffer errors signal connection
- boost::signals::connection errorsConnection_;
- /// buffer messages signal connection
- boost::signals::connection messageConnection_;
- /// buffer busy status signal connection
- boost::signals::connection busyConnection_;
- /// buffer title changed signal connection
- boost::signals::connection titleConnection_;
- /// buffer reset timers signal connection
- boost::signals::connection timerConnection_;
- /// buffer readonly status changed signal connection
- boost::signals::connection readonlyConnection_;
- /// buffer closing signal connection
- boost::signals::connection closingConnection_;
- /// connect to signals in the given buffer
- void connectBuffer(Buffer & buf);
- /// disconnect from signals in the given buffer
- void disconnectBuffer();
-
- /// BufferView messages signal connection
- //@{
- boost::signals::connection message_connection_;
- boost::signals::connection show_dialog_connection_;
- boost::signals::connection show_dialog_with_data_connection_;
- boost::signals::connection show_inset_dialog_connection_;
- boost::signals::connection update_dialog_connection_;
- boost::signals::connection layout_changed_connection_;
- //@}
+ Dialogs * dialogs_;
/// Bind methods for BufferView messages signal connection
//@{
void showDialogWithData(std::string const & name,
std::string const & data);
void showInsetDialog(std::string const & name,
- std::string const & data, InsetBase * inset);
+ std::string const & data, Inset * inset);
void updateDialog(std::string const & name,
std::string const & data);
//@}
- /// notify readonly status
- void showReadonly(bool);
-
protected:
- /// view's command buffer controller
- // this has to be declared _after_ lyxfunc_ as its initialization depends
- // on it!
- typedef boost::scoped_ptr<frontend::ControlCommandBuffer>
- CommandBufferPtr;
-
- CommandBufferPtr const controlcommand_;
+ ///
+ void updateToc();
+ ///
+ void updateEmbeddedFiles();
private:
int id_;
- std::vector<int> work_area_ids_;
};
+} // namespace frontend
} // namespace lyx
#endif // LYXVIEW_H