From aec0b31904643afea6448c9f28f15464860fbdc0 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 17 Aug 2021 15:27:29 +0200 Subject: [PATCH] Android: Use FileUtils in AndroidManifestEditor Also fix an untimely translation and its context. Change-Id: I9859216a458d5cff93bc9caa93164435b86d8383 Reviewed-by: Artem Sokolovskii Reviewed-by: Alessandro Portale --- .../androidmanifesteditoriconwidget.cpp | 60 +++++++++---------- .../android/androidmanifesteditoriconwidget.h | 14 +++-- 2 files changed, 35 insertions(+), 39 deletions(-) diff --git a/src/plugins/android/androidmanifesteditoriconwidget.cpp b/src/plugins/android/androidmanifesteditoriconwidget.cpp index ab07b1276a7..3774a5cf00a 100644 --- a/src/plugins/android/androidmanifesteditoriconwidget.cpp +++ b/src/plugins/android/androidmanifesteditoriconwidget.cpp @@ -38,17 +38,17 @@ #include #include +using namespace Utils; + namespace Android { namespace Internal { -namespace { static Q_LOGGING_CATEGORY(androidManifestEditorLog, "qtc.android.manifestEditor", QtWarningMsg) -const auto fileDialogIconFiles = QWidget::tr("Images (*.png *.jpg *.webp *.svg)"); -QString manifestDir(TextEditor::TextEditorWidget *textEditorWidget) + +static FilePath manifestDir(TextEditor::TextEditorWidget *textEditorWidget) { // Get the manifest file's directory from its filepath. - return textEditorWidget->textDocument()->filePath().toFileInfo().absolutePath(); -} + return textEditorWidget->textDocument()->filePath().absolutePath(); } AndroidManifestEditorIconWidget::AndroidManifestEditorIconWidget(QWidget *parent) : QWidget(parent) @@ -132,18 +132,17 @@ void AndroidManifestEditorIconWidget::clearIcon() void AndroidManifestEditorIconWidget::loadIcon() { - QString baseDir = manifestDir(m_textEditorWidget); - QString iconFile = baseDir + m_targetIconPath + m_targetIconFileName; - setIconFromPath(iconFile); + const FilePath baseDir = manifestDir(m_textEditorWidget); + setIconFromPath(baseDir / m_targetIconPath / m_targetIconFileName); } -void AndroidManifestEditorIconWidget::setIconFromPath(const QString &iconPath) +void AndroidManifestEditorIconWidget::setIconFromPath(const FilePath &iconPath) { if (!m_textEditorWidget) return; m_iconPath = iconPath; - QString baseDir = manifestDir(m_textEditorWidget); - QImage original(iconPath); + FilePath baseDir = manifestDir(m_textEditorWidget); + QImage original(iconPath.toString()); if (!original.isNull() && m_scaledToOriginalAspectRatio) { if ((original.width() > original.height() && m_buttonSize.height() > m_buttonSize.width()) || (original.height() > original.width() && m_buttonSize.width() > m_buttonSize.height())) { @@ -159,30 +158,30 @@ void AndroidManifestEditorIconWidget::setIconFromPath(const QString &iconPath) } } copyIcon(); - QString iconFile = baseDir + m_targetIconPath + m_targetIconFileName; - m_button->setIcon(QIcon(iconFile)); + FilePath iconFile = baseDir + m_targetIconPath + m_targetIconFileName; + m_button->setIcon(QIcon(iconFile.toString())); } void AndroidManifestEditorIconWidget::selectIcon() { - QString file = QFileDialog::getOpenFileName(this, m_iconSelectionText, - QDir::homePath(), fileDialogIconFiles); + FilePath file = FileUtils::getOpenFilePath(this, m_iconSelectionText, + FileUtils::homePath(), + tr("Images (*.png *.jpg *.webp *.svg)")); if (file.isEmpty()) return; setIconFromPath(file); - emit iconSelected(file, this); + emit iconSelected(file); } void AndroidManifestEditorIconWidget::removeIcon() { - QString baseDir = manifestDir(m_textEditorWidget); - const QString targetPath = baseDir + m_targetIconPath + m_targetIconFileName; + const FilePath baseDir = manifestDir(m_textEditorWidget); + const FilePath targetPath = baseDir / m_targetIconPath / m_targetIconFileName; if (targetPath.isEmpty()) { qCDebug(androidManifestEditorLog) << "Icon target path empty, cannot remove icon."; return; } - QFile targetFile(targetPath); - targetFile.remove(); + targetPath.removeFile(); m_iconPath.clear(); setScaleWarningLabelVisible(false); m_button->setIcon(QIcon()); @@ -255,14 +254,9 @@ static QImage scaleWithoutStretching(const QImage& original, const QSize& target return ret; } -static bool similarFilesExist(const QString &path) +static bool similarFilesExist(const FilePath &path) { - QFileInfo fileInfo(path); - QDir imageDir(fileInfo.absolutePath()); - QString baseName(fileInfo.completeBaseName()); - baseName.append(QLatin1String(".*")); - imageDir.setNameFilters({baseName}); - auto entries = imageDir.entryList(); + const FilePaths entries = path.parentDir().dirEntries({path.completeBaseName() + ".*"}, {}); return !entries.empty(); } @@ -270,13 +264,14 @@ void AndroidManifestEditorIconWidget::copyIcon() { if (m_targetIconPath.isEmpty()) return; - QString baseDir = manifestDir(m_textEditorWidget); - const QString targetPath = baseDir + m_targetIconPath + m_targetIconFileName; + + const FilePath baseDir = manifestDir(m_textEditorWidget); + const FilePath targetPath = baseDir / m_targetIconPath / m_targetIconFileName; if (targetPath.isEmpty()) { qCDebug(androidManifestEditorLog) << "Icon target path empty, cannot copy icon."; return; } - QImage original(m_iconPath); + QImage original(m_iconPath.toString()); if (m_iconPath != targetPath) removeIcon(); if (original.isNull()) { @@ -287,8 +282,7 @@ void AndroidManifestEditorIconWidget::copyIcon() if (m_iconPath == targetPath) return; if (!targetPath.isEmpty() && !original.isNull()) { - QDir dir; - if (!dir.mkpath(QFileInfo(targetPath).absolutePath())) { + if (!targetPath.absolutePath().ensureWritableDir()) { qCDebug(androidManifestEditorLog) << "Cannot create icon target path."; m_iconPath.clear(); return; @@ -300,7 +294,7 @@ void AndroidManifestEditorIconWidget::copyIcon() else scaled = scaleWithoutStretching(original, m_iconSize); setScaleWarningLabelVisible(scaled.width() > original.width() || scaled.height() > original.height()); - scaled.save(targetPath); + scaled.save(targetPath.toString()); m_iconPath = targetPath; } else { m_iconPath.clear(); diff --git a/src/plugins/android/androidmanifesteditoriconwidget.h b/src/plugins/android/androidmanifesteditoriconwidget.h index 63b23d3ca0a..a128674f9cc 100644 --- a/src/plugins/android/androidmanifesteditoriconwidget.h +++ b/src/plugins/android/androidmanifesteditoriconwidget.h @@ -25,11 +25,11 @@ #pragma once +#include + #include -namespace TextEditor { - class TextEditorWidget; -} +namespace TextEditor { class TextEditorWidget; } QT_BEGIN_NAMESPACE class QLabel; @@ -42,6 +42,7 @@ namespace Internal { class AndroidManifestEditorIconWidget : public QWidget { Q_OBJECT + public: explicit AndroidManifestEditorIconWidget(QWidget *parent); AndroidManifestEditorIconWidget(QWidget *parent, @@ -55,7 +56,7 @@ public: void setIcon(const QIcon &icon); void clearIcon(); void loadIcon(); - void setIconFromPath(const QString &iconPath); + void setIconFromPath(const Utils::FilePath &iconPath); bool hasIcon() const; void setScaledToOriginalAspectRatio(bool scaled); void setScaledWithoutStretching(bool scaled); @@ -63,8 +64,9 @@ public: void setTargetIconPath(const QString &targetIconPath); QString targetIconFileName() const; QString targetIconPath() const; + signals: - void iconSelected(const QString &path, AndroidManifestEditorIconWidget* iconWidget); + void iconSelected(const Utils::FilePath &path); void iconRemoved(); private: @@ -78,7 +80,7 @@ private: QSize m_buttonSize; QLabel *m_scaleWarningLabel = nullptr; TextEditor::TextEditorWidget *m_textEditorWidget = nullptr; - QString m_iconPath; + Utils::FilePath m_iconPath; QString m_targetIconPath; QString m_targetIconFileName; QString m_iconSelectionText;