#ifndef BUFFER_VIEW_H
#define BUFFER_VIEW_H
+#include "cursor.h"
#include "metricsinfo.h"
#include "frontends/LyXKeySym.h"
#include "support/types.h"
#include <boost/utility.hpp>
+#include <boost/signal.hpp>
#include <string>
class Buffer;
class Change;
class DocIterator;
-class ErrorList;
class FuncRequest;
class FuncStatus;
class Language;
void setBuffer(Buffer * b);
/// return the buffer being viewed
Buffer * buffer() const;
- /// return the first layout of the Buffer.
- std::string firstLayout();
/// return the owning main view
LyXView * owner() const;
/// return the Scrollbar Parameters
ScrollbarParameters const & scrollbarParameters() const;
- /// FIXME
- bool available() const;
-
/// Save the current position as bookmark i
void savePosition(unsigned int i);
/// Restore the position from bookmark i
/// return the lyxtext we are using
LyXText const * getLyXText() const;
- /// 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);
void scroll(int lines);
/// Scroll the view by a number of pixels
void scrollDocView(int pixels);
+ /// Set the cursor position based on the scrollbar one.
+ void setCursorFromScrollbar();
/// return the pixel width of the document view
int workWidth() const;
bool dispatch(FuncRequest const & argument);
///
- void selectionRequested();
+ lyx::docstring const requestSelection();
///
- void selectionLost();
+ void clearSelection();
///
void workAreaResize(int width, int height);
- /// Receive a keypress
- void workAreaKeyPress(LyXKeySymPtr key, key_modifier::state state);
-
/// a function should be executed from the workarea
bool workAreaDispatch(FuncRequest const & ev);
- /// clear the X selection
- void unsetXSel();
-
/// access to offset
int offset_ref() const;
/// access to anchor
LCursor & cursor();
/// access to full cursor
LCursor const & cursor() const;
- ///
- LyXText * text() const;
/// sets cursor and open all relevant collapsable insets.
void setCursor(DocIterator const &);
/// sets cursor; this is used when handling LFUN_MOUSE_PRESS.
///
void updateMetrics(bool singlepar = false);
+ /// This signal is emitted when some message shows up.
+ boost::signal<void(lyx::docstring)> message;
+
private:
///
- class Pimpl;
+ bool multiParSel();
+ ///
+ int width_;
+ ///
+ int height_;
+ ///
+ ScrollbarParameters scrollbarParameters_;
+
+ /// track changes for the document
+ void trackChanges();
+
+ ///
+ ViewMetricsInfo metrics_info_;
+
+ ///
+ LyXView * owner_;
+ ///
+ Buffer * buffer_;
+
+ /// Estimated average par height for scrollbar
+ int wh_;
+ ///
+ class Position {
+ public:
+ /// Filename
+ std::string filename;
+ /// Cursor paragraph Id
+ int par_id;
+ /// Cursor position
+ lyx::pos_type par_pos;
+ ///
+ Position() : par_id(0), par_pos(0) {}
+ ///
+ Position(std::string const & f, int id, lyx::pos_type pos)
+ : filename(f), par_id(id), par_pos(pos) {}
+ };
+ ///
+ std::vector<Position> saved_positions;
+ ///
+ void menuInsertLyXFile(std::string const & filen);
+
+ /// this is used to handle XSelection events in the right manner
+ struct {
+ CursorSlice cursor;
+ CursorSlice anchor;
+ bool set;
+ } xsel_cache_;
+ ///
+ LCursor cursor_;
+ ///
+ bool multiparsel_cache_;
///
- friend class BufferView::Pimpl;
+ lyx::pit_type anchor_ref_;
///
- Pimpl * pimpl_;
+ int offset_ref_;
};
#endif // BUFFERVIEW_H