ui: Delay font face laoding until combobox clicked to speed up preferences display time

This commit is contained in:
Eberhard Graether
2018-02-05 18:24:21 +01:00
parent f943d93335
commit 1d7fc6e9d4
2 changed files with 64 additions and 9 deletions
@@ -6,6 +6,7 @@
#include <QLabel>
#include <QLineEdit>
#include <QTextCodec>
#include <QTimer>
#include "qt/utility/utilityQt.h"
#include "settings/ApplicationSettings.h"
@@ -45,11 +46,30 @@ void QtProjectWizzardContentPreferences::populate(QGridLayout* layout, int& row)
addTitle("USER INTERFACE", layout, row);
// font face
m_fontFace = new QFontComboBox(this);
m_fontFace->setFontFilters(QFontComboBox::MonospacedFonts);
m_fontFace->setWritingSystem(QFontDatabase::Latin);
m_fontFacePlaceHolder = new QtComboBoxPlaceHolder();
m_fontFace = new QFontComboBox();
m_fontFace->setEditable(false);
addLabelAndWidget("Font Face", m_fontFace, layout, row);
addLabelAndWidget("Font Face", m_fontFacePlaceHolder, layout, row);
int rowNum = row;
connect(m_fontFacePlaceHolder, &QtComboBoxPlaceHolder::opened,
[this, rowNum, layout]()
{
m_fontFacePlaceHolder->hide();
QString name = m_fontFace->currentText();
m_fontFace->setFontFilters(QFontComboBox::MonospacedFonts);
m_fontFace->setWritingSystem(QFontDatabase::Latin);
m_fontFace->setCurrentText(name);
addWidget(m_fontFace, layout, rowNum);
QTimer::singleShot(10, [this]()
{
m_fontFace->showPopup();
});
}
);
row++;
// font size
@@ -359,7 +379,10 @@ void QtProjectWizzardContentPreferences::load()
{
ApplicationSettings* appSettings = ApplicationSettings::getInstance().get();
m_fontFace->setCurrentText(QString::fromStdString(appSettings->getFontName()));
QString fontName = QString::fromStdString(appSettings->getFontName());
m_fontFace->setCurrentText(fontName);
m_fontFacePlaceHolder->addItem(fontName);
m_fontFacePlaceHolder->setCurrentText(fontName);
m_fontSize->setCurrentIndex(appSettings->getFontSize() - appSettings->getFontSizeMin());
m_tabWidth->setCurrentIndex(appSettings->getCodeTabWidth() - 1);
@@ -695,13 +718,24 @@ void QtProjectWizzardContentPreferences::addTitle(QString title, QGridLayout* la
layout->addWidget(createFormTitle(title), row++, QtProjectWizzardWindow::FRONT_COL, Qt::AlignLeft);
}
void QtProjectWizzardContentPreferences::addLabelAndWidget(
QString label, QWidget* widget, QGridLayout* layout, int& row, Qt::Alignment widgetAlignment)
void QtProjectWizzardContentPreferences::addLabel(QString label, QGridLayout* layout, int row)
{
layout->addWidget(createFormLabel(label), row, QtProjectWizzardWindow::FRONT_COL, Qt::AlignRight);
}
void QtProjectWizzardContentPreferences::addWidget(
QWidget* widget, QGridLayout* layout, int row, Qt::Alignment widgetAlignment)
{
layout->addWidget(widget, row, QtProjectWizzardWindow::BACK_COL, widgetAlignment);
}
void QtProjectWizzardContentPreferences::addLabelAndWidget(
QString label, QWidget* widget, QGridLayout* layout, int row, Qt::Alignment widgetAlignment)
{
addLabel(label, layout, row);
addWidget(widget, layout, row, widgetAlignment);
}
void QtProjectWizzardContentPreferences::addGap(QGridLayout* layout, int& row)
{
layout->setRowMinimumHeight(row++, 20);
@@ -1,18 +1,35 @@
#ifndef QT_PROJECT_WIZZARD_CONTENT_PREFERENCES_H
#define QT_PROJECT_WIZZARD_CONTENT_PREFERENCES_H
#include <QComboBox>
#include "qt/element/QtLocationPicker.h"
#include "qt/element/QtDirectoryListBox.h"
#include "qt/window/project_wizzard/QtProjectWizzardContent.h"
#include "utility/path_detector/CombinedPathDetector.h"
class QCheckBox;
class QComboBox;
class QFontComboBox;
class QLabel;
class QLineEdit;
class QtComboBoxPlaceHolder
: public QComboBox
{
Q_OBJECT
signals:
void opened();
public:
virtual void showPopup()
{
emit opened();
}
};
class QtProjectWizzardContentPreferences
: public QtProjectWizzardContent
{
@@ -45,8 +62,10 @@ private:
void addMavenPathDetection(QGridLayout* layout, int& row);
void addTitle(QString title, QGridLayout* layout, int& row);
void addLabel(QString label, QGridLayout* layout, int row);
void addWidget(QWidget* widget, QGridLayout* layout, int row, Qt::Alignment widgetAlignment = Qt::Alignment());
void addLabelAndWidget(
QString label, QWidget* widget, QGridLayout* layout, int& row, Qt::Alignment widgetAlignment = Qt::Alignment());
QString label, QWidget* widget, QGridLayout* layout, int row, Qt::Alignment widgetAlignment = Qt::Alignment());
void addGap(QGridLayout* layout, int& row);
QCheckBox* addCheckBox(QString label, QString text, QString helpText, QGridLayout* layout, int& row);
@@ -59,6 +78,8 @@ private:
QLineEdit* addLineEdit(QString label, QString helpText, QGridLayout* layout, int& row);
QFontComboBox* m_fontFace;
QtComboBoxPlaceHolder* m_fontFacePlaceHolder;
QComboBox* m_fontSize;
QComboBox* m_tabWidth;
QComboBox* m_textEncoding;