Debugger: Rewrite logic to use signals on DebuggerItemManager

Change-Id: I82e1cd3cca9cc2d79366e1af054640dadebf7871
Reviewed-by: hjk <hjk121@nokiamail.com>
This commit is contained in:
Tobias Hunger
2013-10-28 14:05:12 +01:00
committed by hjk
parent 5e1e8eaae0
commit b17e8e3061
7 changed files with 79 additions and 79 deletions

View File

@@ -101,7 +101,6 @@ static void readDebuggers(const FileName &fileName, bool isSystem)
} }
QList<DebuggerItem> DebuggerItemManager::m_debuggers; QList<DebuggerItem> DebuggerItemManager::m_debuggers;
Internal::DebuggerItemModel* DebuggerItemManager::m_model = 0;
PersistentSettingsWriter * DebuggerItemManager::m_writer = 0; PersistentSettingsWriter * DebuggerItemManager::m_writer = 0;
DebuggerItemManager::DebuggerItemManager(QObject *parent) DebuggerItemManager::DebuggerItemManager(QObject *parent)
@@ -109,7 +108,6 @@ DebuggerItemManager::DebuggerItemManager(QObject *parent)
{ {
m_instance = this; m_instance = this;
m_writer = new PersistentSettingsWriter(userSettingsFileName(), QLatin1String("QtCreatorDebugger")); m_writer = new PersistentSettingsWriter(userSettingsFileName(), QLatin1String("QtCreatorDebugger"));
m_model = new Debugger::Internal::DebuggerItemModel(this);
connect(Core::ICore::instance(), SIGNAL(saveSettingsRequested()), connect(Core::ICore::instance(), SIGNAL(saveSettingsRequested()),
this, SLOT(saveDebuggers())); this, SLOT(saveDebuggers()));
} }
@@ -131,11 +129,6 @@ QList<DebuggerItem> DebuggerItemManager::debuggers()
return m_debuggers; return m_debuggers;
} }
Internal::DebuggerItemModel *DebuggerItemManager::model()
{
return m_model;
}
void DebuggerItemManager::autoDetectCdbDebuggers() void DebuggerItemManager::autoDetectCdbDebuggers()
{ {
QList<FileName> cdbs; QList<FileName> cdbs;
@@ -344,39 +337,28 @@ void DebuggerItemManager::saveDebuggers()
QVariant DebuggerItemManager::registerDebugger(const DebuggerItem &item) QVariant DebuggerItemManager::registerDebugger(const DebuggerItem &item)
{ {
if (const DebuggerItem *orig = findById(item.id())) { QTC_ASSERT(!findById(item.id()), return item.id());
QVariant id = orig->id();
if (*orig == item)
return id;
removeDebugger(id);
addDebugger(item);
emit m_instance->debuggerUpdated(id);
return id;
}
QVariant id = addDebugger(item); return addDebugger(item);
emit m_instance->debuggerAdded(id);
return id;
} }
void DebuggerItemManager::deregisterDebugger(const DebuggerItem &item) void DebuggerItemManager::deregisterDebugger(const DebuggerItem &item)
{ {
if (findById(item.id())) { QTC_ASSERT(!item.command().isEmpty(), return);
emit m_instance->aboutToRemoveDebugger(item.id()); QTC_ASSERT(!item.displayName().isEmpty(), return);
QTC_ASSERT(item.engineType() != NoEngineType, return);
if (findById(item.id()))
removeDebugger(item.id()); removeDebugger(item.id());
emit m_instance->removeDebugger(item.id());
}
} }
QVariant DebuggerItemManager::addDebugger(const DebuggerItem &item) QVariant DebuggerItemManager::addDebugger(const DebuggerItem &item)
{ {
QTC_ASSERT(!item.command().isEmpty(), return QVariant());
QTC_ASSERT(!item.displayName().isEmpty(), return QVariant());
QTC_ASSERT(item.engineType() != NoEngineType, return QVariant());
QTC_ASSERT(item.id().isValid(), return QVariant()); QTC_ASSERT(item.id().isValid(), return QVariant());
m_debuggers.append(item); m_debuggers.append(item);
m_model->addDebugger(item); QVariant id = item.id();
return item.id(); emit m_instance->debuggerAdded(id);
return id;
} }
void DebuggerItemManager::removeDebugger(const QVariant &id) void DebuggerItemManager::removeDebugger(const QVariant &id)
@@ -384,14 +366,15 @@ void DebuggerItemManager::removeDebugger(const QVariant &id)
bool ok = false; bool ok = false;
for (int i = 0, n = m_debuggers.size(); i != n; ++i) { for (int i = 0, n = m_debuggers.size(); i != n; ++i) {
if (m_debuggers.at(i).id() == id) { if (m_debuggers.at(i).id() == id) {
emit m_instance->aboutToRemoveDebugger(id);
m_debuggers.removeAt(i); m_debuggers.removeAt(i);
emit m_instance->debuggerRemoved(id);
ok = true; ok = true;
break; break;
} }
} }
QTC_ASSERT(ok, return); QTC_ASSERT(ok, return);
m_model->removeDebugger(id);
} }
QString DebuggerItemManager::uniqueDisplayName(const QString &base) QString DebuggerItemManager::uniqueDisplayName(const QString &base)
@@ -411,7 +394,7 @@ void DebuggerItemManager::setItemData(const QVariant &id, const QString &display
item.setDisplayName(displayName); item.setDisplayName(displayName);
item.setCommand(fileName); item.setCommand(fileName);
item.reinitializeFromFile(); item.reinitializeFromFile();
emit m_model->updateDebugger(item.id()); emit m_instance->debuggerUpdated(id);
break; break;
} }
} }

