X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBufferView.h;h=b2261ff69f638f0d131307924e0a8ce35c391662;hb=cd3d0bc0b26f4d92fdfbfaac4adefebcf51f11ff;hp=25f536e785f0f0464601e176ae8781ebc6ad3c9b;hpb=41878b0abf6b591f780feb6f44a9947350646b74;p=lyx.git diff --git a/src/BufferView.h b/src/BufferView.h index 25f536e785..b2261ff69f 100644 --- a/src/BufferView.h +++ b/src/BufferView.h @@ -1,225 +1,245 @@ // -*- 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 + +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. */ - void 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); + /// 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