commit ef3a1c071861416bfa17c86d99f743c60f8fbdc0
Author: Juergen Spitzmueller <sp...@lyx.org>
Date:   Thu Mar 20 11:55:20 2025 +0100

    BulletsModule: fill pixmaps only on request
    
    There is no point in filling all fonts and levels prematurely.
    
    This should speed up launching the documents dialog.
---
 src/frontends/qt/BulletsModule.cpp | 89 ++++++++++++++++++++++++++++++--------
 src/frontends/qt/BulletsModule.h   | 18 ++++++--
 2 files changed, 87 insertions(+), 20 deletions(-)

diff --git a/src/frontends/qt/BulletsModule.cpp 
b/src/frontends/qt/BulletsModule.cpp
index 0cbfe8dbae..cbceba0a50 100644
--- a/src/frontends/qt/BulletsModule.cpp
+++ b/src/frontends/qt/BulletsModule.cpp
@@ -4,6 +4,7 @@
  * Licence details can be found in the file COPYING.
  *
  * \author Edwin Leuven
+ * \author Jürgen Spitzmüller
  *
  * Full author contact details are available in file CREDITS.
  */
@@ -47,18 +48,24 @@ BulletsModule::BulletsModule(QWidget * parent)
        levelLW->addItem("3");
        levelLW->addItem("4");
 
-       // insert pixmaps
-       setupPanel(new QListWidget(bulletpaneSW), qt_("Standard[[Bullets]]"), 
0);
-       setupPanel(new QListWidget(bulletpaneSW), qt_("Maths"), 1, "math");
-       setupPanel(new QListWidget(bulletpaneSW), qt_("Dings 1"), 2);
-       setupPanel(new QListWidget(bulletpaneSW), qt_("Dings 2"), 3);
-       setupPanel(new QListWidget(bulletpaneSW), qt_("Dings 3"), 4);
-       setupPanel(new QListWidget(bulletpaneSW), qt_("Dings 4"), 5);
+       // prepare browser
+       standardLW = new QListWidget(bulletpaneSW);
+       mathsLW = new QListWidget(bulletpaneSW);
+       dings1LW = new QListWidget(bulletpaneSW);
+       dings2LW = new QListWidget(bulletpaneSW);
+       dings3LW = new QListWidget(bulletpaneSW);
+       dings4LW = new QListWidget(bulletpaneSW);
+       setupPanel(standardLW, qt_("Standard[[Bullets]]"));
+       setupPanel(mathsLW, qt_("Maths"));
+       setupPanel(dings1LW, qt_("Dings 1"));
+       setupPanel(dings2LW, qt_("Dings 2"));
+       setupPanel(dings3LW, qt_("Dings 3"));
+       setupPanel(dings4LW, qt_("Dings 4"));
 
        connect(levelLW, SIGNAL(currentRowChanged(int)),
                this, SLOT(showLevel(int)));
-       connect(bulletpaneCO, SIGNAL(activated(int)), bulletpaneSW,
-               SLOT(setCurrentIndex(int)));
+       connect(bulletpaneCO, SIGNAL(activated(int)), this,
+               SLOT(setCurrentPane(int)));
 }
 
 
@@ -171,8 +178,7 @@ QPixmap getSelectedPixmap(QPixmap pixmap, QSize const 
icon_size)
 }
 
 
