]> git.lyx.org Git - lyx.git/blobdiff - src/insets/Inset.h
Routines for calculating numerical labels for BibTeX citations.
[lyx.git] / src / insets / Inset.h
index b130f6d8d5f5681a8f442909ec8e943685b60811..ec69809bd8aef22e202d574664e2bf4df066f968 100644 (file)
@@ -37,6 +37,7 @@ class DocIterator;
 class FuncRequest;
 class FuncStatus;
 class InsetCollapsable;
+class InsetCommand;
 class InsetIterator;
 class InsetLayout;
 class InsetList;
@@ -53,6 +54,7 @@ class ParConstIterator;
 class ParIterator;
 class Text;
 class TocList;
+class XHTMLStream;
 
 namespace graphics { class PreviewLoader; }
 
@@ -96,8 +98,9 @@ public:
        virtual ~Inset() {}
 
        /// change associated Buffer
-       /// FIXME this should go.
        virtual void setBuffer(Buffer & buffer);
+       /// remove the buffer reference
+       void resetBuffer() { setBuffer( *static_cast<Buffer *>(0)); }
        /// retrieve associated Buffer
        virtual Buffer & buffer();
        virtual Buffer const & buffer() const;
@@ -109,7 +112,7 @@ public:
        /**
          * 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().updateLabels() if
          * the inset is labeled.
          *
          * \sa isLabeled()
@@ -120,6 +123,8 @@ public:
 
        /// identification as math inset
        virtual InsetMath * asInsetMath() { return 0; }
+       /// identification as math inset
+       virtual InsetMath const * asInsetMath() const { return 0; }
        /// true for 'math' math inset, but not for e.g. mbox
        virtual bool inMathed() const { return false; }
        /// is this inset based on the InsetText class?
@@ -134,6 +139,10 @@ public:
        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);
@@ -206,11 +215,11 @@ public:
                CursorSlice const & sl, bool boundary, int & x, int & y) const;
 
        /// Allow multiple blanks
-       virtual bool isFreeSpacing() const { return getLayout().isFreeSpacing(); }
+       virtual bool isFreeSpacing() const;
        /// Don't eliminate empty paragraphs
-       virtual bool allowEmpty() const { return getLayout().isKeepEmpty(); }
+       virtual bool allowEmpty() const;
        /// Force inset into LTR environment if surroundings are RTL?
-       virtual bool forceLTR() const { return getLayout().isForceLtr(); }
+       virtual bool forceLTR() const;
 
        /// Where should we go when we press the up or down cursor key?
        virtual bool idxUpDown(Cursor & cur, bool up) const;
@@ -294,13 +303,15 @@ public:
        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 {}
 
-       /// what appears in the minibuffer when opening
-       virtual docstring editMessage() const;
        /// can the contents of the inset be edited on screen ?
        // true for InsetCollapsables (not ButtonOnly) (not InsetInfo), InsetText
        virtual bool editable() const;
@@ -308,7 +319,7 @@ public:
        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
@@ -385,6 +396,8 @@ public:
        virtual docstring name() const;
        ///
        virtual InsetLayout const & getLayout() const;
+       /// Is this inset's layout defined in the document's textclass?
+       bool undefined() const;
        /// used to toggle insets
        /// is the inset open?
        /// should this inset be handled like a normal charater
@@ -439,7 +452,8 @@ public:
         *  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
@@ -455,8 +469,10 @@ public:
        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 updateLabels(ParIterator const &, bool) {}
 
        /// Updates the inset's dialog
        virtual Buffer const * updateFrontend() const;
@@ -486,31 +502,24 @@ public:
        /// 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