#include <config.h>
-
#include "insetminipage.h"
#include "insettext.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:
}
-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));
}
dispatch_result InsetMinipage::localDispatch(FuncRequest const & cmd)
{
- Inset::RESULT result = UNDISPATCHED;
-
switch (cmd.action) {
case LFUN_INSET_MODIFY: {
InsetMinipage::Params params;
params_.pos = params.pos;
params_.width = params.width;
+ /* FIXME: I refuse to believe we have to live
+ * with ugliness like this ... */
+ 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;
}
}
-int InsetMinipage::ascent(BufferView * bv, LyXFont const & font) const
-{
- if (collapsed_)
- return ascent_collapsed();
- else {
- // Take placement into account.
- int i = 0;
- switch (params_.pos) {
- case top:
- i = InsetCollapsable::ascent(bv, font);
- break;
- case center:
- i = (InsetCollapsable::ascent(bv, font)
- + InsetCollapsable::descent(bv, font)) / 2;
- break;
- case bottom:
- i = InsetCollapsable::descent(bv, font);
- break;
- }
- return i;
- }
-}
-
-
-int InsetMinipage::descent(BufferView * bv, LyXFont const & font) const
+void InsetMinipage::metrics(MetricsInfo & mi, Dimension & dim) const
{
if (collapsed_)
- return descent_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::descent(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::ascent(bv, font);
+ dim.asc = d.des;
+ dim.des = d.asc;
break;
}
- return i;
+ dim.wid = d.wid;
}
+ dim_ = dim;
}
}
-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) {
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);
}
-InsetMinipage::Position InsetMinipage::pos() const
-{
- return params_.pos;
-}
-
-
-void InsetMinipage::pos(InsetMinipage::Position p)
-{
- if (params_.pos != p) {
- params_.pos = p;
- need_update = FULL;
- }
-}
-
-
-InsetMinipage::InnerPosition InsetMinipage::innerPos() const
-{
- return params_.inner_pos;
-}
-
-
-void InsetMinipage::innerPos(InsetMinipage::InnerPosition ip)
-{
- params_.inner_pos = ip;
-}
-
-
-LyXLength const & InsetMinipage::pageHeight() const
-{
- return params_.height;
-}
-
-
-void InsetMinipage::pageHeight(LyXLength const & ll)
-{
- if (params_.height != ll) {
- params_.height = ll;
- need_update = FULL;
- }
-}
-
-
-LyXLength const & InsetMinipage::pageWidth() const
-{
- return params_.width;
-}
-
-
-void InsetMinipage::pageWidth(LyXLength const & ll)
-{
- if (ll != params_.width) {
- params_.width = ll;
- need_update = FULL;
- }
-}
-
-
bool InsetMinipage::showInsetDialog(BufferView * bv) const
{
if (!inset.showInsetDialog(bv)) {
}
-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));
{}
-string const InsetMinipageMailer::inset2string() const
+string const InsetMinipageMailer::inset2string(Buffer const &) const
{
return params2string(inset_.params());
}
{
params = InsetMinipage::Params();
- istringstream data(in);
- LyXLex lex(0,0);
+ if (in.empty())
+ return;
+
+ istringstream data(STRCONV(in));
+ LyXLex lex(0, 0);
lex.setStream(data);
if (lex.isOK()) {
ostringstream data;
data << name_ << ' ';
params.write(data);
-
- return data.str();
+ return STRCONV(data.str());
}