]> git.lyx.org Git - features.git/blobdiff - src/frontends/qt/GuiPrefs.cpp
Allow compiling with Qt6
[features.git] / src / frontends / qt / GuiPrefs.cpp
index be6204ba2904cb8ada5f5f550539de22ba8df027..7537ead04820af5627a2931f0ab8eb1347082d05 100644 (file)
@@ -31,7 +31,6 @@
 #include "ConverterCache.h"
 #include "FontEnums.h"
 #include "FuncRequest.h"
-#include "KeyMap.h"
 #include "KeySequence.h"
 #include "Language.h"
 #include "LyXAction.h"
@@ -50,8 +49,6 @@
 #include "support/os.h"
 #include "support/Package.h"
 
-#include "graphics/GraphicsTypes.h"
-
 #include "frontends/alert.h"
 #include "frontends/Application.h"
 #include "frontends/FontLoader.h"
@@ -191,7 +188,11 @@ QString browseRelToSub(QString const & filename, QString const & relpath,
                toqstr(makeRelPath(qstring_to_ucs4(outname), qstring_to_ucs4(relpath)));
 
        QString testname = reloutname;
+#if QT_VERSION < 0x060000
        testname.remove(QRegExp("^(\\.\\./)+"));
+#else
+       testname.remove(QRegularExpression("^(\\.\\./)+"));
+#endif
 
        if (testname.contains("/"))
                return outname;
@@ -224,7 +225,7 @@ static void parseFontName(QString const & mangled0,
                name = mangled;
                foundry.clear();
        } else {
-               name = mangled.substr(0, idx - 1),
+               name = mangled.substr(0, idx - 1);
                foundry = mangled.substr(idx + 1, mangled.size() - idx - 2);
        }
 }
