]> git.lyx.org Git - lyx.git/blobdiff - src/insets/insetminipage.C
Enable convertDefault.sh to run even if its executable bit is not set.
[lyx.git] / src / insets / insetminipage.C
index 540ff456b879ec8610951b0f9758de0858dbb94a..ecf9ed6d81d7f6fc050ba69e24f608eb6b810fa0 100644 (file)
@@ -6,7 +6,7 @@
  * \author Jürgen Vigna
  * \author Lars Gullik Bjønnes
  *
- * Full author contact details are available in file CREDITS
+ * Full author contact details are available in file CREDITS.
  */
 
 #include <config.h>
 
 #include "BufferView.h"
 #include "debug.h"
+#include "dimension.h"
 #include "funcrequest.h"
 #include "gettext.h"
+#include "Lsstream.h"
 #include "lyxfont.h"
 #include "lyxlex.h"
 #include "lyxtext.h"
 #include "Lsstream.h"
+#include "metricsinfo.h"
 
 #include "frontends/LyXView.h"
 #include "frontends/Dialogs.h"
 
 #include "support/LOstream.h"
-#include "support/lstrings.h"
 
 using std::ostream;
 using std::endl;
+using std::auto_ptr;
 
 
 // Some information about Minipages in LaTeX:
@@ -73,42 +76,30 @@ InsetMinipage::InsetMinipage(BufferParams const & bp)
 #if 0
        setAutoCollapse(false);
 #endif
-
-#if 0
-#ifdef WITH_WARNINGS
-#warning Remove this color definitions before 1.2.0 final!
-#endif
-       // just for experimentation :)
-       setBackgroundColor(LColor::green);
-#endif
-
-       inset.setFrameColor(0, LColor::blue);
+       inset.setFrameColor(LColor::blue);
        setInsetName("Minipage");
 }
 
 
-InsetMinipage::InsetMinipage(InsetMinipage const & in, bool same_id)
-       : InsetCollapsable(in, same_id), params_(in.params_)
+InsetMinipage::InsetMinipage(InsetMinipage const & in)
+       : InsetCollapsable(in), params_(in.params_)
 {}
 
 
-Inset * InsetMinipage::clone(Buffer const &, bool same_id) const
+auto_ptr<InsetBase> InsetMinipage::clone() const
 {
-       return new InsetMinipage(*const_cast<InsetMinipage *>(this), same_id);
+       return auto_ptr<InsetBase>(new InsetMinipage(*this));
 }
 
 
 InsetMinipage::~InsetMinipage()
 {
-       InsetMinipageMailer mailer(*this);
-       mailer.hideDialog();
+       InsetMinipageMailer(*this).hideDialog();
 }
 
 
 dispatch_result InsetMinipage::localDispatch(FuncRequest const & cmd)
 {
-       Inset::RESULT result = UNDISPATCHED;
-
        switch (cmd.action) {
        case LFUN_INSET_MODIFY: {
                InsetMinipage::Params params;
@@ -119,27 +110,18 @@ dispatch_result InsetMinipage::localDispatch(FuncRequest const & cmd)
 
                /* FIXME: I refuse to believe we have to live
                 * with ugliness like this ... */
-               LyXText * t = inset.getLyXText(cmd.view());
-               t->need_break_row = t->rows().begin();
-               t->fullRebreak();
-               inset.update(cmd.view(), true);
-               t->setCursorIntern(t->cursor.par(), t->cursor.pos());
+               inset.getLyXText(cmd.view())->fullRebreak();
                cmd.view()->updateInset(this);
-               result = DISPATCHED;
+               return DISPATCHED;
        }
-       break;
 
-       case LFUN_INSET_DIALOG_UPDATE: {
-               InsetMinipageMailer mailer(*this);
-               mailer.updateDialog(cmd.view());
-       }
-       break;
+       case LFUN_INSET_DIALOG_UPDATE:
+               InsetMinipageMailer(*this).updateDialog(cmd.view());
+               return DISPATCHED;
 
        default:
-               result = InsetCollapsable::localDispatch(cmd);
+               return InsetCollapsable::localDispatch(cmd);
        }
-
-       return result;
 }
 
 
@@ -210,65 +192,46 @@ void InsetMinipage::Params::read(LyXLex & lex)
 }
 
 
-void InsetMinipage::write(Buffer const * buf, ostream & os) const
+void InsetMinipage::write(Buffer const & buf, ostream & os) const
 {
        params_.write(os);
        InsetCollapsable::write(buf, os);
 }
 
 
-void InsetMinipage::read(Buffer const * buf, LyXLex & lex)
+void InsetMinipage::read(Buffer const & buf, LyXLex & lex)
 {
        params_.read(lex);
        InsetCollapsable::read(buf, lex);
 }
 
 
