]> git.lyx.org Git - lyx.git/blobdiff - src/BufferView.h
add missing 'else'
[lyx.git] / src / BufferView.h
index 1584f02f8eb777ad65f0b40da6904e7d8693585b..b2261ff69f638f0d131307924e0a8ce35c391662 100644 (file)
 // -*- 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 FORMS_H_LOCATION
+#include "LString.h"
 #include "undo.h"
 
+#include "insets/inset.h"
+
+#include <boost/utility.hpp>
+
+class Change;
 class LyXView;
 class LyXText;
 class TeXErrors;
 class Buffer;
+class LyXScreen;
+class Language;
+class Painter;
+class UpdatableInset;
+class WordLangTuple;
+class Encoding;
 
-///
-class BufferView {
+/**
+ * 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:
-       ///
-       BufferView(LyXView * owner, int , int , int, int);
-       ///
+       /**
+        * Codes to store necessary pending updates
+        * of the document rendering.
+        */
+       enum UpdateCodes {
+               UPDATE = 0, //< FIXME
+               SELECT = 1, //< selection change
+               FITCUR = 2, //< the cursor needs fitting into the view
+               CHANGE = 4  //< document data has changed
+       };
+
+       /**
+        * 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();
-       ///
+
+       /// 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();
-       ///
+       /**
+        * 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();
+
+       /// fit the user cursor within the visible view
+       bool fitCursor();
+       /// perform pending painting updates
        void update();
-       ///
-       void update(signed char f);
-       ///
+       // update for a particular lyxtext
+       void update(LyXText *, UpdateCodes uc);
+       /// update for a particular inset
+       void updateInset(Inset * inset, bool mark_dirty);
+       /// reset the scrollbar to reflect current view position
        void updateScrollbar();
-       ///
+       /// FIXME
        void redoCurrentBuffer();
-       ///
-       int resizeCurrentBuffer();
-       ///
-       void gotoError();
-       ///
-       void cursorPrevious();
-       ///
-       void cursorNext();
-       /// 
+
+       /// FIXME
        bool available() const;
-       ///
-       LyXView * owner() const;
-       ///
-       void beforeChange();
-        ///
-        void savePosition();
-        ///
-        void restorePosition();
-       /** 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;
-       ///
-       unsigned short paperWidth() const;
-       ///
-       UpdatableInset * the_locking_inset;
-       ///
-       void updateInset(Inset * inset, bool mark_dirty);
-       ///
-       bool inset_slept;
-       ///
-       int slx;
-       ///
-       int sly;
-       ///
+       /// return the lyxtext we are using
+       LyXText * getLyXText() const;
+
+       /// Return the current inset we are "locked" in
+       UpdatableInset * theLockingInset() const;
+       /// 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(Inset * 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();
-       ///
-       char * nextWord(float & value);
-       ///
-       void insertCorrectQuote();
-       ///
-       void gotoNote();
-       ///
+       /// return the next word
+       WordLangTuple const nextWord(float & value);
+
+       /// move cursor to the named label
        bool gotoLabel(string const & label);
-       ///
-       void paste();
-       ///
-       void cut();
-       ///
-       void copy();
-       ///
-       void pasteEnvironment();
-       ///
+
+       /// copy the environment type from current paragraph
        void copyEnvironment();
-       ///
-       void hfill();
-       ///
-       void protectedBlank();
-       ///
-       void newline();
-       ///
-       void menuSeparator();
-       ///
-       void endOfSentenceDot();
-       ///
-       void ldots();
-       ///
-       void hyphenationPoint();
-       ///
-       void menuUndo();
-       ///
-       void menuRedo();
-       ///
-       void toggleFloat();
-       ///
-       void openStuff();
-       ///
-       void insertNote();
-       ///
-       void allFloats(char flag, char figmar);
+       /// set the current paragraph's environment type
+       void pasteEnvironment();
+
+       /// undo last action
+       void undo();
+       /// redo last action
+       void redo();
+
        /// removes all autodeletable insets
        bool removeAutoInsets();
-       ///
+       /// insert all errors found when running latex
        void insertErrors(TeXErrors & terr);
-       ///
+       /// set the cursor based on the given TeX source row
        void setCursorFromRow(int row);
-       /** Insert an inset into the buffer
-           Insert inset into buffer, placing 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
-       void open_new_inset(UpdatableInset * new_inset);
-       /// Inserts a lyx file at cursor position. Returns false if it fails.
+
+       /**
+        * Insert an inset into the buffer.
+        * Place it in a layout of lout,
+        */
+       bool insertInset(Inset * 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(long x, long y, int asc, int desc);
-       ///
-       void hideLockedInsetCursor();
-       ///
-       void fitLockedInsetCursor(long x, long y, int asc, int desc);
-       ///
-       int unlockInset(UpdatableInset * inset);
-       ///
-       void lockedInsetStoreUndo(Undo::undo_kind kind);
-       ///
+
+       /// show the user cursor
        void showCursor();
-       ///
+       /// hide the user cursor
        void hideCursor();
-       ///
+       /// FIXME
+       void showLockedInsetCursor(int x, int y, int asc, int desc);
+       /// FIXME
+       void hideLockedInsetCursor();
+       /// FIXME
+       bool fitLockedInsetCursor(int x, int y, int asc, int desc);
+       /// FIXME
+       void lockedInsetStoreUndo(Undo::undo_kind kind);
+       /// FIXME
        void toggleSelection(bool = true);
-       ///
+       /// FIXME: my word !
        void toggleToggle();
-       ///
+
+       /// 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);
-
-       ///
-       static void cursorToggleCB(FL_OBJECT * ob, long);
-
-       ///
-       void setState();
-
-       ///
-       void pushIntoUpdateList(Inset * i);
-       ///
-       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();
-       ///
-       void workAreaSelectionNotify(Window win, XEvent * event);
-       ///
-       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);
+       /// 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(Inset * 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(Inset::Code code, string const & from,
+                         string const & to);
+
+
        struct Pimpl;
+       friend struct BufferView::Pimpl;
+
        Pimpl * pimpl_;
 };
 
-#endif
+
+BufferView::UpdateCodes operator|(BufferView::UpdateCodes uc1,
+                                 BufferView::UpdateCodes uc2);
+
+#endif // BUFFERVIEW_H