Debugger: Refresh list of debuggers in kits options page on changes

Task-number: QTCREATORBUG-13991
Change-Id: I06ff6daea88e14b4193e4f1a71d768b528d80bf9
Reviewed-by: hjk <hjk@theqtcompany.com>
This commit is contained in:
Tobias Hunger
2015-03-06 15:13:21 +01:00
committed by hjk
parent 9c5a56a38b
commit a053724c28
6 changed files with 34 additions and 44 deletions

View File

@@ -69,14 +69,11 @@ namespace Internal {
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
DebuggerKitConfigWidget::DebuggerKitConfigWidget(Kit *workingCopy, const KitInformation *ki) DebuggerKitConfigWidget::DebuggerKitConfigWidget(Kit *workingCopy, const KitInformation *ki)
: KitConfigWidget(workingCopy, ki) : KitConfigWidget(workingCopy, ki),
m_ignoreChanges(false)
{ {
m_comboBox = new QComboBox; m_comboBox = new QComboBox;
m_comboBox->setEnabled(true); m_comboBox->setEnabled(true);
m_comboBox->setToolTip(toolTip());
m_comboBox->addItem(tr("None"), QString());
foreach (const DebuggerItem &item, DebuggerItemManager::debuggers())
m_comboBox->addItem(item.displayName(), item.id());
refresh(); refresh();
connect(m_comboBox, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), connect(m_comboBox, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
@@ -112,8 +109,16 @@ void DebuggerKitConfigWidget::makeReadOnly()
void DebuggerKitConfigWidget::refresh() void DebuggerKitConfigWidget::refresh()
{ {
m_ignoreChanges = true;
m_comboBox->clear();
m_comboBox->setToolTip(toolTip());
m_comboBox->addItem(tr("None"), QString());
foreach (const DebuggerItem &item, DebuggerItemManager::debuggers())
m_comboBox->addItem(item.displayName(), item.id());
const DebuggerItem *item = DebuggerKitInformation::debugger(m_kit); const DebuggerItem *item = DebuggerKitInformation::debugger(m_kit);
updateComboBox(item ? item->id() : QVariant()); updateComboBox(item ? item->id() : QVariant());
m_ignoreChanges = false;
} }
QWidget *DebuggerKitConfigWidget::buttonWidget() const QWidget *DebuggerKitConfigWidget::buttonWidget() const
@@ -134,6 +139,9 @@ void DebuggerKitConfigWidget::manageDebuggers()
void DebuggerKitConfigWidget::currentDebuggerChanged(int) void DebuggerKitConfigWidget::currentDebuggerChanged(int)
{ {
if (m_ignoreChanges)
return;
int currentIndex = m_comboBox->currentIndex(); int currentIndex = m_comboBox->currentIndex();
QVariant id = m_comboBox->itemData(currentIndex); QVariant id = m_comboBox->itemData(currentIndex);
m_kit->setValue(DebuggerKitInformation::id(), id); m_kit->setValue(DebuggerKitInformation::id(), id);

View File

@@ -79,6 +79,7 @@ private:
void updateComboBox(const QVariant &id); void updateComboBox(const QVariant &id);
bool m_isReadOnly; bool m_isReadOnly;
bool m_ignoreChanges;
QComboBox *m_comboBox; QComboBox *m_comboBox;
QPushButton *m_manageButton; QPushButton *m_manageButton;
}; };

View File

@@ -126,31 +126,19 @@ void SysRootInformationConfigWidget::pathWasChanged()
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
ToolChainInformationConfigWidget::ToolChainInformationConfigWidget(Kit *k, const KitInformation *ki) : ToolChainInformationConfigWidget::ToolChainInformationConfigWidget(Kit *k, const KitInformation *ki) :
KitConfigWidget(k, ki) KitConfigWidget(k, ki),
m_ignoreChanges(false)
{ {
m_comboBox = new QComboBox; m_comboBox = new QComboBox;
m_comboBox->setEnabled(false); m_comboBox->setEnabled(false);
m_comboBox->setToolTip(toolTip()); m_comboBox->setToolTip(toolTip());
foreach (ToolChain *tc, ToolChainManager::toolChains())
toolChainAdded(tc);
updateComboBox();
refresh(); refresh();
connect(m_comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(currentToolChainChanged(int))); connect(m_comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(currentToolChainChanged(int)));
m_manageButton = new QPushButton(KitConfigWidget::msgManage()); m_manageButton = new QPushButton(KitConfigWidget::msgManage());
m_manageButton->setContentsMargins(0, 0, 0, 0); m_manageButton->setContentsMargins(0, 0, 0, 0);
connect(m_manageButton, SIGNAL(clicked()), this, SLOT(manageToolChains())); connect(m_manageButton, SIGNAL(clicked()), this, SLOT(manageToolChains()));
QObject *tcm = ToolChainManager::instance();
connect(tcm, SIGNAL(toolChainAdded(ProjectExplorer::ToolChain*)),
this, SLOT(toolChainAdded(ProjectExplorer::ToolChain*)));
connect(tcm, SIGNAL(toolChainRemoved(ProjectExplorer::ToolChain*)),
this, SLOT(toolChainRemoved(ProjectExplorer::ToolChain*)));
connect(tcm, SIGNAL(toolChainUpdated(ProjectExplorer::ToolChain*)),
this, SLOT(toolChainUpdated(ProjectExplorer::ToolChain*)));
} }
ToolChainInformationConfigWidget::~ToolChainInformationConfigWidget() ToolChainInformationConfigWidget::~ToolChainInformationConfigWidget()
@@ -173,7 +161,13 @@ QString ToolChainInformationConfigWidget::toolTip() const
void ToolChainInformationConfigWidget::refresh() void ToolChainInformationConfigWidget::refresh()
{ {
m_ignoreChanges = true;
m_comboBox->clear();
foreach (ToolChain *tc, ToolChainManager::toolChains())
m_comboBox->addItem(tc->displayName(), tc->id());
m_comboBox->setCurrentIndex(indexOf(ToolChainKitInformation::toolChain(m_kit))); m_comboBox->setCurrentIndex(indexOf(ToolChainKitInformation::toolChain(m_kit)));
m_ignoreChanges = false;
} }
void ToolChainInformationConfigWidget::makeReadOnly() void ToolChainInformationConfigWidget::makeReadOnly()
@@ -191,28 +185,6 @@ QWidget *ToolChainInformationConfigWidget::buttonWidget() const
return m_manageButton; return m_manageButton;
} }
void ToolChainInformationConfigWidget::toolChainAdded(ToolChain *tc)
{
m_comboBox->addItem(tc->displayName(), tc->id());
updateComboBox();
}
void ToolChainInformationConfigWidget::toolChainRemoved(ToolChain *tc)
{
const int pos = indexOf(tc);
if (pos < 0)
return;
m_comboBox->removeItem(pos);
updateComboBox();
}
void ToolChainInformationConfigWidget::toolChainUpdated(ToolChain *tc)
{
const int pos = indexOf(tc);
if (pos < 0)
return;
m_comboBox->setItemText(pos, tc->displayName());
}
void ToolChainInformationConfigWidget::manageToolChains() void ToolChainInformationConfigWidget::manageToolChains()
{ {
ICore::showOptionsDialog(Constants::TOOLCHAIN_SETTINGS_PAGE_ID, buttonWidget()); ICore::showOptionsDialog(Constants::TOOLCHAIN_SETTINGS_PAGE_ID, buttonWidget());
@@ -220,6 +192,9 @@ void ToolChainInformationConfigWidget::manageToolChains()
void ToolChainInformationConfigWidget::currentToolChainChanged(int idx) void ToolChainInformationConfigWidget::currentToolChainChanged(int idx)
{ {
if (m_ignoreChanges)
return;
const QString id = m_comboBox->itemData(idx).toString(); const QString id = m_comboBox->itemData(idx).toString();
ToolChainKitInformation::setToolChain(m_kit, ToolChainManager::findToolChain(id)); ToolChainKitInformation::setToolChain(m_kit, ToolChainManager::findToolChain(id));
} }

View File

@@ -100,9 +100,6 @@ public:
QString toolTip() const; QString toolTip() const;
private slots: private slots:
void toolChainAdded(ProjectExplorer::ToolChain *tc);
void toolChainRemoved(ProjectExplorer::ToolChain *tc);
void toolChainUpdated(ProjectExplorer::ToolChain *tc);
void manageToolChains(); void manageToolChains();
void currentToolChainChanged(int idx); void currentToolChainChanged(int idx);
@@ -112,6 +109,7 @@ private:
QComboBox *m_comboBox; QComboBox *m_comboBox;
QPushButton *m_manageButton; QPushButton *m_manageButton;
bool m_ignoreChanges;
}; };
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------

View File

@@ -366,6 +366,13 @@ void KitManagerConfigWidget::kitWasUpdated(Kit *k)
updateVisibility(); updateVisibility();
} }
void KitManagerConfigWidget::showEvent(QShowEvent *event)
{
Q_UNUSED(event);
foreach (KitConfigWidget *widget, m_widgets)
widget->refresh();
}
QLabel *KitManagerConfigWidget::createLabel(const QString &name, const QString &toolTip) QLabel *KitManagerConfigWidget::createLabel(const QString &name, const QString &toolTip)
{ {
QLabel *label = new QLabel(name); QLabel *label = new QLabel(name);

View File

@@ -93,6 +93,7 @@ private:
ButtonColumn ButtonColumn
}; };
void showEvent(QShowEvent *event);
QLabel *createLabel(const QString &name, const QString &toolTip); QLabel *createLabel(const QString &name, const QString &toolTip);
void paintEvent(QPaintEvent *ev); void paintEvent(QPaintEvent *ev);