#include "lyxrow.h"
#include "lyxtextclasslist.h"
#include "paragraph.h"
-#include "lyx_gui_misc.h"
#include "gettext.h"
#include "bufferparams.h"
#include "buffer.h"
}
LyXLayout const & layout =
- textclasslist.Style(bview->buffer()->params.textclass,
- par->getLayout());
+ textclasslist[bview->buffer()->params.textclass][par->layout()];
if (layout.margintype != MARGIN_RIGHT_ADDRESS_BOX) {
// Optimization here: in most cases, the real row is
int LyXText::leftMargin(BufferView * bview, Row const * row) const
{
LyXTextClass const & tclass =
- textclasslist.TextClass(bview->buffer()->params.textclass);
- LyXLayout const & layout = tclass[row->par()->getLayout()];
+ textclasslist[bview->buffer()->params.textclass];
+ LyXLayout const & layout = tclass[row->par()->layout()];
string parindent = layout.parindent;
// I have had this idea very late, so it seems to be a
// later added hack and this is true
if (!row->par()->getDepth()) {
- if (!row->par()->getLayout()) {
+ if (row->par()->layout() == tclass.defaultLayoutName()) {
// find the previous same level paragraph
if (row->par()->previous()) {
Paragraph * newpar = row->par()
->depthHook(row->par()->getDepth());
if (newpar &&
- tclass[newpar->getLayout()].nextnoindent)
+ tclass[newpar->layout()].nextnoindent)
parindent.erase();
}
}
// make a corresponding row. Needed to call LeftMargin()
- // check wether it is a sufficent paragraph
- if (newpar && tclass[newpar->getLayout()].isEnvironment())
- {
+ // check wether it is a sufficent paragraph
+ if (newpar && tclass[newpar->layout()].isEnvironment()) {
Row dummyrow;
dummyrow.par(newpar);
dummyrow.pos(newpar->size());
// LeftMargin() is always called
row->par()->params().depth(0);
}
-
- if (newpar && !row->par()->getLayout()) {
+
+ if (newpar && row->par()->layout() == tclass.defaultLayoutName()) {
if (newpar->params().noindent())
parindent.erase();
else
- parindent = tclass[newpar->getLayout()].parindent;
+ parindent = tclass[newpar->layout()].parindent;
}
-
}
LyXFont const labelfont = getLabelFont(bview->buffer(), row->par());
&& ! row->par()->isFirstInSequence()))
&& align == LYX_ALIGN_BLOCK
&& !row->par()->params().noindent()
- // in tabulars paragraphs are never indented!
- && (!row->par()->inInset() || row->par()->inInset()->owner()->lyxCode() != Inset::TABULAR_CODE)
- && (row->par()->layout ||
+ // in tabulars and ert paragraphs are never indented!
+ && (!row->par()->inInset() || !row->par()->inInset()->owner() ||
+ (row->par()->inInset()->owner()->lyxCode() != Inset::TABULAR_CODE &&
+ row->par()->inInset()->owner()->lyxCode() != Inset::ERT_CODE))
+ && (row->par()->layout() != tclass.defaultLayoutName() ||
bview->buffer()->params.paragraph_separation ==
- BufferParams::PARSEP_INDENT))
+ BufferParams::PARSEP_INDENT)) {
x += lyxfont::signedWidth(parindent,
tclass.defaultfont());
- else if (layout.labeltype == LABEL_BIBLIO) {
+ } else if (layout.labeltype == LABEL_BIBLIO) {
// ale970405 Right width for bibitems
x += bibitemMaxWidth(bview, tclass.defaultfont());
}
}
+
return x;
}
int LyXText::rightMargin(Buffer const * buf, Row const * row) const
{
- LyXTextClass const & tclass =
- textclasslist.TextClass(buf->params.textclass);
- LyXLayout const & layout = tclass[row->par()->getLayout()];
-
+ LyXTextClass const & tclass = textclasslist[buf->params.textclass];
+ LyXLayout const & layout = tclass[row->par()->layout()];
+
int x = LYX_PAPER_MARGIN
+ lyxfont::signedWidth(tclass.rightmargin(),
tclass.defaultfont());
// make a corresponding row. Needed to call LeftMargin()
// check wether it is a sufficent paragraph
- if (newpar
- && tclass[newpar->getLayout()].isEnvironment()) {
+ if (newpar && tclass[newpar->layout()].isEnvironment()) {
Row dummyrow;
dummyrow.par(newpar);
dummyrow.pos(0);
int LyXText::labelEnd(BufferView * bview, Row const * row) const
{
- if (textclasslist.Style(bview->buffer()->params.textclass,
- row->par()->getLayout()).margintype
+ if (textclasslist[bview->buffer()->params.textclass][row->par()->layout()].margintype
== MARGIN_MANUAL) {
Row tmprow;
tmprow = *row;
pos_type const main_body =
beginningOfMainBody(bview->buffer(), par);
LyXLayout const & layout =
- textclasslist.Style(bview->buffer()->params.textclass,
- par->getLayout());
+ textclasslist[bview->buffer()->params.textclass][par->layout()];
pos_type i = pos;
if (layout.margintype == MARGIN_RIGHT_ADDRESS_BOX) {
pos_type const last = rowLastPrintable(row);
// special handling of the right address boxes
- if (textclasslist.Style(bview->buffer()->params.textclass,
- row->par()->getLayout()).margintype
+ if (textclasslist[bview->buffer()->params.textclass][row->par()->layout()].margintype
== MARGIN_RIGHT_ADDRESS_BOX)
{
int const tmpfill = row->fill();
} else
w = leftMargin(bview, row);
- LyXLayout const & layout = textclasslist.Style(bview->buffer()->params.textclass,
- row->par()->getLayout());
+ LyXLayout const & layout = textclasslist[bview->buffer()->params.textclass][row->par()->layout()];
pos_type const main_body =
beginningOfMainBody(bview->buffer(), row->par());
pos_type i = row->pos();
return true;
// in some labels it does not count
- if (textclasslist.Style(buf->params.textclass,
- row_ptr->par()->getLayout()).margintype
+ if (textclasslist[buf->params.textclass][row_ptr->par()->layout()].margintype
!= MARGIN_MANUAL
&& pos < beginningOfMainBody(buf, row_ptr->par()))
return false;
Paragraph * par = row_ptr->par();
Paragraph * firstpar = row_ptr->par();
- LyXLayout const & layout = textclasslist.Style(bview->buffer()->params.textclass,
- firstpar->getLayout());
+ LyXLayout const & layout = textclasslist[bview->buffer()->params.textclass][firstpar->layout()];
// as max get the first character of this row then it can increes but not
// decrees the height. Just some point to start with so we don't have to
{
maxasc += bview->buffer()->params.getDefSkip().inPixels(bview);
} else if (firstpar->previous() &&
- textclasslist.Style(bview->buffer()->params.textclass,
- firstpar->previous()->
- getLayout()).isParagraph() &&
+ textclasslist[bview->buffer()->params.textclass][firstpar->previous()->layout()].isParagraph() &&
firstpar->previous()->getDepth() == 0)
{
// is it right to use defskip here too? (AS)
Paragraph * prev = row_ptr->par()->previous();
if (prev)
prev = row_ptr->par()->depthHook(row_ptr->par()->getDepth());
- if (prev && prev->getLayout() == firstpar->getLayout() &&
+ if (prev && prev->layout() == firstpar->layout() &&
prev->getDepth() == firstpar->getDepth() &&
prev->getLabelWidthString() == firstpar->getLabelWidthString())
{
tmptop = layout.topsep;
if (row_ptr->previous()->par()->getDepth() >= row_ptr->par()->getDepth())
- tmptop -= textclasslist.Style(bview->buffer()->params.textclass,
- row_ptr->previous()->par()->
- getLayout()).bottomsep;
+ tmptop -= textclasslist[bview->buffer()->params.textclass][row_ptr->previous()->par()->layout()].bottomsep;
if (tmptop > 0)
layoutasc = (tmptop * defaultHeight());
prev = row_ptr->par()->outerHook();
if (prev) {
- maxasc += int(textclasslist.Style(bview->buffer()->params.textclass,
- prev->getLayout()).parsep * defaultHeight());
+ maxasc += int(textclasslist[bview->buffer()->params.textclass][prev->layout()].parsep * defaultHeight());
} else {
if (firstpar->previous() &&
firstpar->previous()->getDepth() == 0 &&
- firstpar->previous()->getLayout() !=
- firstpar->getLayout())
+ firstpar->previous()->layout() !=
+ firstpar->layout())
{
// avoid parsep
} else if (firstpar->previous()) {
float unusual = 0;
if (comparepar->getDepth() > nextpar->getDepth()) {
- usual = (textclasslist.Style(bview->buffer()->params.textclass,
- comparepar->getLayout()).bottomsep * defaultHeight());
+ usual = (textclasslist[bview->buffer()->params.textclass][comparepar->layout()].bottomsep * defaultHeight());
comparepar = comparepar->depthHook(nextpar->getDepth());
- if (comparepar->getLayout()!= nextpar->getLayout()
+ if (comparepar->layout()!= nextpar->layout()
|| nextpar->getLabelWidthString() !=
comparepar->getLabelWidthString())
{
- unusual = (textclasslist.Style(bview->buffer()->params.textclass,
- comparepar->getLayout()).bottomsep * defaultHeight());
+ unusual = (textclasslist[bview->buffer()->params.textclass][comparepar->layout()].bottomsep * defaultHeight());
}
if (unusual > usual)
layoutdesc = unusual;
layoutdesc = usual;
} else if (comparepar->getDepth() == nextpar->getDepth()) {
- if (comparepar->getLayout()!= nextpar->getLayout()
+ if (comparepar->layout() != nextpar->layout()
|| nextpar->getLabelWidthString() !=
comparepar->getLabelWidthString())
- layoutdesc = int(textclasslist.Style(bview->buffer()->params.textclass,
- comparepar->getLayout()).bottomsep * defaultHeight());
+ layoutdesc = int(textclasslist[bview->buffer()->params.textclass][comparepar->layout()].bottomsep * defaultHeight());
}
}
}
void LyXText::breakParagraph(BufferView * bview, char keep_layout)
{
- LyXLayout const & layout =
- textclasslist.Style(bview->buffer()->params.textclass,
- cursor.par()->getLayout());
+ LyXTextClass const & tclass =
+ textclasslist[bview->buffer()->params.textclass];
+ LyXLayout const & layout = tclass[cursor.par()->layout()];
// this is only allowed, if the current paragraph is not empty or caption
if ((cursor.par()->size() <= 0)
&& layout.labeltype!= LABEL_SENSITIVE)
return;
- setUndo(bview, Undo::INSERT,cursor.par(),cursor.par()->next());
+ setUndo(bview, Undo::FINISH, cursor.par(), cursor.par()->next());
// Always break behind a space
//
if (layout.labeltype == LABEL_SENSITIVE) {
if (!cursor.pos())
// set to standard-layout
- cursor.par()->setLayout(0);
+ cursor.par()->applyLayout(tclass.defaultLayoutName());
else
// set to standard-layout
- cursor.par()->next()->setLayout(0);
+ cursor.par()->next()->applyLayout(tclass.defaultLayoutName());
}
/* if the cursor is at the beginning of a row without prior newline,
* same Paragraph one to the right and make a rebreak */
void LyXText::insertChar(BufferView * bview, char c)
{
- setUndo(bview, Undo::INSERT,
- cursor.par(), cursor.par()->next());
+ setUndo(bview, Undo::INSERT, cursor.par(), cursor.par()->next());
// When the free-spacing option is set for the current layout,
// disable the double-space checking
bool const freeSpacing =
- textclasslist.Style(bview->buffer()->params.textclass,
- cursor.row()->par()->getLayout()).free_spacing ||
+ textclasslist[bview->buffer()->params.textclass][cursor.row()->par()->layout()].free_spacing ||
cursor.row()->par()->isFreeSpacing();
-
if (lyxrc.auto_number) {
static string const number_operators = "+-/*";
static string const number_unary_operators = "+-";
Row * row = cursor.row();
int y = cursor.y() - row->baseline();
if (c != Paragraph::META_INSET) /* Here case LyXText::InsertInset
- * already insertet the character */
+ * already insertet the character */
cursor.par()->insertChar(cursor.pos(), c);
setCharFont(bview->buffer(), cursor.par(), cursor.pos(), rawtmpfont);
|| ((cursor.pos() < cursor.par()->size()) &&
cursor.par()->isInset(cursor.pos()+1))
|| cursor.row()->fill() == -1)
- && row->previous() && row->previous()->par() == row->par()) {
+ && row->previous() && row->previous()->par() == row->par())
+ {
pos_type z = nextBreakPoint(bview,
row->previous(),
workWidth(bview));
// recalculate the fill of the row
if (row->fill() >= 0) /* needed because a newline
- * will set fill to -1. Otherwise
- * we would not get a rebreak! */
+ * will set fill to -1. Otherwise
+ * we would not get a rebreak! */
row->fill(fill(bview, row, workWidth(bview)));
if (row->fill() < 0) {
refresh_y = y;
redoHeightOfParagraph(bview, cursor);
} else {
// now the special right address boxes
- if (textclasslist.Style(bview->buffer()->params.textclass,
- cursor.par()->getLayout()).margintype
+ if (textclasslist[bview->buffer()->params.textclass][cursor.par()->layout()].margintype
== MARGIN_RIGHT_ADDRESS_BOX) {
redoDrawingOfParagraph(bview, cursor);
}
x = (workWidth(bview) > 0) ? leftMargin(bview, row) : 0;
// is there a manual margin with a manual label
- if (textclasslist.Style(bview->buffer()->params.textclass,
- row->par()->getLayout()).margintype == MARGIN_MANUAL
- && textclasslist.Style(bview->buffer()->params.textclass,
- row->par()->getLayout()).labeltype == LABEL_MANUAL) {
-
- /* one more since labels are left aligned */
+ LyXTextClass const & tclass = textclasslist[bview->buffer()->params.textclass];
+ LyXLayout const & layout = tclass[row->par()->layout()];
+
+ if (layout.margintype == MARGIN_MANUAL
+ && layout.labeltype == LABEL_MANUAL) {
+ // one more since labels are left aligned
nlh = numberOfLabelHfills(bview->buffer(), row) + 1;
if (nlh && !row->par()->getLabelWidthString().empty()) {
fill_label_hfill = labelFill(bview, row) / nlh;
// set x how you need it
int align;
if (row->par()->params().align() == LYX_ALIGN_LAYOUT) {
- align = textclasslist.Style(bview->buffer()->params.textclass, row->par()->getLayout()).align;
+ align = layout.align;
} else {
align = row->par()->params().align();
}
&& (inset->display())) // || (inset->scroll() < 0)))
align = (inset->lyxCode() == Inset::MATHMACRO_CODE)
? LYX_ALIGN_BLOCK : LYX_ALIGN_CENTER;
+ // ERT insets should always be LEFT ALIGNED on screen
+ inset = row->par()->inInset();
+ if (inset && inset->owner() &&
+ inset->owner()->lyxCode() == Inset::ERT_CODE)
+ {
+ align = LYX_ALIGN_LEFT;
+ }
switch (align) {
case LYX_ALIGN_BLOCK:
pos_type last = rowLast(row);
if (main_body > 0 &&
- (main_body-1 > last ||
- !row->par()->isLineSeparator(main_body-1))) {
- LyXLayout const & layout =
- textclasslist.Style(bview->buffer()->params.textclass,
- row->par()->getLayout());
+ (main_body - 1 > last ||
+ !row->par()->isLineSeparator(main_body - 1))) {
x += lyxfont::width(layout.labelsep,
getLabelFont(bview->buffer(), row->par()));
- if (main_body-1 <= last)
+ if (main_body - 1 <= last)
x += fill_label_hfill;
}
}
{
lyx::Assert(from <= to);
- setUndo(bview, Undo::FINISH,
- from.par(), to.par()->next());
+ setUndo(bview, Undo::FINISH, from.par(), to.par()->next());
pos_type pos = from.pos();
Paragraph * par = from.par();
{
Paragraph * tmppar = cursor.par();
- setUndo(&bview, Undo::FINISH,
- tmppar, tmppar->next());
+ setUndo(&bview, Undo::FINISH, tmppar, tmppar->next());
pos_type tmppos = cursor.pos();
// to make sure undo gets the right cursor position
cursor = old_cursor;
setUndo(bview, Undo::DELETE,
- cursor.par(), cursor.par()->next());
+ cursor.par(), cursor.par()->next());
cursor = tmpcursor;
backspace(bview);
}
if (cursor.par()->previous()) {
Paragraph * tmppar = cursor.par()->previous();
- if (cursor.par()->getLayout() == tmppar->getLayout()
+ if (cursor.par()->layout() == tmppar->layout()
&& cursor.par()->getAlign() == tmppar->getAlign()) {
// Inherit bottom DTD from the paragraph below.
// (the one we are deleting)
Correction: Pasting is always allowed with standard-layout
*/
+ LyXTextClass const & tclass = textclasslist[bview->buffer()->params.textclass];
+
if (cursor.par() != tmppar
- && (cursor.par()->getLayout() == tmppar->getLayout()
- || tmppar->getLayout() == 0 /*standard*/)
- && cursor.par()->getAlign() == tmppar->getAlign())
- {
+ && (cursor.par()->layout() == tmppar->layout()
+ || tmppar->layout() == tclass.defaultLayoutName())
+ && cursor.par()->getAlign() == tmppar->getAlign()) {
removeParagraph(tmprow);
removeRow(tmprow);
cursor.par()->pasteParagraph(bview->buffer()->params);
redoHeightOfParagraph(bview, cursor);
} else {
// now the special right address boxes
- if (textclasslist.Style(bview->buffer()->params.textclass,
- cursor.par()->getLayout()).margintype == MARGIN_RIGHT_ADDRESS_BOX) {
+ if (textclasslist
+ [bview->buffer()->params.textclass]
+ [cursor.par()->layout()].margintype == MARGIN_RIGHT_ADDRESS_BOX) {
redoDrawingOfParagraph(bview, cursor);
}
}
pos_type pos = vis2log(vpos);
float const old_tmpx = tmpx;
if (main_body > 0 && pos == main_body - 1) {
- LyXLayout const & layout = textclasslist.Style(buffer->params.textclass,
- par->getLayout());
+ LyXLayout const & layout =
+ textclasslist
+ [buffer->params.textclass]
+ [par->layout()];
LyXFont const lfont = getLabelFont(buffer, par);
parparams.spaceTop(), p.yo + y_top);
Buffer const * buffer = p.bv->buffer();
-
- LyXLayout const & layout =
- textclasslist.Style(buffer->params.textclass, par->getLayout());
+
+ LyXTextClass const & tclass = textclasslist[buffer->params.textclass];
+ LyXLayout const & layout = tclass[par->layout()];
// think about the parskip
// some parskips VERY EASY IMPLEMENTATION
y_top += buffer->params.getDefSkip().inPixels(p.bv);
} else {
LyXLayout const & playout =
- textclasslist.Style(buffer->params.textclass,
- par->previous()->getLayout());
+ tclass[par->previous()->layout()];
if (playout.latextype == LATEX_PARAGRAPH
&& !par->previous()->getDepth()) {
// is it right to use defskip here, too? (AS)
case END_LABEL_STATIC:
{
LyXFont font(LyXFont::ALL_SANE);
- LyXTextClass::LayoutList::size_type layout = par->getLayout();
- string const str = textclasslist.
- Style(buffer->params.textclass, layout).endlabelstring();
+ string const & layout = par->layout();
+ string const str = textclasslist[buffer->params.textclass][layout].endlabelstring();
font = getLabelFont(buffer, par);
int const x = is_rtl ?
int(p.x) - lyxfont::width(str, font)
}
LyXLayout const & layout =
- textclasslist.Style(buffer->params.textclass, par->getLayout());
+ textclasslist[buffer->params.textclass][par->layout()];
pos_type vpos = p.row->pos();
while (vpos <= last) {
pos_type last = rowLastPrintable(row);
pos_type c = 0;
LyXLayout const & layout =
- textclasslist.Style(bview->buffer()->params.textclass,
- row->par()->getLayout());
+ textclasslist[bview->buffer()->params.textclass][
+ row->par()->layout()];
bool left_side = false;
pos_type main_body = beginningOfMainBody(bview->buffer(), row->par());
Row * LyXText::getRowNearY(int & y) const
{
+#if 1
// If possible we should optimize this method. (Lgb)
Row * tmprow = firstrow;
int tmpy = 0;
}
y = tmpy; // return the real y
+
+ //lyxerr << "returned y = " << y << endl;
+
+ return tmprow;
+#else
+ // Search from the current cursor position.
+
+ Row * tmprow = cursor.row();
+ int tmpy = cursor.y() - tmprow->baseline();
+
+ lyxerr << "cursor.y() = " << tmpy << endl;
+ lyxerr << "tmprow->height() = " << tmprow->height() << endl;
+ lyxerr << "tmprow->baseline() = " << tmprow->baseline() << endl;
+ lyxerr << "first = " << first << endl;
+ lyxerr << "y = " << y << endl;
+
+ if (y < tmpy) {
+ lyxerr << "up" << endl;
+#if 0
+ while (tmprow && tmpy - tmprow->height() >= y) {
+ tmpy -= tmprow->height();
+ tmprow = tmprow->previous();
+ }
+#else
+ do {
+ tmpy -= tmprow->height();
+ tmprow = tmprow->previous();
+ } while (tmprow && tmpy - tmprow->height() >= y);
+#endif
+ } else if (y > tmpy) {
+ lyxerr << "down" << endl;
+
+ while (tmprow->next() && tmpy + tmprow->height() <= y) {
+ tmpy += tmprow->height();
+ tmprow = tmprow->next();
+ }
+ } else {
+ lyxerr << "equal" << endl;
+ }
+
+ y = tmpy; // return the real y
+
+ lyxerr << "returned y = " << y << endl;
+
return tmprow;
+
+#endif
}