commit 4154e088b0578dd516d6ae951195b354f8f5bf72
Author: Guillaume Munch <g...@lyx.org>
Date:   Tue May 3 20:40:28 2016 +0100

    GuiChanges: provide feedback when there are no more changes
    
    Remove FIXMEs: date and time localisation

diff --git a/src/Author.cpp b/src/Author.cpp
index bd9d12d..03025a3 100644
--- a/src/Author.cpp
+++ b/src/Author.cpp
@@ -13,6 +13,7 @@
 #include "Author.h"
 
 #include "support/convert.h"
+#include "support/gettext.h"
 #include "support/lassert.h"
 #include "support/lstrings.h"
 
@@ -48,6 +49,15 @@ Author::Author(int buffer_id)
 {}
 
 
+docstring Author::nameAndEmail() const
+{
+       if (email().empty())
+               return name();
+       else
+               return bformat(_("%1$s[[name]] (%2$s[[email]])"), name(), 
email());
+}
+
+
 bool Author::valid() const
 {
        //this cannot be equal if the buffer_id was produced by the hash 
function.
diff --git a/src/Author.h b/src/Author.h
index 6915318..108a701 100644
--- a/src/Author.h
+++ b/src/Author.h
@@ -32,6 +32,8 @@ public:
        ///
        docstring email() const { return email_; }
        ///
+       docstring nameAndEmail() const;
+       ///
        int bufferId() const { return buffer_id_; }
        ///
        void setBufferId(int buffer_id) const { buffer_id_ = buffer_id; }
diff --git a/src/Text.cpp b/src/Text.cpp
index f6c1d39..416a67b 100644
--- a/src/Text.cpp
+++ b/src/Text.cpp
@@ -67,6 +67,7 @@
 #include "support/lassert.h"
 #include "support/lstrings.h"
 #include "support/lyxalgo.h"
+#include "support/lyxtime.h"
 #include "support/textutils.h"
 
 #include <sstream>
@@ -1900,13 +1901,11 @@ docstring Text::currentState(Cursor const & cur) const
        Change change = par.lookupChange(cur.pos());
 
        if (change.changed()) {
-               Author const & a = buf.params().authors().get(change.author);
-               os << _("Change: ") << a.name();
-               if (!a.email().empty())
-                       os << " (" << a.email() << ")";
-               // FIXME ctime is english, we should translate that
-               os << _(" at ") << ctime(&change.changetime);
-               os << " : ";
+               docstring const author =
+                       
buf.params().authors().get(change.author).nameAndEmail();
+               docstring const date = formatted_datetime(change.changetime);
+               os << bformat(_("Changed by %1$s[[author]] on %2$s[[date]]. "),
+                             author, date);
        }
 
        // I think we should only show changes from the default
diff --git a/src/frontends/qt4/GuiChanges.cpp b/src/frontends/qt4/GuiChanges.cpp
index a27d24f..c168d35 100644
--- a/src/frontends/qt4/GuiChanges.cpp
+++ b/src/frontends/qt4/GuiChanges.cpp
@@ -27,14 +27,13 @@
 #include "FuncRequest.h"
 #include "LyXRC.h"
 
+#include <QDateTime>
 #include <QTextBrowser>
 
 
 namespace lyx {
 namespace frontend {
 
-using support::bformat;
-using support::formatted_time;
 
 GuiChanges::GuiChanges(GuiView & lv)
        : GuiDialog(lv, "changes", qt_("Merge Changes"))
@@ -56,16 +55,29 @@ GuiChanges::GuiChanges(GuiView & lv)
 
 void GuiChanges::updateContents()
 {
-       docstring text;
-       docstring author = changeAuthor();
-       docstring date = changeDate();
+       bool const changesPresent = buffer().areChangesPresent();
+       nextPB->setEnabled(changesPresent);
+       previousPB->setEnabled(changesPresent);
+       changeTB->setEnabled(changesPresent);
 
-       if (!author.empty())
-               text += bformat(_("Change by %1$s\n\n"), author);
-       if (!date.empty())
-               text += bformat(_("Change made at %1$s\n"), date);
-
-       changeTB->setPlainText(toqstr(text));
+       Change const & c = bufferview()->getCurrentChange();
+       bool const changePresent = c.type != Change::UNCHANGED;
+       rejectPB->setEnabled(changePresent);
+       acceptPB->setEnabled(changePresent);
+
+       QString text;
+       if (changePresent) {
+               QString const author =
+                       
toqstr(buffer().params().authors().get(c.author).nameAndEmail());
+               if (!author.isEmpty())
+                       text += qt_("Changed by %1\n\n").arg(author);
+
+               QString const date = QDateTime::fromTime_t(c.changetime)
+                                        .toString(Qt::DefaultLocaleLongDate);
+               if (!date.isEmpty())
+                       text += qt_("Change made on %1\n").arg(date);
+       }
+       changeTB->setPlainText(text);
 }
 
 
@@ -81,34 +93,6 @@ void GuiChanges::previousChange()
 }
 
 
-docstring GuiChanges::changeDate() const
-{
-       Change const & c = bufferview()->getCurrentChange();
-       if (c.type == Change::UNCHANGED)
-               return docstring();
-
-       // FIXME UNICODE
-       return from_utf8(formatted_time(c.changetime, 
lyxrc.date_insert_format));
-}
-
-
-docstring GuiChanges::changeAuthor() const
-{
-       Change const & c = bufferview()->getCurrentChange();
-       if (c.type == Change::UNCHANGED)
-               return docstring();
-
-       Author const & a = buffer().params().authors().get(c.author);
-
-       docstring author = a.name();
-
-       if (!a.email().empty())
-               author += " (" + a.email() + ")";
-
-       return author;
-}
-
-
 void GuiChanges::acceptChange()
 {
        dispatch(FuncRequest(LFUN_CHANGE_ACCEPT));
diff --git a/src/frontends/qt4/GuiChanges.h b/src/frontends/qt4/GuiChanges.h
index 344f5e5..1096e62 100644
--- a/src/frontends/qt4/GuiChanges.h
+++ b/src/frontends/qt4/GuiChanges.h
@@ -15,6 +15,8 @@
 
 #include "GuiDialog.h"
 #include "ui_ChangesUi.h"
+
+#include "support/debug.h"
 #include "support/docstring.h"
 
 
@@ -52,11 +54,6 @@ private:
        bool isBufferDependent() const { return true; }
        /// always true since dispatchParams() is empty
        bool canApply() const { return true; }
-
-       /// return date of change
-       docstring changeDate() const;
-       /// return author of change
-       docstring changeAuthor() const;
 };
 
 } // namespace frontend
diff --git a/src/support/lyxtime.cpp b/src/support/lyxtime.cpp
index 3150825..5415ac4 100644
--- a/src/support/lyxtime.cpp
+++ b/src/support/lyxtime.cpp
@@ -40,6 +40,18 @@ string const formatted_time(time_t t, string const & fmt)
 }
 
 