View File

@@ -55,17 +55,16 @@ public:
~DebuggerItemManager(); ~DebuggerItemManager();
static QList<DebuggerItem> debuggers(); static QList<DebuggerItem> debuggers();
static Debugger::Internal::DebuggerItemModel *model();
static QVariant registerDebugger(const DebuggerItem &item); static QVariant registerDebugger(const DebuggerItem &item);
static void deregisterDebugger(const DebuggerItem &item); static void deregisterDebugger(const DebuggerItem &item);
static void setItemData(const QVariant &id, const QString& displayName, const Utils::FileName &fileName);
static const DebuggerItem *findByCommand(const Utils::FileName &command); static const DebuggerItem *findByCommand(const Utils::FileName &command);
static const DebuggerItem *findById(const QVariant &id); static const DebuggerItem *findById(const QVariant &id);
static void restoreDebuggers(); static void restoreDebuggers();
static QString uniqueDisplayName(const QString &base); static QString uniqueDisplayName(const QString &base);
static void setItemData(const QVariant &id, const QString& displayName, const Utils::FileName &fileName);
static void removeDebugger(const QVariant &id); static void removeDebugger(const QVariant &id);
static QVariant addDebugger(const DebuggerItem &item); static QVariant addDebugger(const DebuggerItem &item);
@@ -87,7 +86,6 @@ private:
static Utils::PersistentSettingsWriter *m_writer; static Utils::PersistentSettingsWriter *m_writer;
static QList<DebuggerItem> m_debuggers; static QList<DebuggerItem> m_debuggers;
static Debugger::Internal::DebuggerItemModel *m_model;
friend class Internal::DebuggerItemModel; friend class Internal::DebuggerItemModel;
friend class DebuggerPlugin; // Enable constrcutor for DebuggerPlugin friend class DebuggerPlugin; // Enable constrcutor for DebuggerPlugin

View File

