#include "insets/InsetSpecialChar.h"
#include "insets/InsetText.h"
#include "insets/InsetInfo.h"
+#include "insets/InsetGraphics.h"
+#include "insets/InsetGraphicsParams.h"
#include "support/convert.h"
#include "support/debug.h"
const int old_pos = cur.pos();
#endif
cur.insert(new InsetMathHull(hullSimple));
- BOOST_ASSERT(old_pos == cur.pos());
+#ifdef ENABLE_ASSERTIONS
+ LASSERT(old_pos == cur.pos(), /**/);
+#endif
cur.nextInset()->edit(cur, true);
// don't do that also for LFUN_MATH_MODE
// unless you want end up with always changing
{
InsetMathHull * formula = new InsetMathHull;
istringstream is(to_utf8(sel));
- Lexer lex(0, 0);
+ Lexer lex;
lex.setStream(is);
formula->read(lex);
if (formula->getType() == hullNone)
switch (mode) {
case OutlineUp: {
+ if (start == pars.begin())
+ // Nothing to move.
+ return;
ParagraphList::iterator dest = start;
// Move out (up) from this header
if (dest == bgn)
return;
}
case OutlineDown: {
- ParagraphList::iterator dest = finish;
+ if (finish == end)
+ // Nothing to move.
+ return;
+ // Go one down from *this* header:
+ ParagraphList::iterator dest = boost::next(finish, 1);
+ // Go further down to find header to insert in front of:
+ for (; dest != end; ++dest) {
+ toclevel = dest->layout().toclevel;
+ if (toclevel != Layout::NOT_IN_TOC
+ && toclevel <= thistoclevel) {
+ break;
+ }
+ }
// One such was found:
pit_type newpit = distance(bgn, dest);
pit_type const len = distance(start, finish);
// at the end?
cur.noUpdate();
- BOOST_ASSERT(cur.text() == this);
+ LASSERT(cur.text() == this, /**/);
CursorSlice oldTopSlice = cur.top();
bool oldBoundary = cur.boundary();
bool sel = cur.selection();
case LFUN_WORD_RIGHT:
case LFUN_WORD_RIGHT_SELECT:
- //FIXME: for visual cursor mode, really move right
- if (reverseDirectionNeeded(cur)) {
- cmd.action = cmd.action == LFUN_WORD_RIGHT_SELECT ?
- LFUN_WORD_BACKWARD_SELECT : LFUN_WORD_BACKWARD;
+ if (lyxrc.visual_cursor) {
+ needsUpdate |= cur.selHandle(cmd.action == LFUN_WORD_RIGHT_SELECT);
+ needsUpdate |= cursorVisRightOneWord(cur);
+ if (!needsUpdate && oldTopSlice == cur.top()
+ && cur.boundary() == oldBoundary) {
+ cur.undispatched();
+ cmd = FuncRequest(LFUN_FINISHED_RIGHT);
+ }
} else {
- cmd.action = cmd.action == LFUN_WORD_RIGHT_SELECT ?
- LFUN_WORD_FORWARD_SELECT : LFUN_WORD_FORWARD;
+ if (reverseDirectionNeeded(cur)) {
+ cmd.action = cmd.action == LFUN_WORD_RIGHT_SELECT ?
+ LFUN_WORD_BACKWARD_SELECT : LFUN_WORD_BACKWARD;
+ } else {
+ cmd.action = cmd.action == LFUN_WORD_RIGHT_SELECT ?
+ LFUN_WORD_FORWARD_SELECT : LFUN_WORD_FORWARD;
+ }
+ dispatch(cur, cmd);
+ return;
}
- dispatch(cur, cmd);
- return;
+ break;
case LFUN_WORD_FORWARD:
case LFUN_WORD_FORWARD_SELECT:
case LFUN_WORD_LEFT:
case LFUN_WORD_LEFT_SELECT:
- //FIXME: for visual cursor mode, really move left
- if (reverseDirectionNeeded(cur)) {
- cmd.action = cmd.action == LFUN_WORD_LEFT_SELECT ?
- LFUN_WORD_FORWARD_SELECT : LFUN_WORD_FORWARD;
+ if (lyxrc.visual_cursor) {
+ needsUpdate |= cur.selHandle(cmd.action == LFUN_WORD_LEFT_SELECT);
+ needsUpdate |= cursorVisLeftOneWord(cur);
+ if (!needsUpdate && oldTopSlice == cur.top()
+ && cur.boundary() == oldBoundary) {
+ cur.undispatched();
+ cmd = FuncRequest(LFUN_FINISHED_LEFT);
+ }
} else {
- cmd.action = cmd.action == LFUN_WORD_LEFT_SELECT ?
- LFUN_WORD_BACKWARD_SELECT : LFUN_WORD_BACKWARD;
+ if (reverseDirectionNeeded(cur)) {
+ cmd.action = cmd.action == LFUN_WORD_LEFT_SELECT ?
+ LFUN_WORD_FORWARD_SELECT : LFUN_WORD_FORWARD;
+ } else {
+ cmd.action = cmd.action == LFUN_WORD_LEFT_SELECT ?
+ LFUN_WORD_BACKWARD_SELECT : LFUN_WORD_BACKWARD;
+ }
+ dispatch(cur, cmd);
+ return;
}
- dispatch(cur, cmd);
- return;
+ break;
case LFUN_WORD_BACKWARD:
case LFUN_WORD_BACKWARD_SELECT:
break;
case LFUN_INSET_SETTINGS: {
- // if there is an inset at cursor, access this
- Inset * inset = cur.nextInset();
- if (inset) {
- inset->showInsetDialog(bv);
+ Inset & inset = cur.inset();
+ if (cmd.getArg(0) == insetName(inset.lyxCode())) {
+ // This inset dialog has been explicitely requested.
+ inset.showInsetDialog(bv);
+ break;
+ }
+ // else, if there is an inset at the cursor, access this
+ Inset * next_inset = cur.nextInset();
+ if (next_inset) {
+ next_inset->showInsetDialog(bv);
break;
}
- // if not work, access the underlying inset.
- cur.inset().showInsetDialog(bv);
+ // if not then access the underlying inset.
+ inset.showInsetDialog(bv);
break;
}
+ case LFUN_SET_GRAPHICS_GROUP: {
+ InsetGraphics * ins = InsetGraphics::getCurrentGraphicsInset(cur);
+ if (!ins)
+ break;
+
+ cur.recordUndoFullDocument();
+
+ string id = to_utf8(cmd.argument());
+ string grp = InsetGraphics::getGroupParams(bv->buffer(), id);
+ InsetGraphicsParams tmp, inspar = ins->getParams();
+
+ if (id.empty())
+ inspar.groupId = to_utf8(cmd.argument());
+ else {
+ InsetGraphics::string2params(grp, bv->buffer(), tmp);
+ tmp.filename = inspar.filename;
+ inspar = tmp;
+ }
+
+ ins->setParams(inspar);
+ }
+
case LFUN_SPACE_INSERT:
if (cur.paragraph().layout().free_spacing)
insertChar(cur, ' ');
else if (arg == "linkback")
type = Clipboard::LinkBackGraphicsType;
else
- BOOST_ASSERT(false);
+ LASSERT(false, /**/);
pasteClipboardGraphics(cur, bv->buffer().errorList("Paste"), type);
}
break;
}
- case LFUN_SERVER_GET_FONT:
- if (cur.current_font.fontInfo().shape() == ITALIC_SHAPE)
- cur.message(from_ascii("E"));
- else if (cur.current_font.fontInfo().shape() == SMALLCAPS_SHAPE)
- cur.message(from_ascii("N"));
- else
- cur.message(from_ascii("0"));
- break;
-
case LFUN_SERVER_GET_LAYOUT:
cur.message(cur.paragraph().layout().name());
break;
cap::replaceSelection(cur);
cur.insert(new InsetMathHull(hullSimple));
checkAndActivateInset(cur, true);
- BOOST_ASSERT(cur.inMathed());
+ LASSERT(cur.inMathed(), /**/);
cur.dispatch(cmd);
break;
}
case LFUN_ACCENT_UNDERDOT:
case LFUN_ACCENT_UNDERBAR:
case LFUN_ACCENT_CARON:
- case LFUN_ACCENT_SPECIAL_CARON:
case LFUN_ACCENT_BREVE:
case LFUN_ACCENT_TIE:
case LFUN_ACCENT_HUNGARIAN_UMLAUT:
bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
FuncStatus & flag) const
{
- BOOST_ASSERT(cur.text() == this);
+ LASSERT(cur.text() == this, /**/);
Font const & font = cur.real_current_font;
FontInfo const & fontinfo = font.fontInfo();
case LFUN_CHARS_TRANSPOSE:
case LFUN_SERVER_GET_XY:
case LFUN_SERVER_SET_XY:
- case LFUN_SERVER_GET_FONT:
case LFUN_SERVER_GET_LAYOUT:
case LFUN_LAYOUT:
case LFUN_DATE_INSERT:
case LFUN_ACCENT_UNDERDOT:
case LFUN_ACCENT_UNDERBAR:
case LFUN_ACCENT_CARON:
- case LFUN_ACCENT_SPECIAL_CARON:
case LFUN_ACCENT_BREVE:
case LFUN_ACCENT_TIE:
case LFUN_ACCENT_HUNGARIAN_UMLAUT: