2003-02-17 17:12:50 +00:00
|
|
|
|
// -*- C++ -*-
|
|
|
|
|
/**
|
2007-04-29 13:39:47 +00:00
|
|
|
|
* \file Inset.h
|
2003-02-17 17:12:50 +00:00
|
|
|
|
* This file is part of LyX, the document processor.
|
|
|
|
|
* Licence details can be found in the file COPYING.
|
|
|
|
|
*
|
2007-04-29 12:32:14 +00:00
|
|
|
|
* \author Alejandro Aguilar Sierra
|
2007-07-18 09:30:38 +00:00
|
|
|
|
* \author J<EFBFBD>rgen Vigna
|
|
|
|
|
* \author Lars Gullik Bj<EFBFBD>nnes
|
2007-04-29 12:32:14 +00:00
|
|
|
|
* \author Matthias Ettrich
|
2003-02-17 17:12:50 +00:00
|
|
|
|
*
|
2003-08-23 00:17:00 +00:00
|
|
|
|
* Full author contact details are available in file CREDITS.
|
2003-02-17 17:12:50 +00:00
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#ifndef INSETBASE_H
|
|
|
|
|
#define INSETBASE_H
|
|
|
|
|
|
2007-04-26 04:41:58 +00:00
|
|
|
|
#include "Dimension.h"
|
2006-11-28 15:15:49 +00:00
|
|
|
|
|
|
|
|
|
#include "support/docstream.h"
|
2006-10-21 00:16:43 +00:00
|
|
|
|
|
2005-07-17 01:13:36 +00:00
|
|
|
|
#include <memory>
|
2003-02-18 11:47:16 +00:00
|
|
|
|
#include <vector>
|
|
|
|
|
|
2006-10-21 00:16:43 +00:00
|
|
|
|
namespace lyx {
|
2006-10-20 09:29:19 +00:00
|
|
|
|
|
2007-08-20 17:04:36 +00:00
|
|
|
|
class BiblioInfo;
|
2003-09-18 20:18:39 +00:00
|
|
|
|
class Buffer;
|
2007-01-23 21:53:16 +00:00
|
|
|
|
class BufferParams;
|
2003-03-10 13:33:39 +00:00
|
|
|
|
class BufferView;
|
2007-08-30 18:03:17 +00:00
|
|
|
|
class Change;
|
|
|
|
|
class Color_color;
|
|
|
|
|
class Cursor;
|
2004-01-30 11:41:12 +00:00
|
|
|
|
class CursorSlice;
|
2003-02-18 11:47:16 +00:00
|
|
|
|
class FuncRequest;
|
2004-02-20 17:19:53 +00:00
|
|
|
|
class FuncStatus;
|
2007-08-30 18:03:17 +00:00
|
|
|
|
class InsetIterator;
|
2007-08-13 12:13:17 +00:00
|
|
|
|
class InsetLayout;
|
2006-09-16 18:11:38 +00:00
|
|
|
|
class InsetMath;
|
2006-03-17 19:45:28 +00:00
|
|
|
|
class InsetText;
|
2004-01-15 11:58:35 +00:00
|
|
|
|
class LaTeXFeatures;
|
2007-04-26 11:30:54 +00:00
|
|
|
|
class Lexer;
|
2007-08-30 18:03:17 +00:00
|
|
|
|
class MathAtom;
|
2003-05-30 06:48:24 +00:00
|
|
|
|
class MetricsInfo;
|
2004-01-26 10:13:15 +00:00
|
|
|
|
class OutputParams;
|
2007-08-30 18:03:17 +00:00
|
|
|
|
class PainterInfo;
|
|
|
|
|
class Paragraph;
|
|
|
|
|
class ParConstIterator;
|
|
|
|
|
class ParIterator;
|
|
|
|
|
class Text;
|
2006-11-13 16:53:49 +00:00
|
|
|
|
class TocList;
|
2007-08-30 20:46:42 +00:00
|
|
|
|
class EmbeddedFiles;
|
2003-02-17 17:12:50 +00:00
|
|
|
|
|
2004-01-26 10:13:15 +00:00
|
|
|
|
|
2006-10-21 00:16:43 +00:00
|
|
|
|
namespace graphics { class PreviewLoader; }
|
2004-01-26 10:13:15 +00:00
|
|
|
|
|
2004-01-30 11:41:12 +00:00
|
|
|
|
|
2003-02-17 17:12:50 +00:00
|
|
|
|
/// Common base class to all insets
|
2004-01-26 10:13:15 +00:00
|
|
|
|
|
|
|
|
|
// Do not add _any_ (non-static) data members as this would inflate
|
|
|
|
|
// everything storing large quantities of insets. Mathed e.g. would
|
|
|
|
|
// suffer.
|
|
|
|
|
|
2007-05-31 12:30:17 +00:00
|
|
|
|
class Inset {
|
2003-02-17 17:12:50 +00:00
|
|
|
|
public:
|
2003-06-02 10:03:27 +00:00
|
|
|
|
///
|
2004-01-13 12:28:35 +00:00
|
|
|
|
typedef ptrdiff_t difference_type;
|
2003-06-02 10:03:27 +00:00
|
|
|
|
/// short of anything else reasonable
|
2004-01-13 12:28:35 +00:00
|
|
|
|
typedef size_t size_type;
|
2003-02-18 11:47:16 +00:00
|
|
|
|
/// type for cell indices
|
2004-01-13 12:28:35 +00:00
|
|
|
|
typedef size_t idx_type;
|
2003-02-18 11:47:16 +00:00
|
|
|
|
/// type for cursor positions
|
2004-01-13 12:28:35 +00:00
|
|
|
|
typedef ptrdiff_t pos_type;
|
2003-02-18 11:47:16 +00:00
|
|
|
|
/// type for row numbers
|
2004-01-13 12:28:35 +00:00
|
|
|
|
typedef size_t row_type;
|
2003-02-18 11:47:16 +00:00
|
|
|
|
/// type for column numbers
|
2004-01-13 12:28:35 +00:00
|
|
|
|
typedef size_t col_type;
|
2003-02-18 11:47:16 +00:00
|
|
|
|
|
2003-06-16 11:49:38 +00:00
|
|
|
|
/// virtual base class destructor
|
2007-05-31 12:30:17 +00:00
|
|
|
|
virtual ~Inset() {}
|
2003-06-16 11:49:38 +00:00
|
|
|
|
|
2004-01-15 11:58:35 +00:00
|
|
|
|
/// identification as math inset
|
2006-09-16 18:11:38 +00:00
|
|
|
|
virtual InsetMath * asInsetMath() { return 0; }
|
2004-04-03 08:37:12 +00:00
|
|
|
|
/// true for 'math' math inset, but not for e.g. mbox
|
2004-02-25 14:39:14 +00:00
|
|
|
|
virtual bool inMathed() const { return false; }
|
2007-05-29 20:53:32 +00:00
|
|
|
|
/// is this inset based on the TextInset class?
|
|
|
|
|
virtual InsetText * asTextInset() { return 0; }
|
|
|
|
|
/// is this inset based on the TextInset class?
|
|
|
|
|
virtual InsetText const * asTextInset() const { return 0; }
|
|
|
|
|
|
2004-12-02 11:32:14 +00:00
|
|
|
|
/// the real dispatcher
|
2007-04-26 14:56:30 +00:00
|
|
|
|
void dispatch(Cursor & cur, FuncRequest & cmd);
|
2004-12-02 11:32:14 +00:00
|
|
|
|
/**
|
|
|
|
|
* \returns true if this function made a definitive decision on
|
|
|
|
|
* whether the inset wants to handle the request \p cmd or not.
|
|
|
|
|
* The result of this decision is put into \p status.
|
2005-04-13 09:43:58 +00:00
|
|
|
|
*
|
|
|
|
|
* Every request that is enabled in this method needs to be handled
|
|
|
|
|
* in doDispatch(). Normally we have a 1:1 relationship between the
|
|
|
|
|
* requests handled in getStatus() and doDispatch(), but there are
|
|
|
|
|
* some exceptions:
|
|
|
|
|
* - A request that is disabled in getStatus() does not need to
|
|
|
|
|
* appear in doDispatch(). It is guaranteed that doDispatch()
|
|
|
|
|
* is never called with this request.
|
2007-04-29 13:39:47 +00:00
|
|
|
|
* - A few requests are en- or disabled in Inset::getStatus().
|
2005-04-13 09:43:58 +00:00
|
|
|
|
* These need to be handled in the doDispatch() methods of the
|
2007-04-29 13:39:47 +00:00
|
|
|
|
* derived insets, since Inset::doDispatch() has not enough
|
2005-04-13 09:43:58 +00:00
|
|
|
|
* information to handle them.
|
2005-04-22 08:57:22 +00:00
|
|
|
|
* - LFUN_MOUSE_* need not to be handled in getStatus(), because these
|
|
|
|
|
* are dispatched directly
|
2004-12-02 11:32:14 +00:00
|
|
|
|
*/
|
2007-04-26 14:56:30 +00:00
|
|
|
|
virtual bool getStatus(Cursor & cur, FuncRequest const & cmd,
|
2004-03-18 13:57:20 +00:00
|
|
|
|
FuncStatus & status) const;
|
2003-02-18 11:47:16 +00:00
|
|
|
|
|
2003-11-04 12:36:59 +00:00
|
|
|
|
/// cursor enters
|
2007-04-26 14:56:30 +00:00
|
|
|
|
virtual void edit(Cursor & cur, bool left);
|
2003-11-04 12:36:59 +00:00
|
|
|
|
/// cursor enters
|
2007-04-29 13:39:47 +00:00
|
|
|
|
virtual Inset * editXY(Cursor & cur, int x, int y);
|
2003-11-04 12:36:59 +00:00
|
|
|
|
|
2003-06-02 10:03:27 +00:00
|
|
|
|
/// compute the size of the object returned in dim
|
2006-11-28 15:15:49 +00:00
|
|
|
|
/// \retval true if metrics changed.
|
|
|
|
|
virtual bool metrics(MetricsInfo & mi, Dimension & dim) const = 0;
|
2003-06-02 10:03:27 +00:00
|
|
|
|
/// draw inset and update (xo, yo)-cache
|
2003-05-30 06:48:24 +00:00
|
|
|
|
virtual void draw(PainterInfo & pi, int x, int y) const = 0;
|
2004-02-02 17:32:56 +00:00
|
|
|
|
/// draw inset selection if necessary
|
|
|
|
|
virtual void drawSelection(PainterInfo &, int, int) const {}
|
2004-01-30 11:41:12 +00:00
|
|
|
|
///
|
|
|
|
|
virtual bool editing(BufferView * bv) const;
|
2005-07-15 22:10:25 +00:00
|
|
|
|
///
|
|
|
|
|
virtual bool showInsetDialog(BufferView *) const { return false; }
|
2007-01-20 00:55:24 +00:00
|
|
|
|
|
|
|
|
|
/// draw inset decoration if necessary.
|
|
|
|
|
/// This can use \c drawMarkers() for example.
|
|
|
|
|
virtual void drawDecoration(PainterInfo &, int, int) const {}
|
2007-06-07 21:36:42 +00:00
|
|
|
|
/// draw four angular markers
|
|
|
|
|
void drawMarkers(PainterInfo & pi, int x, int y) const;
|
|
|
|
|
/// draw two angular markers
|
|
|
|
|
void drawMarkers2(PainterInfo & pi, int x, int y) const;
|
2004-01-30 11:41:12 +00:00
|
|
|
|
/// add space for markers
|
|
|
|
|
void metricsMarkers(Dimension & dim, int framesize = 1) const;
|
|
|
|
|
/// add space for markers
|
|
|
|
|
void metricsMarkers2(Dimension & dim, int framesize = 1) const;
|
2004-01-16 10:55:19 +00:00
|
|
|
|
/// last drawn position for 'important' insets
|
Move BufferView cached pointer out of LyXText:
* LyXText
- bv(), bv_owner, : deleted.
- These methods now need a (Buffer const &) argument: getFont(), applyOuterFont(), getLayoutFont(), getLabelFont(), setCharFont(), setLayout(), singleWidth(), leftMargin(), rightMargin(), computeRowMetrics(), isMainText(), spacing(), isRTL(), cursorX(), rowBreakPoint(), setRowWidth(), labelFill(), labelEnd().
- These methods now need a (BufferView const &) argument and are propably candidates for future removal when 1.6 is opened for development: redoParagraph(), x2pos(), getRowNearY(), getColumnNearX(), checkInsetHit(), setHeightOfRow().
- recUndo(): now need a LCursor argument.
* CoordCache::get(LyXText const *, pit_type):
- now const.
- use const_iterator instead of iterator.
* FontIterator:
- add (Buffer const &) argument to ctor
- buffer_: new const reference to applicable BufferView.
* InsetBase
- xo(), yo(), covers() and neverIndent() are now const.
* InsetText::setViewCache(): deleted
All other changes are due to the LyXText and InsetBase API changes.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@15618 a592a061-630c-0410-9148-cb99ea01b6c8
2006-10-30 12:45:33 +00:00
|
|
|
|
int xo(BufferView const & bv) const;
|
2004-01-16 10:55:19 +00:00
|
|
|
|
/// last drawn position for 'important' insets
|
Move BufferView cached pointer out of LyXText:
* LyXText
- bv(), bv_owner, : deleted.
- These methods now need a (Buffer const &) argument: getFont(), applyOuterFont(), getLayoutFont(), getLabelFont(), setCharFont(), setLayout(), singleWidth(), leftMargin(), rightMargin(), computeRowMetrics(), isMainText(), spacing(), isRTL(), cursorX(), rowBreakPoint(), setRowWidth(), labelFill(), labelEnd().
- These methods now need a (BufferView const &) argument and are propably candidates for future removal when 1.6 is opened for development: redoParagraph(), x2pos(), getRowNearY(), getColumnNearX(), checkInsetHit(), setHeightOfRow().
- recUndo(): now need a LCursor argument.
* CoordCache::get(LyXText const *, pit_type):
- now const.
- use const_iterator instead of iterator.
* FontIterator:
- add (Buffer const &) argument to ctor
- buffer_: new const reference to applicable BufferView.
* InsetBase
- xo(), yo(), covers() and neverIndent() are now const.
* InsetText::setViewCache(): deleted
All other changes are due to the LyXText and InsetBase API changes.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@15618 a592a061-630c-0410-9148-cb99ea01b6c8
2006-10-30 12:45:33 +00:00
|
|
|
|
int yo(BufferView const & bv) const;
|
2004-01-30 11:41:12 +00:00
|
|
|
|
/// set x/y drawing position cache if available
|
2007-04-29 12:32:14 +00:00
|
|
|
|
virtual void setPosCache(PainterInfo const &, int, int) const;
|
2004-01-30 11:41:12 +00:00
|
|
|
|
/// do we cover screen position x/y?
|
Move BufferView cached pointer out of LyXText:
* LyXText
- bv(), bv_owner, : deleted.
- These methods now need a (Buffer const &) argument: getFont(), applyOuterFont(), getLayoutFont(), getLabelFont(), setCharFont(), setLayout(), singleWidth(), leftMargin(), rightMargin(), computeRowMetrics(), isMainText(), spacing(), isRTL(), cursorX(), rowBreakPoint(), setRowWidth(), labelFill(), labelEnd().
- These methods now need a (BufferView const &) argument and are propably candidates for future removal when 1.6 is opened for development: redoParagraph(), x2pos(), getRowNearY(), getColumnNearX(), checkInsetHit(), setHeightOfRow().
- recUndo(): now need a LCursor argument.
* CoordCache::get(LyXText const *, pit_type):
- now const.
- use const_iterator instead of iterator.
* FontIterator:
- add (Buffer const &) argument to ctor
- buffer_: new const reference to applicable BufferView.
* InsetBase
- xo(), yo(), covers() and neverIndent() are now const.
* InsetText::setViewCache(): deleted
All other changes are due to the LyXText and InsetBase API changes.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@15618 a592a061-630c-0410-9148-cb99ea01b6c8
2006-10-30 12:45:33 +00:00
|
|
|
|
virtual bool covers(BufferView const & bv, int x, int y) const;
|
2007-04-26 14:56:30 +00:00
|
|
|
|
/// get the screen positions of the cursor (see note in Cursor.cpp)
|
2006-10-17 16:23:27 +00:00
|
|
|
|
virtual void cursorPos(BufferView const & bv,
|
|
|
|
|
CursorSlice const & sl, bool boundary, int & x, int & y) const;
|
2004-04-03 08:37:12 +00:00
|
|
|
|
|
2004-01-26 10:13:15 +00:00
|
|
|
|
/// is this an inset that can be moved into?
|
2007-06-11 18:29:11 +00:00
|
|
|
|
/// FIXME: merge with editable()
|
2004-01-26 10:13:15 +00:00
|
|
|
|
virtual bool isActive() const { return nargs() > 0; }
|
|
|
|
|
/// Where should we go when we press the up or down cursor key?
|
2007-04-26 14:56:30 +00:00
|
|
|
|
virtual bool idxUpDown(Cursor & cur, bool up) const;
|
2004-01-26 10:13:15 +00:00
|
|
|
|
/// Move one cell to the left
|
2007-04-26 14:56:30 +00:00
|
|
|
|
virtual bool idxLeft(Cursor &) const { return false; }
|
2004-01-26 10:13:15 +00:00
|
|
|
|
/// Move one cell to the right
|
2007-04-26 14:56:30 +00:00
|
|
|
|
virtual bool idxRight(Cursor &) const { return false; }
|
2004-01-26 10:13:15 +00:00
|
|
|
|
|
|
|
|
|
/// Move one physical cell up
|
2007-04-26 14:56:30 +00:00
|
|
|
|
virtual bool idxNext(Cursor &) const { return false; }
|
2004-01-26 10:13:15 +00:00
|
|
|
|
/// Move one physical cell down
|
2007-04-26 14:56:30 +00:00
|
|
|
|
virtual bool idxPrev(Cursor &) const { return false; }
|
2004-01-26 10:13:15 +00:00
|
|
|
|
|
|
|
|
|
/// Target pos when we enter the inset from the left by pressing "Right"
|
2007-04-26 14:56:30 +00:00
|
|
|
|
virtual bool idxFirst(Cursor &) const { return false; }
|
2004-01-26 10:13:15 +00:00
|
|
|
|
/// Target pos when we enter the inset from the right by pressing "Left"
|
2007-04-26 14:56:30 +00:00
|
|
|
|
virtual bool idxLast(Cursor &) const { return false; }
|
2004-01-26 10:13:15 +00:00
|
|
|
|
|
|
|
|
|
/// Delete a cell and move cursor
|
|
|
|
|
virtual bool idxDelete(idx_type &) { return false; }
|
|
|
|
|
/// pulls cell after pressing erase
|
|
|
|
|
virtual void idxGlue(idx_type) {}
|
2005-04-13 09:43:58 +00:00
|
|
|
|
/// returns list of cell indices that are "between" from and to for
|
|
|
|
|
/// selection purposes
|
2004-01-26 10:13:15 +00:00
|
|
|
|
virtual bool idxBetween(idx_type idx, idx_type from, idx_type to) const;
|
|
|
|
|
|
|
|
|
|
/// to which column belongs a cell with a given index?
|
|
|
|
|
virtual col_type col(idx_type) const { return 0; }
|
|
|
|
|
/// to which row belongs a cell with a given index?
|
|
|
|
|
virtual row_type row(idx_type) const { return 0; }
|
|
|
|
|
/// cell idex corresponding to row and column;
|
|
|
|
|
virtual idx_type index(row_type row, col_type col) const;
|
|
|
|
|
/// any additional x-offset when drawing a cell?
|
|
|
|
|
virtual int cellXOffset(idx_type) const { return 0; }
|
|
|
|
|
/// any additional y-offset when drawing a cell?
|
|
|
|
|
virtual int cellYOffset(idx_type) const { return 0; }
|
2004-04-03 08:37:12 +00:00
|
|
|
|
/// number of embedded cells
|
|
|
|
|
virtual size_t nargs() const { return 0; }
|
|
|
|
|
/// number of rows in gridlike structures
|
|
|
|
|
virtual size_t nrows() const { return 0; }
|
|
|
|
|
/// number of columns in gridlike structures
|
|
|
|
|
virtual size_t ncols() const { return 0; }
|
2004-01-26 10:13:15 +00:00
|
|
|
|
/// is called when the cursor leaves this inset
|
2006-08-17 21:32:04 +00:00
|
|
|
|
// returns true if cursor is now invalid.
|
2007-04-26 14:56:30 +00:00
|
|
|
|
virtual bool notifyCursorLeaves(Cursor &) { return false; }
|
2006-12-04 04:31:18 +00:00
|
|
|
|
/// is called when the mouse enter or leave this inset
|
|
|
|
|
/// return true if this inset needs repaint
|
2006-12-05 02:18:29 +00:00
|
|
|
|
virtual bool setMouseHover(bool) { return false; }
|
2007-06-07 21:36:42 +00:00
|
|
|
|
/// return true if this inset is hovered (under mouse)
|
|
|
|
|
/// This is by now only used by mathed to draw corners
|
|
|
|
|
/// (Inset::drawMarkers() and Inset::drawMarkers2()).
|
|
|
|
|
/// Other insets do not have to redefine this function to
|
|
|
|
|
/// return the correct status of mouseHovered.
|
|
|
|
|
virtual bool mouseHovered() const { return false; }
|
2004-01-20 14:25:24 +00:00
|
|
|
|
|
|
|
|
|
/// request "external features"
|
|
|
|
|
virtual void validate(LaTeXFeatures &) const {}
|
|
|
|
|
/// Appends \c list with all labels found within this inset.
|
|
|
|
|
virtual void getLabelList(Buffer const &,
|
2006-10-21 00:16:43 +00:00
|
|
|
|
std::vector<docstring> & /* list */) const {}
|
2004-01-26 10:13:15 +00:00
|
|
|
|
|
2004-01-20 14:25:24 +00:00
|
|
|
|
/// describe content if cursor inside
|
2006-10-22 10:15:23 +00:00
|
|
|
|
virtual void infoize(odocstream &) const {}
|
2004-01-20 14:25:24 +00:00
|
|
|
|
/// describe content if cursor behind
|
2006-10-22 10:15:23 +00:00
|
|
|
|
virtual void infoize2(odocstream &) const {}
|
2004-01-26 10:13:15 +00:00
|
|
|
|
|
2007-02-20 17:52:41 +00:00
|
|
|
|
enum {
|
|
|
|
|
PLAINTEXT_NEWLINE = 10000
|
|
|
|
|
};
|
|
|
|
|
|
2006-10-11 19:40:50 +00:00
|
|
|
|
/// plain text output in ucs4 encoding
|
2007-02-20 17:52:41 +00:00
|
|
|
|
/// return the number of characters; in case of multiple lines of
|
|
|
|
|
/// output, add PLAINTEXT_NEWLINE to the number of chars in the last line
|
2006-10-21 00:16:43 +00:00
|
|
|
|
virtual int plaintext(Buffer const &, odocstream &,
|
2007-05-28 22:27:45 +00:00
|
|
|
|
OutputParams const &) const = 0;
|
2004-01-26 10:13:15 +00:00
|
|
|
|
/// docbook output
|
2006-10-21 00:16:43 +00:00
|
|
|
|
virtual int docbook(Buffer const &, odocstream & os,
|
2007-05-28 22:27:45 +00:00
|
|
|
|
OutputParams const &) const;
|
2005-11-25 14:40:34 +00:00
|
|
|
|
/// the string that is passed to the TOC
|
2007-01-19 16:23:13 +00:00
|
|
|
|
virtual void textString(Buffer const &, odocstream &) const {}
|
2004-01-26 10:13:15 +00:00
|
|
|
|
|
2005-11-10 10:19:05 +00:00
|
|
|
|
/** This enum indicates by which means the inset can be modified:
|
2006-11-19 12:43:22 +00:00
|
|
|
|
- NOT_EDITABLE: the inset's content cannot be modified at all
|
2005-11-10 10:19:05 +00:00
|
|
|
|
(e.g. printindex, insetspecialchar)
|
|
|
|
|
- IS_EDITABLE: content can be edited via dialog (e.g. bibtex, index, url)
|
|
|
|
|
- HIGHLY_EDITABLE: content can be edited on screen (normally means that
|
|
|
|
|
insettext is contained, e.g. collapsables, tabular) */
|
|
|
|
|
// FIXME: This has not yet been fully implemented to math insets
|
2004-01-26 10:13:15 +00:00
|
|
|
|
enum EDITABLE {
|
|
|
|
|
///
|
|
|
|
|
NOT_EDITABLE = 0,
|
|
|
|
|
///
|
|
|
|
|
IS_EDITABLE,
|
|
|
|
|
///
|
|
|
|
|
HIGHLY_EDITABLE
|
|
|
|
|
};
|
|
|
|
|
/// what appears in the minibuffer when opening
|
2006-10-21 00:16:43 +00:00
|
|
|
|
virtual docstring const editMessage() const;
|
2004-01-26 10:13:15 +00:00
|
|
|
|
///
|
|
|
|
|
virtual EDITABLE editable() const;
|
|
|
|
|
/// can we go further down on mouse click?
|
|
|
|
|
virtual bool descendable() const { return false; }
|
2006-03-17 19:45:28 +00:00
|
|
|
|
/// does this contain text that can be change track marked in DVI?
|
|
|
|
|
virtual bool canTrackChanges() const { return false; }
|
2004-01-26 10:13:15 +00:00
|
|
|
|
/// return true if the inset should be removed automatically
|
|
|
|
|
virtual bool autoDelete() const;
|
|
|
|
|
|
2004-01-20 14:25:24 +00:00
|
|
|
|
/** This is not quite the correct place for this enum. I think
|
|
|
|
|
the correct would be to let each subclass of Inset declare
|
2007-04-29 13:39:47 +00:00
|
|
|
|
its own enum code. Actually the notion of an Inset::Code
|
2004-01-20 14:25:24 +00:00
|
|
|
|
should be avoided, but I am not sure how this could be done
|
|
|
|
|
in a cleaner way. */
|
|
|
|
|
enum Code {
|
|
|
|
|
///
|
|
|
|
|
NO_CODE, // 0
|
|
|
|
|
///
|
|
|
|
|
TOC_CODE, // do these insets really need a code? (ale)
|
|
|
|
|
///
|
|
|
|
|
QUOTE_CODE,
|
|
|
|
|
///
|
|
|
|
|
MARK_CODE,
|
|
|
|
|
///
|
|
|
|
|
REF_CODE,
|
|
|
|
|
///
|
|
|
|
|
URL_CODE, // 5
|
|
|
|
|
///
|
|
|
|
|
HTMLURL_CODE,
|
|
|
|
|
///
|
|
|
|
|
SEPARATOR_CODE,
|
|
|
|
|
///
|
|
|
|
|
ENDING_CODE,
|
|
|
|
|
///
|
|
|
|
|
LABEL_CODE,
|
|
|
|
|
///
|
|
|
|
|
NOTE_CODE, // 10
|
|
|
|
|
///
|
|
|
|
|
ACCENT_CODE,
|
|
|
|
|
///
|
|
|
|
|
MATH_CODE,
|
|
|
|
|
///
|
|
|
|
|
INDEX_CODE,
|
|
|
|
|
///
|
|
|
|
|
INCLUDE_CODE,
|
|
|
|
|
///
|
|
|
|
|
GRAPHICS_CODE, // 15
|
|
|
|
|
///
|
|
|
|
|
BIBITEM_CODE,
|
|
|
|
|
///
|
|
|
|
|
BIBTEX_CODE,
|
|
|
|
|
///
|
|
|
|
|
TEXT_CODE,
|
|
|
|
|
///
|
|
|
|
|
ERT_CODE,
|
|
|
|
|
///
|
|
|
|
|
FOOT_CODE, // 20
|
|
|
|
|
///
|
|
|
|
|
MARGIN_CODE,
|
|
|
|
|
///
|
|
|
|
|
FLOAT_CODE,
|
|
|
|
|
///
|
|
|
|
|
WRAP_CODE,
|
|
|
|
|
///
|
|
|
|
|
SPACE_CODE, // 25
|
|
|
|
|
///
|
|
|
|
|
SPECIALCHAR_CODE,
|
|
|
|
|
///
|
|
|
|
|
TABULAR_CODE,
|
|
|
|
|
///
|
|
|
|
|
EXTERNAL_CODE,
|
|
|
|
|
#if 0
|
|
|
|
|
///
|
|
|
|
|
THEOREM_CODE,
|
|
|
|
|
#endif
|
|
|
|
|
///
|
|
|
|
|
CAPTION_CODE,
|
|
|
|
|
///
|
|
|
|
|
MATHMACRO_CODE, // 30
|
|
|
|
|
///
|
|
|
|
|
CITE_CODE,
|
|
|
|
|
///
|
|
|
|
|
FLOAT_LIST_CODE,
|
|
|
|
|
///
|
|
|
|
|
INDEX_PRINT_CODE,
|
|
|
|
|
///
|
|
|
|
|
OPTARG_CODE, // 35
|
|
|
|
|
///
|
|
|
|
|
ENVIRONMENT_CODE,
|
|
|
|
|
///
|
|
|
|
|
HFILL_CODE,
|
|
|
|
|
///
|
|
|
|
|
NEWLINE_CODE,
|
|
|
|
|
///
|
|
|
|
|
LINE_CODE,
|
|
|
|
|
///
|
|
|
|
|
BRANCH_CODE, // 40
|
|
|
|
|
///
|
|
|
|
|
BOX_CODE,
|
|
|
|
|
///
|
2007-09-05 15:29:04 +00:00
|
|
|
|
FLEX_CODE,
|
2004-01-20 14:25:24 +00:00
|
|
|
|
///
|
|
|
|
|
VSPACE_CODE,
|
|
|
|
|
///
|
2006-11-04 17:55:36 +00:00
|
|
|
|
MATHMACROARG_CODE,
|
|
|
|
|
///
|
|
|
|
|
NOMENCL_CODE, // 45
|
|
|
|
|
///
|
2007-02-02 13:55:14 +00:00
|
|
|
|
NOMENCL_PRINT_CODE,
|
|
|
|
|
///
|
Add support for listings package. Two listings command \lstinline, \lstinputlisting and an environment \lstlisting are supported, along with preamble \lstset. \lstinputlisting is implemented through Include dialog, and the other two are implemented with a new inset listings, along with its dialog.
* src/LyXAction.cpp: listing-insert action
* src/insets/Inset.h,cpp: LISTINGS_CODE
* src/insets/InsetInclude.cpp: handle \lstinputlisting
* src/insets/InsetListings.h,cpp: new listings inset
* src/insets/InsetListingsParams.h,cpp: parameters from listings package
* src/insets/InsetCommandParams.h,cpp: handle lstinputlisting option
* src/Bidi.cpp: handle LISTINGS_CODE
* src/frontends/qt4/ui/TextLayoutUi.ui: update UI
* src/frontends/qt4/ui/ListingsUi.ui: new dialog
* src/frontends/qt4/ui/IncludeUi.ui: update UI
* src/frontends/qt4/QInclude.h,cpp: add lstinputlisting
* src/frontends/qt4/QDocument.h,cpp: add textedit for preamble listings_params
* src/frontends/qt4/QListings.h,cpp: new listings inset
* src/frontends/qt4/Dialogs.cpp: new listings dialog
* src/frontends/controllers/ControlInclude.h,cpp: add lstinputlisting
* src/frontends/controllers/ControlListings.h,cpp: new listings inset
* src/LyXFunc.cpp: handle LISTING_CODE
* src/Paragraph.cpp: handle LISTING_CODE
* src/factory.cpp: new listings inset
* src/CutAndPaste.cpp: handle LISTINGS_CODE
* src/LaTeXFeatures.cpp: require listings
* src/Text3.cpp: Handle LISTINGS_CODE
* src/lfuns.h: add LFUN_LISTING_INSERT
* src/Buffer.cpp: change lyx file format to 269
* src/BufferParams.h,cpp: add listings_params to preamble
* lib/lyx2lyx/LyX.py: lyx2lyx
* lib/lyx2lyx/lyx_1_5.py: lyx2lyx
* lib/ui/stdmenus.inc: new menu item (no shortcut!)
* src/insets/Makefile.am: update autotools
* src/frontends/controllers/Makefile.am
* src/frontends/qt4/Makefile.dialogs
* src/frontends/qt4/Makefile.am
* po/POTFILES.in: a few more translatable files.
* development/scons/scons_manifest.py: scons build system
* development/FORMAT: document format changes
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@18243 a592a061-630c-0410-9148-cb99ea01b6c8
2007-05-09 19:11:42 +00:00
|
|
|
|
PAGEBREAK_CODE,
|
|
|
|
|
///
|
|
|
|
|
LISTINGS_CODE
|
2004-01-20 14:25:24 +00:00
|
|
|
|
};
|
2004-03-30 12:36:33 +00:00
|
|
|
|
|
|
|
|
|
/** returns the Code corresponding to the \c name.
|
|
|
|
|
* Eg, translate("branch") == BRANCH_CODE
|
|
|
|
|
*/
|
|
|
|
|
static Code translate(std::string const & name);
|
|
|
|
|
|
2005-04-22 08:57:22 +00:00
|
|
|
|
/// returns true if the inset can hold an inset of given type
|
2004-01-26 10:13:15 +00:00
|
|
|
|
virtual bool insetAllowed(Code) const { return false; }
|
2005-04-22 08:57:22 +00:00
|
|
|
|
/// if this inset has paragraphs should they be output all as default
|
2007-01-17 21:22:19 +00:00
|
|
|
|
/// paragraphs with the default layout of the text class?
|
2005-11-17 08:41:56 +00:00
|
|
|
|
virtual bool forceDefaultParagraphs(idx_type) const { return false; }
|
2007-04-21 08:43:46 +00:00
|
|
|
|
/// Is the width forced to some value?
|
|
|
|
|
virtual bool hasFixedWidth() const { return false; }
|
2005-01-05 20:21:27 +00:00
|
|
|
|
|
2004-01-26 10:13:15 +00:00
|
|
|
|
///
|
2007-04-30 14:39:09 +00:00
|
|
|
|
virtual docstring name() const { return from_ascii("unknown"); }
|
2007-08-13 12:13:17 +00:00
|
|
|
|
///
|
|
|
|
|
virtual InsetLayout const & getLayout(BufferParams const & bp) const;
|
2004-01-26 10:13:15 +00:00
|
|
|
|
/// used to toggle insets
|
2005-04-22 08:57:22 +00:00
|
|
|
|
/// is the inset open?
|
|
|
|
|
/// should this inset be handled like a normal charater
|
2004-01-26 10:13:15 +00:00
|
|
|
|
virtual bool isChar() const { return false; }
|
2005-04-22 08:57:22 +00:00
|
|
|
|
/// is this equivalent to a letter?
|
2004-01-26 10:13:15 +00:00
|
|
|
|
virtual bool isLetter() const { return false; }
|
2005-04-22 08:57:22 +00:00
|
|
|
|
/// is this equivalent to a space (which is BTW different from
|
|
|
|
|
/// a line separator)?
|
2004-01-26 10:13:15 +00:00
|
|
|
|
virtual bool isSpace() const { return false; }
|
2007-05-18 14:32:29 +00:00
|
|
|
|
|
|
|
|
|
enum DisplayType {
|
|
|
|
|
Inline = 0,
|
|
|
|
|
AlignLeft,
|
|
|
|
|
AlignCenter,
|
|
|
|
|
AlignRight
|
|
|
|
|
};
|
2007-05-28 22:27:45 +00:00
|
|
|
|
|
2005-04-22 08:57:22 +00:00
|
|
|
|
/// should we have a non-filled line before this inset?
|
2007-05-18 14:32:29 +00:00
|
|
|
|
virtual DisplayType display() const { return Inline; }
|
2005-04-22 08:57:22 +00:00
|
|
|
|
/// should we break lines after this inset?
|
2004-01-26 10:13:15 +00:00
|
|
|
|
virtual bool isLineSeparator() const { return false; }
|
2005-09-10 06:51:58 +00:00
|
|
|
|
/// should paragraph indendation be ommitted in any case?
|
Move BufferView cached pointer out of LyXText:
* LyXText
- bv(), bv_owner, : deleted.
- These methods now need a (Buffer const &) argument: getFont(), applyOuterFont(), getLayoutFont(), getLabelFont(), setCharFont(), setLayout(), singleWidth(), leftMargin(), rightMargin(), computeRowMetrics(), isMainText(), spacing(), isRTL(), cursorX(), rowBreakPoint(), setRowWidth(), labelFill(), labelEnd().
- These methods now need a (BufferView const &) argument and are propably candidates for future removal when 1.6 is opened for development: redoParagraph(), x2pos(), getRowNearY(), getColumnNearX(), checkInsetHit(), setHeightOfRow().
- recUndo(): now need a LCursor argument.
* CoordCache::get(LyXText const *, pit_type):
- now const.
- use const_iterator instead of iterator.
* FontIterator:
- add (Buffer const &) argument to ctor
- buffer_: new const reference to applicable BufferView.
* InsetBase
- xo(), yo(), covers() and neverIndent() are now const.
* InsetText::setViewCache(): deleted
All other changes are due to the LyXText and InsetBase API changes.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@15618 a592a061-630c-0410-9148-cb99ea01b6c8
2006-10-30 12:45:33 +00:00
|
|
|
|
virtual bool neverIndent(Buffer const &) const { return false; }
|
2004-02-02 17:32:56 +00:00
|
|
|
|
/// dumps content to lyxerr
|
|
|
|
|
virtual void dump() const;
|
2005-04-22 08:57:22 +00:00
|
|
|
|
/// write inset in .lyx format
|
2004-01-26 10:13:15 +00:00
|
|
|
|
virtual void write(Buffer const &, std::ostream &) const {}
|
2005-04-22 08:57:22 +00:00
|
|
|
|
/// read inset in .lyx format
|
2007-04-26 11:30:54 +00:00
|
|
|
|
virtual void read(Buffer const &, Lexer &) {}
|
2007-01-09 19:25:40 +00:00
|
|
|
|
/** Export the inset to LaTeX.
|
|
|
|
|
* Don't use a temporary stringstream if the final output is
|
|
|
|
|
* supposed to go to a file.
|
|
|
|
|
* \sa Buffer::writeLaTeXSource for the reason.
|
|
|
|
|
* \return the number of rows (\n's) of generated LaTeX code.
|
|
|
|
|
*/
|
2006-10-21 00:16:43 +00:00
|
|
|
|
virtual int latex(Buffer const &, odocstream &,
|
2004-01-26 10:13:15 +00:00
|
|
|
|
OutputParams const &) const { return 0; }
|
|
|
|
|
/// returns true to override begin and end inset in file
|
|
|
|
|
virtual bool directWrite() const;
|
|
|
|
|
///
|
|
|
|
|
virtual bool allowSpellCheck() const { return false; }
|
|
|
|
|
|
|
|
|
|
/// if this insets owns text cells (e.g. InsetText) return cell num
|
2007-04-29 23:33:02 +00:00
|
|
|
|
virtual Text * getText(int /*num*/) const { return 0; }
|
2004-01-26 10:13:15 +00:00
|
|
|
|
|
|
|
|
|
/** Adds a LaTeX snippet to the Preview Loader for transformation
|
|
|
|
|
* into a bitmap image. Does not start the laoding process.
|
|
|
|
|
*
|
|
|
|
|
* Most insets have no interest in this capability, so the method
|
|
|
|
|
* defaults to empty.
|
|
|
|
|
*/
|
2006-10-21 00:16:43 +00:00
|
|
|
|
virtual void addPreview(graphics::PreviewLoader &) const {}
|
2007-01-07 17:54:26 +00:00
|
|
|
|
/// Add an entry to the TocList
|
2007-06-05 17:24:11 +00:00
|
|
|
|
/// pit is the ParConstIterator of the paragraph containing the inset
|
2007-06-22 13:33:51 +00:00
|
|
|
|
virtual void addToToc(TocList &, Buffer const &, ParConstIterator const &) const {}
|
2007-08-30 20:46:42 +00:00
|
|
|
|
/// report files that can be embedded with the lyx file
|
|
|
|
|
virtual void registerEmbeddedFiles(Buffer const &, EmbeddedFiles &,
|
|
|
|
|
ParConstIterator const &) const {};
|
2007-08-14 16:50:51 +00:00
|
|
|
|
/// Fill keys with BibTeX information
|
|
|
|
|
virtual void fillWithBibKeys(Buffer const &,
|
2007-08-20 16:30:02 +00:00
|
|
|
|
BiblioInfo &, InsetIterator const &) const { return; }
|
2007-08-14 16:50:51 +00:00
|
|
|
|
/// Update the counters of this inset and of its contents
|
2007-08-12 21:43:58 +00:00
|
|
|
|
virtual void updateLabels(Buffer const &, ParIterator const &) {}
|
2006-10-21 00:16:43 +00:00
|
|
|
|
|
2007-08-14 16:50:51 +00:00
|
|
|
|
|
2004-01-26 10:13:15 +00:00
|
|
|
|
public:
|
2004-01-20 14:25:24 +00:00
|
|
|
|
/// returns LyX code associated with the inset. Used for TOC, ...)
|
2004-01-26 10:13:15 +00:00
|
|
|
|
virtual Code lyxCode() const { return NO_CODE; }
|
|
|
|
|
|
|
|
|
|
/// -1: text mode, 1: math mode, 0 undecided
|
|
|
|
|
enum mode_type {UNDECIDED_MODE, TEXT_MODE, MATH_MODE};
|
|
|
|
|
/// return text or mathmode if that is possible to determine
|
|
|
|
|
virtual mode_type currentMode() const { return UNDECIDED_MODE; }
|
2004-08-14 19:55:00 +00:00
|
|
|
|
/// returns whether this inset is allowed in other insets of given mode
|
|
|
|
|
virtual bool allowedIn(mode_type) const { return true; }
|
2005-12-17 15:03:41 +00:00
|
|
|
|
/**
|
|
|
|
|
* Is this inset allowed within a font change?
|
|
|
|
|
*
|
|
|
|
|
* FIXME: noFontChange means currently that the font change is closed
|
|
|
|
|
* in LaTeX before the inset, and that the contents of the inset
|
|
|
|
|
* will be in default font. This should be changed so that the inset
|
|
|
|
|
* changes the font again.
|
|
|
|
|
*/
|
2004-01-26 10:13:15 +00:00
|
|
|
|
virtual bool noFontChange() const { return false; }
|
|
|
|
|
|
2006-10-20 09:29:19 +00:00
|
|
|
|
/// set the change for the entire inset
|
2006-10-20 10:35:07 +00:00
|
|
|
|
virtual void setChange(Change const &) {}
|
2006-10-24 06:11:45 +00:00
|
|
|
|
/// accept the changes within the inset
|
2007-01-24 19:02:41 +00:00
|
|
|
|
virtual void acceptChanges(BufferParams const &) {};
|
2006-10-24 21:38:47 +00:00
|
|
|
|
/// reject the changes within the inset
|
2007-01-24 19:02:41 +00:00
|
|
|
|
virtual void rejectChanges(BufferParams const &) {};
|
2006-04-05 23:56:29 +00:00
|
|
|
|
|
2007-08-27 16:30:57 +00:00
|
|
|
|
/// FIXME: move dim_ out of Inset!
|
|
|
|
|
Dimension const & dimension() { return dim_; }
|
2007-04-22 08:26:06 +00:00
|
|
|
|
/// inset width.
|
|
|
|
|
int width() const { return dim_.wid; }
|
|
|
|
|
/// inset ascent.
|
|
|
|
|
int ascent() const { return dim_.asc; }
|
|
|
|
|
/// inset descent.
|
|
|
|
|
int descent() const { return dim_.des; }
|
2005-07-14 17:30:24 +00:00
|
|
|
|
///
|
2005-07-17 01:13:36 +00:00
|
|
|
|
int scroll() const { return 0; }
|
|
|
|
|
///
|
2007-06-12 13:45:49 +00:00
|
|
|
|
virtual Color_color backgroundColor() const;
|
2007-04-22 21:40:10 +00:00
|
|
|
|
///
|
2005-07-14 17:30:24 +00:00
|
|
|
|
enum CollapseStatus {
|
|
|
|
|
Collapsed,
|
|
|
|
|
Open
|
|
|
|
|
};
|
|
|
|
|
///
|
2007-04-26 14:56:30 +00:00
|
|
|
|
virtual void setStatus(Cursor &, CollapseStatus) {}
|
2007-04-29 12:32:14 +00:00
|
|
|
|
//
|
|
|
|
|
enum { TEXT_TO_INSET_OFFSET = 4 };
|
|
|
|
|
|
2004-11-23 23:04:52 +00:00
|
|
|
|
protected:
|
2007-04-29 13:39:47 +00:00
|
|
|
|
Inset();
|
2007-05-31 12:30:17 +00:00
|
|
|
|
|
2007-08-30 18:03:17 +00:00
|
|
|
|
/// replicate ourselves
|
|
|
|
|
friend class Paragraph;
|
|
|
|
|
friend class MathAtom;
|
|
|
|
|
virtual Inset * clone() const = 0;
|
|
|
|
|
|
2005-05-09 17:29:22 +00:00
|
|
|
|
/** The real dispatcher.
|
2007-04-26 14:56:30 +00:00
|
|
|
|
* Gets normally called from Cursor::dispatch(). Cursor::dispatch()
|
2005-05-09 17:29:22 +00:00
|
|
|
|
* assumes the common case of 'LFUN handled, need update'.
|
2007-04-26 14:56:30 +00:00
|
|
|
|
* This has to be overriden by calling Cursor::undispatched() or
|
|
|
|
|
* Cursor::noUpdate() if appropriate.
|
2005-05-09 17:29:22 +00:00
|
|
|
|
* If you need to call the dispatch method of some inset directly
|
|
|
|
|
* you may have to explicitly request an update at that place. Don't
|
|
|
|
|
* do it in doDispatch(), since that causes nested updates when
|
2007-04-26 14:56:30 +00:00
|
|
|
|
* called from Cursor::dispatch(), and these can lead to crashes.
|
2005-05-09 17:29:22 +00:00
|
|
|
|
* \sa getStatus
|
|
|
|
|
*/
|
2007-04-26 14:56:30 +00:00
|
|
|
|
virtual void doDispatch(Cursor & cur, FuncRequest & cmd);
|
2006-11-28 15:15:49 +00:00
|
|
|
|
|
|
|
|
|
/// Cached dimensions of the inset.
|
|
|
|
|
mutable Dimension dim_;
|
2003-02-17 17:12:50 +00:00
|
|
|
|
};
|
|
|
|
|
|
2004-01-26 10:13:15 +00:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* returns true if pointer argument is valid
|
|
|
|
|
* and points to an editable inset
|
|
|
|
|
*/
|
2007-04-29 13:39:47 +00:00
|
|
|
|
bool isEditableInset(Inset const * inset);
|
2004-01-26 10:13:15 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* returns true if pointer argument is valid
|
|
|
|
|
* and points to a highly editable inset
|
|
|
|
|
*/
|
2007-04-29 13:39:47 +00:00
|
|
|
|
bool isHighlyEditableInset(Inset const * inset);
|
2004-01-26 10:13:15 +00:00
|
|
|
|
|
2007-04-29 13:39:47 +00:00
|
|
|
|
/** \c Inset_code is a wrapper for Inset::Code.
|
2007-04-29 12:32:14 +00:00
|
|
|
|
* It can be forward-declared and passed as a function argument without
|
2007-04-29 13:39:47 +00:00
|
|
|
|
* having to expose Inset.h.
|
2007-04-29 12:32:14 +00:00
|
|
|
|
*/
|
2007-04-29 13:39:47 +00:00
|
|
|
|
class Inset_code {
|
|
|
|
|
Inset::Code val_;
|
2007-04-29 12:32:14 +00:00
|
|
|
|
public:
|
2007-04-29 13:39:47 +00:00
|
|
|
|
Inset_code(Inset::Code val) : val_(val) {}
|
|
|
|
|
operator Inset::Code() const { return val_; }
|
2007-04-29 12:32:14 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2006-10-21 00:16:43 +00:00
|
|
|
|
} // namespace lyx
|
|
|
|
|
|
2003-02-17 17:12:50 +00:00
|
|
|
|
#endif
|