// -*- C++ -*- /** * \file BufferView.h * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * * \author Alfredo Braustein * \author Lars Gullik Bjønnes * \author John Levon * \author Jürgen Vigna * * Full author contact details are available in file CREDITS. */ #ifndef BUFFER_VIEW_H #define BUFFER_VIEW_H #include #include class Buffer; class Change; class CursorSlice; class Encoding; class ErrorList; class FuncRequest; class InsetOld; class Language; class LCursor; class LyXText; class LyXScreen; class LyXView; class Painter; class PosIterator; class Selection; class TeXErrors; class UpdatableInset; // The structure that keeps track of the selections set. struct Selection { Selection() : set_(false), mark_(false) {} bool set() const { return set_; } void set(bool s) { set_ = s; } bool mark() const { return mark_; } void mark(bool m) { mark_ = m; } private: bool set_; // former selection bool mark_; // former mark_set }; /** * A buffer view encapsulates a view onto a particular * buffer, and allows access to operate upon it. A view * is a sliding window of the entire document rendering. * * Eventually we will allow several views onto a single * buffer, but not yet. */ class BufferView : boost::noncopyable { public: /** * Create a view with the given owner main window, * of the given dimensions. */ BufferView(LyXView * owner, int x, int y, int w, int h); ~BufferView(); /// set the buffer we are viewing void buffer(Buffer * b); /// return the buffer being viewed Buffer * buffer() const; /// return the painter object for drawing onto the view Painter & painter() const; /// return the screen object for handling re-drawing LyXScreen & screen() const; /// return the owning main view LyXView * owner() const; /// return the visible top y int top_y() const; /// set the visible top y void top_y(int); /// resize event has happened void resize(); /// reload the contained buffer void reload(); /// create a new buffer based on template bool newFile(std::string const & fname, std::string const & tname, bool named = true); /// load a buffer into the view bool loadLyXFile(std::string const & name, bool tolastfiles = true); /// fit the user cursor within the visible view bool fitCursor(); /// perform pending painting updates void update(); /// reset the scrollbar to reflect current view position void updateScrollbar(); /// FIXME void redoCurrentBuffer(); /// FIXME bool available() const; /// Save the current position as bookmark i void savePosition(unsigned int i); /// Restore the position from bookmark i void restorePosition(unsigned int i); /// does the given bookmark have a saved position ? bool isSavedPosition(unsigned int i); /// return the current change at the cursor Change const getCurrentChange(); /// return the lyxtext we are using LyXText * getLyXText() const; /// update paragraph dialogs void updateParagraphDialog(); /// return the current encoding at the cursor Encoding const * getEncoding() const; /// return the parent language of the given inset Language const * getParentLanguage(InsetOld * inset) const; /// replace the currently selected word void replaceWord(std::string const & replacestring); /// simple replacing. Use the font of the first selected character void replaceSelectionWithString(std::string const & str); /// move cursor to the named label void gotoLabel(std::string const & label); /// undo last action void undo(); /// redo last action void redo(); /// get the stored error list ErrorList const & getErrorList() const; /// show the error list to the user void showErrorList(std::string const &) const; /// set the cursor based on the given TeX source row void setCursorFromRow(int row); /** * Insert an inset into the buffer. * Place it in a layout of lout, */ bool insertInset(InsetOld * inset, std::string const & lout = std::string()); /// Inserts a lyx file at cursor position. return false if it fails bool insertLyXFile(std::string const & file); /// FIXME bool fitLockedInsetCursor(int x, int y, int asc, int desc); /// hide the cursor if it is visible void hideCursor(); /// center the document view around the cursor void center(); /// scroll document by the given number of lines of default height void scroll(int lines); /// Scroll the view by a number of pixels void scrollDocView(int); /// return the pixel width of the document view int workWidth() const; /// return the pixel height of the document view int workHeight() const; /// switch between primary and secondary keymaps for RTL entry void switchKeyMap(); /// FIXME bool ChangeRefsIfUnique(std::string const & from, std::string const & to); /// get the contents of the window system clipboard std::string const getClipboard() const; /// fill the window system clipboard void stuffClipboard(std::string const &) const; /// tell the window system we have a selection void haveSelection(bool sel); /// execute the given function bool dispatch(FuncRequest const & argument); /// set target x position of cursor void x_target(int x); /// return target x position of cursor int x_target() const; /// clear the X selection void unsetXSel(); /// access to full cursor LCursor & fullCursor(); /// access to full cursor void fullCursor(LCursor const &); /// access to full cursor LCursor const & fullCursor() const; /// access to topmost cursor slice CursorSlice & cursor(); /// access to topmost cursor slice CursorSlice const & cursor() const; /// access to selection anchor CursorSlice & anchor(); /// access to selection anchor CursorSlice const & anchor() const; /// UpdatableInset * innerInset() const; /// LyXText * text() const; /// void resetAnchor(); /// Selection & selection(); /// Selection const & selection() const; /// CursorSlice & selStart(); /// CursorSlice const & selStart() const; /// CursorSlice & selEnd(); /// CursorSlice const & selEnd() const; /// void setSelection(); /// void clearSelection(); /// void putSelectionAt(PosIterator const & cur, int length, bool backwards); /// Selection selection_; private: /// struct Pimpl; /// friend struct BufferView::Pimpl; /// Pimpl * pimpl_; /** * The target x position of the cursor. This is used for when * we have text like : * * blah blah blah blah| blah blah blah * blah blah blah * blah blah blah blah blah blah * * When we move onto row 3, we would like to be vertically aligned * with where we were in row 1, despite the fact that row 2 is * shorter than x() */ int x_target_; }; #endif // BUFFERVIEW_H