// -*- C++ -*-
-/** \file
- * Copyright 2002 the LyX Team
- * Read the file COPYING
+/**
+ * \file BufferView.h
+ * Copyright 2002 the LyX Team
+ * Read the file COPYING
*
* \author Lars Gullik Bjønnes
*/
#ifndef BUFFER_VIEW_H
#define BUFFER_VIEW_H
-#ifdef __GNUG__
-#pragma interface
-#endif
-
#include "LString.h"
-#include "undo.h"
-#include "commandtags.h"
#include "insets/inset.h"
#include <boost/utility.hpp>
+class Change;
class LyXView;
class LyXText;
class TeXErrors;
class Language;
class Painter;
class UpdatableInset;
+class WordLangTuple;
+class Encoding;
+class ErrorList;
-///
+/**
+ * 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:
- ///
+ /**
+ * Codes to store necessary pending updates
+ * of the document rendering.
+ */
enum UpdateCodes {
- ///
- UPDATE = 0,
- ///
- SELECT = 1,
- ///
- FITCUR = 2,
- ///
- CHANGE = 4
+ UPDATE = 0, //< repaint
+ SELECT = 1 //< reset selection to current cursor pos
};
- ///
- BufferView(LyXView * owner, int , int , int, int);
- ///
+ /**
+ * 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;
- ///
- void buffer(Buffer * b);
- ///
+ /// return the owning main view
+ LyXView * owner() const;
+
+ /// resize event has happened
void resize();
/**
* Repaint the pixmap. Used for when we don't want
* repaint of the whole screen.
*/
void repaint();
- ///
+
+ /// reload the contained buffer
+ void reload();
+ /// create a new buffer based on template
+ bool newFile(string const & fname, string const & tname,
+ bool named = true);
+ /// load a buffer into the view
+ bool loadLyXFile(string const & name, bool tolastfiles = true);
+
+ /// fit the user cursor within the visible view
bool fitCursor();
- ///
+ /// perform pending painting updates
void update();
- //
+ // update for a particular lyxtext
void update(LyXText *, UpdateCodes uc);
- ///
+ /// update for the top-level lyxtext
+ void update(UpdateCodes uc);
+ /// update for a particular inset
+ void updateInset(InsetOld * inset);
+ /// reset the scrollbar to reflect current view position
void updateScrollbar();
- ///
- Inset * checkInsetHit(LyXText *, int & x, int & y);
- ///
+ /// FIXME
void redoCurrentBuffer();
- ///
- void cursorPrevious(LyXText *);
- ///
- void cursorNext(LyXText *);
- ///
+
+ /// FIXME
bool available() const;
- ///
- LyXView * owner() const;
- ///
+
+ /// FIXME
void beforeChange(LyXText *);
- ///
+
+ /// 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);
- /** This holds the mapping between buffer paragraphs and screen rows.
- This should be private...but not yet. (Lgb)
- */
+
+ /// return the current change at the cursor
+ Change const getCurrentChange();
+
+ /**
+ * This holds the mapping between buffer paragraphs and screen rows.
+ * This should be private...but not yet. (Lgb)
+ */
LyXText * text;
- ///
+ /// return the lyxtext we are using
LyXText * getLyXText() const;
- ///
- LyXText * getParentText(Inset * inset) const;
- ///
- Language const * getParentLanguage(Inset * inset) const;
- ///
- int workWidth() const;
- ///
+
+ /// Return the current inset we are "locked" in
UpdatableInset * theLockingInset() const;
- ///
- void theLockingInset(UpdatableInset * inset);
- ///
- void updateInset(Inset * inset, bool mark_dirty);
- ///
- int slx;
- ///
- int sly;
- ///
+ /// lock the given inset FIXME: return value ?
+ bool lockInset(UpdatableInset * inset);
+ /// unlock the given inset
+ int unlockInset(UpdatableInset * inset);
+ /// unlock the currently locked inset
void insetUnlock();
- ///
+
+ /// 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;
+
+ /// Select the "current" word
+ void selectLastWord();
+ /// replace the currently selected word
void replaceWord(string const & replacestring);
- ///
+ /// Update after spellcheck finishes
void endOfSpellCheck();
- ///
- void selectLastWord();
- ///
- string const nextWord(float & value);
- ///
- bool gotoLabel(string const & label);
- ///
- void paste();
- ///
- void cut(bool realcut = true);
- ///
- void copy();
- ///
- void pasteEnvironment();
- ///
- void copyEnvironment();
- ///
- void menuUndo();
- ///
- void menuRedo();
- /// removes all autodeletable insets
- bool removeAutoInsets();
- ///
- void insertErrors(TeXErrors & terr);
- ///
+ /// return the next word
+ WordLangTuple const nextWord(float & value);
+
+ /// move cursor to the named label
+ void gotoLabel(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(string const &) const;
+ /// set the cursor based on the given TeX source row
void setCursorFromRow(int row);
- /** Insert an inset into the buffer.
- Placie it in a layout of lout,
- if no_table make sure that it doesn't end up in a table.
- */
- //bool insertInset(Inset * inset, string const & lout = string(),
- // bool no_table = false);
- bool insertInset(Inset * inset, string const & lout = string());
- /** Inserts a lyx file at cursor position.
- \return #false# if it fails.
- */
+
+ /**
+ * Insert an inset into the buffer.
+ * Place it in a layout of lout,
+ */
+ bool insertInset(InsetOld * inset, string const & lout = string());
+
+ /// Inserts a lyx file at cursor position. return false if it fails
bool insertLyXFile(string const & file);
- ///
- bool lockInset(UpdatableInset * inset);
- ///
- void showLockedInsetCursor(int x, int y, int asc, int desc);
- ///
- void hideLockedInsetCursor();
- ///
+
+ /// FIXME
bool fitLockedInsetCursor(int x, int y, int asc, int desc);
- ///
- int unlockInset(UpdatableInset * inset);
- ///
- void lockedInsetStoreUndo(Undo::undo_kind kind);
- ///
- void showCursor();
- ///
- void hideCursor();
- ///
+ /// FIXME
void toggleSelection(bool = true);
- ///
+ /// FIXME: my word !
void toggleToggle();
- ///
- void center();
+ /// 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);
- ///
- void setState();
+ /// return the pixel width of the document view
+ int workWidth() const;
+ /// return the pixel height of the document view
+ int workHeight() const;
- ///
- bool ChangeInsets(Inset::Code code, string const & from,
- string const & to);
- ///
+ /// switch between primary and secondary keymaps for RTL entry
+ void switchKeyMap();
+
+ /// FIXME
bool ChangeRefsIfUnique(string const & from, string const & to);
- ///
+ /// FIXME
bool ChangeCitationsIfUnique(string const & from, string const & to);
- ///
+
+ /// get the contents of the window system clipboard
string const getClipboard() const;
- ///
- void pasteClipboard(bool asPara);
- ///
+ /// fill the window system clipboard
void stuffClipboard(string const &) const;
- ///
- bool Dispatch(kb_action action, string const & argument);
+ /// tell the window system we have a selection
+ void haveSelection(bool sel);
+
+ /// execute the given function
+ bool dispatch(FuncRequest const & argument);
+
private:
- ///
+ /// Set the current locking inset
+ void theLockingInset(UpdatableInset * inset);
+
+ /// return the lyxtext containing this inset
+ LyXText * getParentText(InsetOld * inset) const;
+
+ /**
+ * Change all insets with the given code's contents to a new
+ * string. May only be used with InsetCommand-derived insets
+ * Returns true if a screen update is needed.
+ */
+ bool ChangeInsets(InsetOld::Code code, string const & from,
+ string const & to);
+
+
struct Pimpl;
- ///
friend struct BufferView::Pimpl;
- ///
+
Pimpl * pimpl_;
};
-///
BufferView::UpdateCodes operator|(BufferView::UpdateCodes uc1,
BufferView::UpdateCodes uc2);
-#endif
+#endif // BUFFERVIEW_H