#include "LString.h"
#include "paragraph.h"
#include "lyxtextclasslist.h"
-#include "LyXView.h"
+#include "frontends/LyXView.h"
#include "undo_funcs.h"
#include "buffer.h"
#include "bufferparams.h"
#include "gettext.h"
#include "BufferView.h"
-#include "LyXView.h"
#include "CutAndPaste.h"
-#include "Painter.h"
-#include "font.h"
+#include "frontends/Painter.h"
+#include "frontends/font_metrics.h"
#include "debug.h"
#include "lyxrc.h"
#include "lyxrow.h"
// ok we have a selection. This is always between sstart_cur
// and sel_end cursor
cur = sstart_cur;
+ Paragraph * par = sstart_cur.par();
+ Paragraph * epar = send_cur.par()->next();
LyXLayout const & lyxlayout =
textclasslist[bview->buffer()->params.textclass][layout];
do {
- cur.par()->applyLayout(layout);
- makeFontEntriesLayoutSpecific(bview->buffer(), cur.par());
- Paragraph * fppar = cur.par();
+ par->applyLayout(layout);
+ makeFontEntriesLayoutSpecific(bview->buffer(), par);
+ Paragraph * fppar = par;
fppar->params().spaceTop(lyxlayout.fill_top ?
VSpace(VSpace::VFILL)
: VSpace(VSpace::NONE));
VSpace(VSpace::VFILL)
: VSpace(VSpace::NONE));
if (lyxlayout.margintype == MARGIN_MANUAL)
- cur.par()->setLabelWidthString(lyxlayout.labelstring());
+ par->setLabelWidthString(lyxlayout.labelstring());
if (lyxlayout.labeltype != LABEL_BIBLIO
&& fppar->bibkey) {
delete fppar->bibkey;
fppar->bibkey = 0;
}
- if (cur.par() != send_cur.par())
- cur.par(cur.par()->next());
- } while (cur.par() != send_cur.par());
+ cur.par(par);
+ par = par->next();
+ } while (par != epar);
return endpar;
}
freezeUndo();
cursor = selection.start;
while (cursor.par() != selection.end.par() ||
- (cursor.pos() < selection.end.pos()))
+ cursor.pos() < selection.end.pos())
{
if (cursor.pos() < cursor.par()->size()) {
- // an open footnote should behave
- // like a closed one
+ // an open footnote should behave like a closed one
setCharFont(bview, cursor.par(), cursor.pos(),
font, toggleall);
cursor.pos(cursor.pos() + 1);
}
-bool LyXText::fullRebreak(BufferView * bview)
+void LyXText::fullRebreak(BufferView * bview)
{
if (!firstrow) {
init(bview);
- return true;
+ return;
}
if (need_break_row) {
breakAgain(bview, need_break_row);
need_break_row = 0;
- return true;
+ return;
}
- return true;
}
// important for the screen
-/* the cursor set functions have a special mechanism. When they
- * realize, that you left an empty paragraph, they will delete it.
- * They also delete the corresponding row */
+// the cursor set functions have a special mechanism. When they
+// realize, that you left an empty paragraph, they will delete it.
+// They also delete the corresponding row
// need the selection cursor:
void LyXText::setSelection(BufferView * bview)
}
-/* the DTP switches for paragraphs. LyX will store them in the
-* first physicla paragraph. When a paragraph is broken, the top settings
-* rest, the bottom settings are given to the new one. So I can make shure,
-* they do not duplicate themself and you cannnot make dirty things with
-* them! */
+// the DTP switches for paragraphs. LyX will store them in the first
+// physicla paragraph. When a paragraph is broken, the top settings rest,
+// the bottom settings are given to the new one. So I can make shure,
+// they do not duplicate themself and you cannnot make dirty things with
+// them!
void LyXText::setParagraph(BufferView * bview,
bool line_top, bool line_bottom,
par->enumdepth = par->depthHook(par->getDepth())->enumdepth;
par->setCounter(6 + par->enumdepth,
par->depthHook(par->getDepth())->getCounter(6 + par->enumdepth));
- /* reset the counters.
- * A depth change is like a breaking layout
- */
+ // reset the counters.A depth change is like a breaking layout
for (int i = 6 + par->enumdepth + 1; i < 10; ++i)
par->setCounter(i, 0);
}
cur.iy(y + row->baseline());
Inset * ins;
if (row->previous() && pos &&
+ row->previous()->par() == row->par() &&
par->getChar(pos) == Paragraph::META_INSET &&
(ins=par->getInset(pos)) && (ins->needFullRow() || ins->display()))
{
float fill_label_hfill;
// This call HAS to be here because of the BidiTables!!!
prepareToPrint(bview, row, x, fill_separator, fill_hfill,
- fill_label_hfill);
+ fill_label_hfill);
if (last < row->pos())
cursor_vpos = row->pos();
pos_type pos = vis2log(vpos);
if (main_body > 0 && pos == main_body - 1) {
x += fill_label_hfill +
- lyxfont::width(textclasslist[
+ font_metrics::width(textclasslist[
bview->buffer()->params.textclass][
row->par()->layout()]
.labelsep,
}
-void LyXText::cursorUp(BufferView * bview) const
+void LyXText::cursorUp(BufferView * bview, bool selecting) const
{
#if 1
int x = cursor.x_fix();
int y = cursor.y() - cursor.row()->baseline() - 1;
setCursorFromCoordinates(bview, x, y);
- int y1 = cursor.iy() - first_y;
- int y2 = y1;
- Inset * inset_hit = bview->checkInsetHit(const_cast<LyXText *>(this), x, y1);
- if (inset_hit && isHighlyEditableInset(inset_hit)) {
- inset_hit->edit(bview, x, y - (y2 - y1), 0);
+ if (!selecting) {
+ int y1 = cursor.iy() - first_y;
+ int y2 = y1;
+ y -= first_y;
+ Inset * inset_hit =
+ bview->checkInsetHit(const_cast<LyXText *>(this), x, y1);
+ if (inset_hit && isHighlyEditableInset(inset_hit)) {
+ inset_hit->edit(bview, x, y - (y2 - y1), mouse_button::none);
+ }
}
#else
setCursorFromCoordinates(bview, cursor.x_fix(),
}
-void LyXText::cursorDown(BufferView * bview) const
+void LyXText::cursorDown(BufferView * bview, bool selecting) const
{
#if 1
int x = cursor.x_fix();
int y = cursor.y() - cursor.row()->baseline() +
cursor.row()->height() + 1;
setCursorFromCoordinates(bview, x, y);
- int y1 = cursor.iy() - first_y;
- int y2 = y1;
- Inset * inset_hit = bview->checkInsetHit(const_cast<LyXText *>(this), x, y1);
- if (inset_hit && isHighlyEditableInset(inset_hit)) {
- inset_hit->edit(bview, x, y - (y2 - y1), 0);
+ if (!selecting && cursor.row() == cursor.irow()) {
+ int y1 = cursor.iy() - first_y;
+ int y2 = y1;
+ y -= first_y;
+ Inset * inset_hit =
+ bview->checkInsetHit(const_cast<LyXText *>(this), x, y1);
+ if (inset_hit && isHighlyEditableInset(inset_hit)) {
+ inset_hit->edit(bview, x, y - (y2 - y1), mouse_button::none);
+ }
}
#else
setCursorFromCoordinates(bview, cursor.x_fix(),
if (cur.pos() > where.pos())
cur.pos(cur.pos()-1);
+ // check also if we don't want to set the cursor on a spot behind the
+ // pagragraph because we erased the last character.
+ if (cur.pos() > cur.par()->size())
+ cur.pos(cur.par()->size());
+
// recompute row et al. for this cursor
setCursor(bview, cur, cur.par(), cur.pos(), cur.boundary());
}
void LyXText::status(BufferView * bview, LyXText::text_status st) const
{
- // well as much as I know && binds more then || so the above and the
- // below are identical (this for your known use of parentesis!)
- // Now some explanation:
// We should only go up with refreshing code so this means that if
// we have a MORE refresh we should never set it to LITTLE if we still
// didn't handle it (and then it will be UNCHANGED. Now as long as