mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-23 13:31:49 +00:00
move a bit moer stuff from BufferView::dispatch to LyXText::dispatch
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@5117 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
ea8e13cd2f
commit
45b2220180
@ -885,7 +885,7 @@ Inset * BufferView::Pimpl::checkInsetHit(LyXText * text, int & x, int & y)
|
||||
LyXCursor cursor;
|
||||
text->setCursorFromCoordinates(bv_, cursor, x, y_tmp);
|
||||
|
||||
Inset * inset(checkInset(*text, cursor, x, y_tmp));
|
||||
Inset * inset = checkInset(*text, cursor, x, y_tmp);
|
||||
|
||||
if (inset) {
|
||||
y = y_tmp;
|
||||
@ -935,7 +935,7 @@ void BufferView::Pimpl::workAreaResize()
|
||||
if (lyxerr.debugging())
|
||||
textcache.show(lyxerr, "Expose delete all");
|
||||
textcache.clear();
|
||||
// FIXME: this is aalready done in resizeCurrentBuffer() ??
|
||||
// FIXME: this is already done in resizeCurrentBuffer() ??
|
||||
buffer_->resizeInsets(bv_);
|
||||
} else if (heightChange) {
|
||||
// fitCursor() ensures we don't jump back
|
||||
@ -1441,23 +1441,6 @@ bool BufferView::Pimpl::dispatch(FuncRequest const & ev)
|
||||
switchKeyMap();
|
||||
break;
|
||||
|
||||
case LFUN_GOTOERROR:
|
||||
gotoInset(Inset::ERROR_CODE, false);
|
||||
break;
|
||||
|
||||
case LFUN_GOTONOTE:
|
||||
gotoInset(Inset::NOTE_CODE, false);
|
||||
break;
|
||||
|
||||
case LFUN_REFERENCE_GOTO:
|
||||
{
|
||||
vector<Inset::Code> tmp;
|
||||
tmp.push_back(Inset::LABEL_CODE);
|
||||
tmp.push_back(Inset::REF_CODE);
|
||||
gotoInset(tmp, true);
|
||||
break;
|
||||
}
|
||||
|
||||
case LFUN_DEPTH_MIN:
|
||||
changeDepth(bv_, bv_->getLyXText(), -1);
|
||||
break;
|
||||
@ -2092,50 +2075,3 @@ void BufferView::Pimpl::updateInset(Inset * inset, bool mark_dirty)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void BufferView::Pimpl::gotoInset(vector<Inset::Code> const & codes,
|
||||
bool same_content)
|
||||
{
|
||||
if (!available()) return;
|
||||
|
||||
hideCursor();
|
||||
beforeChange(bv_->text);
|
||||
update(bv_->text, BufferView::SELECT|BufferView::FITCUR);
|
||||
|
||||
LyXCursor const & cursor = bv_->text->cursor;
|
||||
|
||||
string contents;
|
||||
if (same_content &&
|
||||
cursor.par()->isInset(cursor.pos())) {
|
||||
Inset const * inset = cursor.par()->getInset(cursor.pos());
|
||||
if (find(codes.begin(), codes.end(), inset->lyxCode())
|
||||
!= codes.end())
|
||||
contents =
|
||||
static_cast<InsetCommand const *>(inset)->getContents();
|
||||
}
|
||||
|
||||
|
||||
if (!bv_->text->gotoNextInset(bv_, codes, contents)) {
|
||||
if (bv_->text->cursor.pos()
|
||||
|| bv_->text->cursor.par() != bv_->text->ownerParagraph()) {
|
||||
LyXCursor tmp = bv_->text->cursor;
|
||||
bv_->text->cursor.par(bv_->text->ownerParagraph());
|
||||
bv_->text->cursor.pos(0);
|
||||
if (!bv_->text->gotoNextInset(bv_, codes, contents)) {
|
||||
bv_->text->cursor = tmp;
|
||||
bv_->owner()->message(_("No more insets"));
|
||||
}
|
||||
} else {
|
||||
bv_->owner()->message(_("No more insets"));
|
||||
}
|
||||
}
|
||||
update(bv_->text, BufferView::SELECT|BufferView::FITCUR);
|
||||
bv_->text->selection.cursor = bv_->text->cursor;
|
||||
}
|
||||
|
||||
|
||||
void BufferView::Pimpl::gotoInset(Inset::Code code, bool same_content)
|
||||
{
|
||||
gotoInset(vector<Inset::Code>(1, code), same_content);
|
||||
}
|
||||
|
@ -144,11 +144,7 @@ private:
|
||||
void hfill();
|
||||
///
|
||||
void smartQuote();
|
||||
///
|
||||
void gotoInset(std::vector<Inset::Code> const & codes,
|
||||
bool same_content);
|
||||
///
|
||||
void gotoInset(Inset::Code codes, bool same_content);
|
||||
|
||||
///
|
||||
BufferView * bv_;
|
||||
///
|
||||
|
@ -432,6 +432,11 @@ public:
|
||||
bool gotoNextInset(BufferView *, std::vector<Inset::Code> const & codes,
|
||||
string const & contents = string()) const;
|
||||
///
|
||||
void gotoInset(BufferView * bv, std::vector<Inset::Code> const & codes,
|
||||
bool same_content);
|
||||
///
|
||||
void gotoInset(BufferView * bv, Inset::Code code, bool same_content);
|
||||
///
|
||||
|
||||
/* for the greater insets */
|
||||
|
||||
@ -480,18 +485,21 @@ public:
|
||||
private:
|
||||
///
|
||||
mutable Row * firstrow;
|
||||
|
||||
///
|
||||
mutable Row * lastrow;
|
||||
|
||||
///
|
||||
void cursorLeftOneWord(LyXCursor &) const;
|
||||
///
|
||||
void cursorPrevious(BufferView * bv);
|
||||
///
|
||||
void cursorNext(BufferView * bv);
|
||||
|
||||
///
|
||||
float getCursorX(BufferView *, Row *, lyx::pos_type pos,
|
||||
lyx::pos_type last, bool boundary) const;
|
||||
///
|
||||
void changeRegionCase(BufferView * bview,
|
||||
void changeRegionCase(BufferView * bv,
|
||||
LyXCursor const & from,
|
||||
LyXCursor const & to,
|
||||
LyXText::TextCase action);
|
||||
@ -602,7 +610,7 @@ private:
|
||||
|
||||
// fix the cursor `cur' after a characters has been deleted at `where'
|
||||
// position. Called by deleteEmptyParagraphMechanism
|
||||
void fixCursorAfterDelete(BufferView * bview,
|
||||
void fixCursorAfterDelete(BufferView * bv,
|
||||
LyXCursor & cur,
|
||||
LyXCursor const & where) const;
|
||||
|
||||
|
31
src/text2.C
31
src/text2.C
@ -1667,37 +1667,6 @@ void LyXText::insertStringAsParagraphs(BufferView * bview, string const & str)
|
||||
}
|
||||
|
||||
|
||||
bool LyXText::gotoNextInset(BufferView * bview,
|
||||
vector<Inset::Code> const & codes,
|
||||
string const & contents) const
|
||||
{
|
||||
LyXCursor res = cursor;
|
||||
Inset * inset;
|
||||
do {
|
||||
if (res.pos() < res.par()->size() - 1) {
|
||||
res.pos(res.pos() + 1);
|
||||
} else {
|
||||
res.par(res.par()->next());
|
||||
res.pos(0);
|
||||
}
|
||||
|
||||
} while (res.par() &&
|
||||
!(res.par()->isInset(res.pos())
|
||||
&& (inset = res.par()->getInset(res.pos())) != 0
|
||||
&& find(codes.begin(), codes.end(), inset->lyxCode())
|
||||
!= codes.end()
|
||||
&& (contents.empty() ||
|
||||
static_cast<InsetCommand *>(res.par()->getInset(res.pos()))->getContents()
|
||||
== contents)));
|
||||
|
||||
if (res.par()) {
|
||||
setCursor(bview, res.par(), res.pos(), false);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
void LyXText::checkParagraph(BufferView * bview, Paragraph * par,
|
||||
pos_type pos)
|
||||
{
|
||||
|
168
src/text3.C
168
src/text3.C
@ -28,6 +28,7 @@
|
||||
#include "frontends/WorkArea.h"
|
||||
#include "insets/insetspecialchar.h"
|
||||
#include "insets/insettext.h"
|
||||
#include "insets/insetcommand.h"
|
||||
#include "undo_funcs.h"
|
||||
|
||||
using std::endl;
|
||||
@ -35,12 +36,80 @@ using std::endl;
|
||||
extern string current_layout;
|
||||
|
||||
|
||||
namespace {
|
||||
|
||||
void cursorPrevious(LyXText * text, BufferView * bv)
|
||||
bool LyXText::gotoNextInset(BufferView * bv,
|
||||
vector<Inset::Code> const & codes, string const & contents) const
|
||||
{
|
||||
if (!text->cursor.row()->previous()) {
|
||||
if (text->first_y > 0) {
|
||||
LyXCursor res = cursor;
|
||||
Inset * inset;
|
||||
do {
|
||||
if (res.pos() < res.par()->size() - 1) {
|
||||
res.pos(res.pos() + 1);
|
||||
} else {
|
||||
res.par(res.par()->next());
|
||||
res.pos(0);
|
||||
}
|
||||
|
||||
} while (res.par() &&
|
||||
!(res.par()->isInset(res.pos())
|
||||
&& (inset = res.par()->getInset(res.pos())) != 0
|
||||
&& find(codes.begin(), codes.end(), inset->lyxCode())
|
||||
!= codes.end()
|
||||
&& (contents.empty() ||
|
||||
static_cast<InsetCommand *>(
|
||||
res.par()->getInset(res.pos()))->getContents()
|
||||
== contents)));
|
||||
|
||||
if (res.par()) {
|
||||
setCursor(bv, res.par(), res.pos(), false);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
void LyXText::gotoInset(BufferView * bv, vector<Inset::Code> const & codes,
|
||||
bool same_content)
|
||||
{
|
||||
bv->hideCursor();
|
||||
bv->beforeChange(this);
|
||||
update(bv, false);
|
||||
|
||||
string contents;
|
||||
if (same_content && cursor.par()->isInset(cursor.pos())) {
|
||||
Inset const * inset = cursor.par()->getInset(cursor.pos());
|
||||
if (find(codes.begin(), codes.end(), inset->lyxCode())
|
||||
!= codes.end())
|
||||
contents = static_cast<InsetCommand const *>(inset)->getContents();
|
||||
}
|
||||
|
||||
if (!gotoNextInset(bv, codes, contents)) {
|
||||
if (cursor.pos() || cursor.par() != ownerParagraph()) {
|
||||
LyXCursor tmp = cursor;
|
||||
cursor.par(ownerParagraph());
|
||||
cursor.pos(0);
|
||||
if (!gotoNextInset(bv, codes, contents)) {
|
||||
cursor = tmp;
|
||||
bv->owner()->message(_("No more insets"));
|
||||
}
|
||||
} else {
|
||||
bv->owner()->message(_("No more insets"));
|
||||
}
|
||||
}
|
||||
update(bv, false);
|
||||
selection.cursor = cursor;
|
||||
}
|
||||
|
||||
|
||||
void LyXText::gotoInset(BufferView * bv, Inset::Code code, bool same_content)
|
||||
{
|
||||
gotoInset(bv, vector<Inset::Code>(1, code), same_content);
|
||||
}
|
||||
|
||||
|
||||
void LyXText::cursorPrevious(BufferView * bv)
|
||||
{
|
||||
if (!cursor.row()->previous()) {
|
||||
if (first_y > 0) {
|
||||
int new_y = bv->text->first_y - bv->workarea().workHeight();
|
||||
bv->screen().draw(bv->text, bv, new_y < 0 ? 0 : new_y);
|
||||
bv->updateScrollbar();
|
||||
@ -48,10 +117,10 @@ void cursorPrevious(LyXText * text, BufferView * bv)
|
||||
return;
|
||||
}
|
||||
|
||||
int y = text->first_y;
|
||||
Row * cursorrow = text->cursor.row();
|
||||
int y = first_y;
|
||||
Row * cursorrow = cursor.row();
|
||||
|
||||
text->setCursorFromCoordinates(bv, text->cursor.x_fix(), y);
|
||||
setCursorFromCoordinates(bv, cursor.x_fix(), y);
|
||||
finishUndo();
|
||||
|
||||
int new_y;
|
||||
@ -63,37 +132,37 @@ void cursorPrevious(LyXText * text, BufferView * bv)
|
||||
// is better than just jump down and only display part of the row.
|
||||
new_y = bv->text->first_y - bv->workarea().workHeight();
|
||||
} else {
|
||||
if (text->inset_owner) {
|
||||
if (inset_owner) {
|
||||
new_y = bv->text->cursor.iy()
|
||||
+ bv->theLockingInset()->insetInInsetY() + y
|
||||
+ text->cursor.row()->height()
|
||||
+ cursor.row()->height()
|
||||
- bv->workarea().workHeight() + 1;
|
||||
} else {
|
||||
new_y = text->cursor.y()
|
||||
- text->cursor.row()->baseline()
|
||||
+ text->cursor.row()->height()
|
||||
new_y = cursor.y()
|
||||
- cursor.row()->baseline()
|
||||
+ cursor.row()->height()
|
||||
- bv->workarea().workHeight() + 1;
|
||||
}
|
||||
}
|
||||
bv->screen().draw(bv->text, bv, new_y < 0 ? 0 : new_y);
|
||||
if (text->cursor.row()->previous()) {
|
||||
if (cursor.row()->previous()) {
|
||||
LyXCursor cur;
|
||||
text->setCursor(bv, cur, text->cursor.row()->previous()->par(),
|
||||
text->cursor.row()->previous()->pos(), false);
|
||||
if (cur.y() > text->first_y) {
|
||||
text->cursorUp(bv, true);
|
||||
setCursor(bv, cur, cursor.row()->previous()->par(),
|
||||
cursor.row()->previous()->pos(), false);
|
||||
if (cur.y() > first_y) {
|
||||
cursorUp(bv, true);
|
||||
}
|
||||
}
|
||||
bv->updateScrollbar();
|
||||
}
|
||||
|
||||
|
||||
void cursorNext(LyXText * text, BufferView * bv)
|
||||
void LyXText::cursorNext(BufferView * bv)
|
||||
{
|
||||
if (!text->cursor.row()->next()) {
|
||||
int y = text->cursor.y() - text->cursor.row()->baseline() +
|
||||
text->cursor.row()->height();
|
||||
if (y > int(text->first_y + bv->workarea().workHeight())) {
|
||||
if (!cursor.row()->next()) {
|
||||
int y = cursor.y() - cursor.row()->baseline() +
|
||||
cursor.row()->height();
|
||||
if (y > int(first_y + bv->workarea().workHeight())) {
|
||||
bv->screen().draw(bv->text, bv,
|
||||
bv->text->first_y + bv->workarea().workHeight());
|
||||
bv->updateScrollbar();
|
||||
@ -101,17 +170,17 @@ void cursorNext(LyXText * text, BufferView * bv)
|
||||
return;
|
||||
}
|
||||
|
||||
int y = text->first_y + bv->workarea().workHeight();
|
||||
if (text->inset_owner && !text->first_y) {
|
||||
int y = first_y + bv->workarea().workHeight();
|
||||
if (inset_owner && !first_y) {
|
||||
y -= (bv->text->cursor.iy()
|
||||
- bv->text->first_y
|
||||
+ bv->theLockingInset()->insetInInsetY());
|
||||
}
|
||||
|
||||
text->getRowNearY(y);
|
||||
getRowNearY(y);
|
||||
|
||||
Row * cursorrow = text->cursor.row();
|
||||
text->setCursorFromCoordinates(bv, text->cursor.x_fix(), y);
|
||||
Row * cursorrow = cursor.row();
|
||||
setCursorFromCoordinates(bv, cursor.x_fix(), y);
|
||||
// + workarea().workHeight());
|
||||
finishUndo();
|
||||
|
||||
@ -124,28 +193,26 @@ void cursorNext(LyXText * text, BufferView * bv)
|
||||
// is better than just jump down and only display part of the row.
|
||||
new_y = bv->text->first_y + bv->workarea().workHeight();
|
||||
} else {
|
||||
if (text->inset_owner) {
|
||||
if (inset_owner) {
|
||||
new_y = bv->text->cursor.iy()
|
||||
+ bv->theLockingInset()->insetInInsetY()
|
||||
+ y - text->cursor.row()->baseline();
|
||||
+ y - cursor.row()->baseline();
|
||||
} else {
|
||||
new_y = text->cursor.y() - text->cursor.row()->baseline();
|
||||
new_y = cursor.y() - cursor.row()->baseline();
|
||||
}
|
||||
}
|
||||
bv->screen().draw(bv->text, bv, new_y);
|
||||
if (text->cursor.row()->next()) {
|
||||
if (cursor.row()->next()) {
|
||||
LyXCursor cur;
|
||||
text->setCursor(bv, cur, text->cursor.row()->next()->par(),
|
||||
text->cursor.row()->next()->pos(), false);
|
||||
if (cur.y() < int(text->first_y + bv->workarea().workHeight())) {
|
||||
text->cursorDown(bv, true);
|
||||
setCursor(bv, cur, cursor.row()->next()->par(),
|
||||
cursor.row()->next()->pos(), false);
|
||||
if (cur.y() < int(first_y + bv->workarea().workHeight())) {
|
||||
cursorDown(bv, true);
|
||||
}
|
||||
}
|
||||
bv->updateScrollbar();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
void LyXText::update(BufferView * bv, bool changed)
|
||||
{
|
||||
@ -314,13 +381,13 @@ Inset::RESULT LyXText::dispatch(FuncRequest const & cmd)
|
||||
|
||||
case LFUN_PRIORSEL:
|
||||
update(bv, false);
|
||||
cursorPrevious(this, bv);
|
||||
cursorPrevious(bv);
|
||||
bv->finishChange(true);
|
||||
break;
|
||||
|
||||
case LFUN_NEXTSEL:
|
||||
update(bv, false);
|
||||
cursorNext(this, bv);
|
||||
cursorNext(bv);
|
||||
bv->finishChange();
|
||||
break;
|
||||
|
||||
@ -436,7 +503,7 @@ Inset::RESULT LyXText::dispatch(FuncRequest const & cmd)
|
||||
if (!selection.mark())
|
||||
bv->beforeChange(this);
|
||||
bv->update(this, BufferView::UPDATE);
|
||||
cursorPrevious(this, bv);
|
||||
cursorPrevious(bv);
|
||||
bv->finishChange(false);
|
||||
// was:
|
||||
// finishUndo();
|
||||
@ -448,7 +515,7 @@ Inset::RESULT LyXText::dispatch(FuncRequest const & cmd)
|
||||
if (!selection.mark())
|
||||
bv->beforeChange(this);
|
||||
bv->update(this, BufferView::UPDATE);
|
||||
cursorNext(this, bv);
|
||||
cursorNext(bv);
|
||||
bv->finishChange(false);
|
||||
break;
|
||||
|
||||
@ -926,6 +993,23 @@ Inset::RESULT LyXText::dispatch(FuncRequest const & cmd)
|
||||
break;
|
||||
}
|
||||
|
||||
case LFUN_GOTOERROR:
|
||||
gotoInset(bv, Inset::ERROR_CODE, false);
|
||||
break;
|
||||
|
||||
case LFUN_GOTONOTE:
|
||||
gotoInset(bv, Inset::NOTE_CODE, false);
|
||||
break;
|
||||
|
||||
case LFUN_REFERENCE_GOTO:
|
||||
{
|
||||
vector<Inset::Code> tmp;
|
||||
tmp.push_back(Inset::LABEL_CODE);
|
||||
tmp.push_back(Inset::REF_CODE);
|
||||
gotoInset(bv, tmp, true);
|
||||
break;
|
||||
}
|
||||
|
||||
case LFUN_SELFINSERT: {
|
||||
if (cmd.argument.empty())
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user