// -*- 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
#pragma interface
#endif
-#include FORMS_H_LOCATION
+#include "LString.h"
#include "undo.h"
+#include "insets/inset.h"
+
+#include <boost/utility.hpp>
+
class LyXView;
class LyXText;
class TeXErrors;
+class Buffer;
+class LyXScreen;
+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);
///
///
Buffer * buffer() const;
///
- Painter & painter();
+ Painter & painter() const;
///
- void buffer(Buffer * b);
+ LyXScreen & screen() const;
///
- void resize(int, int, int, int);
+ void buffer(Buffer * b);
///
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);
-#if 0
- ///
- void smallUpdate(signed char f);
-#endif
+ //
+ void update(LyXText *, UpdateCodes uc);
///
void updateScrollbar();
///
- void redoCurrentBuffer();
+ Inset * checkInsetHit(LyXText *, int & x, int & y);
///
- int resizeCurrentBuffer();
+ void redoCurrentBuffer();
///
- void gotoError();
+ void cursorPrevious(LyXText *);
///
- void cursorPrevious();
+ void cursorNext(LyXText *);
///
- void cursorNext();
- ///
bool available() const;
///
LyXView * owner() const;
///
- void beforeChange();
- ///
- void savePosition();
- ///
- void restorePosition();
+ void beforeChange(LyXText *);
+ ///
+ void savePosition(unsigned int i);
+ ///
+ void restorePosition(unsigned int i);
+ ///
+ 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;
///
- unsigned short paperWidth() const;
+ LyXText * getLyXText() const;
///
- UpdatableInset * the_locking_inset;
+ LyXText * getParentText(Inset * inset) const;
///
- void updateInset(Inset * inset, bool mark_dirty);
+ Language const * getParentLanguage(Inset * inset) const;
+ ///
+ int workWidth() const;
+ ///
+ UpdatableInset * theLockingInset() const;
+ ///
+ void theLockingInset(UpdatableInset * inset);
///
- bool inset_slept;
+ void updateInset(Inset * inset, bool mark_dirty);
///
int slx;
///
///
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 cut(bool realcut = true);
///
void copy();
///
///
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.
+ 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);
+ 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 showLockedInsetCursor(int x, int 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 toggleToggle();
///
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);
+ /// Scroll the view by a number of pixels
+ void scrollDocView(int);
///
- void setState();
+ void switchKeyMap();
///
- void pushIntoUpdateList(Inset * i);
+ bool ChangeInsets(Inset::Code code, string const & from,
+ string const & to);
///
- void workAreaExpose();
+ bool ChangeRefsIfUnique(string const & from, string const & to);
///
- void workAreaButtonPress(int x, int y, unsigned int button);
+ bool ChangeCitationsIfUnique(string const & from, string const & to);
///
- void workAreaButtonRelease(int x, int y, unsigned int button);
+ string const getClipboard() const;
///
- void workAreaMotionNotify(int x, int y, unsigned int state);
+ void pasteClipboard(bool asPara);
///
- void doubleClick(int x, int y, unsigned int button);
+ void stuffClipboard(string const &) const;
///
- void tripleClick(int x, int y, unsigned int button);
+ bool dispatch(FuncRequest const & argument);
+private:
///
- void enterView();
+ struct Pimpl;
///
- void leaveView();
+ friend struct BufferView::Pimpl;
///
- void workAreaSelectionNotify(Window win, XEvent * event);
-private:
- struct Pimpl;
Pimpl * pimpl_;
};
+
+///
+BufferView::UpdateCodes operator|(BufferView::UpdateCodes uc1,
+ BufferView::UpdateCodes uc2);
+
#endif