]> git.lyx.org Git - features.git/blobdiff - src/insets/InsetInfo.cpp
InsetIndex: revamp IndexEntry to handle both legacy and modern index insets; simplify...
[features.git] / src / insets / InsetInfo.cpp
index b96d7c9d898c437902ff57cee4c1cb1123a25e1b..67aca81fe714ee556c44cd37ca4297224364f25b 100644 (file)
@@ -15,6 +15,8 @@
 #include "Buffer.h"
 #include "BufferParams.h"
 #include "BufferView.h"
+#include "Changes.h"
+#include "Cursor.h"
 #include "CutAndPaste.h"
 #include "Font.h"
 #include "FuncRequest.h"
@@ -36,6 +38,7 @@
 
 #include "frontends/Application.h"
 
+#include "support/Changer.h"
 #include "support/convert.h"
 #include "support/debug.h"
 #include "support/docstream.h"
@@ -232,10 +235,8 @@ vector<pair<string,docstring>> InsetInfoParams::getArguments(Buffer const * buf,
        case MENU_INFO:
        case ICON_INFO: {
                result.push_back(make_pair("custom", _("Custom")));
-               LyXAction::const_iterator fit = lyxaction.func_begin();
-               LyXAction::const_iterator const fen = lyxaction.func_end();
-               for (; fit != fen; ++fit) {
-                       string const lfun = fit->first;
+               for (auto const & name_code : lyxaction) {
+                       string const lfun = name_code.first;
                        if (!lfun.empty())
                                result.push_back(make_pair(lfun, from_ascii(lfun)));
                }
@@ -297,7 +298,11 @@ vector<pair<string,docstring>> InsetInfoParams::getArguments(Buffer const * buf,
                string const dt = split(name, '@');
                QDate date;
                if (itype == "moddate")
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 8, 0))
+                       date = QDateTime::fromSecsSinceEpoch(buf->fileName().lastModified()).date();
+#else
                        date = QDateTime::fromTime_t(buf->fileName().lastModified()).date();
+#endif
                else if (itype == "fixdate" && !dt.empty()) {
                        QDate const gdate = QDate::fromString(toqstr(dt), Qt::ISODate);
                        date = (gdate.isValid()) ? gdate : QDate::currentDate();
@@ -323,7 +328,11 @@ vector<pair<string,docstring>> InsetInfoParams::getArguments(Buffer const * buf,
                string const tt = split(name, '@');
                QTime time;
                if (itype == "modtime")
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 8, 0))
+                       time = QDateTime::fromSecsSinceEpoch(buf->fileName().lastModified()).time();
+#else
                        time = QDateTime::fromTime_t(buf->fileName().lastModified()).time();
+#endif
                else if (itype == "fixtime" && !tt.empty()) {
                        QTime const gtime = QTime::fromString(toqstr(tt), Qt::ISODate);
                        time = (gtime.isValid()) ? gtime : QTime::currentTime();
@@ -455,12 +464,12 @@ string InsetInfoParams::infoType() const
 
 
 
-InsetInfo::InsetInfo(Buffer * buf, string const & name)
+InsetInfo::InsetInfo(Buffer * buf, string const & info)
        : InsetCollapsible(buf), initialized_(false)
 {
        params_.type = InsetInfoParams::UNKNOWN_INFO;
        params_.force_ltr = false;
-       setInfo(name);
+       setInfo(info);
        status_ = Collapsed;
 }
 
@@ -681,9 +690,9 @@ void InsetInfo::doDispatch(Cursor & cur, FuncRequest & cmd)
 }
 
 
-void InsetInfo::setInfo(string const & name)
+void InsetInfo::setInfo(string const & info)
 {
-       if (name.empty())
+       if (info.empty())
                return;
 
        string saved_date_specifier;
@@ -692,7 +701,7 @@ void InsetInfo::setInfo(string const & name)
                saved_date_specifier = split(params_.name, '@');
        // info_type name
        string type;
-       params_.name = trim(split(name, type, ' '));
+       params_.name = trim(split(info, type, ' '));
        params_.type = nameTranslator().find(type);
        if (params_.name.empty())
                params_.name = defaultValueTranslator().find(params_.type);
@@ -764,7 +773,22 @@ bool InsetInfo::forceLocalFontSwitch() const
 }
 
 
-void InsetInfo::updateBuffer(ParIterator const & it, UpdateType utype, bool const deleted) {
+void InsetInfo::metrics(MetricsInfo & mi, Dimension & dim) const
+{
+       const_cast<InsetInfo *>(this)->build();
+       InsetCollapsible::metrics(mi, dim);
+}
+
+
+void InsetInfo::draw(PainterInfo & pi, int x, int y) const
+{
+       Changer chg = changeVar(lyxrc.mark_foreign_language, false);
+       InsetCollapsible::draw(pi, x, y);
+}
+
+void InsetInfo::updateBuffer(ParIterator const & it, UpdateType utype, bool const deleted)
+
+{
        // If the Buffer is a clone, then we neither need nor want to do any
        // of what follows. We want, rather, just to inherit how things were
        // in the original Buffer. This is especially important for VCS.
@@ -772,9 +796,22 @@ void InsetInfo::updateBuffer(ParIterator const & it, UpdateType utype, bool cons
        // than in the Buffer we were exporting.
        if (buffer().isClone())
                return;
-
        BufferParams const & bp = buffer().params();
        params_.lang = it.paragraph().getFontSettings(bp, it.pos()).language();
+       InsetCollapsible::updateBuffer(it, utype, deleted);
+}
+
+
+void InsetInfo::build()
+{
+       // If the Buffer is a clone, then we neither need nor want to do any
+       // of what follows. We want, rather, just to inherit how things were
+       // in the original Buffer. This is especially important for VCS.
+       // Otherwise, we could in principle have different settings here
+       // than in the Buffer we were exporting.
+       if (buffer().isClone())
+               return;
+
        Language const * tryguilang = languages.getFromCode(Messages::guiLanguage());
        // Some info insets use the language of the GUI (if available)
        Language const * guilang = tryguilang ? tryguilang : params_.lang;
@@ -1078,6 +1115,10 @@ void InsetInfo::updateBuffer(ParIterator const & it, UpdateType utype, bool cons
                igp.lyxscale = percent_scale;
                igp.scale = string();
                igp.width = Length(1, Length::EM);
+               if (contains(file.absoluteFilePath(), from_ascii("math"))
+                   || contains(file.absoluteFilePath(), from_ascii("ert-insert"))
+                   || suffixIs(file.onlyPath().absoluteFilePath(), from_ascii("ipa")))
+                       igp.darkModeSensitive = true;
                inset->setParams(igp);
                clear();
                Font const f(inherit_font, params_.lang);
@@ -1094,7 +1135,7 @@ void InsetInfo::updateBuffer(ParIterator const & it, UpdateType utype, bool cons
                else if (params_.name == "path")
                        setText(from_utf8(os::latex_path(buffer().filePath())), params_.lang);
                else if (params_.name == "class")
-                       setText(from_utf8(bp.documentClass().name()), params_.lang);
+                       setText(from_utf8(buffer().params().documentClass().name()), params_.lang);
                break;
        }
        case InsetInfoParams::VCS_INFO: {
@@ -1145,7 +1186,11 @@ void InsetInfo::updateBuffer(ParIterator const & it, UpdateType utype, bool cons
                                ? split(params_.name, date_format, '@') : string();
                QDate date;
                if (params_.type == InsetInfoParams::MODDATE_INFO)
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 8, 0))
+                       date = QDateTime::fromSecsSinceEpoch(buffer().fileName().lastModified()).date();
+#else
                        date = QDateTime::fromTime_t(buffer().fileName().lastModified()).date();
+#endif
                else if (params_.type == InsetInfoParams::FIXDATE_INFO && !date_specifier.empty())
                        date = QDate::fromString(toqstr(date_specifier), Qt::ISODate);
                else
@@ -1162,7 +1207,11 @@ void InsetInfo::updateBuffer(ParIterator const & it, UpdateType utype, bool cons
                                ? split(params_.name, time_format, '@') : string();
                QTime time;
                if (params_.type == InsetInfoParams::MODTIME_INFO)
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 8, 0))
+                       time = QDateTime::fromSecsSinceEpoch(buffer().fileName().lastModified()).time();
+#else
                        time = QDateTime::fromTime_t(buffer().fileName().lastModified()).time();
+#endif
                else if (params_.type == InsetInfoParams::FIXTIME_INFO && !time_specifier.empty())
                        time = QTime::fromString(toqstr(time_specifier), Qt::ISODate);
                else
@@ -1174,7 +1223,13 @@ void InsetInfo::updateBuffer(ParIterator const & it, UpdateType utype, bool cons
 
        // Just to do something with that string
        LYXERR(Debug::INFO, "info inset text: " << gui);
-       InsetCollapsible::updateBuffer(it, utype, deleted);
+}
+
+
+void InsetInfo::validate(LaTeXFeatures & features) const
+{
+       const_cast<InsetInfo *>(this)->build();
+       InsetCollapsible::validate(features);
 }