+docstring formatted_datetime(time_t t, string const & fmt)
+{
+       QString qres;
+       if (fmt.empty())
+               qres = QLocale().toString(QDateTime::fromTime_t(t),
+                                         QLocale::ShortFormat);
+       else
+               qres = QLocale().toString(QDateTime::fromTime_t(t), 
toqstr(fmt));
+       return qstring_to_ucs4(qres);
+}
+
+
 time_t from_asctime_utc(string t)
 {
        // Example for the format: "Sun Nov  6 10:39:39 2011\n"
diff --git a/src/support/lyxtime.h b/src/support/lyxtime.h
index 74586cf..8fa5873 100644
--- a/src/support/lyxtime.h
+++ b/src/support/lyxtime.h
@@ -16,6 +16,8 @@
 #include <time.h>
 #include <string>
 
+#include "strfwd.h"
+
 
 namespace lyx {
 namespace support {
@@ -25,9 +27,17 @@ time_t current_time();
 /** Returns a locale-dependent formatting of the date
  *  and time encoded in \c time. The \p fmt string
  *  holds the formatting arguments of \c strftime.
+ *  Prefer the function formatted_datetime below.
  */
 std::string const formatted_time(time_t t, std::string const & fmt);
 
+/** Returns a locale-dependent formatting of the date and time encoded in \c t
+ *  The \p fmt string holds the formatting arguments of QDateTime::toString().
+ *  If fmt is empty then the formatting of the date and time is itself 
according
+ *  to the locale.
+ */
+docstring formatted_datetime(time_t t, std::string const & fmt = "");
+
 /**
  * Inverse of asctime(gmtime()).
  */

Reply via email to