X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBufferView.h;h=b2261ff69f638f0d131307924e0a8ce35c391662;hb=cd3d0bc0b26f4d92fdfbfaac4adefebcf51f11ff;hp=454dab6cf8f18feeca1110752e32339c27d41078;hpb=c10dfd15cd79499dd23f161d8f1716c00a143e09;p=lyx.git diff --git a/src/BufferView.h b/src/BufferView.h index 454dab6cf8..b2261ff69f 100644 --- a/src/BufferView.h +++ b/src/BufferView.h @@ -10,10 +10,6 @@ #ifndef BUFFER_VIEW_H #define BUFFER_VIEW_H -#ifdef __GNUG__ -#pragma interface -#endif - #include "LString.h" #include "undo.h" @@ -21,6 +17,7 @@ #include +class Change; class LyXView; class LyXText; class TeXErrors; @@ -30,35 +27,50 @@ class Language; class Painter; class UpdatableInset; class WordLangTuple; +class Encoding; -/// +/** + * 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, //< FIXME + SELECT = 1, //< selection change + FITCUR = 2, //< the cursor needs fitting into the view + CHANGE = 4 //< document data has changed }; - /// - 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 @@ -66,155 +78,168 @@ public: * repaint of the whole screen. */ void repaint(); - /// + + /// 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 a particular inset + void updateInset(Inset * inset, bool mark_dirty); + /// 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(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(); /// return the next word WordLangTuple const nextWord(float & value); - /// + + /// move cursor to the named label bool gotoLabel(string const & label); - /// - void paste(); - /// - void cut(bool realcut = true); - /// - void copy(); - /// - void pasteEnvironment(); - /// + + /// copy the environment type from current paragraph void copyEnvironment(); - /// - void menuUndo(); - /// - void menuRedo(); + /// 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. - 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); + + /** + * 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. - */ + + /// Inserts a lyx file at cursor position. return false if it fails bool insertLyXFile(string const & file); - /// - bool lockInset(UpdatableInset * inset); - /// + + /// 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); - /// - int unlockInset(UpdatableInset * inset); - /// + /// FIXME void lockedInsetStoreUndo(Undo::undo_kind kind); - /// - void showCursor(); - /// - void hideCursor(); - /// + /// FIXME void toggleSelection(bool = true); - /// + /// FIXME: my word ! void toggleToggle(); - /// - void center(); + /// 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); - /// + /// 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(); - /// - bool ChangeInsets(Inset::Code code, string const & from, - string const & to); - /// + /// 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; - /// + /// 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_; }; -/// BufferView::UpdateCodes operator|(BufferView::UpdateCodes uc1, BufferView::UpdateCodes uc2); -#endif +#endif // BUFFERVIEW_H