#include "support/lstrings.h"
#include "frontends/LyXView.h"
#include "frontends/screen.h"
-#include "frontends/WorkArea.h"
+#include "frontends/Dialogs.h"
#include "insets/insetspecialchar.h"
#include "insets/insettext.h"
#include "insets/insetbib.h"
#include <clocale>
using std::endl;
+using std::find;
+using std::vector;
extern string current_layout;
extern int bibitemMaxWidth(BufferView *, LyXFont const &);
}
if (!lt->selection.set())
- bv->workarea().haveSelection(false);
+ bv->haveSelection(false);
bv->switchKeyMap();
}
// check if the given co-ordinates are inside an inset at the
// given cursor, if one exists. If so, the inset is returned,
// and the co-ordinates are made relative. Otherwise, 0 is returned.
- Inset * checkInset(BufferView * bv, LyXText const & text, int & x, int & y)
+ Inset * checkInset(BufferView * bv, LyXText const & text,
+ LyXCursor const & cur, int & x, int & y)
{
- LyXCursor const & cursor = text.cursor;
- lyx::pos_type const pos = cursor.pos();
- Paragraph /*const*/ & par = *cursor.par();
+ lyx::pos_type const pos = cur.pos();
+ Paragraph /*const*/ & par = *cur.par();
if (pos >= par.size() || !par.isInset(pos))
return 0;
int const width = inset->width(bv, font);
int const inset_x = font.isVisibleRightToLeft()
- ? (cursor.ix() - width) : cursor.ix();
+ ? (cur.ix() - width) : cur.ix();
Box b(
inset_x + inset->scroll(),
inset_x + width,
- cursor.iy() - inset->ascent(bv, font),
- cursor.iy() + inset->descent(bv, font));
+ cur.iy() - inset->ascent(bv, font),
+ cur.iy() + inset->descent(bv, font)
+ );
if (!b.contained(x, y)) {
lyxerr[Debug::GUI] << "Missed inset at x,y " << x << "," << y
{
int y_tmp = y + first_y;
- LyXCursor cursor;
- setCursorFromCoordinates(bv, cursor, x, y_tmp);
+ LyXCursor cur;
+ setCursorFromCoordinates(bv, cur, x, y_tmp);
- Inset * inset = checkInset(bv, *this, x, y_tmp);
+ Inset * inset = checkInset(bv, *this, cur, x, y_tmp);
if (inset) {
y = y_tmp;
return inset;
}
// look at previous position
- if (cursor.pos() == 0)
+ if (cur.pos() == 0)
return 0;
// move back one
- setCursor(bv, cursor, cursor.par(), cursor.pos() - 1, true);
+ setCursor(bv, cur, cur.par(), cur.pos() - 1, true);
- inset = checkInset(bv, *this, x, y_tmp);
+ inset = checkInset(bv, *this, cur, x, y_tmp);
if (inset)
y = y_tmp;
return inset;
{
if (!cursor.row()->previous()) {
if (first_y > 0) {
- int new_y = bv->text->first_y - bv->workarea().workHeight();
+ int new_y = bv->text->first_y - bv->workHeight();
bv->screen().draw(bv->text, bv, new_y < 0 ? 0 : new_y);
bv->updateScrollbar();
}
// as we move the cursor or do something while inside the row (it may
// span several workarea-heights) we'll move to the top again, but this
// is better than just jump down and only display part of the row.
- new_y = bv->text->first_y - bv->workarea().workHeight();
+ new_y = bv->text->first_y - bv->workHeight();
} else {
if (inset_owner) {
new_y = bv->text->cursor.iy()
+ bv->theLockingInset()->insetInInsetY() + y
+ cursor.row()->height()
- - bv->workarea().workHeight() + 1;
+ - bv->workHeight() + 1;
} else {
new_y = cursor.y()
- cursor.row()->baseline()
+ cursor.row()->height()
- - bv->workarea().workHeight() + 1;
+ - bv->workHeight() + 1;
}
}
bv->screen().draw(bv->text, bv, new_y < 0 ? 0 : new_y);
if (!cursor.row()->next()) {
int y = cursor.y() - cursor.row()->baseline() +
cursor.row()->height();
- if (y > int(first_y + bv->workarea().workHeight())) {
+ if (y > int(first_y + bv->workHeight())) {
bv->screen().draw(bv->text, bv,
- bv->text->first_y + bv->workarea().workHeight());
+ bv->text->first_y + bv->workHeight());
bv->updateScrollbar();
}
return;
}
- int y = first_y + bv->workarea().workHeight();
+ int y = first_y + bv->workHeight();
if (inset_owner && !first_y) {
y -= (bv->text->cursor.iy()
- bv->text->first_y
Row * cursorrow = cursor.row();
setCursorFromCoordinates(bv, cursor.x_fix(), y);
- // + workarea().workHeight());
+ // + bv->workHeight());
finishUndo();
int new_y;
// as we move the cursor or do something while inside the row (it may
// span several workarea-heights) we'll move to the top again, but this
// is better than just jump down and only display part of the row.
- new_y = bv->text->first_y + bv->workarea().workHeight();
+ new_y = bv->text->first_y + bv->workHeight();
} else {
if (inset_owner) {
new_y = bv->text->cursor.iy()
LyXCursor cur;
setCursor(bv, cur, cursor.row()->next()->par(),
cursor.row()->next()->pos(), false);
- if (cur.y() < int(first_y + bv->workarea().workHeight())) {
+ if (cur.y() < int(first_y + bv->workHeight())) {
cursorDown(bv, true);
}
}
// this was originally a beforeChange(bv->text), i.e
// the outermost LyXText!
bv->beforeChange(this);
- string const clip = bv->workarea().getClipboard();
+ string const clip = bv->getClipboard();
if (!clip.empty()) {
if (cmd.argument == "paragraph")
insertStringAsParagraphs(bv, clip);
break;
}
-#if 0
- case LFUN_INSET_LIST:
- case LFUN_INSET_THEOREM:
-#endif
- case LFUN_INSERT_NOTE:
- case LFUN_INSET_ERT:
- case LFUN_INSET_EXTERNAL:
- case LFUN_INSET_FLOAT:
- case LFUN_INSET_FOOTNOTE:
- case LFUN_INSET_MARGINAL:
- case LFUN_INSET_MINIPAGE:
- case LFUN_INSET_OPTARG:
- case LFUN_INSET_WIDE_FLOAT:
- case LFUN_TABULAR_INSERT:
- {
- Inset * inset = createInset(cmd);
- if (inset) {
- bool gotsel = false;
- if (selection.set()) {
- cutSelection(bv, true, false);
- gotsel = true;
- }
- if (bv->insertInset(inset)) {
- inset->edit(bv);
- if (gotsel)
- bv->owner()->dispatch(FuncRequest(LFUN_PASTESELECTION));
- }
- else
- delete inset;
- }
- break;
- }
-
-
case LFUN_QUOTE: {
Paragraph const * par = cursor.par();
lyx::pos_type pos = cursor.pos();
if (bv_owner)
bv->screen().toggleSelection(this, bv, false);
update(bv, false);
- bv->workarea().haveSelection(selection.set());
+ bv->haveSelection(selection.set());
}
break;
selectWord(bv, LyXText::WHOLE_WORD_STRICT);
}
update(bv, false);
- bv->workarea().haveSelection(selection.set());
+ bv->haveSelection(selection.set());
}
break;
? cursor.ix() - width : cursor.ix();
int start_x = inset_x + tli->scroll();
FuncRequest cmd1 = cmd;
- cmd1.x -= start_x;
- cmd1.y -= cursor.iy() + bv->text->first_y;
+ cmd1.x = cmd.x - start_x;
+ cmd1.y = cmd.y - cursor.iy() + bv->text->first_y;
tli->localDispatch(cmd1);
break;
}
#endif
// This is to allow jumping over large insets
if (cursorrow == bv->text->cursor.row()) {
- if (cmd.y >= int(bv->workarea().workHeight()))
+ if (cmd.y >= int(bv->workHeight()))
bv->text->cursorDown(bv, false);
else if (cmd.y < 0)
bv->text->cursorUp(bv, false);
// Check whether the inset was hit. If not reset mode,
// otherwise give the event to the inset
if (inset_hit == bv->theLockingInset()) {
- FuncRequest cmd(bv, LFUN_MOUSE_PRESS, x, y, cmd.button());
- bv->theLockingInset()->localDispatch(cmd);
+ FuncRequest cmd1(bv, LFUN_MOUSE_PRESS, x, y, cmd.button());
+ bv->theLockingInset()->localDispatch(cmd1);
break;
}
bv->unlockInset(bv->theLockingInset());
// we don't need the edit() call here! (Jug20020329)
if (!bv->lockInset(inset))
lyxerr[Debug::INSETS] << "Cannot lock inset" << endl;
- FuncRequest cmd(bv, LFUN_MOUSE_PRESS, x, y, cmd.button());
- inset->localDispatch(cmd);
+ FuncRequest cmd1(bv, LFUN_MOUSE_PRESS, x, y, cmd.button());
+ inset->localDispatch(cmd1);
break;
}
// I'm not sure we should continue here if we hit an inset (Jug20020403)
// LyX does a kind of work-area grabbing for insets.
// Only a ButtonPress FuncRequest outside the inset will
// force a insetUnlock.
- FuncRequest cmd(bv, LFUN_MOUSE_RELEASE, x, y, cmd.button());
- bv->theLockingInset()->localDispatch(cmd);
+ FuncRequest cmd1(bv, LFUN_MOUSE_RELEASE, x, y, cmd.button());
+ bv->theLockingInset()->localDispatch(cmd1);
break;
}
// finish selection
if (cmd.button() == mouse_button::button1)
- bv->workarea().haveSelection(selection.set());
+ bv->haveSelection(selection.set());
bv->switchKeyMap();
bv->owner()->view_state_changed();
if (isHighlyEditableInset(inset_hit)) {
// Highly editable inset, like math
UpdatableInset * inset = (UpdatableInset *) inset_hit;
- FuncRequest cmd(bv, LFUN_MOUSE_RELEASE, x, y, cmd.button());
- inset->localDispatch(cmd);
+ FuncRequest cmd1(bv, LFUN_MOUSE_RELEASE, x, y, cmd.button());
+ inset->localDispatch(cmd1);
} else {
- FuncRequest cmd(bv, LFUN_MOUSE_RELEASE, x, y, cmd.button());
- inset_hit->localDispatch(cmd);
+ FuncRequest cmd1(bv, LFUN_MOUSE_RELEASE, x, y, cmd.button());
+ inset_hit->localDispatch(cmd1);
// IMO this is a grosshack! Inset's should be changed so that
// they call the actions they have to do with the insetButtonRel.
// function and not in the edit(). This should be changed
cutSelection(bv, false, false);
update(bv);
}
- bv->workarea().haveSelection(false);
+ bv->haveSelection(false);
}
bv->beforeChange(this);
break;
}
+ case LFUN_HTMLURL: {
+ InsetCommandParams p("htmlurl");
+ bv->owner()->getDialogs().createUrl(p.getAsString());
+ break;
+ }
+
+ case LFUN_URL: {
+ InsetCommandParams p("url");
+ bv->owner()->getDialogs().createUrl(p.getAsString());
+ break;
+ }
+
+
+#if 0
+ case LFUN_INSET_LIST:
+ case LFUN_INSET_THEOREM:
+#endif
+ case LFUN_INSERT_NOTE:
+ case LFUN_INSERT_URL:
+ case LFUN_INSET_CAPTION:
+ case LFUN_INSET_ERT:
+ case LFUN_INSET_EXTERNAL:
+ case LFUN_INSET_FLOAT:
+ case LFUN_INSET_FOOTNOTE:
+ case LFUN_INSET_MARGINAL:
+ case LFUN_INSET_MINIPAGE:
+ case LFUN_INSET_OPTARG:
+ case LFUN_INSET_WIDE_FLOAT:
+ case LFUN_TABULAR_INSERT:
+ case LFUN_INDEX_INSERT:
+ case LFUN_INDEX_PRINT:
+ case LFUN_PARENTINSERT:
+ case LFUN_TOC_INSERT:
+ {
+ Inset * inset = createInset(cmd);
+ if (inset) {
+ bool gotsel = false;
+ if (selection.set()) {
+ cutSelection(bv, true, false);
+ gotsel = true;
+ }
+ if (bv->insertInset(inset)) {
+ inset->edit(bv);
+ if (gotsel)
+ bv->owner()->dispatch(FuncRequest(LFUN_PASTESELECTION));
+ }
+ else
+ delete inset;
+ }
+ break;
+ }
+
+
default:
return Inset::UNDISPATCHED;
}