]> git.lyx.org Git - lyx.git/blobdiff - src/BufferView.cpp
* src/frontends/GuiDocument.{cpp,h}:
[lyx.git] / src / BufferView.cpp
index 7afe959d586557692b90f6d9e9b566d758bd633d..c93966b2572a838ba79ea99d6626935ccb4e0614 100644 (file)
@@ -68,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"
@@ -744,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();
@@ -786,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;
@@ -1133,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();
@@ -1142,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.");
-               }
+               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(_("Count words"), message);
+               Alert::information(_("Statistics"), message);
        }
                break;
 
@@ -1168,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