Slight improvement to caption inset

* insetcaption.C
	(InsetCaption::setLabel): added
	(InsetCaption::metrics): modified
	(InsetCaption::draw): modified

	* insetcaption.h
	(descendable): added
	(setCount): added



git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@13946 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Martin Vermeer 2006-05-28 17:02:57 +00:00
parent 9614a1d698
commit 32a51961ae
2 changed files with 40 additions and 24 deletions

View File

@ -89,9 +89,40 @@ void InsetCaption::cursorPos
} }
void InsetCaption::setLabel(LCursor & cur) const
{
// Set caption label _only_ if the cursor is in _this_ float:
if (cur.top().text() == &text_) {
string s;
size_t i = cur.depth();
while (i > 0) {
--i;
InsetBase * const in = &cur[i].inset();
if (in->lyxCode() == InsetBase::FLOAT_CODE
|| in->lyxCode() == InsetBase::WRAP_CODE) {
s = in->getInsetName();
break;
}
}
Floating const & fl = textclass_.floats().getType(s);
s = fl.name();
string num;
if (s.empty())
s = "Senseless";
else
num = convert<string>(counter_);
// Generate the label
label = bformat("%1$s %2$s:", _(s), num);
}
}
void InsetCaption::metrics(MetricsInfo & mi, Dimension & dim) const void InsetCaption::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
mi.base.textwidth -= 2 * TEXT_TO_INSET_OFFSET; mi.base.textwidth -= 2 * TEXT_TO_INSET_OFFSET;
LCursor cur = mi.base.bv->cursor();
setLabel(cur);
labelwidth_ = font_metrics::width(label, mi.base.font); labelwidth_ = font_metrics::width(label, mi.base.font);
dim.wid = labelwidth_; dim.wid = labelwidth_;
Dimension textdim; Dimension textdim;
@ -118,30 +149,7 @@ void InsetCaption::draw(PainterInfo & pi, int x, int y) const
// See if we can find the name of the float this caption // See if we can find the name of the float this caption
// belongs to. // belongs to.
LCursor cur = pi.base.bv->cursor(); LCursor cur = pi.base.bv->cursor();
// Set caption label _only_ if the cursor is in _this_ float: setLabel(cur);
if (cur.top().text() == &text_) {
string s;
size_t i = cur.depth();
while (i > 0) {
--i;
InsetBase * const in = &cur[i].inset();
if (in->lyxCode() == InsetBase::FLOAT_CODE
|| in->lyxCode() == InsetBase::WRAP_CODE) {
s = in->getInsetName();
break;
}
}
Floating const & fl = textclass_.floats().getType(s);
s = fl.name();
string num;
if (s.empty())
s = "Senseless";
else
num = convert<string>(textclass_.counters().value(fl.type()));
// Generate the label
label = bformat("%1$s %2$s:", _(s), num);
}
labelwidth_ = font_metrics::width(label, pi.base.font); labelwidth_ = font_metrics::width(label, pi.base.font);
pi.pain.text(x, y, label, pi.base.font); pi.pain.text(x, y, label, pi.base.font);

View File

@ -38,6 +38,8 @@ public:
virtual void cursorPos virtual void cursorPos
(CursorSlice const & sl, bool boundary, int & x, int & y) const; (CursorSlice const & sl, bool boundary, int & x, int & y) const;
/// ///
bool descendable() const { return true; }
///
virtual void metrics(MetricsInfo & mi, Dimension & dim) const; virtual void metrics(MetricsInfo & mi, Dimension & dim) const;
/// ///
virtual void draw(PainterInfo & pi, int x, int y) const; virtual void draw(PainterInfo & pi, int x, int y) const;
@ -54,7 +56,11 @@ public:
/// ///
int docbook(Buffer const & buf, std::ostream & os, int docbook(Buffer const & buf, std::ostream & os,
OutputParams const & runparams) const; OutputParams const & runparams) const;
///
void setCount(int c) { counter_ = c; }
private: private:
///
void setLabel(LCursor & cur) const;
/// ///
virtual std::auto_ptr<InsetBase> doClone() const; virtual std::auto_ptr<InsetBase> doClone() const;
/// ///
@ -62,6 +68,8 @@ private:
/// ///
mutable int labelwidth_; mutable int labelwidth_;
/// ///
mutable int counter_;
///
LyXTextClass const & textclass_; LyXTextClass const & textclass_;
}; };