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