]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetSpace.h
Fix GRAPHICS_EDIT of InsetGraphics
[lyx.git] / src / insets / InsetSpace.h
index e0c4b65eb246dfd0940d3fbed69ef89ac19c6853..321aae8bd7ae227b327fcffbe76d07cdb5dfa737 100644 (file)
 #define INSET_SPACE_H
 
 
-#include "InsetBase.h"
+#include "Inset.h"
+#include "Length.h"
+#include "MailInset.h"
 
 
 namespace lyx {
 
 class LaTeXFeatures;
 
-///  Used to insert different kinds of spaces
-class InsetSpace : public InsetBase {
+class InsetSpaceParams {
 public:
-
        /// The different kinds of spaces we support
        enum Kind {
                /// Normal space ('\ ')
@@ -44,54 +44,108 @@ public:
                /// \enspace (0.5em breakable)
                ENSKIP,
                /// Negative thin space ('\negthinspace')
-               NEGTHIN
+               NEGTHIN,
+               /// rubber length
+               HFILL,
+               /// \hspace*{\fill}
+               HFILL_PROTECTED,
+               /// rubber length, filled with dots
+               DOTFILL,
+               /// rubber length, filled with a rule
+               HRULEFILL,
+               /// \hspace{length}
+               CUSTOM,
+               /// \hspace*{length}
+               CUSTOM_PROTECTED
        };
+       ///
+       InsetSpaceParams() : kind(NORMAL), length(Length()) {}
+       ///
+       void write(std::ostream & os) const;
+       ///
+       void read(Lexer & lex);
+       ///
+       Kind kind;
+       ///
+       Length length;
+};
 
+///  Used to insert different kinds of spaces
+class InsetSpace : public Inset {
+public:
        ///
        InsetSpace();
+       ///
+       ~InsetSpace();
 
        ///
        explicit
-       InsetSpace(Kind k);
+       InsetSpace(InsetSpaceParams par);
+       ///
+       InsetSpaceParams params() const { return params_; }
        ///
-       Kind kind() const;
+       InsetSpaceParams::Kind kind() const;
        ///
-       bool metrics(MetricsInfo &, Dimension &) const;
+       Length length() const;
+       ///
+       docstring toolTip(BufferView const & bv, int x, int y) const;
+       ///
+       void metrics(MetricsInfo &, Dimension &) const;
        ///
        void draw(PainterInfo & pi, int x, int y) const;
        ///
-       void write(Buffer const &, std::ostream &) const;
+       void write(std::ostream &) const;
        /// Will not be used when lyxf3
-       void read(Buffer const &, Lexer & lex);
+       void read(Lexer & lex);
        ///
-       int latex(Buffer const &, odocstream &,
-                 OutputParams const &) const;
+       int latex(odocstream &, OutputParams const &) const;
        ///
-       int plaintext(Buffer const &, odocstream &,
-                     OutputParams const &) const;
+       int plaintext(odocstream &, OutputParams const &) const;
        ///
-       int docbook(Buffer const &, odocstream &,
-                   OutputParams const &) const;
+       int docbook(odocstream &, OutputParams const &) const;
        /// the string that is passed to the TOC
-       virtual int textString(Buffer const &, odocstream &,
-               OutputParams const &) const;
+       void textString(odocstream &) const;
        ///
-       InsetBase::Code lyxCode() const { return InsetBase::SPACE_CODE; }
-       /// We don't need \begin_inset and \end_inset
-       bool directWrite() const { return true; }
+       InsetCode lyxCode() const { return SPACE_CODE; }
+       /// is this an expandible space (rubber length)?
+       bool isStretchableSpace() const;
 
        // should this inset be handled like a normal charater
-       bool isChar() const;
+       bool isChar() const { return true; }
        /// is this equivalent to a letter?
-       bool isLetter() const;
+       bool isLetter() const { return false; }
        /// is this equivalent to a space (which is BTW different from
        // a line separator)?
-       bool isSpace() const;
+       bool isSpace() const { return true; }
 private:
-       virtual std::auto_ptr<InsetBase> doClone() const;
+       virtual Inset * clone() const { return new InsetSpace(*this); }
+       ///
+       void doDispatch(Cursor & cur, FuncRequest & cmd);
 
-       /// And which kind is this?
-       Kind kind_;
+       ///
+       InsetSpaceParams params_;
+};
+
+
+class InsetSpaceMailer : public MailInset {
+public:
+       ///
+       InsetSpaceMailer(InsetSpace & inset);
+       ///
+       virtual Inset & inset() const { return inset_; }
+       ///
+       virtual std::string const & name() const { return name_; }
+       ///
+       virtual std::string const inset2string(Buffer const &) const;
+       ///
+       static void string2params(std::string const &, InsetSpaceParams &);
+       ///
+       static std::string const params2string(InsetSpaceParams const &);
+private:
+       ///
+       static std::string const name_;
+       ///
+       InsetSpace & inset_;
 };