X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBufferView.h;h=afe153561e2c5bd3bff1619ab253189b29ec0a22;hb=ebef7baa265f097b3372ed6239495255c6b64e49;hp=1d10fc9db451713740a4c38d5f452cf0c45159cb;hpb=56e007b94ecc2db8ae9e80dfba22f43bd356a846;p=lyx.git diff --git a/src/BufferView.h b/src/BufferView.h index 1d10fc9db4..afe153561e 100644 --- a/src/BufferView.h +++ b/src/BufferView.h @@ -1,13 +1,11 @@ // -*- 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 @@ -16,84 +14,98 @@ #pragma interface #endif -#include FORMS_H_LOCATION -#include "BackStack.h" -#include "LaTeX.h" +#include "LString.h" #include "undo.h" +#include "insets/inset.h" + +#include + class LyXView; +class LyXText; +class TeXErrors; class Buffer; class LyXScreen; -class Inset; -class LyXText; -class WorkArea; +class Language; +class Painter; +class UpdatableInset; +class WordLangTuple; /// -class BufferView { +class BufferView : boost::noncopyable { public: + /// + enum UpdateCodes { + /// + UPDATE = 0, + /// + SELECT = 1, + /// + FITCUR = 2, + /// + CHANGE = 4 + }; + /// BufferView(LyXView * owner, int , int , int, int); /// ~BufferView(); /// - Buffer * buffer() const { return buffer_; } -#ifdef USE_PAINTER + Buffer * buffer() const; /// - Painter & painter(); -#endif + Painter & painter() const; /// - WorkArea * getWorkArea() { return workarea; } + LyXScreen & screen() const; /// void buffer(Buffer * b); /// - void resize(int, int, int, int); - /// void resize(); + /** + * 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(); /// - void redraw(); - /// - void fitCursor(); + bool fitCursor(); /// void update(); - /// - void update(signed char f); - /// - void smallUpdate(signed char f); + // + void update(LyXText *, UpdateCodes uc); /// void updateScrollbar(); /// void redoCurrentBuffer(); /// - int resizeCurrentBuffer(); - /// - void gotoError(); + bool available() const; /// - void cursorPrevious(); + LyXView * owner() const; /// - void cursorNext(); - /// - bool available() const; + void beforeChange(LyXText *); /// - LyXView * owner() const { return owner_; } + void savePosition(unsigned int i); /// - LyXScreen * getScreen() { - fl_set_timer(timer_cursor, 0.4); - return screen; - } + void restorePosition(unsigned int i); /// - void beforeChange(); - /// - void savePosition(); - /// - void restorePosition(); + bool isSavedPosition(unsigned int i); /** This holds the mapping between buffer paragraphs and screen rows. This should be private...but not yet. (Lgb) */ LyXText * text; /// - UpdatableInset * the_locking_inset; + LyXText * getLyXText() const; /// - bool inset_slept; + LyXText * getParentText(Inset * inset) const; + /// + Language const * getParentLanguage(Inset * inset) const; + /// + int workWidth() const; + /// + UpdatableInset * theLockingInset() const; + /// + void theLockingInset(UpdatableInset * inset); + /// + void updateInset(Inset * inset, bool mark_dirty); /// int slx; /// @@ -101,163 +113,99 @@ public: /// void insetUnlock(); /// - void insetSleep(); - /// - void insetWakeup(); - /// void replaceWord(string const & replacestring); /// void endOfSpellCheck(); /// void selectLastWord(); - /// - char * nextWord(float & value); - /// - void insertCorrectQuote(); - /// - void gotoNote(); + /// return the next word + WordLangTuple const nextWord(float & value); /// 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(); - /// - void toggleFloat(); - /// - void openStuff(); - /// - void insertNote(); - /// - void allFloats(char flag, char figmar); /// removes all autodeletable insets bool removeAutoInsets(); /// void insertErrors(TeXErrors & terr); /// 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, + if no_table make sure that it doesn't end up in a table. + */ + 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); /// - int lockInset(UpdatableInset * inset); + bool lockInset(UpdatableInset * inset); /// - void showLockedInsetCursor(long x, long y, int asc, int desc); + void showLockedInsetCursor(int x, int y, int asc, int desc); /// - void hideLockedInsetCursor(long x, long y, int asc, int desc); + void hideLockedInsetCursor(); /// - void fitLockedInsetCursor(long x, long y, int asc, int desc); + bool fitLockedInsetCursor(int x, int y, int asc, int desc); /// int unlockInset(UpdatableInset * inset); /// void lockedInsetStoreUndo(Undo::undo_kind kind); -private: - friend class WorkArea; - - /// Update pixmap of screen - void updateScreen(); /// - void workAreaExpose(); + void showCursor(); /// - void ScrollUpOnePage(); + void hideCursor(); /// - void ScrollDownOnePage(); + void toggleSelection(bool = true); /// - void create_view(); - /// - Inset * checkInsetHit(int & x, int & y); - /// - int ScrollUp(long time); + void toggleToggle(); /// - int ScrollDown(long time); + void center(); + /// scroll document by the given number of lines of default height + void scroll(int lines); -public: - /// - bool focus() const; - /// - void focus(bool); - /// - bool active() const; - /// A callback for the up arrow in the scrollbar. - void UpCB(long time, int button); - /// A callback for the slider in the scrollbar. - void ScrollCB(double); - /// A callback for the down arrow in the scrollbar. - void DownCB(long time, int button); + /// Scroll the view by a number of pixels + void scrollDocView(int); /// - static void CursorToggleCB(FL_OBJECT * ob, long); -#if 0 - /** Work area free object handler - */ - static int work_area_handler(FL_OBJECT *, int event, - FL_Coord, FL_Coord, int key, void *xev); -#endif - - /// - void SetState(); + void switchKeyMap(); -private: - /// - void WorkAreaMotionNotify(int x, int y, unsigned int state); - /// - void WorkAreaButtonPress(int x, int y, unsigned int button); - /// - void WorkAreaButtonRelease(int x, int y, unsigned int button); /// - void WorkAreaSelectionNotify(Window win, XEvent * event); + bool ChangeInsets(Inset::Code code, string const & from, + string const & to); /// - LyXView * owner_; + bool ChangeRefsIfUnique(string const & from, string const & to); /// - Buffer * buffer_; + bool ChangeCitationsIfUnique(string const & from, string const & to); /// - LyXScreen * screen; + string const getClipboard() const; /// - long current_scrollbar_value; + void stuffClipboard(string const &) const; /// - bool lyx_focus; - /// - bool work_area_focus; + bool dispatch(FuncRequest const & argument); + /// height of a normal line in pixels (zoom factor considered) + int defaultHeight() const; + /// + void haveSelection(bool sel); /// - FL_OBJECT * figinset_canvas; + int workHeight() const; + +private: /// - FL_OBJECT * timer_cursor; - /// - BackStack backstack; + struct Pimpl; /// - int last_click_x, last_click_y; + friend struct BufferView::Pimpl; /// - WorkArea * workarea; + Pimpl * pimpl_; }; + +/// +BufferView::UpdateCodes operator|(BufferView::UpdateCodes uc1, + BufferView::UpdateCodes uc2); + #endif