@@ -317,7 +318,7 @@ static void setComboxFont(QComboBox * cb, string const & family,
 /////////////////////////////////////////////////////////////////////
 
 PrefOutput::PrefOutput(GuiPreferences * form)
-       : PrefModule(catOutput, N_("General"), form)
+       : PrefModule(catOutput, N_("General[[settings]]"), form)
 {
        setupUi(this);
 
@@ -923,10 +924,10 @@ PrefScreenFonts::PrefScreenFonts(GuiPreferences * form)
 
        QFontDatabase fontdb;
        QStringList families(fontdb.families());
-       for (QStringList::Iterator it = families.begin(); it != families.end(); ++it) {
-               screenRomanCO->addItem(*it);
-               screenSansCO->addItem(*it);
-               screenTypewriterCO->addItem(*it);
+       for (auto const & family : families) {
+               screenRomanCO->addItem(family);
+               screenSansCO->addItem(family);
+               screenTypewriterCO->addItem(family);
        }
        connect(screenRomanCO, SIGNAL(activated(QString)),
                this, SIGNAL(changed()));
@@ -1089,7 +1090,7 @@ PrefColors::PrefColors(GuiPreferences * form)
                        continue;
                lcolors_.push_back(lc);
        }
-       qSort(lcolors_.begin(), lcolors_.end(), ColorSorter);
+       sort(lcolors_.begin(), lcolors_.end(), ColorSorter);
        vector<ColorCode>::const_iterator cit = lcolors_.begin();
        vector<ColorCode>::const_iterator const end = lcolors_.end();
        for (; cit != end; ++cit) {
@@ -1207,8 +1208,8 @@ void PrefColors::resetAllColor()
 }
 
 
-bool PrefColors::setColor(int const row, QColor const new_color,
-                         QString const old_color)
+bool PrefColors::setColor(int const row, QColor const new_color,
+                         QString const old_color)
 {
        if (new_color.isValid() && new_color.name() != old_color) {
                newcolors_[size_t(row)] = new_color.name();
@@ -1245,7 +1246,7 @@ void PrefColors::setDisabledResets()
 }
 
 
-bool PrefColors::isDefaultColor(int const row, QString const color)
+bool PrefColors::isDefaultColor(int const row, QString const color)
 {
        return color == getDefaultColorByRow(row).name();
 }
@@ -1254,7 +1255,8 @@ bool PrefColors::isDefaultColor(int const row, QString const color)
 QColor PrefColors::getDefaultColorByRow(int const row)
 {
        ColorSet const defaultcolor;
-       return defaultcolor.getX11Name(lcolors_[size_t(row)]).c_str();
+       return defaultcolor.getX11HexName(lcolors_[size_t(row)],
+                       guiApp->colorCache().isDarkMode()).c_str();
 }
 
 
@@ -1303,6 +1305,7 @@ PrefDisplay::PrefDisplay(GuiPreferences * form)
        connect(instantPreviewCO, SIGNAL(activated(int)), this, SIGNAL(changed()));
        connect(previewSizeSB, SIGNAL(valueChanged(double)), this, SIGNAL(changed()));
        connect(paragraphMarkerCB, SIGNAL(toggled(bool)), this, SIGNAL(changed()));
+       connect(ctAdditionsUnderlinedCB, SIGNAL(toggled(bool)), this, SIGNAL(changed()));
 }
 
 
@@ -1329,6 +1332,7 @@ void PrefDisplay::applyRC(LyXRC & rc) const
        rc.display_graphics = displayGraphicsCB->isChecked();
        rc.preview_scale_factor = previewSizeSB->value();
        rc.paragraph_markers = paragraphMarkerCB->isChecked();
+       rc.ct_additions_underlined = ctAdditionsUnderlinedCB->isChecked();
 
        // FIXME!! The graphics cache no longer has a changeDisplay method.
 #if 0
@@ -1357,6 +1361,7 @@ void PrefDisplay::updateRC(LyXRC const & rc)
        displayGraphicsCB->setChecked(rc.display_graphics);
        previewSizeSB->setValue(rc.preview_scale_factor);
        paragraphMarkerCB->setChecked(rc.paragraph_markers);
+       ctAdditionsUnderlinedCB->setChecked(rc.ct_additions_underlined);
        previewSizeSB->setEnabled(
                rc.display_graphics
                && rc.preview != LyXRC::PREVIEW_OFF);
@@ -1876,8 +1881,8 @@ class FormatValidator : public QValidator
 {
 public:
        FormatValidator(QWidget *, Formats const & f);
-       void fixup(QString & input) const;
-       QValidator::State validate(QString & input, int & pos) const;
+       void fixup(QString & input) const override;
+       QValidator::State validate(QString & input, int & pos) const override;
 private:
        virtual QString toString(Format const & format) const = 0;
        int nr() const;
@@ -1943,7 +1948,7 @@ public:
                : FormatValidator(parent, f)
        {}
 private:
-       QString toString(Format const & format) const
+       QString toString(Format const & format) const override
        {
                return toqstr(format.name());
        }
@@ -1963,7 +1968,7 @@ public:
                : FormatValidator(parent, f)
        {}
 private:
-       QString toString(Format const & format) const
+       QString toString(Format const & format) const override
        {
                return toqstr(translateIfPossible(format.prettyname()));
        }
@@ -2423,7 +2428,11 @@ PrefLanguage::PrefLanguage(GuiPreferences * form)
        startCommandED->setValidator(new NoNewLineValidator(startCommandED));
        endCommandED->setValidator(new NoNewLineValidator(endCommandED));
 
+#if QT_VERSION < 0x060000
        defaultDecimalSepED->setValidator(new QRegExpValidator(QRegExp("\\S"), this));
+#else
+       defaultDecimalSepED->setValidator(new QRegularExpressionValidator(QRegularExpression("\\S"), this));
+#endif
        defaultDecimalSepED->setMaxLength(1);
 
        defaultLengthUnitCO->addItem(lyx::qt_(unit_name_gui[Length::CM]), Length::CM);
@@ -2452,6 +2461,9 @@ PrefLanguage::PrefLanguage(GuiPreferences * form)
                                      index.data(Qt::UserRole).toString());
        }
        uiLanguageCO->blockSignals(false);
+
+       // FIXME: restore this when it works (see discussion in #6450).
+       respectOSkbdCB->hide();
 }
 
 
@@ -2580,9 +2592,12 @@ PrefUserInterface::PrefUserInterface(GuiPreferences * form)
        iconSetCO->addItem(qt_("Classic"), "classic");
        iconSetCO->addItem(qt_("Oxygen"), "oxygen");
 
