]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetCollapsable.cpp
pimpl not needed here
[lyx.git] / src / insets / InsetCollapsable.cpp
index 4fbf2f1469f1b4f91aeef5ccd89e3152ce9f448b..c5f14d07739dff3ac30fcbaa4b61c9a544090d0e 100644 (file)
@@ -81,9 +81,6 @@ InsetCollapsable::InsetCollapsable
        setAutoBreakRows(true);
        setDrawFrame(true);
        setFrameColor(Color_collapsableframe);
-       setButtonLabel();
-       // Fallback for lacking inset layout item
-       layout_.bgcolor = Color_background;
 }
 
 
@@ -104,7 +101,16 @@ InsetCollapsable::InsetCollapsable(InsetCollapsable const & rhs)
 
 void  InsetCollapsable::setLayout(BufferParams const & bp)
 {
+       // FIXME: put this in the InsetLayout parsing?
+       // Fallback for lacking inset layout background
+       layout_.bgcolor = Color_background;
+
        layout_ = getLayout(bp);
+
+       // FIXME: put this in the InsetLayout parsing?
+       layout_.labelfont.realize(sane_font);
+
+       setButtonLabel();
 }
 
 
@@ -158,7 +164,7 @@ void InsetCollapsable::read(Buffer const & buf, Lexer & lex)
        if (!token_found)
                status_ = isOpen() ? Open : Collapsed;
 
-       setButtonLabel();
+       setLayout(buf.params());
 
        // Force default font, if so requested
        // This avoids paragraphs in buffer language that would have a
@@ -185,7 +191,7 @@ void InsetCollapsable::metrics(MetricsInfo & mi, Dimension & dim) const
        autoOpen_ = mi.base.bv->cursor().isInside(this);
 
        FontInfo tmpfont = mi.base.font;
-       getDrawFont(mi.base.font);
+       mi.base.font = layout_.font;
        mi.base.font.realize(tmpfont);
 
        switch (geometry()) {
@@ -227,7 +233,7 @@ void InsetCollapsable::metrics(MetricsInfo & mi, Dimension & dim) const
                                dim.des = max(dim.des - textdim.asc + dim.asc, textdim.des);
                                dim.asc = textdim.asc;
                        } else {
-                               dim.des += textdim.height() + TEXT_TO_BOTTOM_OFFSET;
+                               dim.des += textdim.height() + TEXT_TO_INSET_OFFSET;
                                dim.wid = max(dim.wid, textdim.wid);
                        }
                }
@@ -252,7 +258,7 @@ void InsetCollapsable::draw(PainterInfo & pi, int x, int y) const
        pi.background_color = backgroundColor();
 
        FontInfo tmpfont = pi.base.font;
-       getDrawFont(pi.base.font);
+       pi.base.font = layout_.font;
        pi.base.font.realize(tmpfont);
 
        // Draw button first -- top, left or only
@@ -599,7 +605,7 @@ bool InsetCollapsable::allowMultiPar() const
 void InsetCollapsable::resetParagraphsFont()
 {
        Font font;
-       font.fontInfo() = layout_.font;
+       font.fontInfo() = sane_font;
        if (layout_.forceltr)
                font.setLanguage(latex_language);
        if (layout_.passthru) {
@@ -614,12 +620,6 @@ void InsetCollapsable::resetParagraphsFont()
 }
 
 
-void InsetCollapsable::getDrawFont(FontInfo & font) const
-{
-       font = layout_.font;
-}
-
-
 bool InsetCollapsable::getStatus(Cursor & cur, FuncRequest const & cmd,
                FuncStatus & flag) const
 {
@@ -730,7 +730,7 @@ bool InsetCollapsable::getStatus(Cursor & cur, FuncRequest const & cmd,
                return true;
 
        case LFUN_LANGUAGE:
-               flag.enabled(layout_.forceltr);
+               flag.enabled(!layout_.forceltr);
                return InsetText::getStatus(cur, cmd, flag);
 
        case LFUN_BREAK_PARAGRAPH:
@@ -759,11 +759,6 @@ void InsetCollapsable::setStatus(Cursor & cur, CollapseStatus status)
 }
 
 
-void InsetCollapsable::setLabelFont(FontInfo const & font)
-{
-       layout_.labelfont = font;
-}
-
 docstring InsetCollapsable::floatName(string const & type, BufferParams const & bp) const
 {
        FloatList const & floats = bp.getTextClass().floats();
@@ -797,6 +792,8 @@ int InsetCollapsable::latex(Buffer const & buf, odocstream & os,
        if (!layout_.latexname.empty()) {
                if (layout_.latextype == "command") {
                        // FIXME UNICODE
+                       if (runparams.moving_arg)
+                               os << "\\protect";
                        os << '\\' << from_utf8(layout_.latexname);
                        if (!layout_.latexparam.empty())
                                os << from_utf8(layout_.latexparam);
@@ -810,6 +807,8 @@ int InsetCollapsable::latex(Buffer const & buf, odocstream & os,
        OutputParams rp = runparams;
        if (layout_.passthru)
                rp.verbatim = true;
+       if (layout_.needprotect)
+               rp.moving_arg = true;
        int i = InsetText::latex(buf, os, rp);
        if (!layout_.latexname.empty()) {
                if (layout_.latextype == "command") {