#include "ColorCode.h"
#include "InsetCode.h"
#include "Layout.h"
+#include "OutputEnums.h"
#include "support/strfwd.h"
#include "support/types.h"
class FuncRequest;
class FuncStatus;
class InsetCollapsable;
+class InsetCommand;
class InsetIterator;
class InsetLayout;
class InsetList;
class ParIterator;
class Text;
class TocList;
+class XHTMLStream;
namespace graphics { class PreviewLoader; }
-/** returns the InsetCode corresponding to the \c name.
-* Eg, insetCode("branch") == BRANCH_CODE
-* Implemented in 'Inset.cpp'.
-*/
+/// returns the InsetCode corresponding to the \c name.
+/// Eg, insetCode("branch") == BRANCH_CODE
InsetCode insetCode(std::string const & name);
-/// the other way
+/// returns the Inset name corresponding to the \c InsetCode.
+/// Eg, insetName(BRANCH_CODE) == "branch"
std::string insetName(InsetCode);
+/// returns the Inset name corresponding to the \c InsetCode.
+/// Eg, insetDisplayName(BRANCH_CODE) == _("Branch")
+docstring insetDisplayName(InsetCode);
/// Common base class to all insets
/// retrieve associated Buffer
virtual Buffer & buffer();
virtual Buffer const & buffer() const;
- /// This checks whether the Buffer * actually points to an open
- /// Buffer. It might not if that Buffer has been closed.
+ /// Returns true if buffer_ actually points to a Buffer that has
+ /// been loaded into LyX and is still open. Note that this will
+ /// always return false for cloned Buffers. If you want to allow
+ /// for the case of cloned Buffers, use isBufferValid().
+ bool isBufferLoaded() const;
+ /// Returns true if this is a loaded buffer or a cloned buffer.
bool isBufferValid() const;
/// initialize view for this inset.
/**
* This is typically used after this inset is created interactively.
* Intented purpose is to sanitize internal state with regard to current
- * Buffer. The default implementation calls updateLabels(buffer()) is
+ * Buffer. The default implementation calls buffer().updateBuffer() if
* the inset is labeled.
*
* \sa isLabeled()
**/
- virtual void initView();
+ virtual void initView() {};
/// \return true if this inset is labeled.
virtual bool isLabeled() const { return false; }
virtual InsetTabular * asInsetTabular() { return 0; }
/// is this inset based on the InsetTabular class?
virtual InsetTabular const * asInsetTabular() const { return 0; }
+ /// is this inset based on the InsetCommand class?
+ virtual InsetCommand * asInsetCommand() { return 0; }
+ /// is this inset based on the InsetCommand class?
+ virtual InsetCommand const * asInsetCommand() const { return 0; }
/// the real dispatcher
void dispatch(Cursor & cur, FuncRequest & cmd);
virtual Inset * editXY(Cursor & cur, int x, int y);
/// compute the size of the object returned in dim
- /// \retval true if metrics changed.
virtual void metrics(MetricsInfo & mi, Dimension & dim) const = 0;
/// draw inset and update (xo, yo)-cache
virtual void draw(PainterInfo & pi, int x, int y) const = 0;
///
virtual bool editing(BufferView const * bv) const;
///
- virtual bool showInsetDialog(BufferView *) const { return false; }
+ virtual bool showInsetDialog(BufferView *) const;
/// draw inset decoration if necessary.
/// This can use \c drawMarkers() for example.
virtual bool isFreeSpacing() const;
/// Don't eliminate empty paragraphs
virtual bool allowEmpty() const;
- /// Force inset into LTR environment if surroundings are RTL?
+ /// Force inset into LTR environment if surroundings are RTL
virtual bool forceLTR() const;
+ /// whether to include this inset in the strings generated for the TOC
+ virtual bool isInToc() const;
/// Where should we go when we press the up or down cursor key?
virtual bool idxUpDown(Cursor & cur, bool up) const;
/// Returns true if cursor is now invalid, e.g. if former
/// insets in higher cursor slices of \c old do not exist
/// anymore.
- /// \c cur is the new cursor, some slice points to this. Use the update flags to cause a redraw.
+ /// \c cur is the new cursor, some slice points to this. Use the update
+ /// flags to cause a redraw.
virtual bool notifyCursorEnters(Cursor & /*cur*/)
{ return false; }
- /// is called when the mouse enter or leave this inset
- /// return true if this inset needs repaint
- virtual bool setMouseHover(bool) { return false; }
+ /// is called when the mouse enters or leaves this inset
+ /// return true if this inset needs a repaint
+ virtual bool setMouseHover(BufferView const *, bool) const
+ { return false; }
/// 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; }
+ virtual bool mouseHovered(BufferView const *) const { return false; }
/// request "external features"
virtual void validate(LaTeXFeatures &) const {}
+ /// Validate LFUN_INSET_MODIFY argument.
+ virtual bool validateModifyArgument(docstring const &) const { return true; }
+
/// describe content if cursor inside
virtual void infoize(odocstream &) const {}
/// describe content if cursor behind
virtual int plaintext(odocstream &, OutputParams const &) const = 0;
/// docbook output
virtual int docbook(odocstream & os, OutputParams const &) const;
- /// LyX HTML output
- virtual docstring xhtml(odocstream & os, OutputParams const &) const;
+ /// XHTML output
+ /// the inset is expected to write XHTML to the XHTMLStream
+ /// \return any "deferred" material that should be written outside the
+ /// normal stream, and which will in fact be written after the current
+ /// paragraph closes. this is appropriate e.g. for floats.
+ virtual docstring xhtml(XHTMLStream & xs, OutputParams const &) const;
/// the string that is passed to the TOC
virtual void tocString(odocstream &) const {}
virtual bool hasSettings() const;
/// can we go further down on mouse click?
// true for InsetCaption, InsetCollapsables (not ButtonOnly), InsetTabular
- virtual bool descendable() const { return false; }
+ virtual bool descendable(BufferView const &) const { return false; }
/// is this an inset that can be moved into?
/// FIXME: merge with editable()
// true for InsetTabular & InsetText
virtual bool isActive() const { return nargs() > 0; }
+ /// can we click at the specified position ?
+ virtual bool clickable(int, int) const { return false; }
/// does this contain text that can be change track marked in DVI?
virtual bool canTrackChanges() const { return false; }
virtual bool forcePlainLayout(idx_type = 0) const { return false; }
/// if this inset has paragraphs should the user be allowed to
/// customize alignment, etc?
- virtual bool allowParagraphCustomization(idx_type = 0) const { return true; }
+ virtual bool allowParagraphCustomization(idx_type = 0) const
+ { return true; }
/// Is the width forced to some value?
virtual bool hasFixedWidth() const { return false; }
* Most insets have no interest in this capability, so the method
* defaults to empty.
*/
- virtual void addPreview(graphics::PreviewLoader &) const {}
+ virtual void addPreview(DocIterator const &,
+ graphics::PreviewLoader &) const {}
/** Classifies the unicode characters appearing in a math inset
* depending on whether they are to be translated as latex
virtual void addToToc(DocIterator const &) {}
/// Fill keys with BibTeX information
virtual void fillWithBibKeys(BiblioInfo &, InsetIterator const &) const {}
- /// Update the counters of this inset and of its contents
- virtual void updateLabels(ParIterator const &) {}
+ /// Update the counters of this inset and of its contents.
+ /// The boolean indicates whether we are preparing for output, e.g.,
+ /// of XHTML.
+ virtual void updateBuffer(ParIterator const &, UpdateType) {}
/// Updates the inset's dialog
virtual Buffer const * updateFrontend() const;
virtual mode_type currentMode() const { return UNDECIDED_MODE; }
/// returns whether changing mode during latex export is forbidden
virtual bool lockedMode() const { return false; }
+ /// returns whether only ascii chars are allowed during latex export
+ virtual bool asciiOnly() const { return false; }
/// returns whether this inset is allowed in other insets of given mode
virtual bool allowedIn(mode_type) const { return true; }
/**
/// set the change for the entire inset
virtual void setChange(Change const &) {}
/// accept the changes within the inset
- virtual void acceptChanges() {};
+ virtual void acceptChanges() {}
/// reject the changes within the inset
- virtual void rejectChanges() {};
+ virtual void rejectChanges() {}
///
virtual Dimension const dimension(BufferView const &) const;
///
int scroll() const { return 0; }
///
- virtual ColorCode backgroundColor() const;
+ virtual ColorCode backgroundColor(PainterInfo const &) const;
///
virtual ColorCode labelColor() const;
- ///
- enum CollapseStatus {
- Collapsed,
- Open
- };
- ///
- virtual void setStatus(Cursor &, CollapseStatus) {}
//
enum { TEXT_TO_INSET_OFFSET = 4 };
protected:
/// Constructors
- Inset() : buffer_(0) {}
+ Inset(Buffer * buf) : buffer_(buf) {}
Inset(Inset const &) : buffer_(0) {}
/// replicate ourselves
* Gets normally called from Cursor::dispatch(). Cursor::dispatch()
* assumes the common case of 'LFUN handled, need update'.
* This has to be overriden by calling Cursor::undispatched() or
- * Cursor::noUpdate() if appropriate.
+ * Cursor::noScreenUpdate() if appropriate.
* 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