diff --git a/src/gui/EditWidget.cpp b/src/gui/EditWidget.cpp index ce80c03b..a58cc6d8 100644 --- a/src/gui/EditWidget.cpp +++ b/src/gui/EditWidget.cpp @@ -125,8 +125,14 @@ void EditWidget::enableApplyButton(bool enabled) void EditWidget::showMessage(const QString& text, MessageWidget::MessageType type) { - m_ui->messageWidget->setCloseButtonVisible(false); - m_ui->messageWidget->showMessage(text, type, 2000); + // Show error messages for a longer time to make sure the user can read them + if (type == MessageWidget::Error) { + m_ui->messageWidget->setCloseButtonVisible(true); + m_ui->messageWidget->showMessage(text, type, 15000); + } else { + m_ui->messageWidget->setCloseButtonVisible(false); + m_ui->messageWidget->showMessage(text, type, 2000); + } } void EditWidget::hideMessage() diff --git a/src/gui/EditWidgetIcons.cpp b/src/gui/EditWidgetIcons.cpp index 2228501b..d5d97dde 100644 --- a/src/gui/EditWidgetIcons.cpp +++ b/src/gui/EditWidgetIcons.cpp @@ -92,6 +92,7 @@ EditWidgetIcons::EditWidgetIcons(QWidget* parent) SIGNAL(widgetUpdated())); m_ui->faviconButton->setVisible(false); + m_ui->addButton->setEnabled(true); } EditWidgetIcons::~EditWidgetIcons() @@ -268,7 +269,9 @@ void EditWidgetIcons::fetchFinished() } if (!image.isNull()) { - addCustomIcon(image); + if (!addCustomIcon(image)) { + emit messageEditEntry(tr("Custom icon already exists"), MessageWidget::Information); + } } else if (!m_urlsToTry.empty()) { m_redirects = 0; startFetchFavicon(m_urlsToTry.takeFirst()); @@ -324,35 +327,66 @@ void EditWidgetIcons::addCustomIconFromFile() if (m_database) { QString filter = QString("%1 (%2);;%3 (*)").arg(tr("Images"), Tools::imageReaderFilter(), tr("All files")); - QString filename = QFileDialog::getOpenFileName(this, tr("Select Image"), "", filter); - if (!filename.isEmpty()) { - auto icon = QImage(filename); - if (!icon.isNull()) { - addCustomIcon(QImage(filename)); + auto filenames = QFileDialog::getOpenFileNames(this, tr("Select Image(s)"), "", filter); + if (!filenames.empty()) { + QStringList errornames; + int numexisting = 0; + for (const auto& filename : filenames) { + if (!filename.isEmpty()) { + auto icon = QImage(filename); + if (icon.isNull()) { + errornames << filename; + } else if (!addCustomIcon(icon)) { + // Icon already exists in database + ++numexisting; + } + } + } + + int numloaded = filenames.size() - errornames.size() - numexisting; + QString msg; + + if (numloaded > 0) { + msg = tr("Successfully loaded %1 of %n icon(s)", "", filenames.size()).arg(numloaded); } else { - emit messageEditEntry(tr("Can't read icon"), MessageWidget::Error); + msg = tr("No icons were loaded"); + } + + if (numexisting > 0) { + msg += "\n" + tr("%n icon(s) already exist in the database", "", numexisting); + } + + if (!errornames.empty()) { + // Show the first 8 icons that failed to load + errornames = errornames.mid(0, 8); + emit messageEditEntry(msg + "\n" + tr("The following icon(s) failed:", "", errornames.size()) + + "\n" + errornames.join("\n"), MessageWidget::Error); + } else if (numloaded > 0) { + emit messageEditEntry(msg, MessageWidget::Positive); + } else { + emit messageEditEntry(msg, MessageWidget::Information); } } } } -void EditWidgetIcons::addCustomIcon(const QImage& icon) +bool EditWidgetIcons::addCustomIcon(const QImage& icon) { + bool added = false; if (m_database) { - Uuid uuid = m_database->metadata()->findCustomIcon(icon); + // Don't add an icon larger than 128x128, but retain original size if smaller + auto scaledicon = icon; + if (icon.width() > 128 || icon.height() > 128) { + scaledicon = icon.scaled(128, 128); + } + + Uuid uuid = m_database->metadata()->findCustomIcon(scaledicon); if (uuid.isNull()) { uuid = Uuid::random(); - // Don't add an icon larger than 128x128, but retain original size if smaller - if (icon.width() > 128 || icon.height() > 128) { - m_database->metadata()->addCustomIcon(uuid, icon.scaled(128, 128)); - } else { - m_database->metadata()->addCustomIcon(uuid, icon); - } - + m_database->metadata()->addCustomIcon(uuid, scaledicon); m_customIconModel->setIcons(m_database->metadata()->customIconsScaledPixmaps(), m_database->metadata()->customIconsOrder()); - } else { - emit messageEditEntry(tr("Custom icon already exists"), MessageWidget::Information); + added = true; } // Select the new or existing icon @@ -362,6 +396,8 @@ void EditWidgetIcons::addCustomIcon(const QImage& icon) emit widgetUpdated(); } + + return added; } void EditWidgetIcons::removeCustomIcon() @@ -458,7 +494,6 @@ void EditWidgetIcons::updateWidgetsDefaultIcons(bool check) m_ui->defaultIconsView->setCurrentIndex(index); } m_ui->customIconsView->selectionModel()->clearSelection(); - m_ui->addButton->setEnabled(false); m_ui->deleteButton->setEnabled(false); } } @@ -473,7 +508,6 @@ void EditWidgetIcons::updateWidgetsCustomIcons(bool check) m_ui->customIconsView->setCurrentIndex(index); } m_ui->defaultIconsView->selectionModel()->clearSelection(); - m_ui->addButton->setEnabled(true); m_ui->deleteButton->setEnabled(true); } } diff --git a/src/gui/EditWidgetIcons.h b/src/gui/EditWidgetIcons.h index 94630157..e01ae4b1 100644 --- a/src/gui/EditWidgetIcons.h +++ b/src/gui/EditWidgetIcons.h @@ -88,7 +88,7 @@ private slots: void fetchReadyRead(); void fetchCanceled(); void addCustomIconFromFile(); - void addCustomIcon(const QImage& icon); + bool addCustomIcon(const QImage& icon); void removeCustomIcon(); void updateWidgetsDefaultIcons(bool checked); void updateWidgetsCustomIcons(bool checked);