diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPreferences.cpp b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPreferences.cpp index a1ae9ed8..468fdb8c 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPreferences.cpp +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPreferences.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #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); diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPreferences.h b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPreferences.h index fe70ad28..f2e4665e 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPreferences.h +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPreferences.h @@ -1,18 +1,35 @@ #ifndef QT_PROJECT_WIZZARD_CONTENT_PREFERENCES_H #define QT_PROJECT_WIZZARD_CONTENT_PREFERENCES_H +#include + #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;