setParams(p);
cmd.view()->updateInset(this);
-
- // We need to do a redraw because the maximum
- // InsetBibitem width could have changed
-#warning please check you mean repaint() not update(),
-#warning and whether the repaint() is needed at all
- cmd.view()->repaint();
cmd.view()->fitCursor();
return DISPATCHED;
}
void InsetTabular::metrics(MetricsInfo & mi, Dimension & dim) const
{
- if (mi.base.bv) {
- calculate_dimensions_of_cells(mi.base.bv);
- //lyxerr << "InsetTabular::metrics, bv: " << mi.base.bv << endl;
- for (int i = 0; i < tabular.getNumberOfCells(); ++i) {
- tabular.cellinfo_of_cell(i)->inset.text_.bv_owner = mi.base.bv;
- tabular.cellinfo_of_cell(i)->inset.reinitLyXText();
- }
- }
+ //lyxerr << "InsetTabular::metrics: " << mi.base.bv << " width: " <<
+ // mi.base.textwidth << "\n";
+ if (!mi.base.bv) {
+ lyxerr << "InsetTabular::metrics: need bv\n";
+ Assert(0);
+ }
+
+ calculate_dimensions_of_cells(mi.base.bv);
+ //lyxerr << "InsetTabular::metrics, bv: " << mi.base.bv << endl;
+ for (int i = 0; i < tabular.getNumberOfCells(); ++i) {
+ LyXTabular::cellstruct * ci = tabular.cellinfo_of_cell(i);
+ int col = tabular.column_of_cell(i);
+ InsetText & cell = ci->inset;
+ cell.text_.bv_owner = mi.base.bv;
+ int wid = tabular.column_info[col].p_width.inPixels(mi.base.textwidth);
+ //lyxerr << " " << i << " - " << ci->width_of_cell << " - "
+ // << tabular.column_info[col].width_of_column << " - "
+ // << wid << " ";
+ MetricsInfo m = mi;
+ m.base.textwidth = wid;
+ Dimension d;
+ cell.metrics(m, d);
+ }
+ //lyxerr << endl;
dim.asc = tabular.getAscentOfRow(0);
dim.des = tabular.getHeightOfTabular() - tabular.getAscentOfRow(0) + 1;
void InsetTabular::draw(PainterInfo & pi, int x, int y) const
{
+ lyxerr << "InsetTabular::draw: " << x << " " << y << "\n";
if (nodraw()) {
need_update = FULL;
return;
void InsetTabular::updateLocal(BufferView * bv, UpdateCodes what) const
{
+ lyxerr << "InsetTabular::updateLocal: " << what << "\n";
if (what == INIT) {
calculate_dimensions_of_cells(bv);
}
void InsetText::metrics(MetricsInfo & mi, Dimension & dim) const
{
+ //lyxerr << "InsetText::metrics: width: " << mi.base.textwidth << "\n";
BufferView * bv = mi.base.bv;
setViewCache(bv);
- text_.rebuild();
+ text_.rebuild(mi.base.textwidth);
dim.asc = text_.rows().begin()->ascent_of_text() + TEXT_TO_INSET_OFFSET;
dim.des = text_.height - dim.asc + TEXT_TO_INSET_OFFSET;
dim.wid = max(textWidth(bv), int(text_.width)) + 2 * TEXT_TO_INSET_OFFSET;
/// a full rebreak of the whole text
void fullRebreak();
/// rebuild RowList cache
- void rebuild();
+ void rebuild(int maxwidth);
///
RowList::iterator need_break_row;
}
-void LyXText::rebuild()
+void LyXText::rebuild(int maxwidth)
{
rowlist_.clear();
need_break_row = rows().end();
ParagraphList::iterator pit = ownerParagraphs().begin();
ParagraphList::iterator end = ownerParagraphs().end();
- //current_font = getFont(bview->buffer(), pit, 0);
-
- for (; pit != end; ++pit)
- insertParagraph(pit, rowlist_.end());
-
- //setCursorIntern(rowlist_.begin()->par(), 0);
- //selection.cursor = cursor;
+ for (; pit != end; ++pit) {
+ // insert a new row, starting at position 0
+ Row newrow(pit, 0);
+ RowList::iterator rit = rowlist_.insert(rowlist_.end(), newrow);
- //updateCounters();
+ // and now append the whole paragraph before the new row
+ appendParagraph(rit);
+ }
- //setCursorIntern(cursor.par(), cursor.pos());
}