From 3d8000a9264fb78e7e7db9f8b74d86ab2e512b7f Mon Sep 17 00:00:00 2001 From: Daniel Teske Date: Tue, 11 Mar 2014 18:05:17 +0100 Subject: Android: Add Libraries: Disable library model while parse is in progress Change-Id: I314e7db6178d6d6863b3f99a0bf1f0eec0956303 Reviewed-by: Eskil Abrahamsen Blomfeldt --- src/plugins/android/androiddeployqtwidget.cpp | 15 +++------ src/plugins/android/androiddeployqtwidget.h | 1 - .../android/androidextralibrarylistmodel.cpp | 39 ++++++++++++++++++---- src/plugins/android/androidextralibrarylistmodel.h | 12 +++++-- 4 files changed, 47 insertions(+), 20 deletions(-) diff --git a/src/plugins/android/androiddeployqtwidget.cpp b/src/plugins/android/androiddeployqtwidget.cpp index 0355bdbcb2..27f378b816 100644 --- a/src/plugins/android/androiddeployqtwidget.cpp +++ b/src/plugins/android/androiddeployqtwidget.cpp @@ -154,8 +154,10 @@ AndroidDeployQtWidget::AndroidDeployQtWidget(AndroidDeployQtStep *step) connect(m_ui->addAndroidExtraLibButton, SIGNAL(clicked()), this, SLOT(addAndroidExtraLib())); connect(m_ui->removeAndroidExtraLibButton, SIGNAL(clicked()), this, SLOT(removeAndroidExtraLib())); - connect(m_step->project(), SIGNAL(proFilesEvaluated()), this, SLOT(checkProjectTemplate())); - checkProjectTemplate(); + connect(m_extraLibraryListModel, SIGNAL(enabledChanged(bool)), + m_ui->additionalLibrariesGroupBox, SLOT(setEnabled(bool))); + + m_ui->additionalLibrariesGroupBox->setEnabled(m_extraLibraryListModel->isEnabled()); } AndroidDeployQtWidget::~AndroidDeployQtWidget() @@ -163,15 +165,6 @@ AndroidDeployQtWidget::~AndroidDeployQtWidget() delete m_ui; } -void AndroidDeployQtWidget::checkProjectTemplate() -{ - QmakeProjectManager::QmakeProject *project = static_cast(m_step->project()); - if (project->rootQmakeProjectNode()->projectType() == QmakeProjectManager::ApplicationTemplate) - m_ui->additionalLibrariesGroupBox->setEnabled(true); - else - m_ui->additionalLibrariesGroupBox->setEnabled(false); -} - void AndroidDeployQtWidget::createManifestButton() { CreateAndroidManifestWizard wizard(m_step->target()); diff --git a/src/plugins/android/androiddeployqtwidget.h b/src/plugins/android/androiddeployqtwidget.h index f8b1edf66d..d44a79186a 100644 --- a/src/plugins/android/androiddeployqtwidget.h +++ b/src/plugins/android/androiddeployqtwidget.h @@ -75,7 +75,6 @@ private slots: void addAndroidExtraLib(); void removeAndroidExtraLib(); void checkEnableRemoveButton(); - void checkProjectTemplate(); private: virtual QString summaryText() const; diff --git a/src/plugins/android/androidextralibrarylistmodel.cpp b/src/plugins/android/androidextralibrarylistmodel.cpp index 01c24dfead..858b78adb3 100644 --- a/src/plugins/android/androidextralibrarylistmodel.cpp +++ b/src/plugins/android/androidextralibrarylistmodel.cpp @@ -40,9 +40,11 @@ AndroidExtraLibraryListModel::AndroidExtraLibraryListModel(QmakeProjectManager:: : QAbstractItemModel(parent) , m_project(project) { - reset(); + QmakeProjectManager::QmakeProFileNode *node = m_project->rootQmakeProjectNode(); + proFileUpdated(node, node->validParse(), node->parseInProgress()); - connect(m_project, SIGNAL(proFilesEvaluated()), this, SLOT(reset())); + connect(m_project, SIGNAL(proFileUpdated(QmakeProjectManager::QmakeProFileNode*,bool,bool)), + this, SLOT(proFileUpdated(QmakeProjectManager::QmakeProFileNode*,bool,bool))); } QModelIndex AndroidExtraLibraryListModel::index(int row, int column, const QModelIndex &) const @@ -75,15 +77,40 @@ QVariant AndroidExtraLibraryListModel::data(const QModelIndex &index, int role) }; } -void AndroidExtraLibraryListModel::reset() +void AndroidExtraLibraryListModel::proFileUpdated(QmakeProjectManager::QmakeProFileNode *node, bool success, bool parseInProgress) { - if (m_project->rootQmakeProjectNode()->projectType() != QmakeProjectManager::ApplicationTemplate) + QmakeProjectManager::QmakeProFileNode *root = m_project->rootQmakeProjectNode(); + if (node != root) + return; + + if (parseInProgress) { + emit enabledChanged(false); return; + } + bool enabled; beginResetModel(); - QmakeProjectManager::QmakeProFileNode *node = m_project->rootQmakeProjectNode(); - m_entries = node->variableValue(QmakeProjectManager::AndroidExtraLibs); + if (success && root->projectType() == QmakeProjectManager::ApplicationTemplate) { + m_entries = node->variableValue(QmakeProjectManager::AndroidExtraLibs); + enabled = true; + } else { + // parsing error or not a application template + m_entries.clear(); + enabled = false; + } endResetModel(); + + emit enabledChanged(enabled); +} + +bool AndroidExtraLibraryListModel::isEnabled() const +{ + QmakeProjectManager::QmakeProFileNode *root = m_project->rootQmakeProjectNode(); + if (root->parseInProgress()) + return false; + if (root->projectType() != QmakeProjectManager::ApplicationTemplate) + return false; + return true; } void AndroidExtraLibraryListModel::addEntries(const QStringList &list) diff --git a/src/plugins/android/androidextralibrarylistmodel.h b/src/plugins/android/androidextralibrarylistmodel.h index 3666a664e5..b575ce60cd 100644 --- a/src/plugins/android/androidextralibrarylistmodel.h +++ b/src/plugins/android/androidextralibrarylistmodel.h @@ -34,7 +34,10 @@ #include #include -namespace QmakeProjectManager { class QmakeProject; } +namespace QmakeProjectManager { +class QmakeProject; +class QmakeProFileNode; +} namespace Android { namespace Internal { @@ -54,8 +57,13 @@ public: void removeEntries(QModelIndexList list); void addEntries(const QStringList &list); + bool isEnabled() const; + +signals: + void enabledChanged(bool); + private slots: - void reset(); + void proFileUpdated(QmakeProjectManager::QmakeProFileNode *node, bool success, bool parseInProgress); private: QmakeProjectManager::QmakeProject *m_project; -- cgit v1.2.1