X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBufferView.cpp;h=c93966b2572a838ba79ea99d6626935ccb4e0614;hb=1acedf11da79f509da706bc8d6d2f491c9676087;hp=3fdb769ed792b49a9beb6d1cf710b61a1ac33c5f;hpb=fc2658eff011adb08192cf897416698c34aab268;p=lyx.git diff --git a/src/BufferView.cpp b/src/BufferView.cpp index 3fdb769ed7..c93966b257 100644 --- a/src/BufferView.cpp +++ b/src/BufferView.cpp @@ -39,7 +39,6 @@ #include "LyXFunc.h" #include "Layout.h" #include "LyXRC.h" -#include "MenuBackend.h" #include "MetricsInfo.h" #include "Paragraph.h" #include "paragraph_funcs.h" @@ -69,6 +68,7 @@ #include "support/convert.h" #include "support/debug.h" +#include "support/ExceptionMessage.h" #include "support/FileFilterList.h" #include "support/filetools.h" #include "support/gettext.h" @@ -745,7 +745,7 @@ void BufferView::showCursor() else if (d->anchor_pit_ == max_pit) d->anchor_ypos_ = height_ - offset - row_dim.descent(); else - d->anchor_ypos_ = offset + pm.ascent() - height_ / 2; + d->anchor_ypos_ = defaultRowHeight() * 2 - offset - row_dim.descent(); updateMetrics(); buffer_.changed(); @@ -787,7 +787,7 @@ FuncStatus BufferView::getStatus(FuncRequest const & cmd) case LFUN_SCREEN_RECENTER: case LFUN_BIBTEX_DATABASE_ADD: case LFUN_BIBTEX_DATABASE_DEL: - case LFUN_WORDS_COUNT: + case LFUN_STATISTICS: case LFUN_NEXT_INSET_TOGGLE: flag.enabled(true); break; @@ -831,6 +831,7 @@ FuncStatus BufferView::getStatus(FuncRequest const & cmd) case LFUN_SCREEN_UP: case LFUN_SCREEN_DOWN: + case LFUN_SCROLL: flag.enabled(true); break; @@ -923,6 +924,8 @@ bool BufferView::dispatch(FuncRequest const & cmd) cur.clearSelection(); if (!cur.textUndo()) cur.message(_("No further undo information")); + else + processUpdateFlags(Update::Force | Update::FitCursor); break; case LFUN_REDO: @@ -930,6 +933,8 @@ bool BufferView::dispatch(FuncRequest const & cmd) cur.clearSelection(); if (!cur.textRedo()) cur.message(_("No further redo information")); + else + processUpdateFlags(Update::Force | Update::FitCursor); break; case LFUN_FONT_STATE: @@ -1129,7 +1134,7 @@ bool BufferView::dispatch(FuncRequest const & cmd) break; } - case LFUN_WORDS_COUNT: { + case LFUN_STATISTICS: { DocIterator from, to; if (cur.selection()) { from = cur.selectionBegin(); @@ -1138,24 +1143,30 @@ bool BufferView::dispatch(FuncRequest const & cmd) from = doc_iterator_begin(buffer_.inset()); to = doc_iterator_end(buffer_.inset()); } - int const count = countWords(from, to); + int const words = countWords(from, to); + int const chars = countChars(from, to, false); + int const chars_blanks = countChars(from, to, true); docstring message; - if (count != 1) { - if (cur.selection()) - message = bformat(_("%1$d words in selection."), - count); - else - message = bformat(_("%1$d words in document."), - count); - } - else { - if (cur.selection()) - message = _("One word in selection."); - else - message = _("One word in document."); - } - - Alert::information(_("Count words"), message); + if (cur.selection()) + message = _("Statistics for the selection:\n"); + else + message = _("Statistics for the document:\n"); + if (words != 1) + message += bformat(_("\n%1$d words"), words); + else + message += _("\nOne word"); + if (chars_blanks != 1) + message += bformat(_("\n%1$d characters (including blanks)"), + chars_blanks); + else + message += _("\nOne character (including blanks)"); + if (chars != 1) + message += bformat(_("\n%1$d characters (excluding blanks)"), + chars); + else + message += _("\nOne character (excluding blanks)"); + + Alert::information(_("Statistics"), message); } break; @@ -1164,10 +1175,15 @@ bool BufferView::dispatch(FuncRequest const & cmd) buffer_.params().compressed = !buffer_.params().compressed; break; - case LFUN_BUFFER_TOGGLE_EMBEDDING: + case LFUN_BUFFER_TOGGLE_EMBEDDING: { // turn embedding on/off - buffer_.embeddedFiles().enable(!buffer_.params().embedded); + try { + buffer_.embeddedFiles().enable(!buffer_.params().embedded, buffer_); + } catch (ExceptionMessage const & message) { + Alert::error(message.title_, message.details_); + } break; + } case LFUN_NEXT_INSET_TOGGLE: { // this is the real function we want to invoke @@ -1191,9 +1207,11 @@ bool BufferView::dispatch(FuncRequest const & cmd) if (!cur.result().dispatched()) cur.dispatch(tmpcmd); - if (cur.result().dispatched()) - cur.clearSelection(); - + if (!cur.result().dispatched()) + // It did not work too; no action needed. + break; + cur.clearSelection(); + processUpdateFlags(Update::SinglePar | Update::FitCursor); break; } @@ -1213,6 +1231,10 @@ bool BufferView::dispatch(FuncRequest const & cmd) break; } + case LFUN_SCROLL: + lfunScroll(cmd); + break; + case LFUN_SCREEN_UP_SELECT: case LFUN_SCREEN_DOWN_SELECT: { // Those two are not ready yet for consumption. @@ -1403,6 +1425,27 @@ void BufferView::mouseEventDispatch(FuncRequest const & cmd0) } +void BufferView::lfunScroll(FuncRequest const & cmd) +{ + string const scroll_type = cmd.getArg(0); + int const scroll_step = + (scroll_type == "line")? d->scrollbarParameters_.lineScrollHeight + : (scroll_type == "page")? height_ : 0; + if (scroll_step == 0) + return; + string const scroll_quantity = cmd.getArg(1); + if (scroll_quantity == "up") + scrollUp(scroll_step); + else if (scroll_quantity == "down") + scrollDown(scroll_step); + else { + int const scroll_value = convert(scroll_quantity); + if (scroll_value) + scroll(scroll_step * scroll_value); + } +} + + void BufferView::scroll(int y) { if (y > 0) @@ -1546,6 +1589,8 @@ bool BufferView::checkDepm(Cursor & cur, Cursor & old) if (!changed) return false; + d->cursor_ = cur; + updateLabels(buffer_); updateMetrics();