// -*- C++ -*-
-/* This file is part of
- * ======================================================
- *
- * LyX, The Document Processor
- *
- * Copyright 1995 Matthias Ettrich
- * Copyright 1995-2000 The LyX Team.
+/**
+ * \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 "insets/inset.h"
-#include FORMS_H_LOCATION
-#include "undo.h"
#include <boost/utility.hpp>
+class Change;
class LyXView;
class LyXText;
class TeXErrors;
class Buffer;
class LyXScreen;
-class WorkArea;
+class Language;
+class Painter;
+class UpdatableInset;
+class WordLangTuple;
+class Encoding;
+class ErrorList;
-///
-class BufferView : public noncopyable {
+/**
+ * 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();
- ///
- Buffer * buffer() const;
- ///
- Painter & painter();
- ///
- LyXScreen * screen() const;
- ///
- WorkArea * workarea() const;
- ///
+
+ /// set the buffer we are viewing
void buffer(Buffer * b);
- ///
- void resize(int, int, int, int);
- ///
+ /// 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;
+
+ /// resize event has happened
void resize();
- ///
- void redraw();
- ///
- void fitCursor(LyXText *);
- ///
+ /**
+ * Repaint the pixmap. Used for when we don't want
+ * to go through the full update() logic, just a simple
+ * 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,
- unsigned int button);
- ///
+ /// FIXME
void redoCurrentBuffer();
- ///
- int resizeCurrentBuffer();
- ///
- void gotoError();
- ///
- void cursorPrevious(LyXText *);
- ///
- void cursorNext(LyXText *);
- ///
+
+ /// FIXME
bool available() const;
- ///
- LyXView * owner() const;
- ///
- void beforeChange();
- ///
- void savePosition();
- ///
- void restorePosition();
- ///
- bool NoSavedPositions();
- /** This holds the mapping between buffer paragraphs and screen rows.
- This should be private...but not yet. (Lgb)
- */
+
+ /// 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);
+
+ /// 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;
- ///
- 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);
- ///
- bool inset_slept;
- ///
- 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();
- ///
- void insetSleep();
- ///
- void insetWakeup();
- ///
+
+ /// 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);
- ///
- void insertCorrectQuote();
- ///
- void gotoNote();
- ///
- bool gotoLabel(string const & label);
- ///
- void paste();
- ///
- void cut();
- ///
- void copy();
- ///
- void pasteEnvironment();
- ///
- void copyEnvironment();
- ///
- void hfill();
- ///
- void protectedBlank();
- ///
- void newline();
- ///
- void menuSeparator();
- ///
- void endOfSentenceDot();
- ///
- void ldots();
- ///
- void hyphenationPoint();
- ///
- void menuUndo();
- ///
- void menuRedo();
-#ifndef NEW_INSETS
- ///
- void toggleFloat();
- ///
- void openStuff();
-#endif
- ///
- void insertNote();
-#ifndef NEW_INSETS
- ///
- void allFloats(char flag, char figmar);
-#endif
- /// 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);
- /// open and lock an updatable inset
- bool open_new_inset(UpdatableInset * new_inset);
- /** 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();
- ///
- void fitLockedInsetCursor(int x, int y, int asc, int desc);
- ///
- int unlockInset(UpdatableInset * inset);
- ///
- void lockedInsetStoreUndo(Undo::undo_kind kind);
- ///
- void showCursor();
- ///
- void hideCursor();
- ///
+
+ /// FIXME
+ bool fitLockedInsetCursor(int x, int y, int asc, int desc);
+ /// FIXME
void toggleSelection(bool = true);
- ///
+ /// FIXME: my word !
void toggleToggle();
- ///
+
+ /// hide the cursor if it is visible
+ void hideCursor();
+
+ /// center the document view around the cursor
void center();
-
- ///
- bool focus() const;
- ///
- void focus(bool);
- ///
- bool active() const;
- ///
- bool belowMouse() const;
- /// A callback for the slider in the scrollbar.
- void scrollCB(double);
-
- ///
- void setState();
-
- ///
- void pushIntoUpdateList(Inset * i);
-#if 0
- ///
- void workAreaExpose();
- ///
- void workAreaButtonPress(int x, int y, unsigned int button);
- ///
- void workAreaButtonRelease(int x, int y, unsigned int button);
- ///
- void workAreaMotionNotify(int x, int y, unsigned int state);
- ///
- void doubleClick(int x, int y, unsigned int button);
- ///
- void tripleClick(int x, int y, unsigned int button);
- ///
- void enterView();
- ///
- void leaveView();
-#endif
- ///
- bool ChangeRefs(string const & from, string const & to);
- ///
+ /// 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(string const & from, string const & to);
- ///
- void pasteClipboard(bool asPara);
- ///
+ /// FIXME
+ bool ChangeCitationsIfUnique(string const & from, string const & to);
+
+ /// get the contents of the window system clipboard
+ string const getClipboard() const;
+ /// fill the window system clipboard
void stuffClipboard(string const &) const;
+ /// 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