InsetCollapsable::InsetCollapsable(BufferParams const & bp,
CollapseStatus status)
- : inset(bp), label("Label"), status_(status)
+ : inset(bp), label("Label"), status_(status), openinlined_(false)
{
inset.setOwner(this);
inset.setAutoBreakRows(true);
}
-int InsetCollapsable::height_collapsed() const
-{
- Dimension dim;
- font_metrics::buttonText(label, labelfont_, dim.wid, dim.asc, dim.des);
- return dim.asc + dim.des;
-}
-
-
void InsetCollapsable::metrics(MetricsInfo & mi, Dimension & dim) const
{
if (status_ == Inlined) {
if (status_ == Open) {
Dimension insetdim;
inset.metrics(mi, insetdim);
- dim.des += insetdim.height() + TEXT_TO_BOTTOM_OFFSET;
- dim.wid = max(dim.wid, insetdim.wid);
+ openinlined_ = (insetdim.wid + dim.wid <= mi.base.textwidth);
+ if (openinlined_) {
+ dim.wid += insetdim.wid;
+ dim.des = max(dim.des, insetdim.des);
+ dim.asc = max(dim.asc, insetdim.asc);
+ } else {
+ dim.des += insetdim.height()
+ + TEXT_TO_BOTTOM_OFFSET;
+ dim.wid = max(dim.wid, insetdim.wid);
+ }
}
}
dim_ = dim;
if (status_ == Open) {
if (!owner())
x += scroll();
- inset.draw(pi, x, y - aa + dimc.height() + inset.ascent());
+
+ if (openinlined_)
+ inset.draw(pi, x + dimc.width(), y - aa + inset.ascent());
+ else
+ inset.draw(pi, x, y - aa + dimc.height() + inset.ascent());
}
}
}
case LFUN_MOUSE_PRESS:
if (status_ == Inlined)
inset.dispatch(cur, cmd);
- else if (status_ == Open && cmd.y > button_dim.y2)
+ else if (status_ == Open && !hitButton(cmd))
inset.dispatch(cur, cmd);
break;
case LFUN_MOUSE_MOTION:
if (status_ == Inlined)
inset.dispatch(cur, cmd);
- else if (status_ == Open && cmd.y > button_dim.y2)
+ else if (status_ == Open && !hitButton(cmd))
inset.dispatch(cur, cmd);
break;
///
void dimension_collapsed(Dimension &) const;
///
- int height_collapsed() const;
- ///
void draw_collapsed(PainterInfo & pi, int x, int y) const;
///
int getMaxTextWidth(Painter & pain, UpdatableInset const *) const;
private:
///
mutable CollapseStatus status_;
+ /// a substatus of the Open status, determined automatically in metrics
+ mutable bool openinlined_;
};
#endif