summaryrefslogtreecommitdiff
path: root/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkwidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/qmakeandroidsupport/qmakeandroidbuildapkwidget.cpp')
-rw-r--r--src/plugins/qmakeandroidsupport/qmakeandroidbuildapkwidget.cpp193
1 files changed, 193 insertions, 0 deletions
diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkwidget.cpp b/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkwidget.cpp
new file mode 100644
index 0000000000..d5d9ffbe3b
--- /dev/null
+++ b/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkwidget.cpp
@@ -0,0 +1,193 @@
+/**************************************************************************
+**
+** Copyright (c) 2014 BogDan Vatra <bog_dan_ro@yahoo.com>
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+****************************************************************************/
+
+#include "createandroidmanifestwizard.h"
+#include "qmakeandroidbuildapkstep.h"
+#include "qmakeandroidbuildapkwidget.h"
+#include "ui_qmakeandroidbuildapkwidget.h"
+
+#include <android/androidbuildapkwidget.h>
+#include <android/androidmanager.h>
+#include <qmakeprojectmanager/qmakenodes.h>
+#include <qmakeprojectmanager/qmakeproject.h>
+
+#include <QFileDialog>
+
+using QmakeProjectManager::QmakeProject;
+using QmakeProjectManager::QmakeProFileNode;
+
+namespace QmakeAndroidSupport {
+namespace Internal {
+
+QmakeAndroidBuildApkWidget::QmakeAndroidBuildApkWidget(QmakeAndroidBuildApkStep *step) :
+ ProjectExplorer::BuildStepConfigWidget(),
+ m_ui(new Ui::QmakeAndroidBuildApkWidget),
+ m_step(step),
+ m_extraLibraryListModel(0),
+ m_ignoreChange(false)
+{
+ QVBoxLayout *topLayout = new QVBoxLayout;
+
+ QHBoxLayout *qt51WarningLayout = new QHBoxLayout();
+ QLabel *oldFilesWarningIcon = new QLabel(this);
+ oldFilesWarningIcon->setObjectName(QStringLiteral("oldFilesWarningIcon"));
+ QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
+ sizePolicy.setHorizontalStretch(0);
+ sizePolicy.setVerticalStretch(0);
+ sizePolicy.setHeightForWidth(oldFilesWarningIcon->sizePolicy().hasHeightForWidth());
+ oldFilesWarningIcon->setSizePolicy(sizePolicy);
+ oldFilesWarningIcon->setPixmap(QPixmap(QLatin1String(":/core/images/warning.png")));
+ oldFilesWarningIcon->setAlignment(Qt::Alignment(Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop));
+ qt51WarningLayout->addWidget(oldFilesWarningIcon);
+
+ QLabel *oldFilesWarningLabel = new QLabel(this);
+ oldFilesWarningLabel->setObjectName(QStringLiteral("oldFilesWarningLabel"));
+ oldFilesWarningLabel->setWordWrap(true);
+ qt51WarningLayout->addWidget(oldFilesWarningLabel);
+
+ topLayout->addWidget(new Android::AndroidBuildApkWidget(step));
+
+ QWidget *widget = new QWidget(this);
+ m_ui->setupUi(widget);
+ topLayout->addWidget(widget);
+ setLayout(topLayout);
+
+ bool oldFiles = Android::AndroidManager::checkForQt51Files(m_step->project()->projectDirectory());
+ oldFilesWarningIcon->setVisible(oldFiles);
+ oldFilesWarningLabel->setVisible(oldFiles);
+
+ m_extraLibraryListModel = new AndroidExtraLibraryListModel(static_cast<QmakeProject *>(m_step->project()), this);
+ m_ui->androidExtraLibsListView->setModel(m_extraLibraryListModel);
+
+ updateInputFileUi();
+ connect(m_step, SIGNAL(inputFileChanged()),
+ SLOT(updateInputFileUi()));
+
+ connect(m_ui->inputFileComboBox, SIGNAL(currentIndexChanged(int)),
+ SLOT(inputFileComboBoxIndexChanged()));
+
+ connect(m_ui->createAndroidManifestButton, SIGNAL(clicked()),
+ SLOT(createManifestButton()));
+
+ connect(m_ui->addAndroidExtraLibButton, SIGNAL(clicked()),
+ SLOT(addAndroidExtraLib()));
+
+ connect(m_ui->removeAndroidExtraLibButton, SIGNAL(clicked()),
+ SLOT(removeAndroidExtraLib()));
+
+ connect(m_ui->androidExtraLibsListView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
+ SLOT(checkEnableRemoveButton()));
+
+ connect(m_extraLibraryListModel, SIGNAL(enabledChanged(bool)),
+ m_ui->additionalLibrariesGroupBox, SLOT(setEnabled(bool)));
+
+ m_ui->additionalLibrariesGroupBox->setEnabled(m_extraLibraryListModel->isEnabled());
+}
+
+QmakeAndroidBuildApkWidget::~QmakeAndroidBuildApkWidget()
+{
+ delete m_ui;
+}
+
+void QmakeAndroidBuildApkWidget::updateInputFileUi()
+{
+ QmakeProject *project
+ = static_cast<QmakeProject *>(m_step->project());
+ QList<QmakeProFileNode *> nodes = project->applicationProFiles();
+ int size = nodes.size();
+ if (size == 0 || size == 1) {
+ // there's nothing to select, e.g. before parsing
+ m_ui->inputFileLabel->setVisible(false);
+ m_ui->inputFileComboBox->setVisible(false);
+ } else {
+ m_ignoreChange = true;
+ m_ui->inputFileLabel->setVisible(true);
+ m_ui->inputFileComboBox->setVisible(true);
+
+ m_ui->inputFileComboBox->clear();
+ foreach (QmakeProFileNode *node, nodes)
+ m_ui->inputFileComboBox->addItem(node->displayName(), node->path());
+
+ int index = m_ui->inputFileComboBox->findData(m_step->proFilePathForInputFile());
+ m_ui->inputFileComboBox->setCurrentIndex(index);
+ m_ignoreChange = false;
+ }
+}
+
+void QmakeAndroidBuildApkWidget::inputFileComboBoxIndexChanged()
+{
+ if (m_ignoreChange)
+ return;
+
+ QString proFilePath = m_ui->inputFileComboBox->itemData(m_ui->inputFileComboBox->currentIndex()).toString();
+ m_step->setProFilePathForInputFile(proFilePath);
+}
+
+void QmakeAndroidBuildApkWidget::createManifestButton()
+{
+ CreateAndroidManifestWizard wizard(m_step->target());
+ wizard.exec();
+}
+
+void QmakeAndroidBuildApkWidget::addAndroidExtraLib()
+{
+ QStringList fileNames = QFileDialog::getOpenFileNames(this,
+ tr("Select additional libraries"),
+ QDir::homePath(),
+ tr("Libraries (*.so)"));
+
+ if (!fileNames.isEmpty())
+ m_extraLibraryListModel->addEntries(fileNames);
+}
+
+void QmakeAndroidBuildApkWidget::removeAndroidExtraLib()
+{
+ QModelIndexList removeList = m_ui->androidExtraLibsListView->selectionModel()->selectedIndexes();
+ m_extraLibraryListModel->removeEntries(removeList);
+}
+
+void QmakeAndroidBuildApkWidget::checkEnableRemoveButton()
+{
+ m_ui->removeAndroidExtraLibButton->setEnabled(m_ui->androidExtraLibsListView->selectionModel()->hasSelection());
+}
+
+QString QmakeAndroidBuildApkWidget::summaryText() const
+{
+ return tr("<b>Build Android APK</b>");
+}
+
+QString QmakeAndroidBuildApkWidget::displayName() const
+{
+ return summaryText();
+}
+
+} // namespace Internal
+} // namespace QmakeProjectManager
+
+