]> git.lyx.org Git - lyx.git/blobdiff - src/bufferview_funcs.C
clean up a bit
[lyx.git] / src / bufferview_funcs.C
index c65b91173560184c7e5d362bffce3c08d7625e62..35cbf78e8583401f107d4d67f89ae4682576d4f9 100644 (file)
@@ -1,8 +1,8 @@
 /* This file is part of
- * ====================================================== 
- * 
+ * ======================================================
+ *
  *           LyX, The Document Processor
- *        
+ *
  *           Copyright 1995 Matthias Ettrich
  *           Copyright 1995-2001 The LyX Team.
  *
 #endif
 
 #include "bufferview_funcs.h"
-#include "LyXView.h"
+#include "frontends/LyXView.h"
 #include "BufferView.h"
 #include "paragraph.h"
 #include "lyxfont.h"
-#include "lyx_gui_misc.h"
 #include "lyxtext.h"
 #include "buffer.h"
-#include "support/lstrings.h"
 #include "lyx_cb.h"
 #include "language.h"
 #include "gettext.h"
 #include "ParagraphParameters.h"
+#include "author.h"
+#include "changes.h"
 
+#include "frontends/Alert.h"
+
+#include "support/lstrings.h"
+
+#include "BoostFormat.h"
 
 void emph(BufferView * bv)
 {
@@ -68,7 +73,7 @@ void lang(BufferView * bv, string const & l)
                font.setLanguage(lang);
                toggleAndShow(bv, font);
        } else
-               WriteAlert(_("Error! unknown language"),l);
+               Alert::alert(_("Error! unknown language"),l);
 }
 
 
@@ -79,7 +84,7 @@ void changeDepth(BufferView * bv, LyXText * text, int decInc)
 {
        if (!bv->available() || !text)
            return;
-       
+
        bv->hideCursor();
        bv->update(bv->text, BufferView::SELECT|BufferView::FITCUR);
        if (decInc >= 0)
@@ -87,10 +92,8 @@ void changeDepth(BufferView * bv, LyXText * text, int decInc)
        else
                text->decDepth(bv);
        if (text->inset_owner)
-           bv->updateInset((Inset *)text->inset_owner, true);
+               bv->updateInset((Inset *)text->inset_owner, true);
        bv->update(bv->text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
-       bv->owner()->message(_("Changed environment depth "
-                              "(in possible range, maybe not)"));
 }
 
 
@@ -120,7 +123,7 @@ void roman(BufferView * bv)
 
 void styleReset(BufferView * bv)
 {
-       LyXFont font(LyXFont::ALL_INHERIT);
+       LyXFont font(LyXFont::ALL_INHERIT, ignore_language);
        toggleAndShow(bv, font);
 }
 
@@ -141,93 +144,123 @@ void fontSize(BufferView * bv, string const & size)
 }
 
 
-// Returns the current font and depth as a message. 
+// Returns the current font and depth as a message.
 string const currentState(BufferView * bv)
 {
        ostringstream state;
 
-       if (bv->available()) { 
-               // I think we should only show changes from the default
-               // font. (Asger)
-               LyXText * text = bv->getLyXText();
-               Buffer * buffer = bv->buffer();
-               LyXFont font = text->real_current_font;
-               LyXFont const & defaultfont =
-                       textclasslist
-                       .TextClass(buffer->params.textclass)
-                       .defaultfont();
-               font.reduce(defaultfont);
-
-               state << _("Font:") << ' '
-                     << font.stateText(&buffer->params);
-               
-               // The paragraph depth
-               int depth = text->getDepth();
-               if (depth > 0)
-                       state << _(", Depth: ") << depth;
-               
-               // The paragraph spacing, but only if different from
-               // buffer spacing.
-               if (!text->cursor.par()->params().spacing().isDefault()) {
-                       Spacing::Space cur_space =
-                               text->cursor.par()->params().spacing().getSpace();
-                       state << _(", Spacing: ");
-
-                       switch (cur_space) {
-                       case Spacing::Single:
-                               state << _("Single");
-                               
-                               break;
-                       case Spacing::Onehalf:
-                               state << _("Onehalf");
-                               break;
-                       case Spacing::Double:
-                               state << _("Double");
-                               break;
-                       case Spacing::Other:
-                               state << _("Other (")
-                                     << text->cursor.par()->params().spacing().getValue()
-                                     << ")";
-                               break;
-                       case Spacing::Default:
-                               // should never happen, do nothing
-                               break;
-                       }
+       if (!bv->available())
+               return string();
+
+       LyXText * text = bv->getLyXText();
+       Buffer * buffer = bv->buffer();
+       LyXCursor const & c(text->cursor);
+
+       bool const show_change = buffer->params.tracking_changes
+               && c.pos() != c.par()->size()
+               && c.par()->lookupChange(c.pos()) != Change::UNCHANGED;
+
+       if (show_change) {
+               Change change(c.par()->lookupChangeFull(c.pos()));
+               Author const & a(bv->buffer()->authors().get(change.author));
+               state << _("Change: ") << a.name();
+               if (!a.email().empty()) {
+                       state << " (" << a.email() << ")";
+               }
+               if (change.changetime)
+                       state << _(" at ") << ctime(&change.changetime);
+               state << " : ";
+       }
+       // I think we should only show changes from the default
+       // font. (Asger)
+       LyXFont font = text->real_current_font;
+       LyXFont const & defaultfont =
+               buffer->params.getLyXTextClass().defaultfont();
+       font.reduce(defaultfont);
+
+#if USE_BOOST_FORMAT
+       state << boost::format(_("Font: %1$s")) % font.stateText(&buffer->params);
+#else
+       state << _("Font: ") << font.stateText(&buffer->params);
+#endif
+
+       // The paragraph depth
+       int depth = text->getDepth();
+       if (depth > 0) {
+#if USE_BOOST_FORMAT
+               state << boost::format(_(", Depth: %1$d")) % depth;
+#else
+               state << _(", Depth: ") << depth;
+#endif
+       }
+
+
+       // The paragraph spacing, but only if different from
+       // buffer spacing.
+       if (!text->cursor.par()->params().spacing().isDefault()) {
+               Spacing::Space cur_space =
+                       text->cursor.par()->params().spacing().getSpace();
+               state << _(", Spacing: ");
+
+               switch (cur_space) {
+               case Spacing::Single:
+                       state << _("Single");
+                       break;
+               case Spacing::Onehalf:
+                       state << _("OneHalf");
+                       break;
+               case Spacing::Double:
+                       state << _("Double");
+                       break;
+               case Spacing::Other:
+                       state << _("Other (")
+                             << text->cursor.par()->params().spacing().getValue()
+                             << ')';
+                       break;
+               case Spacing::Default:
+                       // should never happen, do nothing
+                       break;
                }
        }
-       return state.str().c_str();
+#ifdef DEVEL_VERSION
+       state << _(", Paragraph: ") << text->cursor.par()->id();
+#endif
+       return STRCONV(state.str());
 }
 
 
-/* -------> Does the actual toggle job of the XxxCB() calls above.
+/* Does the actual toggle job of the calls above.
  * Also shows the current font state.
  */
 void toggleAndShow(BufferView * bv, LyXFont const & font, bool toggleall)
 {
-       if (bv->available()) { 
-               if (bv->theLockingInset()) {
-                       bv->theLockingInset()->setFont(bv, font, toggleall);
-                       return;
-               }
-               LyXText * text = bv->getLyXText();
-               if (!text)
-                       return;
-
-               bv->hideCursor();
-               bv->update(text, BufferView::SELECT|BufferView::FITCUR);
-               text->toggleFree(bv, font, toggleall);
-               bv->update(text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
-
-               if (font.language() != ignore_language ||
-                   font.number() != LyXFont::IGNORE)
-               {
-                       LyXCursor & cursor = text->cursor;
-                       text->computeBidiTables(bv->buffer(), cursor.row());
-                       if (cursor.boundary() != 
-                           text->isBoundary(bv->buffer(), cursor.par(), cursor.pos(),
-                                            text->real_current_font) )
-                               text->setCursor(bv, cursor.par(), cursor.pos(),
-                                               false, !cursor.boundary());
-               }
+       if (!bv->available())
+               return;
+
+       if (bv->theLockingInset()) {
+               bv->theLockingInset()->setFont(bv, font, toggleall);
+               return;
+       }
+
+       LyXText * text = bv->getLyXText();
+       // FIXME: can this happen ??
+       if (!text)
+               return;
+
+       bv->hideCursor();
+       bv->update(text, BufferView::SELECT | BufferView::FITCUR);
+       text->toggleFree(bv, font, toggleall);
+       bv->update(text, BufferView::SELECT | BufferView::FITCUR | BufferView::CHANGE);
+
+       if (font.language() != ignore_language ||
+           font.number() != LyXFont::IGNORE) {
+               LyXCursor & cursor = text->cursor;
+               text->computeBidiTables(bv->buffer(), cursor.row());
+               if (cursor.boundary() !=
+                   text->isBoundary(bv->buffer(), cursor.par(), cursor.pos(),
+                                    text->real_current_font))
+                       text->setCursor(bv, cursor.par(), cursor.pos(),
+                                       false, !cursor.boundary());
        }
 }