@@ -84,6 +84,17 @@ DebuggerItemModel::DebuggerItemModel(QObject *parent)
row = createRow(tr("Manual")); row = createRow(tr("Manual"));
m_manualRoot = row.at(0); m_manualRoot = row.at(0);
appendRow(row); appendRow(row);
foreach (const DebuggerItem &item, DebuggerItemManager::debuggers())
addDebugger(item);
QObject *manager = DebuggerItemManager::instance();
connect(manager, SIGNAL(debuggerAdded(QVariant)),
this, SLOT(onDebuggerAdded(QVariant)));
connect(manager, SIGNAL(debuggerUpdated(QVariant)),
this, SLOT(onDebuggerUpdate(QVariant)));
connect(manager, SIGNAL(debuggerRemoved(QVariant)),
this, SLOT(onDebuggerRemoval(QVariant)));
} }
QVariant DebuggerItemModel::headerData(int section, Qt::Orientation orientation, int role) const QVariant DebuggerItemModel::headerData(int section, Qt::Orientation orientation, int role) const
@@ -143,12 +154,28 @@ void DebuggerItemModel::markCurrentDirty()
sitem->setFont(font); sitem->setFont(font);
} }
void DebuggerItemModel::onDebuggerAdded(const QVariant &id)
{
const DebuggerItem *item = DebuggerItemManager::findById(id);
QTC_ASSERT(item, return);
addDebugger(*item);
}
void DebuggerItemModel::onDebuggerUpdate(const QVariant &id)
{
updateDebugger(id);
}
void DebuggerItemModel::onDebuggerRemoval(const QVariant &id)
{
removeDebugger(id);
}
void DebuggerItemModel::addDebugger(const DebuggerItem &item) void DebuggerItemModel::addDebugger(const DebuggerItem &item)
{ {
QTC_ASSERT(item.id().isValid(), return); QTC_ASSERT(item.id().isValid(), return);
QList<QStandardItem *> row = describeItem(item); QList<QStandardItem *> row = describeItem(item);
(item.isAutoDetected() ? m_autoRoot : m_manualRoot)->appendRow(row); (item.isAutoDetected() ? m_autoRoot : m_manualRoot)->appendRow(row);
emit debuggerAdded(item.id(), item.displayName());
} }
void DebuggerItemModel::removeDebugger(const QVariant &id) void DebuggerItemModel::removeDebugger(const QVariant &id)
@@ -160,7 +187,6 @@ void DebuggerItemModel::removeDebugger(const QVariant &id)
// This will trigger a change of m_currentDebugger via changing the // This will trigger a change of m_currentDebugger via changing the
// view selection. // view selection.
parent->removeRow(sitem->row()); parent->removeRow(sitem->row());
emit debuggerRemoved(id);
} }
void DebuggerItemModel::updateDebugger(const QVariant &id) void DebuggerItemModel::updateDebugger(const QVariant &id)
@@ -182,7 +208,6 @@ void DebuggerItemModel::updateDebugger(const QVariant &id)
parent->child(row, 1)->setFont(font); parent->child(row, 1)->setFont(font);
parent->child(row, 2)->setData(item.engineTypeName(), Qt::DisplayRole); parent->child(row, 2)->setData(item.engineTypeName(), Qt::DisplayRole);
parent->child(row, 2)->setFont(font); parent->child(row, 2)->setFont(font);
emit debuggerUpdated(id, item.displayName());
return; return;
} }
} }

View File

@@ -47,7 +47,7 @@ class DebuggerItemModel : public QStandardItemModel
Q_OBJECT Q_OBJECT
public: public:
DebuggerItemModel(QObject *parent); DebuggerItemModel(QObject *parent = 0);
QModelIndex currentIndex() const; QModelIndex currentIndex() const;
QModelIndex lastIndex() const; QModelIndex lastIndex() const;
@@ -60,19 +60,12 @@ public:
public slots: public slots:
void markCurrentDirty(); void markCurrentDirty();
signals: private slots:
void debuggerAdded(const QVariant &id, const QString &display); void onDebuggerAdded(const QVariant &id);
void debuggerUpdated(const QVariant &id, const QString &display); void onDebuggerUpdate(const QVariant &id);
void debuggerRemoved(const QVariant &id); void onDebuggerRemoval(const QVariant &id);
private: private:
// <debug>
// friend class Debugger::DebuggerKitInformation;
// friend class DebuggerKitConfigWidget;
// friend class DebuggerItemConfigWidget;
// friend class DebuggerOptionsPage;
// </debug>
QStandardItem *currentStandardItem() const; QStandardItem *currentStandardItem() const;
QStandardItem *findStandardItemById(const QVariant &id) const; QStandardItem *findStandardItemById(const QVariant &id) const;
QVariant headerData(int section, Qt::Orientation orientation, int role) const; QVariant headerData(int section, Qt::Orientation orientation, int role) const;

View File

