forked from qt-creator/qt-creator
ProjectExplorer: More KitOptionsPage simplification
Change-Id: I07244e510e44a3ee2af5e771450ab6413a5a5c2d Reviewed-by: Christian Stenger <christian.stenger@theqtcompany.com> Reviewed-by: Tobias Hunger <tobias.hunger@theqtcompany.com>
This commit is contained in:
@@ -124,22 +124,28 @@ KitModel::KitModel(QBoxLayout *parentLayout, QObject *parent) :
|
|||||||
|
|
||||||
changeDefaultKit();
|
changeDefaultKit();
|
||||||
|
|
||||||
connect(KitManager::instance(), SIGNAL(kitAdded(ProjectExplorer::Kit*)),
|
connect(KitManager::instance(), &KitManager::kitAdded,
|
||||||
this, SLOT(addKit(ProjectExplorer::Kit*)));
|
this, &KitModel::addKit);
|
||||||
connect(KitManager::instance(), SIGNAL(kitUpdated(ProjectExplorer::Kit*)),
|
connect(KitManager::instance(), &KitManager::kitUpdated,
|
||||||
this, SLOT(updateKit(ProjectExplorer::Kit*)));
|
this, &KitModel::updateKit);
|
||||||
connect(KitManager::instance(), SIGNAL(unmanagedKitUpdated(ProjectExplorer::Kit*)),
|
connect(KitManager::instance(), &KitManager::unmanagedKitUpdated,
|
||||||
this, SLOT(updateKit(ProjectExplorer::Kit*)));
|
this, &KitModel::updateKit);
|
||||||
connect(KitManager::instance(), SIGNAL(kitRemoved(ProjectExplorer::Kit*)),
|
connect(KitManager::instance(), &KitManager::kitRemoved,
|
||||||
this, SLOT(removeKit(ProjectExplorer::Kit*)));
|
this, &KitModel::removeKit);
|
||||||
connect(KitManager::instance(), SIGNAL(defaultkitChanged()),
|
connect(KitManager::instance(), &KitManager::defaultkitChanged,
|
||||||
this, SLOT(changeDefaultKit()));
|
this, &KitModel::changeDefaultKit);
|
||||||
}
|
}
|
||||||
|
|
||||||
Kit *KitModel::kit(const QModelIndex &index)
|
Kit *KitModel::kit(const QModelIndex &index)
|
||||||
|
{
|
||||||
|
KitNode *n = kitNode(index);
|
||||||
|
return n ? n->widget->workingCopy() : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
KitNode *KitModel::kitNode(const QModelIndex &index)
|
||||||
{
|
{
|
||||||
TreeItem *n = itemFromIndex(index);
|
TreeItem *n = itemFromIndex(index);
|
||||||
return n && n->level() == 2 ? static_cast<KitNode *>(n)->widget->workingCopy() : 0;
|
return n && n->level() == 2 ? static_cast<KitNode *>(n) : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
QModelIndex KitModel::indexOf(Kit *k) const
|
QModelIndex KitModel::indexOf(Kit *k) const
|
||||||
@@ -150,83 +156,53 @@ QModelIndex KitModel::indexOf(Kit *k) const
|
|||||||
|
|
||||||
void KitModel::setDefaultKit(const QModelIndex &index)
|
void KitModel::setDefaultKit(const QModelIndex &index)
|
||||||
{
|
{
|
||||||
TreeItem *n = itemFromIndex(index);
|
if (KitNode *n = kitNode(index))
|
||||||
if (n && n->level() == 2)
|
setDefaultNode(n);
|
||||||
setDefaultNode(static_cast<KitNode *>(n));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KitModel::isDefaultKit(const QModelIndex &index)
|
bool KitModel::isDefaultKit(Kit *k) const
|
||||||
{
|
{
|
||||||
TreeItem *n = itemFromIndex(index);
|
return m_defaultNode && m_defaultNode->widget->workingCopy() == k;
|
||||||
return n && n->level() == 2 && n == m_defaultNode;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
KitManagerConfigWidget *KitModel::widget(const QModelIndex &index)
|
KitManagerConfigWidget *KitModel::widget(const QModelIndex &index)
|
||||||
{
|
{
|
||||||
if (!index.isValid())
|
KitNode *n = kitNode(index);
|
||||||
return 0;
|
return n ? n->widget : 0;
|
||||||
KitNode *node = static_cast<KitNode *>(index.internalPointer());
|
|
||||||
if (node == m_autoRoot || node == m_manualRoot)
|
|
||||||
return 0;
|
|
||||||
return node->widget;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool KitModel::isDirty() const
|
|
||||||
{
|
|
||||||
return Utils::anyOf(m_manualRoot->children(), [](TreeItem *n) {
|
|
||||||
return static_cast<KitNode *>(n)->widget->isDirty();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
bool KitModel::isDirty(Kit *k) const
|
|
||||||
{
|
|
||||||
KitNode *n = findWorkingCopy(k);
|
|
||||||
return n ? n->widget->isDirty() : false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void KitModel::validateKitNames()
|
void KitModel::validateKitNames()
|
||||||
{
|
{
|
||||||
QHash<QString, int> nameHash;
|
QHash<QString, int> nameHash;
|
||||||
foreach (TreeItem *group, rootItem()->children()) {
|
foreach (KitNode *n, treeLevelItems<KitNode *>(2)) {
|
||||||
foreach (TreeItem *item, group->children()) {
|
|
||||||
KitNode *n = static_cast<KitNode *>(item);
|
|
||||||
const QString displayName = n->widget->displayName();
|
const QString displayName = n->widget->displayName();
|
||||||
if (nameHash.contains(displayName))
|
if (nameHash.contains(displayName))
|
||||||
++nameHash[displayName];
|
++nameHash[displayName];
|
||||||
else
|
else
|
||||||
nameHash.insert(displayName, 1);
|
nameHash.insert(displayName, 1);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
foreach (TreeItem *group, rootItem()->children()) {
|
foreach (KitNode *n, treeLevelItems<KitNode *>(2)) {
|
||||||
foreach (TreeItem *item, group->children()) {
|
|
||||||
KitNode *n = static_cast<KitNode *>(item);
|
|
||||||
const QString displayName = n->widget->displayName();
|
const QString displayName = n->widget->displayName();
|
||||||
n->widget->setHasUniqueName(nameHash.value(displayName) == 1);
|
n->widget->setHasUniqueName(nameHash.value(displayName) == 1);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void KitModel::apply()
|
void KitModel::apply()
|
||||||
{
|
{
|
||||||
// Remove unused kits:
|
// Remove unused kits:
|
||||||
QList<KitNode *> nodes = m_toRemoveList;
|
foreach (KitNode *n, m_toRemoveList)
|
||||||
foreach (KitNode *n, nodes)
|
|
||||||
n->widget->removeKit();
|
n->widget->removeKit();
|
||||||
|
|
||||||
// Update kits:
|
// Update kits:
|
||||||
foreach (TreeItem *group, rootItem()->children()) {
|
foreach (KitNode *n, treeLevelItems<KitNode *>(2)) {
|
||||||
//QList<TreeItems *> nodes = rootItem()->children(); // These can be dirty due to being made default!
|
|
||||||
//nodes.append(m_manualRoot->children());
|
|
||||||
foreach (TreeItem *item, group->children()) {
|
|
||||||
KitNode *n = static_cast<KitNode *>(item);
|
|
||||||
Q_ASSERT(n->widget);
|
|
||||||
if (n->widget->isDirty()) {
|
if (n->widget->isDirty()) {
|
||||||
n->widget->apply();
|
n->widget->apply();
|
||||||
updateItem(item);
|
updateItem(n);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
layoutChanged(); // Force update.
|
||||||
}
|
}
|
||||||
|
|
||||||
void KitModel::markForRemoval(Kit *k)
|
void KitModel::markForRemoval(Kit *k)
|
||||||
@@ -274,13 +250,10 @@ Kit *KitModel::markForAddition(Kit *baseKit)
|
|||||||
|
|
||||||
KitNode *KitModel::findWorkingCopy(Kit *k) const
|
KitNode *KitModel::findWorkingCopy(Kit *k) const
|
||||||
{
|
{
|
||||||
foreach (TreeItem *group, rootItem()->children()) {
|
foreach (KitNode *n, treeLevelItems<KitNode *>(2)) {
|
||||||
foreach (TreeItem *item, group->children()) {
|
|
||||||
KitNode *n = static_cast<KitNode *>(item);
|
|
||||||
if (n->widget->workingCopy() == k)
|
if (n->widget->workingCopy() == k)
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -340,15 +313,12 @@ void KitModel::removeKit(Kit *k)
|
|||||||
}
|
}
|
||||||
|
|
||||||
KitNode *node = 0;
|
KitNode *node = 0;
|
||||||
foreach (TreeItem *group, rootItem()->children()) {
|
foreach (KitNode *n, treeLevelItems<KitNode *>(2)) {
|
||||||
foreach (TreeItem *item, group->children()) {
|
|
||||||
KitNode *n = static_cast<KitNode *>(item);
|
|
||||||
if (n->widget->configures(k)) {
|
if (n->widget->configures(k)) {
|
||||||
node = n;
|
node = n;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (m_defaultNode == node)
|
if (m_defaultNode == node)
|
||||||
m_defaultNode = 0;
|
m_defaultNode = 0;
|
||||||
@@ -362,15 +332,12 @@ void KitModel::removeKit(Kit *k)
|
|||||||
void KitModel::changeDefaultKit()
|
void KitModel::changeDefaultKit()
|
||||||
{
|
{
|
||||||
Kit *defaultKit = KitManager::defaultKit();
|
Kit *defaultKit = KitManager::defaultKit();
|
||||||
foreach (TreeItem *group, rootItem()->children()) {
|
foreach (KitNode *n, treeLevelItems<KitNode *>(2)) {
|
||||||
foreach (TreeItem *item, group->children()) {
|
|
||||||
KitNode *n = static_cast<KitNode *>(item);
|
|
||||||
if (n->widget->configures(defaultKit)) {
|
if (n->widget->configures(defaultKit)) {
|
||||||
setDefaultNode(n);
|
setDefaultNode(n);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
|
@@ -46,8 +46,8 @@ class KitFactory;
|
|||||||
class KitManager;
|
class KitManager;
|
||||||
|
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
class KitManagerConfigWidget;
|
|
||||||
|
|
||||||
|
class KitManagerConfigWidget;
|
||||||
class KitNode;
|
class KitNode;
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
@@ -62,16 +62,14 @@ public:
|
|||||||
explicit KitModel(QBoxLayout *parentLayout, QObject *parent = 0);
|
explicit KitModel(QBoxLayout *parentLayout, QObject *parent = 0);
|
||||||
|
|
||||||
Kit *kit(const QModelIndex &);
|
Kit *kit(const QModelIndex &);
|
||||||
|
KitNode *kitNode(const QModelIndex &);
|
||||||
QModelIndex indexOf(Kit *k) const;
|
QModelIndex indexOf(Kit *k) const;
|
||||||
|
|
||||||
void setDefaultKit(const QModelIndex &index);
|
void setDefaultKit(const QModelIndex &index);
|
||||||
bool isDefaultKit(const QModelIndex &index);
|
bool isDefaultKit(Kit *k) const;
|
||||||
|
|
||||||
ProjectExplorer::Internal::KitManagerConfigWidget *widget(const QModelIndex &);
|
ProjectExplorer::Internal::KitManagerConfigWidget *widget(const QModelIndex &);
|
||||||
|
|
||||||
bool isDirty() const;
|
|
||||||
bool isDirty(Kit *k) const;
|
|
||||||
|
|
||||||
void apply();
|
void apply();
|
||||||
|
|
||||||
void markForRemoval(Kit *k);
|
void markForRemoval(Kit *k);
|
||||||
@@ -80,15 +78,13 @@ public:
|
|||||||
signals:
|
signals:
|
||||||
void kitStateChanged();
|
void kitStateChanged();
|
||||||
|
|
||||||
private slots:
|
private:
|
||||||
void addKit(ProjectExplorer::Kit *k);
|
void addKit(ProjectExplorer::Kit *k);
|
||||||
void updateKit(ProjectExplorer::Kit *k);
|
void updateKit(ProjectExplorer::Kit *k);
|
||||||
void removeKit(ProjectExplorer::Kit *k);
|
void removeKit(ProjectExplorer::Kit *k);
|
||||||
void changeDefaultKit();
|
void changeDefaultKit();
|
||||||
void validateKitNames();
|
void validateKitNames();
|
||||||
|
|
||||||
private:
|
|
||||||
QModelIndex index(KitNode *, int column = 0) const;
|
|
||||||
KitNode *findWorkingCopy(Kit *k) const;
|
KitNode *findWorkingCopy(Kit *k) const;
|
||||||
KitNode *createNode(Kit *k);
|
KitNode *createNode(Kit *k);
|
||||||
void setDefaultNode(KitNode *node);
|
void setDefaultNode(KitNode *node);
|
||||||
|
@@ -93,7 +93,7 @@ QWidget *KitOptionsPage::widget()
|
|||||||
verticalLayout->addLayout(horizontalLayout);
|
verticalLayout->addLayout(horizontalLayout);
|
||||||
|
|
||||||
m_model = new Internal::KitModel(verticalLayout);
|
m_model = new Internal::KitModel(verticalLayout);
|
||||||
connect(m_model, SIGNAL(kitStateChanged()), this, SLOT(updateState()));
|
connect(m_model, &Internal::KitModel::kitStateChanged, this, &KitOptionsPage::updateState);
|
||||||
verticalLayout->setStretch(0, 1);
|
verticalLayout->setStretch(0, 1);
|
||||||
verticalLayout->setStretch(1, 0);
|
verticalLayout->setStretch(1, 0);
|
||||||
|
|
||||||
@@ -102,20 +102,20 @@ QWidget *KitOptionsPage::widget()
|
|||||||
m_kitsView->expandAll();
|
m_kitsView->expandAll();
|
||||||
|
|
||||||
m_selectionModel = m_kitsView->selectionModel();
|
m_selectionModel = m_kitsView->selectionModel();
|
||||||
connect(m_selectionModel, SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
|
connect(m_selectionModel, &QItemSelectionModel::selectionChanged,
|
||||||
this, SLOT(kitSelectionChanged()));
|
this, &KitOptionsPage::kitSelectionChanged);
|
||||||
connect(KitManager::instance(), SIGNAL(kitAdded(ProjectExplorer::Kit*)),
|
connect(KitManager::instance(), &KitManager::kitAdded,
|
||||||
this, SLOT(kitSelectionChanged()));
|
this, &KitOptionsPage::kitSelectionChanged);
|
||||||
connect(KitManager::instance(), SIGNAL(kitRemoved(ProjectExplorer::Kit*)),
|
connect(KitManager::instance(), &KitManager::kitRemoved,
|
||||||
this, SLOT(kitSelectionChanged()));
|
this, &KitOptionsPage::kitSelectionChanged);
|
||||||
connect(KitManager::instance(), SIGNAL(kitUpdated(ProjectExplorer::Kit*)),
|
connect(KitManager::instance(), &KitManager::kitUpdated,
|
||||||
this, SLOT(kitSelectionChanged()));
|
this, &KitOptionsPage::kitSelectionChanged);
|
||||||
|
|
||||||
// Set up add menu:
|
// Set up add menu:
|
||||||
connect(m_addButton, SIGNAL(clicked()), this, SLOT(addNewKit()));
|
connect(m_addButton, &QAbstractButton::clicked, this, &KitOptionsPage::addNewKit);
|
||||||
connect(m_cloneButton, SIGNAL(clicked()), this, SLOT(cloneKit()));
|
connect(m_cloneButton, &QAbstractButton::clicked, this, &KitOptionsPage::cloneKit);
|
||||||
connect(m_delButton, SIGNAL(clicked()), this, SLOT(removeKit()));
|
connect(m_delButton, &QAbstractButton::clicked, this, &KitOptionsPage::removeKit);
|
||||||
connect(m_makeDefaultButton, SIGNAL(clicked()), this, SLOT(makeDefaultKit()));
|
connect(m_makeDefaultButton, &QAbstractButton::clicked, this, &KitOptionsPage::makeDefaultKit);
|
||||||
|
|
||||||
updateState();
|
updateState();
|
||||||
|
|
||||||
@@ -148,7 +148,7 @@ void KitOptionsPage::finish()
|
|||||||
delete m_configWidget;
|
delete m_configWidget;
|
||||||
m_selectionModel = 0; // child of m_configWidget
|
m_selectionModel = 0; // child of m_configWidget
|
||||||
m_kitsView = 0; // child of m_configWidget
|
m_kitsView = 0; // child of m_configWidget
|
||||||
m_currentWidget = 0; // deleted by the model
|
m_currentWidget = 0; // not owned
|
||||||
m_toShow = 0;
|
m_toShow = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -160,7 +160,7 @@ void KitOptionsPage::showKit(Kit *k)
|
|||||||
void KitOptionsPage::kitSelectionChanged()
|
void KitOptionsPage::kitSelectionChanged()
|
||||||
{
|
{
|
||||||
QModelIndex current = currentIndex();
|
QModelIndex current = currentIndex();
|
||||||
QWidget *newWidget = current.isValid() ? m_model->widget(current) : 0;
|
QWidget *newWidget = m_model->widget(current);
|
||||||
if (newWidget == m_currentWidget)
|
if (newWidget == m_currentWidget)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -187,9 +187,14 @@ void KitOptionsPage::addNewKit()
|
|||||||
| QItemSelectionModel::Rows);
|
| QItemSelectionModel::Rows);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Kit *KitOptionsPage::currentKit() const
|
||||||
|
{
|
||||||
|
return m_model->kit(currentIndex());
|
||||||
|
}
|
||||||
|
|
||||||
void KitOptionsPage::cloneKit()
|
void KitOptionsPage::cloneKit()
|
||||||
{
|
{
|
||||||
Kit *current = m_model->kit(currentIndex());
|
Kit *current = currentKit();
|
||||||
if (!current)
|
if (!current)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -204,9 +209,7 @@ void KitOptionsPage::cloneKit()
|
|||||||
|
|
||||||
void KitOptionsPage::removeKit()
|
void KitOptionsPage::removeKit()
|
||||||
{
|
{
|
||||||
Kit *k = m_model->kit(currentIndex());
|
if (Kit *k = currentKit())
|
||||||
if (!k)
|
|
||||||
return;
|
|
||||||
m_model->markForRemoval(k);
|
m_model->markForRemoval(k);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -224,12 +227,11 @@ void KitOptionsPage::updateState()
|
|||||||
bool canCopy = false;
|
bool canCopy = false;
|
||||||
bool canDelete = false;
|
bool canDelete = false;
|
||||||
bool canMakeDefault = false;
|
bool canMakeDefault = false;
|
||||||
QModelIndex index = currentIndex();
|
|
||||||
Kit *k = m_model->kit(index);
|
if (Kit *k = currentKit()) {
|
||||||
if (k) {
|
|
||||||
canCopy = true;
|
canCopy = true;
|
||||||
canDelete = !k->isAutoDetected();
|
canDelete = !k->isAutoDetected();
|
||||||
canMakeDefault = !m_model->isDefaultKit(index);
|
canMakeDefault = !m_model->isDefaultKit(k);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_cloneButton->setEnabled(canCopy);
|
m_cloneButton->setEnabled(canCopy);
|
||||||
|
@@ -66,7 +66,6 @@ public:
|
|||||||
void finish();
|
void finish();
|
||||||
|
|
||||||
void showKit(Kit *k);
|
void showKit(Kit *k);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void kitSelectionChanged();
|
void kitSelectionChanged();
|
||||||
void addNewKit();
|
void addNewKit();
|
||||||
@@ -77,6 +76,7 @@ private slots:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
QModelIndex currentIndex() const;
|
QModelIndex currentIndex() const;
|
||||||
|
Kit *currentKit() const;
|
||||||
|
|
||||||
QTreeView *m_kitsView;
|
QTreeView *m_kitsView;
|
||||||
QPushButton *m_addButton;
|
QPushButton *m_addButton;
|
||||||
|
Reference in New Issue
Block a user