Commit 6c582e01 authored by Daniel Teske's avatar Daniel Teske

Android Manifest Editor: Show available targets in combobox

Task-number: QTCREATORBUG-9682
Change-Id: I0454d96ff0a1df370e0b9197ae536bf5ae632ac2
Reviewed-by: default avatarBogDan Vatra <bogdan@kde.org>
parent 87a0f018
......@@ -304,6 +304,8 @@ QStringList AndroidManager::availableTargetApplications(ProjectExplorer::Target
{
QStringList apps;
Qt4ProjectManager::Qt4Project *qt4Project = qobject_cast<Qt4ProjectManager::Qt4Project *>(target->project());
if (!qt4Project)
return apps;
foreach (Qt4ProjectManager::Qt4ProFileNode *proFile, qt4Project->applicationProFiles()) {
if (proFile->projectType() == Qt4ProjectManager::ApplicationTemplate) {
if (proFile->targetInformation().target.startsWith(QLatin1String("lib"))
......
......@@ -44,6 +44,7 @@
#include <projectexplorer/projectexplorer.h>
#include <projectexplorer/kitinformation.h>
#include <texteditor/texteditoractionhandler.h>
#include <qt4projectmanager/qt4project.h>
#include <QLineEdit>
#include <QFileInfo>
......@@ -233,7 +234,10 @@ void AndroidManifestEditorWidget::initializePage()
m_appNameLineEdit = new QLineEdit(applicationGroupBox);
formLayout->addRow(tr("Application name:"), m_appNameLineEdit);
m_targetLineEdit = new QLineEdit(applicationGroupBox);
m_targetLineEdit = new QComboBox(applicationGroupBox);
m_targetLineEdit->setEditable(true);
m_targetLineEdit->setDuplicatesEnabled(true);
m_targetLineEdit->installEventFilter(this);
formLayout->addRow(tr("Run:"), m_targetLineEdit);
QHBoxLayout *iconLayout = new QHBoxLayout();
......@@ -265,7 +269,7 @@ void AndroidManifestEditorWidget::initializePage()
connect(m_appNameLineEdit, SIGNAL(textEdited(QString)),
this, SLOT(setAppName()));
connect(m_targetLineEdit, SIGNAL(textEdited(QString)),
connect(m_targetLineEdit, SIGNAL(currentTextChanged(QString)),
this, SLOT(setDirty()));
connect(m_lIconButton, SIGNAL(clicked()), SLOT(setLDPIIcon()));
......@@ -448,6 +452,41 @@ void AndroidManifestEditorWidget::initializePage()
m_overlayWidget = mainWidget;
}
bool AndroidManifestEditorWidget::eventFilter(QObject *obj, QEvent *event)
{
if (obj == m_targetLineEdit) {
if (event->type() == QEvent::FocusIn) {
QTimer::singleShot(0, this, SLOT(updateTargetComboBox()));
}
}
return TextEditor::PlainTextEditorWidget::eventFilter(obj, event);
}
void AndroidManifestEditorWidget::updateTargetComboBox()
{
const QString docPath(static_cast<AndroidManifestDocument *>(editor()->document())->filePath());
ProjectExplorer::Project *project = androidProject(docPath);
QStringList items;
if (project) {
ProjectExplorer::Kit *kit = project->activeTarget()->kit();
if (ProjectExplorer::DeviceTypeKitInformation::deviceTypeId(kit) == Constants::ANDROID_DEVICE_TYPE)
items = AndroidManager::availableTargetApplications(project->activeTarget());
}
// QComboBox randomly resets what the user has entered
// if all rows are removed, thus we ensure that the current text
// is not removed by first adding it and then removing all old rows
// and then adding the new rows
QString text = m_targetLineEdit->currentText();
m_targetLineEdit->addItem(text);
while (m_targetLineEdit->count() > 1)
m_targetLineEdit->removeItem(0);
items.removeDuplicates();
items.removeAll(text);
m_targetLineEdit->addItems(items);
}
void AndroidManifestEditorWidget::resizeEvent(QResizeEvent *event)
{
PlainTextEditorWidget::resizeEvent(event);
......@@ -745,7 +784,7 @@ void AndroidManifestEditorWidget::syncToWidgets(const QDomDocument &doc)
QDomElement metadataElem = manifest.firstChildElement(QLatin1String("application")).firstChildElement(QLatin1String("activity")).firstChildElement(QLatin1String("meta-data"));
while (!metadataElem.isNull()) {
if (metadataElem.attribute(QLatin1String("android:name")) == QLatin1String("android.app.lib_name")) {
m_targetLineEdit->setText(metadataElem.attribute(QLatin1String("android:value")));
m_targetLineEdit->setEditText(metadataElem.attribute(QLatin1String("android:value")));
break;
}
metadataElem = metadataElem.nextSiblingElement(QLatin1String("meta-data"));
......@@ -836,7 +875,9 @@ void AndroidManifestEditorWidget::syncToEditor()
setUsesSdk(doc, manifest, m_androidMinSdkVersion->currentText().toInt(),
m_androidTargetSdkVersion->currentText().toInt());
setAndroidAppLibName(doc, manifest.firstChildElement(QLatin1String("application")).firstChildElement(QLatin1String("activity")), m_targetLineEdit->text());
setAndroidAppLibName(doc, manifest.firstChildElement(QLatin1String("application"))
.firstChildElement(QLatin1String("activity")),
m_targetLineEdit->currentText());
// permissions
QDomElement permissionElem = manifest.firstChildElement(QLatin1String("uses-permission"));
......
......@@ -103,7 +103,7 @@ public slots:
protected:
TextEditor::BaseTextEditor *createEditor();
void resizeEvent(QResizeEvent *event);
bool eventFilter(QObject *obj, QEvent *event);
private slots:
void setLDPIIcon();
void setMDPIIcon();
......@@ -133,6 +133,7 @@ private:
void updateInfoBar(const QString &errorMessage, int line, int column);
void hideInfoBar();
Q_SLOT void updateTargetComboBox();
bool m_dirty; // indicates that we need to call syncToEditor()
bool m_stayClean;
......@@ -150,7 +151,7 @@ private:
// Application
QLineEdit *m_appNameLineEdit;
QLineEdit *m_targetLineEdit;
QComboBox *m_targetLineEdit;
QToolButton *m_lIconButton;
QToolButton *m_mIconButton;
QToolButton *m_hIconButton;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment