Commit 070fd5ce authored by Erik Verbruggen's avatar Erik Verbruggen

Changed code generation for form classes to do a Qt version check

Change-Id: I20200303ef68bc3e73b232c44263d71d09b091a5
Reviewed-by: default avatarFriedemann Kleint <Friedemann.Kleint@nokia.com>
Reviewed-by: default avatarBill King <bill.king@nokia.com>
parent bdb89079
......@@ -81,6 +81,11 @@ void writeIncludeFileDirective(const QString &file, bool globalInclude,
str << QLatin1String("#include ") << opening << file << closing << QLatin1Char('\n');
}
QTCREATOR_UTILS_EXPORT void writeBeginQtVersionCheck(QTextStream &str)
{
str << QLatin1String("#if QT_VERSION >= 0x050000\n");
}
QTCREATOR_UTILS_EXPORT
QString writeOpeningNameSpaces(const QStringList &l, const QString &indent,
QTextStream &str)
......
......@@ -55,6 +55,8 @@ void writeIncludeFileDirective(const QString &file,
bool globalInclude,
QTextStream &str);
QTCREATOR_UTILS_EXPORT void writeBeginQtVersionCheck(QTextStream &str);
// Write opening namespaces and return an indentation string to be used
// in the following code if there are any.
QTCREATOR_UTILS_EXPORT
......
......@@ -46,6 +46,8 @@ CppSettingsPageWidget::CppSettingsPageWidget(QWidget *parent) :
QWidget(parent)
{
m_ui.setupUi(this);
connect(m_ui.includeQtModuleCheckBox, SIGNAL(toggled(bool)),
m_ui.addQtVersionCheckBox, SLOT(setEnabled(bool)));
}
FormClassWizardGenerationParameters CppSettingsPageWidget::parameters() const
......@@ -54,6 +56,7 @@ FormClassWizardGenerationParameters CppSettingsPageWidget::parameters() const
rc.embedding = static_cast<UiClassEmbedding>(uiEmbedding());
rc.retranslationSupport =m_ui.retranslateCheckBox->isChecked();
rc.includeQtModule = m_ui.includeQtModuleCheckBox->isChecked();
rc.addQtVersionCheck = m_ui.addQtVersionCheckBox->isChecked();
return rc;
}
......@@ -61,6 +64,7 @@ void CppSettingsPageWidget::setParameters(const FormClassWizardGenerationParamet
{
m_ui.retranslateCheckBox->setChecked(p.retranslationSupport);
m_ui.includeQtModuleCheckBox->setChecked(p.includeQtModule);
m_ui.addQtVersionCheckBox->setChecked(p.addQtVersionCheck);
setUiEmbedding(p.embedding);
}
......
......@@ -2,6 +2,14 @@
<ui version="4.0">
<class>Designer::Internal::CppSettingsPageWidget</class>
<widget class="QWidget" name="Designer::Internal::CppSettingsPageWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>340</width>
<height>232</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
......@@ -62,6 +70,16 @@
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="addQtVersionCheckBox">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Add Qt version #ifdef for module names</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
......
......@@ -51,9 +51,10 @@ static const char formClassWizardPageGroupC[] = "FormClassWizardPage";
static const char translationKeyC[] = "RetranslationSupport";
static const char embeddingModeKeyC[] = "Embedding";
// TODO: These 2 are general coding convention settings and
// TODO: These 3 are general coding convention settings and
// should go to CppTools...
static const char includeQtModuleKeyC[] = "IncludeQtModule";
static const char addQtVersionCheckKeyC[] = "AddQtVersionCheck";
static const char indentNamespaceKeyC[] = "IndentNamespace";
static const bool retranslationSupportDefault = false;
......@@ -65,6 +66,7 @@ FormClassWizardGenerationParameters::FormClassWizardGenerationParameters() :
embedding(PointerAggregatedUiClass),
retranslationSupport(retranslationSupportDefault),
includeQtModule(false),
addQtVersionCheck(false),
indentNamespace(false)
{
}
......@@ -76,6 +78,7 @@ void FormClassWizardGenerationParameters::fromSettings(const QSettings *settings
retranslationSupport = settings->value(group + QLatin1String(translationKeyC), retranslationSupportDefault).toBool();
embedding = static_cast<UiClassEmbedding>(settings->value(group + QLatin1String(embeddingModeKeyC), int(PointerAggregatedUiClass)).toInt());
includeQtModule = settings->value(group + QLatin1String(includeQtModuleKeyC), false).toBool();
addQtVersionCheck = settings->value(group + QLatin1String(addQtVersionCheckKeyC), false).toBool();
indentNamespace = settings->value(group + QLatin1String(indentNamespaceKeyC), false).toBool();
}
......@@ -85,14 +88,18 @@ void FormClassWizardGenerationParameters::toSettings(QSettings *settings) const
settings->setValue(QLatin1String(translationKeyC), retranslationSupport);
settings->setValue(QLatin1String(embeddingModeKeyC), embedding);
settings->setValue(QLatin1String(includeQtModuleKeyC), includeQtModule);
settings->setValue(QLatin1String(addQtVersionCheckKeyC), addQtVersionCheck);
settings->setValue(QLatin1String(indentNamespaceKeyC), indentNamespace);
settings->endGroup();
}
bool FormClassWizardGenerationParameters::equals(const FormClassWizardGenerationParameters &rhs) const
{
return embedding == rhs.embedding && retranslationSupport == rhs.retranslationSupport
&& includeQtModule == rhs.includeQtModule && indentNamespace == rhs.indentNamespace;
return embedding == rhs.embedding
&& retranslationSupport == rhs.retranslationSupport
&& includeQtModule == rhs.includeQtModule
&& addQtVersionCheck == rhs.addQtVersionCheck
&& indentNamespace == rhs.indentNamespace;
}
// Generation code
......@@ -166,10 +173,19 @@ bool QtDesignerFormClassCodeGenerator::generateCpp(const FormClassWizardParamete
// Todo: Can we obtain the header from the code model for custom widgets?
// Alternatively, from Designer.
if (formBaseClass.startsWith(QLatin1Char('Q'))) {
QString baseInclude = formBaseClass;
if (generationParameters.includeQtModule)
baseInclude.insert(0, QLatin1String("QtGui/"));
Utils::writeIncludeFileDirective(baseInclude, true, headerStr);
if (generationParameters.includeQtModule) {
if (generationParameters.addQtVersionCheck) {
Utils::writeBeginQtVersionCheck(headerStr);
Utils::writeIncludeFileDirective(QLatin1String("QtWidgets/") + formBaseClass, true, headerStr);
headerStr << "#else\n";
Utils::writeIncludeFileDirective(QLatin1String("QtGui/") + formBaseClass, true, headerStr);
headerStr << "#endif\n";
} else {
Utils::writeIncludeFileDirective(QLatin1String("QtGui/") + formBaseClass, true, headerStr);
}
} else {
Utils::writeIncludeFileDirective(formBaseClass, true, headerStr);
}
}
}
......
......@@ -65,6 +65,7 @@ struct FormClassWizardGenerationParameters
UiClassEmbedding embedding;
bool retranslationSupport; // Add handling for language change events
bool includeQtModule; // Include "<QtGui/[Class]>" or just "<[Class]>"
bool addQtVersionCheck; // Include #ifdef when using "#include <QtGui/..."
bool indentNamespace;
};
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment