]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetListings.cpp
This should be the last of the commits refactoring the InsetLayout code.
[lyx.git] / src / insets / InsetListings.cpp
index 0c6b472da86d171f4f73db9d0686dc52fcaa8fb2..d3deadb6242df1fc3a51a4cf5b6cef0c2fe46098 100644 (file)
 #include "Buffer.h"
 #include "BufferParams.h"
 #include "Counters.h"
-#include "Language.h"
-#include "gettext.h"
+#include "Cursor.h"
 #include "DispatchResult.h"
 #include "FuncRequest.h"
 #include "FuncStatus.h"
+#include "support/gettext.h"
+#include "InsetList.h"
+#include "Language.h"
 #include "MetricsInfo.h"
-#include "Cursor.h"
+#include "TextClass.h"
+
+#include "support/docstream.h"
 #include "support/lstrings.h"
 
 #include <sstream>
 
-namespace lyx {
+using namespace std;
+using namespace lyx::support;
 
-using support::token;
-using support::contains;
-using support::subst;
+namespace lyx {
 
-using std::istringstream;
-using std::ostream;
-using std::ostringstream;
-using std::string;
 
 char const lstinline_delimiters[] =
        "!*()-=+|;:'\"`,<.>/?QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm";
 
-void InsetListings::init()
-{
-       setButtonLabel();
-       Font font(Font::ALL_SANE);
-       font.decSize();
-       font.decSize();
-       font.setColor(Color::none);
-       setLabelFont(font);
-       // FIXME: what to do with those?
-       //text_.current_font.setLanguage(latex_language);
-       //text_.real_current_font.setLanguage(latex_language);
-}
-
-
 InsetListings::InsetListings(BufferParams const & bp, InsetListingsParams const & par)
-       : InsetERT(bp, par.status())
-{
-       init();
-}
+       : InsetCollapsable(bp, par.status())
+{}
 
 
 InsetListings::InsetListings(InsetListings const & in)
-       : InsetERT(in), params_(in.params_)
-{
-       init();
-}
+       : InsetCollapsable(in), params_(in.params_)
+{}
 
 
 Inset * InsetListings::clone() const
@@ -137,7 +118,7 @@ void InsetListings::read(Buffer const & buf, Lexer & lex)
                        break;
                }
        }
-       InsetERT::read(buf, lex);
+       InsetCollapsable::read(buf, lex);
 }
 
 
@@ -198,7 +179,13 @@ int InsetListings::latex(Buffer const & buf, odocstream & os,
                 os << code
                    << *delimiter;
        } else {
-               docstring const caption = getCaption(buf, runparams);
+               OutputParams rp = runparams;
+               // FIXME: the line below would fix bug 4182,
+               // but real_current_font moved to cursor.
+               //rp.local_font = &text_.real_current_font;
+               rp.moving_arg = true;
+               docstring const caption = getCaption(buf, rp);
+               runparams.encoding = rp.encoding;
                if (param_string.empty() && caption.empty())
                        os << "\n\\begingroup\n\\inputencoding{latin1}\n\\begin{lstlisting}\n";
                else {
@@ -211,8 +198,7 @@ int InsetListings::latex(Buffer const & buf, odocstream & os,
                        os << from_utf8(param_string) << "]\n";
                }
                lines += 4;
-                os << code
-                   << "\n\\end{lstlisting}\n\\endgroup\n";
+               os << code << "\n\\end{lstlisting}\n\\endgroup\n";
                lines += 3;
        }
 
@@ -236,11 +222,11 @@ void InsetListings::doDispatch(Cursor & cur, FuncRequest & cmd)
                        InsetListingsMailer(*this).showDialog(&cur.bv());
                        break;
                }
-               InsetERT::doDispatch(cur, cmd);
+               InsetCollapsable::doDispatch(cur, cmd);
                break;
        }
        default:
-               InsetERT::doDispatch(cur, cmd);
+               InsetCollapsable::doDispatch(cur, cmd);
                break;
        }
 }
@@ -257,7 +243,7 @@ bool InsetListings::getStatus(Cursor & cur, FuncRequest const & cmd,
                        status.enabled(!params().isInline());
                        return true;
                default:
-                       return InsetERT::getStatus(cur, cmd, status);
+                       return InsetCollapsable::getStatus(cur, cmd, status);
        }
 }
 
@@ -265,34 +251,17 @@ bool InsetListings::getStatus(Cursor & cur, FuncRequest const & cmd,
 void InsetListings::setButtonLabel()
 {
        // FIXME UNICODE
-       setLabel(isOpen() ?  _("Listing") : getNewLabel(_("Listing")));
-}
-
-
-void InsetListings::metrics(MetricsInfo & mi, Dimension & dim) const
-{
-       Font tmpfont = mi.base.font;
-       getDrawFont(mi.base.font);
-       mi.base.font.realize(tmpfont);
-       InsetCollapsable::metrics(mi, dim);
-       mi.base.font = tmpfont;
-}
-
-
-void InsetListings::draw(PainterInfo & pi, int x, int y) const
-{
-       Font tmpfont = pi.base.font;
-       getDrawFont(pi.base.font);
-       pi.base.font.realize(tmpfont);
-       InsetCollapsable::draw(pi, x, y);
-       pi.base.font = tmpfont;
+       if (decoration() == Deco_Classic)
+               setLabel(isOpen() ?  _("Listing") : getNewLabel(_("Listing")));
+       else
+               setLabel(getNewLabel(_("Listing")));
 }
 
 
 void InsetListings::validate(LaTeXFeatures & features) const
 {
        features.require("listings");
-       InsetERT::validate(features);
+       InsetCollapsable::validate(features);
 }
 
 
@@ -303,27 +272,18 @@ bool InsetListings::showInsetDialog(BufferView * bv) const
 }
 
 
-void InsetListings::getDrawFont(Font & font) const
-{
-       font = Font(Font::ALL_INHERIT, latex_language);
-       font.setFamily(Font::TYPEWRITER_FAMILY);
-       // FIXME: define Color::listing?
-       font.setColor(Color::foreground);
-}
-
-
 docstring InsetListings::getCaption(Buffer const & buf,
-                   OutputParams const & runparams) const
+       OutputParams const & runparams) const
 {
        if (paragraphs().empty())
                return docstring();
 
        ParagraphList::const_iterator pit = paragraphs().begin();
        for (; pit != paragraphs().end(); ++pit) {
-               InsetList::const_iterator it = pit->insetlist.begin();
-               for (; it != pit->insetlist.end(); ++it) {
+               InsetList::const_iterator it = pit->insetList().begin();
+               for (; it != pit->insetList().end(); ++it) {
                        Inset & inset = *it->inset;
-                       if (inset.lyxCode() == Inset::CAPTION_CODE) {
+                       if (inset.lyxCode() == CAPTION_CODE) {
                                odocstringstream ods;
                                InsetCaption * ins =
                                        static_cast<InsetCaption *>(it->inset);