-#if (!(defined Q_WS_X11 || defined(QPA_XCB)) || QT_VERSION < 0x040600)
-       useSystemThemeIconsCB->hide();
+#if QT_VERSION >= 0x040600
+       if (guiApp->platformName() != "qt4x11"
+           && guiApp->platformName() != "xcb"
+           && !guiApp->platformName().contains("wayland"))
 #endif
+               useSystemThemeIconsCB->hide();
 }
 
 
@@ -2743,6 +2758,8 @@ PrefEdit::PrefEdit(GuiPreferences * form)
                this, SIGNAL(changed()));
        connect(macLikeCursorMovementCB, SIGNAL(clicked()),
                this, SIGNAL(changed()));
+       connect(copyCTMarkupCB, SIGNAL(clicked()),
+               this, SIGNAL(changed()));
        connect(sortEnvironmentsCB, SIGNAL(clicked()),
                this, SIGNAL(changed()));
        connect(groupEnvironmentsCB, SIGNAL(clicked()),
@@ -2751,7 +2768,7 @@ PrefEdit::PrefEdit(GuiPreferences * form)
                this, SIGNAL(changed()));
        connect(cursorWidthSB, SIGNAL(valueChanged(int)),
                this, SIGNAL(changed()));
-       connect(fullscreenLimitGB, SIGNAL(clicked()),
+       connect(citationSearchLE, SIGNAL(textChanged(QString)),
                this, SIGNAL(changed()));
        connect(fullscreenWidthSB, SIGNAL(valueChanged(int)),
                this, SIGNAL(changed()));
@@ -2768,11 +2785,28 @@ PrefEdit::PrefEdit(GuiPreferences * form)
 }
 
 
+void PrefEdit::on_fullscreenLimitCB_toggled(bool const state)
+{
+       fullscreenWidthSB->setEnabled(state);
+       fullscreenWidthLA->setEnabled(state);
+       changed();
+}
+
+
+void PrefEdit::on_citationSearchCB_toggled(bool const state)
+{
+       citationSearchLE->setEnabled(state);
+       citationSearchLA->setEnabled(state);
+       changed();
+}
+
+
 void PrefEdit::applyRC(LyXRC & rc) const
 {
        rc.cursor_follows_scrollbar = cursorFollowsCB->isChecked();
        rc.scroll_below_document = scrollBelowCB->isChecked();
        rc.mac_like_cursor_movement = macLikeCursorMovementCB->isChecked();
+       rc.ct_markup_copied = copyCTMarkupCB->isChecked();
        rc.sort_layouts = sortEnvironmentsCB->isChecked();
        rc.group_layouts = groupEnvironmentsCB->isChecked();
        switch (macroEditStyleCO->currentIndex()) {
@@ -2781,13 +2815,15 @@ void PrefEdit::applyRC(LyXRC & rc) const
                case 2: rc.macro_edit_style = LyXRC::MACRO_EDIT_LIST;   break;
        }
        rc.cursor_width = cursorWidthSB->value();
+       rc.citation_search = citationSearchCB->isChecked();
+       rc.citation_search_pattern = fromqstr(citationSearchLE->text());
        rc.full_screen_toolbars = toggleToolbarsCB->isChecked();
        rc.full_screen_scrollbar = toggleScrollbarCB->isChecked();
        rc.full_screen_statusbar = toggleStatusbarCB->isChecked();
        rc.full_screen_tabbar = toggleTabbarCB->isChecked();
        rc.full_screen_menubar = toggleMenubarCB->isChecked();
        rc.full_screen_width = fullscreenWidthSB->value();
-       rc.full_screen_limit = fullscreenLimitGB->isChecked();
+       rc.full_screen_limit = fullscreenLimitCB->isChecked();
 }
 
 
@@ -2796,17 +2832,24 @@ void PrefEdit::updateRC(LyXRC const & rc)
        cursorFollowsCB->setChecked(rc.cursor_follows_scrollbar);
        scrollBelowCB->setChecked(rc.scroll_below_document);
        macLikeCursorMovementCB->setChecked(rc.mac_like_cursor_movement);
+       copyCTMarkupCB->setChecked(rc.ct_markup_copied);
        sortEnvironmentsCB->setChecked(rc.sort_layouts);
        groupEnvironmentsCB->setChecked(rc.group_layouts);
        macroEditStyleCO->setCurrentIndex(rc.macro_edit_style);
        cursorWidthSB->setValue(rc.cursor_width);
+       citationSearchCB->setChecked(rc.citation_search);
+       citationSearchLE->setText(toqstr(rc.citation_search_pattern));
+       citationSearchLE->setEnabled(rc.citation_search);
+       citationSearchLA->setEnabled(rc.citation_search);
        toggleScrollbarCB->setChecked(rc.full_screen_scrollbar);
        toggleStatusbarCB->setChecked(rc.full_screen_statusbar);
        toggleToolbarsCB->setChecked(rc.full_screen_toolbars);
        toggleTabbarCB->setChecked(rc.full_screen_tabbar);
        toggleMenubarCB->setChecked(rc.full_screen_menubar);
        fullscreenWidthSB->setValue(rc.full_screen_width);
-       fullscreenLimitGB->setChecked(rc.full_screen_limit);
+       fullscreenLimitCB->setChecked(rc.full_screen_limit);
+       fullscreenWidthSB->setEnabled(rc.full_screen_limit);
+       fullscreenWidthLA->setEnabled(rc.full_screen_limit);
 }
 
 
@@ -2821,13 +2864,14 @@ GuiShortcutDialog::GuiShortcutDialog(QWidget * parent) : QDialog(parent)
 {
        Ui::shortcutUi::setupUi(this);
        QDialog::setModal(true);
+       lfunLE->setValidator(new NoNewLineValidator(lfunLE));
 }
 
 
 PrefShortcuts::PrefShortcuts(GuiPreferences * form)
        : PrefModule(catEditing, N_("Shortcuts"), form),
-         editItem_(0), mathItem_(0), bufferItem_(0), layoutItem_(0),
-         systemItem_(0)
+         editItem_(nullptr), mathItem_(nullptr), bufferItem_(nullptr), layoutItem_(nullptr),
+         systemItem_(nullptr)
 {
        setupUi(this);
 
@@ -2885,8 +2929,8 @@ void PrefShortcuts::applyRC(LyXRC & rc) const
        // The good thing is that the menus are updated automatically.
        theTopLevelKeymap().clear();
        theTopLevelKeymap().read("site");
-       theTopLevelKeymap().read(rc.bind_file, 0, KeyMap::Fallback);
-       theTopLevelKeymap().read("user", 0, KeyMap::MissingOK);
+       theTopLevelKeymap().read(rc.bind_file, nullptr, KeyMap::Fallback);
+       theTopLevelKeymap().read("user", nullptr, KeyMap::MissingOK);
 }
 
 
@@ -3002,14 +3046,14 @@ QTreeWidgetItem * PrefShortcuts::insertShortcutItem(FuncRequest const & lfun,
                        + ' ' + lfun.argument());
        QString const shortcut = toqstr(seq.print(KeySequence::ForGui));
 
