#include "support/strfwd.h"
+#include <boost/shared_ptr.hpp>
+
#include <vector>
namespace lyx {
class Text;
class TocList;
class EmbeddedFile;
-class EmbeddedFiles;
+class EmbeddedFileList;
namespace graphics { class PreviewLoader; }
class Inset {
public:
+ ///
+ enum EntryDirection {
+ ENTRY_DIRECTION_IGNORE,
+ ENTRY_DIRECTION_RIGHT,
+ ENTRY_DIRECTION_LEFT,
+ };
///
typedef ptrdiff_t difference_type;
/// short of anything else reasonable
FuncStatus & status) const;
/// cursor enters
- virtual void edit(Cursor & cur, bool left);
+ virtual void edit(Cursor & cur, bool front,
+ EntryDirection entry_from = ENTRY_DIRECTION_IGNORE);
/// cursor enters
virtual Inset * editXY(Cursor & cur, int x, int y);
/// draw inset selection if necessary
virtual void drawSelection(PainterInfo &, int, int) const {}
///
- virtual bool editing(BufferView * bv) const;
+ virtual bool editing(BufferView const * bv) const;
///
virtual bool showInsetDialog(BufferView *) const { return false; }
/// number of columns in gridlike structures
virtual size_t ncols() const { return 0; }
/// is called when the cursor leaves this inset
- // returns true if cursor is now invalid.
+ /// returns true if cursor is now invalid. The cursor parameter
+ /// is _not_ necessarily pointing to the inset.
virtual bool notifyCursorLeaves(Cursor &) { return false; }
/// is called when the mouse enter or leave this inset
/// return true if this inset needs repaint
/// return true if the inset should be removed automatically
virtual bool autoDelete() const;
+ class CompletionList {
+ public:
+ ///
+ virtual ~CompletionList() {}
+ ///
+ virtual size_t size() const =0;
+ /// returns the string shown in the gui.
+ virtual docstring data(size_t idx) const =0;
+ /// returns the resource string used to load an icon.
+ virtual std::string icon(size_t /*idx*/) const { return std::string(); }
+ };
+
+ /// Returns true if the inset supports completions.
+ virtual bool completionSupported(Cursor const &) const { return false; }
+ /// Returns true if the inset supports inline completions at the
+ /// cursor position. In this case the completion might be stored
+ /// in the BufferView's inlineCompletion property.
+ virtual bool inlineCompletionSupported(Cursor const & /*cur*/) const
+ { return false; }
+ /// Return true if the inline completion should be automatic.
+ virtual bool automaticInlineCompletion() const { return true; }
+ /// Return true if the popup completion should be automatic.
+ virtual bool automaticPopupCompletion() const { return true; }
+ /// Returns completion suggestions at cursor position. Return an
+ /// null pointer if no completion is a available or possible.
+ /// The caller is responsible to free the returned object!
+ virtual CompletionList const * completionList(Cursor const &) const
+ { return 0; }
+ /// Returns the completion prefix to filter the suggestions for completion.
+ /// This is only called if completionList returned a non-null list.
+ virtual docstring completionPrefix(Cursor const &) const
+ { return docstring(); }
+ /// Do a completion at the cursor position. Return true on success.
+ /// The completion does not contain the prefix. If finished is true, the
+ /// completion is final. If finished is false, completion might only be
+ /// a partial completion.
+ virtual bool insertCompletion(Cursor & /*cur*/,
+ docstring const & /*completion*/, bool /*finished*/)
+ { return false; }
+ /// Get the completion inset position and size
+ virtual void completionPosAndDim(Cursor const &, int & /*x*/, int & /*y*/,
+ Dimension & /*dim*/) const {}
+
/// returns true if the inset can hold an inset of given type
virtual bool insetAllowed(InsetCode) const { return false; }
- /// if this inset has paragraphs should they be output all as default
- /// paragraphs with the default layout of the text class?
- virtual bool forceDefaultParagraphs(idx_type) const { return false; }
+ /// should this inset use the empty layout by default rather than
+ /// the standard layout? (default: only if that is forced.)
+ virtual bool useEmptyLayout() const { return forceEmptyLayout(); }
+ /// if this inset has paragraphs should they be forced to use the
+ /// empty layout?
+ virtual bool forceEmptyLayout() const { return false; }
+ /// if this inset has paragraphs should the user be allowed to
+ /// customize alignment, etc?
+ virtual bool allowParagraphCustomization(idx_type) const { return true; }
/// Is the width forced to some value?
virtual bool hasFixedWidth() const { return false; }
+ /// \return Tool tip for this inset.
+ /// This default implementation returns an empty string.
+ virtual docstring toolTip(BufferView const & bv, int x, int y) const;
+ /// \return Context menu identifier for this inset.
+ /// This default implementation returns an empty string.
+ virtual docstring contextMenu(BufferView const & bv, int x, int y) const;
+
// FIXME This should really disappear in favor of
// docstring name() const { return from_ascii(insetName(lyxCode()))); }
// There's no reason to be using different names in different places.
virtual void addPreview(graphics::PreviewLoader &) const {}
/// Add an entry to the TocList
/// pit is the ParConstIterator of the paragraph containing the inset
- virtual void addToToc(TocList &, Buffer const &, ParConstIterator const &) const {}
+ virtual void addToToc(Buffer const &, ParConstIterator const &) const {}
/// report files that can be embedded with the lyx file
- virtual void registerEmbeddedFiles(Buffer const &, EmbeddedFiles &) const {}
+ virtual void registerEmbeddedFiles(Buffer const &, EmbeddedFileList &) const {}
/// use embedded or external file after the embedding status of a file is changed
virtual void updateEmbeddedFile(Buffer const &, EmbeddedFile const &) {}
/// Fill keys with BibTeX information