From 61cf2d0a39ff1d4b215a619d792a4bdbbc55dc45 Mon Sep 17 00:00:00 2001 From: Jens Bache-Wiig <jens.bache-wiig@nokia.com> Date: Fri, 21 May 2010 18:27:40 +0200 Subject: [PATCH] Fix issues with long project names in the minitargetselector It's impossible to use very long names and some clipping occurs due to incorrect size hints on QLabel. - Made the popup minimum width depend on the longest project name entered. (it will not shrink) - The build and run labels have increased minimum size hints. - Combobox tooltip will be set to the project name as to make it possible to expand long names. Task-number: QTCREATORBUG-1278 RevBy: joao --- .../miniprojecttargetselector.cpp | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/plugins/projectexplorer/miniprojecttargetselector.cpp b/src/plugins/projectexplorer/miniprojecttargetselector.cpp index b71e78f07f5..48ed61edae3 100644 --- a/src/plugins/projectexplorer/miniprojecttargetselector.cpp +++ b/src/plugins/projectexplorer/miniprojecttargetselector.cpp @@ -252,15 +252,19 @@ MiniTargetWidget::MiniTargetWidget(Target *target, QWidget *parent) : QFormLayout *formLayout = new QFormLayout; formLayout->setLabelAlignment(Qt::AlignRight); QLabel *lbl; + int indent = 10; if (hasBuildConfiguration()) { lbl = new QLabel(tr("Build:")); lbl->setObjectName(QString::fromUtf8("buildLabel")); - lbl->setIndent(10); + lbl->setMinimumWidth(lbl->fontMetrics().width(lbl->text()) + indent + 4); + lbl->setIndent(indent); + formLayout->addRow(lbl, buildHelperLayout); } lbl = new QLabel(tr("Run:")); lbl->setObjectName(QString::fromUtf8("runLabel")); - lbl->setIndent(10); + lbl->setMinimumWidth(lbl->fontMetrics().width(lbl->text()) + indent + 4); + lbl->setIndent(indent); formLayout->addRow(lbl, runHelperLayout); gridLayout->addWidget(m_targetName, 0, 0); @@ -310,6 +314,8 @@ void MiniTargetWidget::addRunConfiguration(ProjectExplorer::RunConfiguration* rc { connect(rc, SIGNAL(displayNameChanged()), SLOT(updateDisplayName())); m_runComboBox->addItem(rc->displayName(), QVariant::fromValue(rc)); + m_runComboBox->setItemData(m_runComboBox->findText(rc->displayName()), + rc->displayName(), Qt::ToolTipRole); if (m_target->activeRunConfiguration() == rc) m_runComboBox->setCurrentIndex(m_runComboBox->count()-1); @@ -327,6 +333,8 @@ void MiniTargetWidget::addBuildConfiguration(ProjectExplorer::BuildConfiguration QTC_ASSERT(m_buildComboBox, return); connect(bc, SIGNAL(displayNameChanged()), SLOT(updateDisplayName())); m_buildComboBox->addItem(bc->displayName(), QVariant::fromValue(bc)); + m_buildComboBox->setItemData(m_buildComboBox->findText(bc->displayName()), + bc->displayName(), Qt::ToolTipRole); if (m_target->activeBuildConfiguration() == bc) m_buildComboBox->setCurrentIndex(m_buildComboBox->count()-1); @@ -401,7 +409,6 @@ MiniProjectTargetSelector::MiniProjectTargetSelector(QAction *targetSelectorActi m_projectsBox->setProperty("hideborder", true); m_projectsBox->setObjectName(QString::fromUtf8("ProjectsBox")); m_projectsBox->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred); - m_projectsBox->setMaximumWidth(200); toolLayout->addWidget(lbl); toolLayout->addWidget(new Utils::StyledSeparator); @@ -576,6 +583,10 @@ void MiniProjectTargetSelector::updateAction() QString runConfig; QIcon targetIcon = style()->standardIcon(QStyle::SP_ComputerIcon); + const int extrawidth = 110; // Size of margins + icon width + // Some fudge numbers to ensure the menu doesnt grow unbounded + int maxLength = fontMetrics().averageCharWidth() * 140; + if (project) { projectName = project->displayName(); @@ -585,10 +596,14 @@ void MiniProjectTargetSelector::updateAction() } if (BuildConfiguration *bc = target->activeBuildConfiguration()) { buildConfig = bc->displayName(); + int minimumWidth = fontMetrics().width(bc->displayName() + tr("Build:")) + extrawidth; + m_widgetStack->setMinimumWidth(qMin(maxLength, qMax(minimumWidth, m_widgetStack->minimumWidth()))); } if (RunConfiguration *rc = target->activeRunConfiguration()) { runConfig = rc->displayName(); + int minimumWidth = fontMetrics().width(rc->displayName() + tr("Run:")) + extrawidth; + m_widgetStack->setMinimumWidth(qMin(maxLength, qMax(minimumWidth, m_widgetStack->minimumWidth()))); } targetToolTipText = target->toolTip(); targetIcon = createCenteredIcon(target->icon(), target->overlayIcon()); -- GitLab