-       QTreeWidgetItem * newItem = 0;
+       QTreeWidgetItem * newItem = nullptr;
        // for unbind items, try to find an existing item in the system bind list
        if (tag == KeyMap::UserUnbind) {
                QList<QTreeWidgetItem*> const items = shortcutsTW->findItems(lfun_name,
                        Qt::MatchFlags(Qt::MatchExactly | Qt::MatchRecursive), 0);
-               for (int i = 0; i < items.size(); ++i) {
-                       if (items[i]->text(1) == shortcut) {
-                               newItem = items[i];
+               for (auto const & item : items) {
+                       if (item->text(1) == shortcut) {
+                               newItem = item;
                                break;
                        }
                }
@@ -3017,13 +3061,13 @@ QTreeWidgetItem * PrefShortcuts::insertShortcutItem(FuncRequest const & lfun,
                // Such an item is not displayed to avoid confusion (what is
                // unmatched removed?).
                if (!newItem) {
-                       return 0;
+                       return nullptr;
                }
        }
        if (!newItem) {
                switch(lyxaction.getActionType(action)) {
                case LyXAction::Hidden:
-                       return 0;
+                       return nullptr;
                case LyXAction::Edit:
                        newItem = new QTreeWidgetItem(editItem_);
                        break;
@@ -3096,8 +3140,7 @@ void PrefShortcuts::unhideEmpty(QString const & lfun, bool select)
        // list of items that match lfun
        QList<QTreeWidgetItem*> items = shortcutsTW->findItems(lfun,
             Qt::MatchFlags(Qt::MatchExactly | Qt::MatchRecursive), 0);
-       for (int i = 0; i < items.size(); ++i) {
-               QTreeWidgetItem * item = items[i];
+       for (auto const & item : items) {
                if (isAlwaysHidden(*item)) {
                        setItemType(item, KeyMap::System);
                        if (select)
@@ -3113,24 +3156,24 @@ void PrefShortcuts::removeShortcut()
        // it seems that only one item can be selected, but I am
        // removing all selected items anyway.
        QList<QTreeWidgetItem*> items = shortcutsTW->selectedItems();
-       for (int i = 0; i < items.size(); ++i) {
-               string shortcut = fromqstr(items[i]->data(1, Qt::UserRole).toString());
-               string lfun = fromqstr(items[i]->text(0));
-               FuncRequest func = lyxaction.lookupFunc(lfun);
+       for (auto & item : items) {
+               string shortcut = fromqstr(item->data(1, Qt::UserRole).toString());
+               string lfun = fromqstr(item->text(0));
+               FuncRequest const func = lyxaction.lookupFunc(lfun);
 
-               switch (itemType(*items[i])) {
+               switch (itemType(*item)) {
                case KeyMap::System: {
                        // for system bind, we do not touch the item
                        // but add an user unbind item
                        user_unbind_.bind(shortcut, func);
-                       setItemType(items[i], KeyMap::UserUnbind);
+                       setItemType(item, KeyMap::UserUnbind);
                        removePB->setText(qt_("Res&tore"));
                        break;
                }
                case KeyMap::UserBind: {
                        // for user_bind, we remove this bind
-                       QTreeWidgetItem * parent = items[i]->parent();
-                       int itemIdx = parent->indexOfChild(items[i]);
+                       QTreeWidgetItem * parent = item->parent();
+                       int itemIdx = parent->indexOfChild(item);
                        parent->takeChild(itemIdx);
                        if (itemIdx > 0)
                                shortcutsTW->scrollToItem(parent->child(itemIdx - 1));
@@ -3139,7 +3182,7 @@ void PrefShortcuts::removeShortcut()
                        user_bind_.unbind(shortcut, func);
                        // If this user binding hid an empty system binding, unhide the
                        // latter and select it.
-                       unhideEmpty(items[i]->text(0), true);
+                       unhideEmpty(item->text(0), true);
                        break;
                }
                case KeyMap::UserUnbind: {
@@ -3151,15 +3194,15 @@ void PrefShortcuts::removeShortcut()
                        if (!validateNewShortcut(func, seq, QString()))
                                break;
                        user_unbind_.unbind(shortcut, func);
-                       setItemType(items[i], KeyMap::System);
+                       setItemType(item, KeyMap::System);
                        removePB->setText(qt_("Remo&ve"));
                        break;
                }
                case KeyMap::UserExtraUnbind: {
                        // for user unbind that is not in system bind file,
                        // remove this unbind file
-                       QTreeWidgetItem * parent = items[i]->parent();
-                       parent->takeChild(parent->indexOfChild(items[i]));
+                       QTreeWidgetItem * parent = item->parent();
+                       parent->takeChild(parent->indexOfChild(item));
                        user_unbind_.unbind(shortcut, func);
                }
                }
@@ -3169,26 +3212,26 @@ void PrefShortcuts::removeShortcut()
 
 void PrefShortcuts::deactivateShortcuts(QList<QTreeWidgetItem*> const & items)
 {
-       for (int i = 0; i < items.size(); ++i) {
-               string shortcut = fromqstr(items[i]->data(1, Qt::UserRole).toString());
-               string lfun = fromqstr(items[i]->text(0));
-               FuncRequest func = lyxaction.lookupFunc(lfun);
+       for (auto item : items) {
+               string shortcut = fromqstr(item->data(1, Qt::UserRole).toString());
+               string lfun = fromqstr(item->text(0));
+               FuncRequest const func = lyxaction.lookupFunc(lfun);
 
-               switch (itemType(*items[i])) {
+               switch (itemType(*item)) {
                case KeyMap::System:
                        // for system bind, we do not touch the item
                        // but add an user unbind item
                        user_unbind_.bind(shortcut, func);
-                       setItemType(items[i], KeyMap::UserUnbind);
+                       setItemType(item, KeyMap::UserUnbind);
                        break;
 
                case KeyMap::UserBind: {
                        // for user_bind, we remove this bind
-                       QTreeWidgetItem * parent = items[i]->parent();
-                       int itemIdx = parent->indexOfChild(items[i]);
+                       QTreeWidgetItem * parent = item->parent();
+                       int itemIdx = parent->indexOfChild(item);
                        parent->takeChild(itemIdx);
                        user_bind_.unbind(shortcut, func);
-                       unhideEmpty(items[i]->text(0), false);
+                       unhideEmpty(item->text(0), false);
                        break;
                }
                default:
@@ -3238,7 +3281,7 @@ void PrefShortcuts::on_searchLE_textEdited()
                // show all hidden items
                QTreeWidgetItemIterator it(shortcutsTW, QTreeWidgetItemIterator::Hidden);
                for (; *it; ++it)
-                       shortcutsTW->setItemHidden(*it, isAlwaysHidden(**it));
+                       (*it)->setHidden(isAlwaysHidden(**it));
                // close all categories
                for (int i = 0; i < shortcutsTW->topLevelItemCount(); ++i)
                        shortcutsTW->collapseItem(shortcutsTW->topLevelItem(i));
@@ -3253,12 +3296,13 @@ void PrefShortcuts::on_searchLE_textEdited()
        // hide everyone (to avoid searching in matched QList repeatedly
        QTreeWidgetItemIterator it(shortcutsTW, QTreeWidgetItemIterator::Selectable);
        while (*it)
-               shortcutsTW->setItemHidden(*it++, true);
+               (*it++)->setHidden(true);
        // show matched items
-       for (int i = 0; i < matched.size(); ++i)
-               if (!isAlwaysHidden(*matched[i])) {
-                       shortcutsTW->setItemHidden(matched[i], false);
-                       shortcutsTW->setItemExpanded(matched[i]->parent(), true);
+       for (auto & item : matched)
+               if (!isAlwaysHidden(*item)) {
+                       item->setHidden(false);
+                       if (item->parent())
+                               item->parent()->setExpanded(true);
                }
 }
 
@@ -3344,7 +3388,7 @@ bool PrefShortcuts::validateNewShortcut(FuncRequest const & func,
 void PrefShortcuts::shortcutOkPressed()
 {
        QString const new_lfun = shortcut_->lfunLE->text();
-       FuncRequest func = lyxaction.lookupFunc(fromqstr(new_lfun));
+       FuncRequest const func = lyxaction.lookupFunc(fromqstr(new_lfun));
        KeySequence k = shortcut_->shortcutWG->getKeySequence();
 
        // save_lfun_ contains the text of the lfun to modify, if the user clicked
@@ -3365,7 +3409,7 @@ void PrefShortcuts::shortcutOkPressed()
        if (item) {
                user_bind_.bind(&k, func);
                shortcutsTW->sortItems(0, Qt::AscendingOrder);
-               shortcutsTW->setItemExpanded(item->parent(), true);
+               item->parent()->setExpanded(true);
                shortcutsTW->setCurrentItem(item);
                shortcutsTW->scrollToItem(item);
        } else {
@@ -3657,9 +3701,6 @@ QString GuiPreferences::browse(QString const & file,
 }
 
 
-Dialog * createGuiPreferences(GuiView & lv) { return new GuiPreferences(lv); }
-
-
 } // namespace frontend
 } // namespace lyx