@@ -31,6 +31,7 @@
#include "debuggeritemmanager.h" #include "debuggeritemmanager.h"
#include "debuggeritemmodel.h" #include "debuggeritemmodel.h"
#include "debuggerkitinformation.h"
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
@@ -78,9 +79,6 @@ class DebuggerItemConfigWidget;
DebuggerKitConfigWidget::DebuggerKitConfigWidget(Kit *workingCopy, const KitInformation *ki) DebuggerKitConfigWidget::DebuggerKitConfigWidget(Kit *workingCopy, const KitInformation *ki)
: KitConfigWidget(workingCopy, ki) : KitConfigWidget(workingCopy, ki)
{ {
DebuggerItemModel *model = DebuggerItemManager::model();
QTC_CHECK(model);
m_comboBox = new QComboBox; m_comboBox = new QComboBox;
m_comboBox->setEnabled(true); m_comboBox->setEnabled(true);
m_comboBox->setToolTip(toolTip()); m_comboBox->setToolTip(toolTip());
@@ -95,11 +93,12 @@ DebuggerKitConfigWidget::DebuggerKitConfigWidget(Kit *workingCopy, const KitInfo
m_manageButton->setContentsMargins(0, 0, 0, 0); m_manageButton->setContentsMargins(0, 0, 0, 0);
connect(m_manageButton, SIGNAL(clicked()), this, SLOT(manageDebuggers())); connect(m_manageButton, SIGNAL(clicked()), this, SLOT(manageDebuggers()));
connect(model, SIGNAL(debuggerAdded(QVariant,QString)), QObject *manager = DebuggerItemManager::instance();
this, SLOT(onDebuggerAdded(QVariant,QString))); connect(manager, SIGNAL(debuggerAdded(QVariant)),
connect(model, SIGNAL(debuggerUpdated(QVariant,QString)), this, SLOT(onDebuggerAdded(QVariant)));
this, SLOT(onDebuggerUpdated(QVariant,QString))); connect(manager, SIGNAL(debuggerUpdated(QVariant)),
connect(model, SIGNAL(debuggerRemoved(QVariant)), this, SLOT(onDebuggerUpdated(QVariant)));
connect(manager, SIGNAL(debuggerRemoved(QVariant)),
this, SLOT(onDebuggerRemoved(QVariant))); this, SLOT(onDebuggerRemoved(QVariant)));
} }
@@ -154,20 +153,22 @@ void DebuggerKitConfigWidget::currentDebuggerChanged(int)
m_kit->setValue(DebuggerKitInformation::id(), id); m_kit->setValue(DebuggerKitInformation::id(), id);
} }
void DebuggerKitConfigWidget::onDebuggerAdded(const QVariant &id, const QString &displayName) void DebuggerKitConfigWidget::onDebuggerAdded(const QVariant &id)
{ {
m_comboBox->setEnabled(true); const DebuggerItem *item = DebuggerItemManager::findById(id);
m_comboBox->addItem(displayName, id); QTC_ASSERT(item, return);
m_comboBox->addItem(item->displayName(), id);
updateComboBox(id); updateComboBox(id);
} }
void DebuggerKitConfigWidget::onDebuggerUpdated(const QVariant &id, const QString &displayName) void DebuggerKitConfigWidget::onDebuggerUpdated(const QVariant &id)
{ {
m_comboBox->setEnabled(true); const DebuggerItem *item = DebuggerItemManager::findById(id);
QTC_ASSERT(item, return);
const int pos = indexOf(id); const int pos = indexOf(id);
if (pos < 0) if (pos < 0)
return; return;
m_comboBox->setItemText(pos, displayName); m_comboBox->setItemText(pos, item->displayName());
} }
void DebuggerKitConfigWidget::onDebuggerRemoved(const QVariant &id) void DebuggerKitConfigWidget::onDebuggerRemoved(const QVariant &id)

View File

@@ -30,7 +30,7 @@
#ifndef DEBUGGER_DEBUGGERKITCONFIGWIDGET_H #ifndef DEBUGGER_DEBUGGERKITCONFIGWIDGET_H
#define DEBUGGER_DEBUGGERKITCONFIGWIDGET_H #define DEBUGGER_DEBUGGERKITCONFIGWIDGET_H
#include "debuggerkitinformation.h" #include "debuggeritemmodel.h"
#include <coreplugin/dialogs/ioptionspage.h> #include <coreplugin/dialogs/ioptionspage.h>
#include <projectexplorer/kitconfigwidget.h> #include <projectexplorer/kitconfigwidget.h>
@@ -75,8 +75,8 @@ public:
private slots: private slots:
void manageDebuggers(); void manageDebuggers();
void currentDebuggerChanged(int idx); void currentDebuggerChanged(int idx);
void onDebuggerAdded(const QVariant &id, const QString &displayName); void onDebuggerAdded(const QVariant &id);
void onDebuggerUpdated(const QVariant &id, const QString &displayName); void onDebuggerUpdated(const QVariant &id);
void onDebuggerRemoved(const QVariant &id); void onDebuggerRemoved(const QVariant &id);
private: private:

View File