-int InsetMinipage::ascent(BufferView * bv, LyXFont const & font) const
+void InsetMinipage::metrics(MetricsInfo & mi, Dimension & dim) const
 {
        if (collapsed_)
-               return ascent_collapsed();
+               dimension_collapsed(dim);
        else {
-               // Take placement into account.
-               int i = 0;
+               Dimension d;
+               MetricsInfo m = mi;
+               m.base.textwidth = params_.width.inPixels(mi.base.textwidth);
+               InsetCollapsable::metrics(m, d);
                switch (params_.pos) {
                case top:
-                       i = InsetCollapsable::ascent(bv, font);
+                       dim.asc = d.asc;
+                       dim.des = d.des;
                        break;
                case center:
-                       i = (InsetCollapsable::ascent(bv, font)
-                            + InsetCollapsable::descent(bv, font)) / 2;
+                       dim.asc = d.ascent() + d.descent() / 2;
+                       dim.des = dim.asc;
                        break;
                case bottom:
-                       i = InsetCollapsable::descent(bv, font);
+                       dim.asc = d.des;
+                       dim.des = d.asc;
                        break;
                }
-               return i;
-       }
-}
-
-
-int InsetMinipage::descent(BufferView * bv, LyXFont const & font) const
-{
-       if (collapsed_)
-               return descent_collapsed();
-       else {
-               // Take placement into account.
-               int i = 0;
-               switch (params_.pos) {
-               case top:
-                       i = InsetCollapsable::descent(bv, font);
-                       break;
-               case center:
-                       i = (InsetCollapsable::ascent(bv, font)
-                            + InsetCollapsable::descent(bv, font)) / 2;
-                       break;
-               case bottom:
-                       i = InsetCollapsable::ascent(bv, font);
-                       break;
-               }
-               return i;
+               dim.wid = d.wid;
        }
+       dim_ = dim;
 }
 
 
@@ -278,8 +241,8 @@ string const InsetMinipage::editMessage() const
 }
 
 
-int InsetMinipage::latex(Buffer const * buf,
-                        ostream & os, bool fragile, bool fp) const
+int InsetMinipage::latex(Buffer const & buf, ostream & os,
+                        LatexRunParams const & runparams) const
 {
        string s_pos;
        switch (params_.pos) {
@@ -296,16 +259,16 @@ int InsetMinipage::latex(Buffer const * buf,
        os << "\\begin{minipage}[" << s_pos << "]{"
           << params_.width.asLatexString() << "}%\n";
 
-       int i = inset.latex(buf, os, fragile, fp);
+       int i = inset.latex(buf, os, runparams);
 
        os << "\\end{minipage}%\n";
        return i + 2;
 }
 
 
-bool InsetMinipage::insetAllowed(Inset::Code code) const
+bool InsetMinipage::insetAllowed(InsetOld::Code code) const
 {
-       if ((code == Inset::FLOAT_CODE) || (code == Inset::MARGIN_CODE))
+       if (code == InsetOld::FLOAT_CODE || code == InsetOld::MARGIN_CODE)
                return false;
 
        return InsetCollapsable::insetAllowed(code);
@@ -324,26 +287,6 @@ bool InsetMinipage::showInsetDialog(BufferView * bv) const
 }
 
 
-int InsetMinipage::getMaxWidth(BufferView * bv, UpdatableInset const * inset)
-       const
-{
-       if (owner() &&
-           static_cast<UpdatableInset*>(owner())->getMaxWidth(bv, inset) < 0) {
-               return -1;
-       }
-       if (!params_.width.zero()) {
-               int ww1 = latexTextWidth(bv);
-               int ww2 = InsetCollapsable::getMaxWidth(bv, inset);
-               if (ww2 > 0 && ww2 < ww1) {
-                       return ww2;
-               }
-               return ww1;
-       }
-       // this should not happen!
-       return InsetCollapsable::getMaxWidth(bv, inset);
-}
-
-
 int InsetMinipage::latexTextWidth(BufferView * bv) const
 {
        return params_.width.inPixels(InsetCollapsable::latexTextWidth(bv));
@@ -364,7 +307,7 @@ InsetMinipageMailer::InsetMinipageMailer(InsetMinipage & inset)
 {}
 
 
-string const InsetMinipageMailer::inset2string() const
+string const InsetMinipageMailer::inset2string(Buffer const &) const
 {
        return params2string(inset_.params());
 }
@@ -377,9 +320,9 @@ void InsetMinipageMailer::string2params(string const & in,
 
        if (in.empty())
                return;
-       
-       istringstream data(in);
-       LyXLex lex(0,0);
+
+       istringstream data(STRCONV(in));
+       LyXLex lex(0, 0);
        lex.setStream(data);
 
        if (lex.isOK()) {
@@ -410,6 +353,5 @@ InsetMinipageMailer::params2string(InsetMinipage::Params const & params)
        ostringstream data;
        data << name_ << ' ';
        params.write(data);
-
-       return data.str();
+       return STRCONV(data.str());
 }