-void BulletsModule::setupPanel(QListWidget * lw, QString const & panelname,
-       int const font, string const folder)
+void BulletsModule::setupPanel(QListWidget * lw, QString const & panelname)
 {
        connect(lw, SIGNAL(itemClicked(QListWidgetItem *)),
                this, SLOT(bulletSelected(QListWidgetItem *)));
@@ -188,9 +194,49 @@ void BulletsModule::setupPanel(QListWidget * lw, QString 
const & panelname,
        lw->setSpacing(12);
        lw->setUniformItemSizes(true);
 
+       // add bulletpanel to stackedwidget
+       bulletpaneSW->addWidget(lw);
+}
+
+
+string BulletsModule::getFolder(int const font)
+{
+       return (font == 1) ? "math" : "bullets";
+}
+
+
+QListWidget * BulletsModule::getListWidget(int const font)
+{
+       switch (font) {
+       case 0:
+               return standardLW;
+       case 1:
+               return mathsLW;
+       case 2:
+               return dings1LW;
+       case 3:
+               return dings2LW;
+       case 4:
+               return dings3LW;
+       case 5:
+               return dings4LW;
+       default:
+               return standardLW;
+       }
+}
+
+
+void BulletsModule::fillPanel(int const font)
+{
+       QListWidget * lw = getListWidget(font);
+       if (lw->count() > 0)
+               // already filled
+               return;
+
        QSize icon_size(26, 26);
        lw->setIconSize(icon_size);
-
+       string const folder = getFolder(font);
+    
        // we calculate the appropriate width to fit 6 icons in a row
        lw->setFixedWidth((6 * (icon_size.width() + lw->spacing()))
                                + (lw->frameWidth() * 2)
@@ -206,14 +252,11 @@ void BulletsModule::setupPanel(QListWidget * lw, QString 
const & panelname,
                QPixmap pixmap = getPixmap("images/" + toqstr(folder) + "/", 
toqstr(iconname), "svgz");
                QIcon icon(pixmap);
                icon.addPixmap(getSelectedPixmap(pixmap, icon_size), 
QIcon::Selected);
-               QListWidgetItem * lwi = new QListWidgetItem(icon, QString(), 0, 
i);
+               QListWidgetItem * lwi = new QListWidgetItem(icon, QString(), 
nullptr, i);
                lwi->setToolTip(toqstr(Bullet::bulletEntry(font, i)));
                lwi->setSizeHint(icon_size);
                lw->addItem(lwi);
        }
-
-       // add bulletpanel to stackedwidget
-       bulletpaneSW->addWidget(lw);
 }
 
 
@@ -235,7 +278,7 @@ void BulletsModule::showLevel(int level)
                current_char_ = bullets_[level].getCharacter();
                selectItem(current_font_, current_char_, true);
                bulletpaneCO->setCurrentIndex(current_font_);
-               bulletpaneSW->setCurrentIndex(current_font_);
+               setCurrentPane(current_font_);
                bulletsizeCO->setEnabled(true);
                sizeL->setEnabled(true);
        }
@@ -294,6 +337,10 @@ void BulletsModule::selectItem(int font, int character, 
bool select)
                return;
 
        QListWidget * lw = static_cast<QListWidget 
*>(bulletpaneSW->widget(font));
+
+       // insert pixmaps if needed
+       fillPanel(font);
+
        if (lw->item(character))
                lw->item(character)->setSelected(select);
 }
@@ -324,6 +371,14 @@ void BulletsModule::setBullet(int level, Bullet const & 
bullet)
 }
 
 
+void BulletsModule::setCurrentPane(int const font)
+{
+       // insert pixmaps if needed
+       fillPanel(font);
+       bulletpaneSW->setCurrentIndex(font);
+}
+
+
 Bullet const & BulletsModule::bullet(int level) const
 {
        return bullets_[level];
diff --git a/src/frontends/qt/BulletsModule.h b/src/frontends/qt/BulletsModule.h
index dc28659a2c..8930134813 100644
--- a/src/frontends/qt/BulletsModule.h
+++ b/src/frontends/qt/BulletsModule.h
@@ -5,6 +5,7 @@
  * Licence details can be found in the file COPYING.
  *
  * \author Edwin Leuven
+ * \author Jürgen Spitzmüller
  *
  * Full author contact details are available in file CREDITS.
  */
@@ -28,7 +29,7 @@ class BulletsModule : public QWidget, public Ui::BulletsUi
 
 public:
        ///
-       BulletsModule(QWidget * parent = 0);
+       BulletsModule(QWidget * parent = nullptr);
 
        /// set a bullet
        void setBullet(int level, Bullet const & bullet);
@@ -46,16 +47,27 @@ protected Q_SLOTS:
        void on_customLE_textEdited(const QString &);
        void bulletSelected(QListWidgetItem *);
        void showLevel(int);
+       void setCurrentPane(int);
 
 private:
        void selectItem(int font, int character, bool select);
-       void setupPanel(QListWidget * lw, QString const & panelname,
-                       int const font, std::string const folder = "bullets");
+       void setupPanel(QListWidget * lw, QString const & panelname);
+       void fillPanel(int const font);
+       std::string getFolder(int const font);
+       QListWidget * getListWidget(int const font);
 
        /// store results
        Bullet bullets_[4];
        int current_font_;
        int current_char_;
+
+       /// List widgets
+       QListWidget * standardLW;
+       QListWidget * mathsLW;
+       QListWidget * dings1LW;
+       QListWidget * dings2LW;
+       QListWidget * dings3LW;
+       QListWidget * dings4LW;
 };
 
 } // namespace frontend
-- 
lyx-cvs mailing list
lyx-cvs@lists.lyx.org
https://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to