@@ -63,7 +63,7 @@ class DebuggerItemConfigWidget : public QWidget
Q_DECLARE_TR_FUNCTIONS(Debugger::Internal::DebuggerItemConfigWidget) Q_DECLARE_TR_FUNCTIONS(Debugger::Internal::DebuggerItemConfigWidget)
public: public:
explicit DebuggerItemConfigWidget(); explicit DebuggerItemConfigWidget(DebuggerItemModel *model);
void loadItem(); void loadItem();
void saveItem(); void saveItem();
void connectDirty(); void connectDirty();
@@ -74,10 +74,14 @@ private:
QLabel *m_cdbLabel; QLabel *m_cdbLabel;
PathChooser *m_binaryChooser; PathChooser *m_binaryChooser;
QLineEdit *m_abis; QLineEdit *m_abis;
DebuggerItemModel *m_model;
}; };
DebuggerItemConfigWidget::DebuggerItemConfigWidget() DebuggerItemConfigWidget::DebuggerItemConfigWidget(DebuggerItemModel *model) :
m_model(model)
{ {
QTC_CHECK(model);
m_displayNameLineEdit = new QLineEdit(this); m_displayNameLineEdit = new QLineEdit(this);
m_binaryChooser = new PathChooser(this); m_binaryChooser = new PathChooser(this);
@@ -104,26 +108,23 @@ DebuggerItemConfigWidget::DebuggerItemConfigWidget()
void DebuggerItemConfigWidget::connectDirty() void DebuggerItemConfigWidget::connectDirty()
{ {
DebuggerItemModel *model = DebuggerItemManager::model();
connect(m_displayNameLineEdit, SIGNAL(textChanged(QString)), connect(m_displayNameLineEdit, SIGNAL(textChanged(QString)),
model, SLOT(markCurrentDirty())); m_model, SLOT(markCurrentDirty()));
connect(m_binaryChooser, SIGNAL(changed(QString)), connect(m_binaryChooser, SIGNAL(changed(QString)),
model, SLOT(markCurrentDirty())); m_model, SLOT(markCurrentDirty()));
} }
void DebuggerItemConfigWidget::disconnectDirty() void DebuggerItemConfigWidget::disconnectDirty()
{ {
DebuggerItemModel *model = DebuggerItemManager::model();
disconnect(m_displayNameLineEdit, SIGNAL(textChanged(QString)), disconnect(m_displayNameLineEdit, SIGNAL(textChanged(QString)),
model, SLOT(markCurrentDirty())); m_model, SLOT(markCurrentDirty()));
disconnect(m_binaryChooser, SIGNAL(changed(QString)), disconnect(m_binaryChooser, SIGNAL(changed(QString)),
model, SLOT(markCurrentDirty())); m_model, SLOT(markCurrentDirty()));
} }
void DebuggerItemConfigWidget::loadItem() void DebuggerItemConfigWidget::loadItem()
{ {
DebuggerItemModel *model = DebuggerItemManager::model(); const DebuggerItem *item = DebuggerItemManager::findById(m_model->currentDebugger());
const DebuggerItem *item = DebuggerItemManager::findById(model->currentDebugger());
if (!item) if (!item)
return; return;
@@ -163,8 +164,7 @@ void DebuggerItemConfigWidget::loadItem()
void DebuggerItemConfigWidget::saveItem() void DebuggerItemConfigWidget::saveItem()
{ {
DebuggerItemModel *model = DebuggerItemManager::model(); const DebuggerItem *item = DebuggerItemManager::findById(m_model->currentDebugger());
const DebuggerItem *item = DebuggerItemManager::findById(model->currentDebugger());
QTC_ASSERT(item, return); QTC_ASSERT(item, return);
DebuggerItemManager::setItemData(item->id(), m_displayNameLineEdit->text(), DebuggerItemManager::setItemData(item->id(), m_displayNameLineEdit->text(),
m_binaryChooser->fileName()); m_binaryChooser->fileName());
@@ -203,7 +203,7 @@ QWidget *DebuggerOptionsPage::createPage(QWidget *parent)
m_container->setState(DetailsWidget::NoSummary); m_container->setState(DetailsWidget::NoSummary);
m_container->setVisible(false); m_container->setVisible(false);
m_model = DebuggerItemManager::model(); m_model = new DebuggerItemModel(parent);
m_debuggerView = new QTreeView(m_configWidget); m_debuggerView = new QTreeView(m_configWidget);
m_debuggerView->setModel(m_model); m_debuggerView->setModel(m_model);
@@ -243,7 +243,7 @@ QWidget *DebuggerOptionsPage::createPage(QWidget *parent)
m_searchKeywords = tr("Debuggers"); m_searchKeywords = tr("Debuggers");
m_itemConfigWidget = new DebuggerItemConfigWidget; m_itemConfigWidget = new DebuggerItemConfigWidget(m_model);
m_container->setWidget(m_itemConfigWidget); m_container->setWidget(m_itemConfigWidget);
updateState(); updateState();