4 * This file is part of LyX, the document processor.
5 * Licence details can be found in the file COPYING.
7 * \author Alfredo Braustein
8 * \author Lars Gullik Bjønnes
10 * \author Jürgen Vigna
12 * Full author contact details are available in file CREDITS.
20 #include "insets/inset.h"
22 #include <boost/utility.hpp>
38 * A buffer view encapsulates a view onto a particular
39 * buffer, and allows access to operate upon it. A view
40 * is a sliding window of the entire document rendering.
42 * Eventually we will allow several views onto a single
43 * buffer, but not yet.
45 class BufferView : boost::noncopyable {
48 * Create a view with the given owner main window,
49 * of the given dimensions.
51 BufferView(LyXView * owner, int x, int y, int w, int h);
55 /// set the buffer we are viewing
56 void buffer(Buffer * b);
57 /// return the buffer being viewed
58 Buffer * buffer() const;
60 /// return the painter object for drawing onto the view
61 Painter & painter() const;
62 /// return the screen object for handling re-drawing
63 LyXScreen & screen() const;
64 /// return the owning main view
65 LyXView * owner() const;
67 /// resize event has happened
70 /// reload the contained buffer
72 /// create a new buffer based on template
73 bool newFile(string const & fname, string const & tname,
75 /// load a buffer into the view
76 bool loadLyXFile(string const & name, bool tolastfiles = true);
78 /// fit the user cursor within the visible view
80 /// perform pending painting updates
82 /// update for a particular inset
84 /// reset the scrollbar to reflect current view position
85 void updateScrollbar();
87 void redoCurrentBuffer();
90 bool available() const;
93 void beforeChange(LyXText *);
95 /// Save the current position as bookmark i
96 void savePosition(unsigned int i);
97 /// Restore the position from bookmark i
98 void restorePosition(unsigned int i);
99 /// does the given bookmark have a saved position ?
100 bool isSavedPosition(unsigned int i);
102 /// return the current change at the cursor
103 Change const getCurrentChange();
106 * This holds the mapping between buffer paragraphs and screen rows.
107 * This should be private...but not yet. (Lgb)
110 /// return the lyxtext we are using
111 LyXText * getLyXText() const;
113 /// Return the current inset we are "locked" in
114 UpdatableInset * theLockingInset() const;
115 /// lock the given inset FIXME: return value ?
116 bool lockInset(UpdatableInset * inset);
117 /// unlock the given inset
118 int unlockInset(UpdatableInset * inset);
119 /// unlock the currently locked inset
122 /// return the current encoding at the cursor
123 Encoding const * getEncoding() const;
125 /// return the parent language of the given inset
126 Language const * getParentLanguage(InsetOld * inset) const;
128 /// Select the "current" word
129 void selectLastWord();
130 /// replace the currently selected word
131 void replaceWord(string const & replacestring);
132 /// Update after spellcheck finishes
133 void endOfSpellCheck();
134 /// return the next word
135 WordLangTuple const nextWord(float & value);
137 /// move cursor to the named label
138 void gotoLabel(string const & label);
145 /// get the stored error list
146 ErrorList const & getErrorList() const;
147 /// show the error list to the user
148 void showErrorList(string const &) const;
149 /// set the cursor based on the given TeX source row
150 void setCursorFromRow(int row);
153 * Insert an inset into the buffer.
154 * Place it in a layout of lout,
156 bool insertInset(InsetOld * inset, string const & lout = string());
158 /// Inserts a lyx file at cursor position. return false if it fails
159 bool insertLyXFile(string const & file);
162 bool fitLockedInsetCursor(int x, int y, int asc, int desc);
164 /// hide the cursor if it is visible
167 /// center the document view around the cursor
169 /// scroll document by the given number of lines of default height
170 void scroll(int lines);
171 /// Scroll the view by a number of pixels
172 void scrollDocView(int);
174 /// return the pixel width of the document view
175 int workWidth() const;
176 /// return the pixel height of the document view
177 int workHeight() const;
179 /// switch between primary and secondary keymaps for RTL entry
183 bool ChangeRefsIfUnique(string const & from, string const & to);
185 /// get the contents of the window system clipboard
186 string const getClipboard() const;
187 /// fill the window system clipboard
188 void stuffClipboard(string const &) const;
189 /// tell the window system we have a selection
190 void haveSelection(bool sel);
192 /// execute the given function
193 bool dispatch(FuncRequest const & argument);
196 /// Set the current locking inset
197 void theLockingInset(UpdatableInset * inset);
199 /// return the lyxtext containing this inset
200 LyXText * getParentText(InsetOld * inset) const;
203 * Change all insets with the given code's contents to a new
204 * string. May only be used with InsetCommand-derived insets
205 * Returns true if a screen update is needed.
207 bool ChangeInsets(InsetOld::Code code, string const & from,
212 friend struct BufferView::Pimpl;
217 #endif // BUFFERVIEW_H