lyx_mirror/src/mathed/formulabase.h
Angus Leeming 122e7616d7 Minimise the use of the BufferView cache. The only things left using it
are InsetFormula, InsetExternal, InsetGraphic and InsetInclude that all
need to inform the BufferView of their changed status when the graphic
is loaded.


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@7897 a592a061-630c-0410-9148-cb99ea01b6c8
2003-10-12 18:54:12 +00:00

137 lines
3.4 KiB
C++

// -*- C++ -*-
/**
* \file formulabase.h
* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
* \author André Pönitz
*
* Full author contact details are available in file CREDITS.
*
* Common parts of the math LyX insets.
*/
#ifndef INSET_FORMULABASE_H
#define INSET_FORMULABASE_H
#include "insets/updatableinset.h"
#include <boost/weak_ptr.hpp>
class Buffer;
class BufferView;
class MathAtom;
/// An abstract base class for all math related LyX insets
class InsetFormulaBase : public UpdatableInset {
public:
///
InsetFormulaBase();
/// lowest x coordinate
virtual int xlow() const;
/// highest x coordinate
virtual int xhigh() const;
/// lowest y coordinate
virtual int ylow() const;
/// highest y coordinate
virtual int yhigh() const;
public:
///
// Don't use this for AMS validation as long as there is no
// user-accessible way to override "false positives"
virtual void validate(LaTeXFeatures &) const;
///
virtual InsetOld::Code lyxCode() const;
/// what appears in the minibuffer when opening
virtual std::string const editMessage() const;
///
virtual void fitInsetCursor(BufferView *) const;
/// FIXME
virtual void getCursorPos(BufferView *, int &, int &) const;
/// get the absolute document x,y of the cursor
virtual void getCursor(BufferView & bv, int & x, int & y) const;
///
virtual void toggleInsetSelection(BufferView * bv);
///
virtual void insetUnlock(BufferView *);
/// To allow transparent use of math editing functions
virtual dispatch_result localDispatch(FuncRequest const &);
/// To allow transparent use of math editing functions
//virtual void status(FuncRequest const &);
///
virtual MathAtom const & par() const = 0;
///
virtual MathAtom & par() = 0;
///
///
virtual bool searchForward(BufferView *, std::string const &,
bool = true, bool = false);
///
virtual bool searchBackward(BufferView *, std::string const &,
bool = true, bool = false);
///
virtual bool isTextInset() const { return true; }
///
virtual void mutateToText();
///
virtual void revealCodes(BufferView *) const;
///
virtual EDITABLE editable() const { return HIGHLY_EDITABLE; }
///
bool display() const;
// return the selection as std::string
std::string selectionAsString() const;
private:
/// unimplemented
void operator=(const InsetFormulaBase &);
/// common base for handling accents
void handleAccent(BufferView * bv, std::string const & arg, std::string const & name);
/// lfun handler
dispatch_result lfunMousePress(FuncRequest const &);
///
dispatch_result lfunMouseRelease(FuncRequest const &);
///
dispatch_result lfunMouseMotion(FuncRequest const &);
protected:
void cache(BufferView *) const;
BufferView * view() const;
protected:
/** Find the PreviewLoader, add a LaTeX snippet to it and
* start the loading process.
*
* Most insets have no interest in this capability, so the method
* defaults to empty.
*/
virtual void generatePreview(Buffer const &) const {}
///
void handleFont(BufferView * bv, std::string const & arg, std::string const & font);
///
void handleFont2(BufferView * bv, std::string const & arg);
///
mutable int xo_;
///
mutable int yo_;
private:
// Cache
mutable boost::weak_ptr<BufferView> view_;
};
// We don't really mess want around with mathed stuff outside mathed.
// So do it here.
void mathDispatch(FuncRequest const &);
///
void releaseMathCursor(BufferView * bv);
#endif